apache / apache/pinot

Vague exception when offline and realtime configs have mismatching time columns

Open
#5,130 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
6.1k
Forks
1.5k
Avg merge
2d 55m
Merged PRs (30d)
182

Description

I had an offline config where the segment config did not specify a time column but the realtime did. I hit a NPE which spit out a bad log message.

I'll go ahead and submit a fix for this.

2020/03/09 11:44:33.728 INFO [PinotTableRestletResource] [grizzly-http-server-21] Validating table configs for Table: events
2020/03/09 11:44:33.731 ERROR [PinotTableRestletResource] [grizzly-http-server-21] null
java.lang.NullPointerException: null
at org.apache.pinot.controller.api.resources.PinotTableRestletResource.verifyTableConfigs(PinotTableRestletResource.java:446) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.apache.pinot.controller.api.resources.PinotTableRestletResource.addTable(PinotTableRestletResource.java:121) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_242]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_242]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:219) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.internal.Errors.process(Errors.java:292) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.internal.Errors.process(Errors.java:274) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.internal.Errors.process(Errors.java:244) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:679) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:353) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.grizzly.http.server.HttpHandler$1.run(HttpHandler.java:200) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549) ~[pinot-all-0.3.0-SNAPSHOT-jar-with-dependencies.jar:0.3.0-SNAPSHOT-565374bbabd1b359f8d4f8d85d62ffd0f3d27458]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_242]

Contributor guide

Open the contributing guide

Research direction

Start in org.apache.pinot.controller.api.resources.PinotTableRestletResource.verifyTableConfigs at line 446, reached through addTable. Reproduce the case where the offline segment config omits a time column while the realtime config specifies one, then verify that validation reports a useful configuration error instead of a NullPointerException and null log message.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.