datastrato / gravitino

World's most powerful open data catalog for building a high-performance, geo-distributed and federated metadata lake.
https://datastrato.ai/docs/
Apache License 2.0
654 stars 199 forks source link

[Bug report] If gravitino use mysql-connector-java-5.1.X.jar jdbc driver, trino-connector runs the sql "show tables from mysql.schema" and return error #3844

Open yangyuxia opened 2 weeks ago

yangyuxia commented 2 weeks ago

Version

main branch

Describe what's wrong

gravitino version : 0.5.0,mysql jdbc driver:mysql-connector-java-5.1.25.jar mysql server version: 5.7.42 MySQL Community Server (GPL)
trino server version : trino 435

run sql "show tables from .;" return error,after use the mysql-connector-j-8.2.0.jar driver, the sql is normal.

Error message and/or stacktrace

Query 20240612_022139_00015_k9g9n failed: Failed to operate object [stack] operation [LOAD] under [ambari], reason [Not supported] com.datastrato.gravitino.exceptions.GravitinoRuntimeException: Not supported at com.datastrato.gravitino.catalog.mysql.converter.MysqlExceptionConverter.toGravitinoException(MysqlExceptionConverter.java:33) at com.datastrato.gravitino.catalog.jdbc.operation.JdbcTableOperations.load(JdbcTableOperations.java:193) at com.datastrato.gravitino.catalog.jdbc.JdbcCatalogOperations.loadTable(JdbcCatalogOperations.java:277) at com.datastrato.gravitino.catalog.TableOperationDispatcher.lambda$loadTable$2(TableOperationDispatcher.java:86) at com.datastrato.gravitino.catalog.CatalogManager$CatalogWrapper.lambda$doWithTableOps$1(CatalogManager.java:113) at com.datastrato.gravitino.utils.IsolatedClassLoader.withClassLoader(IsolatedClassLoader.java:72) at com.datastrato.gravitino.catalog.CatalogManager$CatalogWrapper.doWithTableOps(CatalogManager.java:108) at com.datastrato.gravitino.catalog.TableOperationDispatcher.lambda$loadTable$3(TableOperationDispatcher.java:86) at com.datastrato.gravitino.catalog.OperationDispatcher.doWithCatalog(OperationDispatcher.java:68) at com.datastrato.gravitino.catalog.TableOperationDispatcher.loadTable(TableOperationDispatcher.java:84) at com.datastrato.gravitino.catalog.TableNormalizeDispatcher.loadTable(TableNormalizeDispatcher.java:46) at com.datastrato.gravitino.listener.TableEventDispatcher.loadTable(TableEventDispatcher.java:76) at com.datastrato.gravitino.server.web.rest.TableOperations.lambda$loadTable$4(TableOperations.java:141) at com.datastrato.gravitino.lock.TreeLockUtils.doWithTreeLock(TreeLockUtils.java:35) at com.datastrato.gravitino.server.web.rest.TableOperations.lambda$loadTable$5(TableOperations.java:140) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at com.datastrato.gravitino.utils.PrincipalUtils.doAs(PrincipalUtils.java:25) at com.datastrato.gravitino.server.web.Utils.doAs(Utils.java:121) at com.datastrato.gravitino.server.web.rest.TableOperations.loadTable(TableOperations.java:135) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:256) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) at org.glassfish.jersey.internal.Errors.process(Errors.java:292) at org.glassfish.jersey.internal.Errors.process(Errors.java:274) at org.glassfish.jersey.internal.Errors.process(Errors.java:244) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684) at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799) at org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656) at com.datastrato.gravitino.server.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:59) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at com.datastrato.gravitino.server.web.VersioningFilter.doFilter(VersioningFilter.java:97) at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624) at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594) at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at org.eclipse.jetty.server.Server.handle(Server.java:516) at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487) at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173) at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131) at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883) at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034) at java.lang.Thread.run(Thread.java:748) Caused by: java.sql.SQLFeatureNotSupportedException: Not supported at com.mysql.jdbc.JDBC4Connection.getSchema(JDBC4Connection.java:258) at org.apache.commons.dbcp2.Jdbc41Bridge.getSchema(Jdbc41Bridge.java:409) at org.apache.commons.dbcp2.DelegatingConnection.getSchema(DelegatingConnection.java:482) at org.apache.commons.dbcp2.Jdbc41Bridge.getSchema(Jdbc41Bridge.java:409) at org.apache.commons.dbcp2.DelegatingConnection.getSchema(DelegatingConnection.java:482) at com.datastrato.gravitino.catalog.jdbc.operation.JdbcTableOperations.getTable(JdbcTableOperations.java:271) at com.datastrato.gravitino.catalog.jdbc.operation.JdbcTableOperations.load(JdbcTableOperations.java:163) ... 84 more

How to reproduce

gravitino version : 0.5.0

Additional context

No response

diqiu50 commented 2 weeks ago

Can you provide the SQL statement for creating the MySQL table?

yangyuxia commented 2 weeks ago
9da4028fd2fa1efb692c5a3cf4f1869
yuqi1129 commented 2 weeks ago

@yangyuxia Hi, Gravitino uses JDBC DatabaseMetaData to get table and column metadata, it seems that mysql-connector-java-5.1.X.jar does not support it.