Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting Databricks error using an Oracle jdbc URL #5721

Open
1 of 2 tasks
doakd opened this issue Mar 21, 2024 · 13 comments
Open
1 of 2 tasks

Getting Databricks error using an Oracle jdbc URL #5721

doakd opened this issue Mar 21, 2024 · 13 comments

Comments

@doakd
Copy link

doakd commented Mar 21, 2024

Search first

  • I searched and no similar issues were found

Description

Using xml changelog:

<changeSet id="create_sequence" author="doaksec"> <preConditions onFail="MARK_RAN"> <not> <sequenceExists sequenceName="text_archive_seq" /> </not> </preConditions> <sql> CREATE SEQUENCE text_archive_seq start with 1 increment by 1 minvalue 1 maxvalue 999999999999999999; </sql> </changeSet>
(note: it does work if the createSequence change-type is used)

Getting the following error:

Liquibase Version: 4.26.0
[2024-03-21 19:56:59] INFO [liquibase.ui] Liquibase Version: 4.26.0
Liquibase Open Source 4.26.0 by Liquibase
[2024-03-21 19:56:59] INFO [liquibase.ui] Liquibase Open Source 4.26.0 by Liquibase
[2024-03-21 19:56:59] INFO [liquibase.integration] Starting command execution.
[2024-03-21 19:57:00] INFO [liquibase.changelog] Reading from DMARCHIVE.DATABASECHANGELOG
[2024-03-21 19:57:01] INFO [liquibase.lockservice] Successfully acquired change log lock
[2024-03-21 19:57:01] INFO [liquibase.command] Using deploymentId: 1051021154
[2024-03-21 19:57:01] INFO [liquibase.changelog] Reading from DMARCHIVE.DATABASECHANGELOG
Running Changeset: src/main/resources/db/changelog/db-change-14.xml::36::beckem7
[2024-03-21 19:57:01] INFO [liquibase.ui] Running Changeset: src/main/resources/db/changelog/db-change-14.xml::36::beckem7
[2024-03-21 19:57:01] INFO [liquibase.ext] Sequences are not supported by Databricks
[2024-03-21 19:57:01] INFO [liquibase.snapshot] Creating snapshot

UPDATE SUMMARY
Run: 4
Previously run: 40
Filtered out: 0

Total change sets: 44

[2024-03-21 19:57:01] INFO [liquibase.util] UPDATE SUMMARY
[2024-03-21 19:57:01] INFO [liquibase.util] Run: 4
[2024-03-21 19:57:01] INFO [liquibase.util] Previously run: 40
[2024-03-21 19:57:01] INFO [liquibase.util] Filtered out: 0
[2024-03-21 19:57:01] INFO [liquibase.util] -------------------------------
[2024-03-21 19:57:01] INFO [liquibase.util] Total change sets: 44
[2024-03-21 19:57:01] INFO [liquibase.util] Update summary generated
[2024-03-21 19:57:01] INFO [liquibase.lockservice] Successfully released change log lock
[2024-03-21 19:57:01] INFO [liquibase.command] Command execution complete
[2024-03-21 19:57:01] SEVERE [liquibase.integration] java.lang.StackOverflowError
java.lang.StackOverflowError
at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:42)
at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)

Steps To Reproduce

JAVA_OPTS="-Xmx1024m" /opt/liquibase/liquibase --changeLogFile=src/main/resources/db/changelog/db-changelog-master.xml --sql-log-level=INFO --showBanner=false --log-level=INFO --defaultsFile=/tmp/tmpliw8rs_j --classpath=/tmp/tmpu6su81ug update

defaultsFile contains:
username: XXXX
password: XXXX
url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXXX)(PORT=XXXX)))(CONNECT_DATA=(UR=A)(SERVICE_NAME=XXXXXX)))

Expected/Desired Behavior

Executes using Oracle code path in Liquibase, not Databricks extension.

Liquibase Version

4.26

Database Vendor & Version

Oracle 19c

Liquibase Integration

CLI

Liquibase Extensions

liquibase-oracle 4.26, liquibase-teradata 4.26, liquibase-databricks 1.1.2

OS and/or Infrastructure Type/Provider

debian linux 11

Additional Context

This worked fine with Liquibase 4.25.

This is a major roadblock for us.

Are you willing to submit a PR?

  • I'm willing to submit a PR (Thank you!)
@doakd
Copy link
Author

doakd commented Mar 22, 2024

ok, after further testing various combinations I found problems have existed since the Databricks 1.0.1 extension was released, but got much worse with extension 1.1.2.

liquibase 4.26 (and 4.25.0) and databricks 1.1.2 - Hard Fail

Liquibase 4.26 (and 4.25.0) and databricks 1.0.1 - Works but with large delay and Databricks ext messages "INFO [liquibase.ext] Sequences are not supported by Databricks"

@tati-qalified
Copy link
Contributor

