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

[Bug report] NullPointerException after alter operation #6523

Open
TEOTEO520 opened this issue Feb 25, 2025 · 0 comments · May be fixed by #6524
Open

[Bug report] NullPointerException after alter operation #6523

TEOTEO520 opened this issue Feb 25, 2025 · 0 comments · May be fixed by #6524
Assignees
Labels
bug Something isn't working

Comments

@TEOTEO520
Copy link
Contributor

Version

main branch

Describe what's wrong

API:
/api//metalakes/metalake01/catalogs/kafkaCatalog01/schemas/default/topics/xxxxxx

Reason:
Due to the cancellation of the operation to reload the topic to fill in its other properties after the alter operation in #3729, there is a risk that the value of the downstream property may return null, which in turn could trigger a NullPointerException in the properties() method of the Topic class.
The specific code that triggers the NullPointerException is:
@Override public Map<String, String> properties() { return topic.properties().entrySet().stream() .filter(p -> !hiddenProperties.contains(p.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); }

Error message and/or stacktrace

stackTrace
{
"code": 1002,
"type": "RuntimeException",
"message": "Failed to operate object [xxxxxx] operation [ALTER] under [default], reason []",
"stack": [
"java.lang.NullPointerException",
"\tat java.util.HashMap.merge(HashMap.java:1225)",
"\tat java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)",
"\tat java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)",
"\tat java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)",
"\tat java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1696)",
"\tat java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)",
"\tat java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)",
"\tat java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)",
"\tat java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)",
"\tat java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)",
"\tat org.apache.gravitino.catalog.EntityCombinedTopic.properties(EntityCombinedTopic.java:87)",
"\tat org.apache.gravitino.listener.api.info.TopicInfo.(TopicInfo.java:43)",
"\tat org.apache.gravitino.listener.TopicEventDispatcher.alterTopic(TopicEventDispatcher.java:80)",
"\tat org.apache.gravitino.bili.onemeta.rest.TopicOperations.lambda$alterTopic$5(TopicOperations.java:195)",
"\tat org.apache.gravitino.lock.TreeLockUtils.doWithTreeLock(TreeLockUtils.java:49)",
"\tat org.apache.gravitino.bili.onemeta.rest.TopicOperations.lambda$alterTopic$6(TopicOperations.java:192)",
"\tat java.security.AccessController.doPrivileged(Native Method)",
"\tat javax.security.auth.Subject.doAs(Subject.java:422)",
"\tat org.apache.gravitino.utils.PrincipalUtils.doAs(PrincipalUtils.java:39)",
"\tat org.apache.gravitino.server.web.Utils.doAs(Utils.java:188)",
"\tat org.apache.gravitino.bili.onemeta.rest.TopicOperations.alterTopic(TopicOperations.java:180)",
"\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)",
"\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)",
"\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)",
"\tat java.lang.reflect.Method.invoke(Method.java:498)",
"\tat org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:146)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:189)",
"\tat org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)",
"\tat org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:93)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:478)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:400)",
"\tat org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:81)",
"\tat org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:256)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)",
"\tat org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:292)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:274)",
"\tat org.glassfish.jersey.internal.Errors.process(Errors.java:244)",
"\tat org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)",
"\tat org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:235)",
"\tat org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:684)",
"\tat org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)",
"\tat org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:358)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:311)",
"\tat org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)",
"\tat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)",
"\tat org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1656)",
"\tat org.apache.gravitino.server.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:91)",
"\tat org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)",
"\tat org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)",
"\tat org.apache.gravitino.server.web.VersioningFilter.doFilter(VersioningFilter.java:123)",
"\tat org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193)",
"\tat org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)",
"\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)",
"\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)",
"\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)",
"\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)",
"\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)",
"\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)",
"\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)",
"\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)",
"\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)",
"\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)",
"\tat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)",
"\tat org.eclipse.jetty.server.Server.handle(Server.java:516)",
"\tat org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)",
"\tat org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)",
"\tat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)",
"\tat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)",
"\tat org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)",
"\tat org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)",
"\tat org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)",
"\tat org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)",
"\tat org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)",
"\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)",
"\tat org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)",
"\tat java.lang.Thread.run(Thread.java:748)"
]
}

How to reproduce

When initializing the Topic Table class object, put the key -> null into it.

Additional context

No response

@TEOTEO520 TEOTEO520 added the bug Something isn't working label Feb 25, 2025
TEOTEO520 pushed a commit to TEOTEO520/gravitino that referenced this issue Feb 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant