patricklucas opened a new issue #9700:
URL: https://github.com/apache/pulsar/issues/9700


   I'm relatively new to Pulsar and wanted to experiment with tiered storage.
   
   I set up a standalone cluster with Docker and enabled the `aws-s3` 
offloader, providing credentials and a MinIO endpoint. I created a new topic 
and wrote a few arbitrary messages into it.
   
   Then, in pulsar-manager, I clicked "Offload" on the topic information 
screen, and got an error printed to the screen (full traceback below). The 
traceback indicated the NPE is at 
[PersistentTopic.java:2263](https://github.com/apache/pulsar/blob/v2.7.0/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java#L2263),
 where it attempts to dereference `messageId`, which is null. This is confirmed 
in the log prior to the traceback: "Starting offload operation at messageId 
null".
   
   I couldn't say what the cause is here. Maybe running an offload "too soon", 
before enough data has accrued in the topic, is not possible? Interestingly, I 
can't reproduce this using `pulsar-admin`, only pulsar-manager—`pulsar-admin` 
just returns "Nothing to offload". Nevertheless, however pulsar-manager 
triggers this shouldn't cause an NPE in Pulsar.
   
   I suppose there are possibly two bugs here:
   - An offload operation shouldn't fail like this; if it shouldn't be allowed 
to start an offload operation when there is not enough data, the request to 
start it should be rejected or accepted as a no-op
   - If an offload operation _does_ fail, it shouldn't leave the topic in an 
"offload running" state until the broker restarts
   
   **To Reproduce**
   Steps to reproduce the behavior:
   1. Bootstrap a standalone cluster with the `aws-s3` offloader enabled
   2. Produce a few messages into a new topic
   3. Trigger offloading from pulsar-manager
   4. See error
   
   **Expected behavior**
   The offloading operation succeeds as a no-op or otherwise.
   
   **Additional context**
   Pulsar 2.7.0 in Docker
   
   Full traceback:
   
   ```
   15:59:36.506 [pulsar-web-69-11] INFO  
org.apache.pulsar.broker.service.persistent.PersistentTopic - 
[persistent://public/default/my-topic] Starting offload operation at messageId 
null
   15:59:36.507 [pulsar-web-69-11] WARN  
org.apache.pulsar.broker.admin.impl.PersistentTopicsBase - Unexpected error 
triggering offload
   java.lang.NullPointerException: null
           at 
org.apache.pulsar.broker.service.persistent.PersistentTopic.triggerOffload(PersistentTopic.java:2263)
 ~[org.apache.pulsar-pulsar-broker-2.7.0.jar:2.7.0]
           at 
org.apache.pulsar.broker.admin.impl.PersistentTopicsBase.internalTriggerOffload(PersistentTopicsBase.java:2976)
 ~[org.apache.pulsar-pulsar-broker-2.7.0.jar:2.7.0]
           at 
org.apache.pulsar.broker.admin.v2.PersistentTopics.triggerOffload(PersistentTopics.java:2061)
 ~[org.apache.pulsar-pulsar-broker-2.7.0.jar:2.7.0]
           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
~[?:1.8.0_275]
           at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
~[?:1.8.0_275]
           at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 ~[?:1.8.0_275]
           at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_275]
           at 
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:159)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253) 
~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) 
~[org.glassfish.jersey.core-jersey-common-2.31.jar:?]
           at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) 
~[org.glassfish.jersey.core-jersey-common-2.31.jar:?]
           at org.glassfish.jersey.internal.Errors.process(Errors.java:292) 
~[org.glassfish.jersey.core-jersey-common-2.31.jar:?]
           at org.glassfish.jersey.internal.Errors.process(Errors.java:274) 
~[org.glassfish.jersey.core-jersey-common-2.31.jar:?]
           at org.glassfish.jersey.internal.Errors.process(Errors.java:244) 
~[org.glassfish.jersey.core-jersey-common-2.31.jar:?]
           at 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
 ~[org.glassfish.jersey.core-jersey-common-2.31.jar:?]
           at 
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232) 
~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
 ~[org.glassfish.jersey.core-jersey-server-2.31.jar:?]
           at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394) 
~[org.glassfish.jersey.containers-jersey-container-servlet-core-2.31.jar:?]
           at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) 
~[org.glassfish.jersey.containers-jersey-container-servlet-core-2.31.jar:?]
           at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
 ~[org.glassfish.jersey.containers-jersey-container-servlet-core-2.31.jar:?]
           at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
 ~[org.glassfish.jersey.containers-jersey-container-servlet-core-2.31.jar:?]
           at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
 ~[org.glassfish.jersey.containers-jersey-container-servlet-core-2.31.jar:?]
           at 
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763) 
~[org.eclipse.jetty-jetty-servlet-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1633)
 ~[org.eclipse.jetty-jetty-servlet-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.apache.pulsar.broker.web.ResponseHandlerFilter.doFilter(ResponseHandlerFilter.java:58)
 ~[org.apache.pulsar-pulsar-broker-2.7.0.jar:2.7.0]
           at 
org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:193) 
~[org.eclipse.jetty-jetty-servlet-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1609)
 ~[org.eclipse.jetty-jetty-servlet-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:561) 
~[org.eclipse.jetty-jetty-servlet-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1612)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1434)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501) 
~[org.eclipse.jetty-jetty-servlet-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1582)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1349)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:179)
 ~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 
~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at org.eclipse.jetty.server.Server.handle(Server.java:516) 
~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383) 
~[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556) 
[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375) 
[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273) 
[org.eclipse.jetty-jetty-server-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
 [org.eclipse.jetty-jetty-io-9.4.33.v20201020.jar:9.4.33.v20201020]
           at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105) 
[org.eclipse.jetty-jetty-io-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104) 
[org.eclipse.jetty-jetty-io-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
 [org.eclipse.jetty-jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
 [org.eclipse.jetty-jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
 [org.eclipse.jetty-jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
 [org.eclipse.jetty-jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
 [org.eclipse.jetty-jetty-util-9.4.33.v20201020.jar:9.4.33.v20201020]
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
[?:1.8.0_275]
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
[?:1.8.0_275]
           at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 [io.netty-netty-common-4.1.51.Final.jar:4.1.51.Final]
           at java.lang.Thread.run(Thread.java:748) [?:1.8.0_275]
   ```
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to