Hi @doakd, thank you for reporting this issue.

I've tested this using Liquibase version 4.26.0, liquibase-databricks versions 1.1.2 and 1.1.3, using the changeset you've provided. In my case, the changeset runs with no issues and the sequence is created.
Using log-level=INFO I can see that the Databricks extension is being loaded, which is probably why it's logging Sequences are not supported by Databricks.

On the performance side of things it's clearly something we should look into, but it isn't blocking the use of Liquibase on my part.

Can you confirm that it's that changeset that's causing the error? If you find a different one, I might be able to replicate the error and better understand what's going on.

Thank you,
Tatiana

@doakd
Copy link
Author

doakd commented Mar 28, 2024

Running Liquibase 4.26 with Databricks 1.1.2.

<changeSet id="create_sequence1" author="BOB"> <preConditions onFail="MARK_RAN"> <not> <sequenceExists sequenceName="test_seq1" /> </not> </preConditions> <sql> CREATE SEQUENCE test_seq1 start with 1 increment by 1 minvalue 1 maxvalue 999999999999999999; </sql> </changeSet>

Getting this (error lines repeat 100s of times, and the run count number is garbase, only 8 changesets executed):

Running Changeset: db-changelog-1.xml::create_sequence1::BOB
[2024-03-28 14:18:23] INFO [liquibase.ui] Running Changeset: db-changelog-1.xml::create_sequence1::BOB
[2024-03-28 14:18:23] INFO [liquibase.ext] Sequences are not supported by Databricks
[2024-03-28 14:18:23] INFO [liquibase.snapshot] Creating snapshot

UPDATE SUMMARY
Run:                         28
Previously run:               0
Filtered out:                 0
-------------------------------
Total change sets:           28

[2024-03-28 14:18:23] INFO [liquibase.util] UPDATE SUMMARY
[2024-03-28 14:18:23] INFO [liquibase.util] Run:                         28
[2024-03-28 14:18:23] INFO [liquibase.util] Previously run:               0
[2024-03-28 14:18:23] INFO [liquibase.util] Filtered out:                 0
[2024-03-28 14:18:23] INFO [liquibase.util] -------------------------------
[2024-03-28 14:18:23] INFO [liquibase.util] Total change sets:           28
[2024-03-28 14:18:23] INFO [liquibase.util] Update summary generated
[2024-03-28 14:18:23] INFO [liquibase.lockservice] Successfully released change log lock
[2024-03-28 14:18:23] INFO [liquibase.command] Command execution complete
[2024-03-28 14:18:23] SEVERE [liquibase.integration] java.lang.StackOverflowError
java.lang.StackOverflowError
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:42)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:59)

@doakd
Copy link
Author

doakd commented Mar 28, 2024

ok, I discovered something new. It looks like it's the precondition that is causing the error. Both custom sql and the change-type fail when there is a precondition, and both work fine when the precondition is removed.

@tati-qalified
Copy link
Contributor

@doakd thank you for providing more info. I still can't replicate what you're reporting, but it's known that Liquibase extensions can sometimes get in the way of executions.

liquibase-databricks version 1.1.3 has PR #102 that aims to fix that problem.

Please try running your project with 1.1.3 and let me know if it works for you or not.

Thank you,
Tatiana

@doakd
Copy link
Author

doakd commented Apr 1, 2024

@tati-qalified

Current configuration:
liquibase 4.27
liquibase-databricks 1.1.3

Running against an Oracle 19c database, the preconditions are now working, no longer getting the "Sequences are not supported by Databricks" error.

But now I'm getting the following databricks extension error even though the oracle changesets are deployed successfully:

[2024-04-01 17:35:37] WARNING [liquibase.resource] Cannot handle classloader url file:/opt/liquibase/lib/liquibase-databricks-1.1.3.jar: zip END header not found. Operations that need to list files from this location may not work as expected
java.lang.IllegalArgumentException: zip END header not found
	at liquibase.resource.ZipResourceAccessor.<init>(ZipResourceAccessor.java:65)
	at liquibase.resource.ZipResourceAccessor.<init>(ZipResourceAccessor.java:24)
	at liquibase.resource.ZipPathHandler.getResourceAccessor(ZipPathHandler.java:55)
	at liquibase.resource.PathHandlerFactory.getResourceAccessor(PathHandlerFactory.java:37)
	at liquibase.resource.ClassLoaderResourceAccessor.configureAdditionalResourceAccessors(ClassLoaderResourceAccessor.java:72)
	at liquibase.resource.ClassLoaderResourceAccessor.configureAdditionalResourceAccessors(ClassLoaderResourceAccessor.java:86)
	at liquibase.resource.ClassLoaderResourceAccessor.init(ClassLoaderResourceAccessor.java:55)
	at liquibase.resource.ClassLoaderResourceAccessor.describeLocations(ClassLoaderResourceAccessor.java:34)
	at liquibase.resource.CompositeResourceAccessor.describeLocations(CompositeResourceAccessor.java:82)
	at liquibase.resource.SearchPathResourceAccessor.<init>(SearchPathResourceAccessor.java:50)
	at liquibase.resource.SearchPathResourceAccessor.<init>(SearchPathResourceAccessor.java:21)
	at liquibase.integration.commandline.LiquibaseCommandLine.configureResourceAccessor(LiquibaseCommandLine.java:837)
	at liquibase.integration.commandline.LiquibaseCommandLine.lambda$configureScope$4(LiquibaseCommandLine.java:693)
	at liquibase.Scope.lambda$child$0(Scope.java:190)
	at liquibase.Scope.child(Scope.java:199)
	at liquibase.Scope.child(Scope.java:189)
	at liquibase.Scope.child(Scope.java:168)
	at liquibase.integration.commandline.LiquibaseCommandLine.configureScope(LiquibaseCommandLine.java:693)
	at liquibase.integration.commandline.LiquibaseCommandLine.lambda$execute$3(LiquibaseCommandLine.java:370)
	at liquibase.Scope.child(Scope.java:199)
	at liquibase.Scope.child(Scope.java:175)
	at liquibase.integration.commandline.LiquibaseCommandLine.execute(LiquibaseCommandLine.java:367)
	at liquibase.integration.commandline.LiquibaseCommandLine.main(LiquibaseCommandLine.java:104)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at liquibase.integration.commandline.LiquibaseLauncher.main(LiquibaseLauncher.java:116)
Caused by: java.util.zip.ZipException: zip END header not found
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.findEND(ZipFileSystem.java:1320)
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.initCEN(ZipFileSystem.java:1534)
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystem.<init>(ZipFileSystem.java:179)
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getZipFileSystem(ZipFileSystemProvider.java:125)
	at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.newFileSystem(ZipFileSystemProvider.java:106)
	at java.base/java.nio.file.FileSystems.newFileSystem(FileSystems.java:339)
	at liquibase.resource.ZipResourceAccessor.<init>(ZipResourceAccessor.java:50)
	... 27 more

@filipelautert
Copy link
Collaborator

Hello @doakd ! Does the release tag fix works to fix this issue too?

@doakd
Copy link
Author

doakd commented May 3, 2024

@filipelautert
I have tested this error with Databricks extension 1.1.3, and the "sequenceExists" precondition is still a problem.

Changeset:

<changeSet id="create_sequence1" author="BOB">  
  <preConditions onFail="MARK_RAN">  
    <not>  
      <sequenceExists sequenceName="test_seq1" />  
    </not>  
  </preConditions>  
  <sql>  
    CREATE SEQUENCE test_seq1 start with 1  
      increment by 1  
      minvalue 1  
      maxvalue 999999999999999999;  
  </sql>  
</changeSet>

Deployment to Oracle:

[2024-05-03 13:10:26] INFO [liquibase.ui] Running Changeset: db-changelog-1.xml::create_sequence1::BOB
[2024-05-03 13:10:26] INFO [liquibase.ext] Sequences are not supported by Databricks
[2024-05-03 13:10:26] INFO [liquibase.snapshot] Creating snapshot
[2024-05-03 13:10:31] INFO [liquibase.lockservice] Successfully released change log lock
[2024-05-03 13:10:31] INFO [liquibase.command] Command execution complete
[2024-05-03 13:10:31] SEVERE [liquibase.integration] java.lang.StackOverflowError
java.lang.StackOverflowError
	at liquibase.ext.databricks.snapshot.jvm.SequenceSnapshotGeneratorDatabricks.getSelectSequenceStatement(SequenceSnapshotGeneratorDatabricks.java:42)

@filipelautert
Copy link
Collaborator

@tati-qalified can you review this one again? thanks!

@tati-qalified
Copy link
Contributor

@filipelautert I'm still not getting errors that block execution, but the extension is crowding the logs and taking up resources.
@doakd we are currently looking into improving the way Liquibase handles extensions.

@doakd
Copy link
Author

doakd commented May 6, 2024

@tati-qalified

So if you add a changeset that use the sequenceExists precondition (as provided above), you have the databaricks extension installed, and you run an oracle deployment, you don't get the error I pasted above?

@tati-qalified
Copy link
Contributor

@doakd I don't, so there's probably some mix of configurations or some collation in your environment that makes the liquibase-databricks extension fail. Still, it shouldn't have to matter as you're not using Databricks.
To confirm: the error is not blocking the execution of the changeset, right?

@doakd
Copy link
Author

doakd commented May 7, 2024

@tati-qalified

We are using DataBricks, but this execution that gets the error was for Oracle.

It is blocking the execution. The sequenceExists precondition has to be replaced with a sqlCheck precondition in order to workaround the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants