1. 29 11月, 2019 3 次提交
    • L
      Fix NPE when send a large message and don't release... · ecf77921
      lipenghui 提交于
      Fix NPE when send a large message and don't release batchedMessageMetadataAndPayload when discard in batch message container. (#5748)
      
      Fixes #5746 #5747
      
      ### Motivation
      
      Fix NPE and release an already released ByteBuf when publish an oversize message.
      
      Here is error log:
      ```
      io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
      	at io.netty.util.internal.ReferenceCountUpdater.toLiveRealRefCnt(ReferenceCountUpdater.java:74) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
      	at io.netty.util.internal.ReferenceCountUpdater.release(ReferenceCountUpdater.java:138) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
      	at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:100) ~[netty-buffer-4.1.43.Final.jar:4.1.43.Final]
      	at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:88) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
      	at io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:113) [netty-common-4.1.43.Final.jar:4.1.43.Final]
      	at org.apache.pulsar.client.impl.BatchMessageKeyBasedContainer$KeyedBatch.discard(BatchMessageKeyBasedContainer.java:244) [classes/:?]
      	at org.apache.pulsar.client.impl.BatchMessageKeyBasedContainer.createOpSendMsg(BatchMessageKeyBasedContainer.java:125) [classes/:?]
      	at org.apache.pulsar.client.impl.BatchMessageKeyBasedContainer.createOpSendMsgs(BatchMessageKeyBasedContainer.java:145) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerImpl.batchMessageAndSend(ProducerImpl.java:1426) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerImpl.triggerFlush(ProducerImpl.java:1411) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:112) [classes/:?]
      	at org.apache.pulsar.client.impl.TypedMessageBuilderImpl.send(TypedMessageBuilderImpl.java:89) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:63) [classes/:?]
      	at org.apache.pulsar.broker.service.BatchMessageTest.testSendOverSizeMessage(BatchMessageTest.java:875) [test-classes/:?]
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
      	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
      	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) [testng-6.14.3.jar:?]
      	at org.testng.internal.Invoker.invokeMethod(Invoker.java:583) [testng-6.14.3.jar:?]
      	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719) [testng-6.14.3.jar:?]
      	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989) [testng-6.14.3.jar:?]
      	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) [testng-6.14.3.jar:?]
      	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) [testng-6.14.3.jar:?]
      	at org.testng.TestRunner.privateRun(TestRunner.java:648) [testng-6.14.3.jar:?]
      	at org.testng.TestRunner.run(TestRunner.java:505) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.runTest(SuiteRunner.java:455) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.run(SuiteRunner.java:364) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.runSuitesLocally(TestNG.java:1137) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.runSuites(TestNG.java:1049) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.run(TestNG.java:1017) [testng-6.14.3.jar:?]
      	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73) [testng-plugin.jar:?]
      	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123) [testng-plugin.jar:?]
      
      
      
      16:19:13.850 [main:org.apache.pulsar.client.impl.ProducerImpl@1439] WARN  org.apache.pulsar.client.impl.ProducerImpl - [persistent://prop/ns-abc/testSendOverSizeMessage-623833fc-d9f7-4b28-aead-27955928fae9] [test-0-0] error while create opSendMsg by batch message container
      java.lang.NullPointerException: null
      	at org.apache.pulsar.client.impl.ProducerImpl.releaseSemaphoreForSendOp(ProducerImpl.java:858) ~[classes/:?]
      	at org.apache.pulsar.client.impl.ProducerImpl.processOpSendMsg(ProducerImpl.java:1477) ~[classes/:?]
      	at org.apache.pulsar.client.impl.ProducerImpl.batchMessageAndSend(ProducerImpl.java:1432) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerImpl.triggerFlush(ProducerImpl.java:1411) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:112) [classes/:?]
      	at org.apache.pulsar.client.impl.TypedMessageBuilderImpl.send(TypedMessageBuilderImpl.java:89) [classes/:?]
      	at org.apache.pulsar.client.impl.ProducerBase.send(ProducerBase.java:63) [classes/:?]
      	at org.apache.pulsar.broker.service.BatchMessageTest.testSendOverSizeMessage(BatchMessageTest.java:875) [test-classes/:?]
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
      	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
      	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) [testng-6.14.3.jar:?]
      	at org.testng.internal.Invoker.invokeMethod(Invoker.java:583) [testng-6.14.3.jar:?]
      	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719) [testng-6.14.3.jar:?]
      	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989) [testng-6.14.3.jar:?]
      	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) [testng-6.14.3.jar:?]
      	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) [testng-6.14.3.jar:?]
      	at org.testng.TestRunner.privateRun(TestRunner.java:648) [testng-6.14.3.jar:?]
      	at org.testng.TestRunner.run(TestRunner.java:505) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.runTest(SuiteRunner.java:455) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunner.run(SuiteRunner.java:364) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) [testng-6.14.3.jar:?]
      	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.runSuitesLocally(TestNG.java:1137) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.runSuites(TestNG.java:1049) [testng-6.14.3.jar:?]
      	at org.testng.TestNG.run(TestNG.java:1017) [testng-6.14.3.jar:?]
      	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73) [testng-plugin.jar:?]
      	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123) [testng-plugin.jar:?]
      ```
      
      ### Modifications
      
      Add check for processOpSendMsg, if the op is null, just return.
      Don't release the batchedMessageMetadataAndPayload since it is already released in getCompressedBatchMetadataAndPayload() method.
      ecf77921
    • L
      Remove cursor while remove non-durable subscription (#5719) · 2e30c086
      lipenghui 提交于
      ### Motivation
      
      Remove cursor from cursors of managed ledger while remove non-durable subscription.  The data deletion is depends the mark delete position of all cursors, if left a unused cursor in the cursors of managed ledger, data can't be delete as expected.
      
      ### Modifications
      
      Remove cursor while remove non-durable subscription
      2e30c086
    • Y
      [Issue 3009][docs] Add presto sql REST APIs doc (#5376) · b23c7320
      Yong Zhang 提交于
      Fixes #3009
      
      *Motivation*
      
      There are no REST APIs usage docs for the presto SQL.
      b23c7320
  2. 28 11月, 2019 6 次提交
  3. 27 11月, 2019 5 次提交
    • B
      Fix documentation: how to start server for cpp tests (#5549) · e372cc9c
      Brian Candler 提交于
      ### Modifications
      
      Out-of-date instructions in pulsar-client-cpp/README.md about how to start test server
      e372cc9c
    • J
      init broker publish limitor at broker start time (#5754) · eee4d892
      Jia Zhai 提交于
      Broker publish limiter was not start at broker start time, and only init when dynamic system config happens. 
      This change init broker publish limiter at broker start time, and add a test for it.
      eee4d892
    • K
      Adding Spark example to Write Pojo classes to Stream (#5470) · a88300c4
      kishorebhat-p 提交于
      ### Motivation
      
      Added the class SensorReading and class ProducerSparkWithPojo  to showcase writing Pojo as Json Object to Pulsar Queue 
      
      ### Modifications
      
      Based on the documentation written example class to write Pojos to Pulsar 
      This might be more real life examples for application than bytes stream 
      a88300c4
    • J
      [Issue 5287][docs] Add documentation on how to configure multiple broker services (#5722) · 14f3eee3
      Jennifer Huang 提交于
      Fixes #5287 
      
      ### Motivation
      Users do not know how to specify cluster (multi broker/zk) connection for presto.
      
      ### Modifications
      Add content on how to configure multiple hosts for `pulsar.broker-service-url`.
      14f3eee3
    • B
      fix potential deadlock in pulsar client close (#5731) · f83793ee
      Boyang Jerry Peng 提交于
      # Motivation
      
      A deadlock on PulsarClient.close() can happen if there are producers/consumers that are not closed prior to calling PulsarClient.close() and we have to close them in the routine.  The deadlock happens be cause we piggy pack off of a "pulsar-io" thread that is used to shutdown the connection in producer/consumer close, to also shutdown the EventLoopGroup.  "pulsar-io" thread is part of the EventLoopGroup thus it tries to shutdown itself and causes a deadlock.  
      
      Below is a stacktrace of what it look like:
      
      ```
      "pulsar-client-io-1-1" #20 prio=5 os_prio=31 tid=0x00007fc312a78800 nid=0x9a03 in Object.wait() [0x000070000384e000]
         java.lang.Thread.State: WAITING (on object monitor)
          at java.lang.Object.wait(Native Method)
          - waiting on <0x00000007b8532640> (a io.netty.util.concurrent.DefaultPromise)
          at java.lang.Object.wait(Object.java:502)
          at io.netty.util.concurrent.DefaultPromise.await(DefaultPromise.java:252)
          - locked <0x00000007b8532640> (a io.netty.util.concurrent.DefaultPromise)
          at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:403)
          at io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:35)
          at org.apache.pulsar.client.impl.ConnectionPool.close(ConnectionPool.java:286)
          at org.apache.pulsar.client.impl.PulsarClientImpl.shutdown(PulsarClientImpl.java:578)
          at org.apache.pulsar.client.impl.PulsarClientImpl.lambda$closeAsync$18(PulsarClientImpl.java:560)
          at org.apache.pulsar.client.impl.PulsarClientImpl$$Lambda$82/878861517.run(Unknown Source)
          at java.util.concurrent.CompletableFuture.uniRun(CompletableFuture.java:705)
          at java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:687)
          at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
          at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1962)
          at org.apache.pulsar.client.impl.ProducerImpl.lambda$closeAsync$9(ProducerImpl.java:735)
          at org.apache.pulsar.client.impl.ProducerImpl$$Lambda$80/1123226989.apply(Unknown Source)
          at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:822)
          at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:797)
          at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
          at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1962)
          at org.apache.pulsar.client.impl.ClientCnx.handleSuccess(ClientCnx.java:406)
          at org.apache.pulsar.common.protocol.PulsarDecoder.channelRead(PulsarDecoder.java:222)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
          at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
          at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:326)
          at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:300)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
          at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
          at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
          at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
          at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
          at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
          at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
          at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
          at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
          at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
          at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050)
          at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
          at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
          at java.lang.Thread.run(Thread.java:748)
      ```
      
      This deadlock went unnoticed for a long time because in the past we never waited for the shutdown of the EventLoopGroup to complete
      
      Also #5628 does not solve the issue.  This PR should supersede that one.
      f83793ee
  4. 26 11月, 2019 4 次提交
    • J
      Add publish rate limit for each broker to avoid OOM (#5710) · 9e7b9389
      Jia Zhai 提交于
      Fixes #5513 
      
      ### Motivation
      
      Through #3985, user could set the publish rate for each topic, but the topic number for each broker is not limited, so there is case that a lot of topics served in same broker, and if each topic send too many message, it will cause the messages not able to send to BookKeeper in time,  and messages be hold in the direct memory of broker, and cause Broker out of direct memory.
      
      ### Modifications
      
      - add broker publish rate limit base on #3985,
      - add unit test.
      
      ### Verifying this change
      unit test passed.
      9e7b9389
    • H
      fix setTxnidMostBits bug (#5743) · 48506e57
      hangc0276 提交于
      In TypedMessageBuilderImpl::beforeSend function, when setting TxnIdMostBits field of msgMetadataBuilder, it sets into TxnidLeastBits field and override the original TxnIdLeastBits value.
      48506e57
    • A
      Add right parenthesis for "(max size configurable" (#5744) · de2ff6b1
      atlantic2099 提交于
      Resolved issue #5728
      de2ff6b1
    • H
      [Issues 5692]Add document for mongodb connector (#5715) · 4207de67
      huangdx0726 提交于
      [Issues 5692]Add document for mongodb connector
      
      Fixes #5692 
      4207de67
  5. 25 11月, 2019 1 次提交
  6. 23 11月, 2019 3 次提交
    • F
      [Issue 5676][C++ client] Expose redelivery count (#5677) · a00791d5
      Fernando Rejon Barrera 提交于
      Fixes #5676
      
      ### Motivation
      
      
      Expose the redelivery count in the C++ client.
      
      ### Modifications
      
      Exposed the redelivery count from the broker in `Message` and `MessageImpl`. Set the counter when receiving messages. Added test.
      a00791d5
    • B
      Fix: Netty threads may still linger after client close (#5628) · 413aa74e
      Boyang Jerry Peng 提交于
      ### Motivation
      
      Even after the synchronous close() method is called on a PulsarClient, netty thread(s) from the EventLoopGroup used in the ConnectionPool may still linger around for another 2 seconds afterwards due to not wait for the the graceful shutdown to complete.
      
      While this usually doesn't cause any problems for a normal use case, it does cause problems in the Pulsar Flink sources and sinks.  Exceptions like the following can happen when the Flink job with a Pulsar source or sink gets closed:
      
      ```
      Exception in thread "pulsar-client-io-1-1" java.lang.NoClassDefFoundError: org/apache/pulsar/shade/io/netty/buffer/PoolArena$1
      	at org.apache.pulsar.shade.io.netty.buffer.PoolArena.freeChunk(PoolArena.java:293)
      	at org.apache.pulsar.shade.io.netty.buffer.PoolThreadCache$MemoryRegionCache.freeEntry(PoolThreadCache.java:460)
      	at org.apache.pulsar.shade.io.netty.buffer.PoolThreadCache$MemoryRegionCache.free(PoolThreadCache.java:430)
      	at org.apache.pulsar.shade.io.netty.buffer.PoolThreadCache$MemoryRegionCache.free(PoolThreadCache.java:422)
      	at org.apache.pulsar.shade.io.netty.buffer.PoolThreadCache.free(PoolThreadCache.java:279)
      	at org.apache.pulsar.shade.io.netty.buffer.PoolThreadCache.free(PoolThreadCache.java:270)
      	at org.apache.pulsar.shade.io.netty.buffer.PoolThreadCache.free(PoolThreadCache.java:241)
      	at org.apache.pulsar.shade.io.netty.buffer.PooledByteBufAllocator$PoolThreadLocalCache.onRemoval(PooledByteBufAllocator.java:450)
      	at org.apache.pulsar.shade.io.netty.buffer.PooledByteBufAllocator$PoolThreadLocalCache.onRemoval(PooledByteBufAllocator.java:426)
      	at org.apache.pulsar.shade.io.netty.util.concurrent.FastThreadLocal.remove(FastThreadLocal.java:271)
      	at org.apache.pulsar.shade.io.netty.util.concurrent.FastThreadLocal.removeAll(FastThreadLocal.java:67)
      	at org.apache.pulsar.shade.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:32)
      	at java.lang.Thread.run(Thread.java:748)
      Caused by: java.lang.ClassNotFoundException: org.apache.pulsar.shade.io.netty.buffer.PoolArena$1
      	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
      	at org.apache.flink.runtime.execution.librarycache.FlinkUserCodeClassLoaders$ChildFirstClassLoader.loadClass(FlinkUserCodeClassLoaders.java:129)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
      	... 13 more
      ```
      
      This is because threads from the EventLoopGroup lingers after the pulsar client is closed and the Flink job is unloaded.
      
      ### Modifications
      
      Shorten the graceful shutdown period and wait for it to complete
      413aa74e
    • L
      Expose lastExpireTimestamp for subscription stats. (#5721) · 2bbb10c0
      lipenghui 提交于
      ### Motivation
      
      Expose lastExpireTimestamp for subscription stats. Can be used to troubleshooting TTL related issues
      
      ### Verifying this change
      
      Added new unit tests
      2bbb10c0
  7. 22 11月, 2019 2 次提交
  8. 21 11月, 2019 4 次提交
  9. 20 11月, 2019 7 次提交
  10. 19 11月, 2019 5 次提交
    • L
      [PIP-38] Support batch receive in java client. (#4621) · 56517d5f
      lipenghui 提交于
      Motivation
      Support messages batch receiving, some application scenarios can be made simpler. Users often increase application throughput through batch operations. For example, batch insert or update database.
      
      At present, we provide the ability to receive a single message. If users want to take advantage of batch operating advantages, need to implement a message collector him self. So this proposal aims to provide a universal interface and mechanism for batch receiving messages.
      
      For example:
      ```
      Messages messages = consumer.batchReceive();
      insertToDB(messages);
      consumer.acknowledge(messages);
      Verifying this change
      Added new UT to verify this change.
      ```
      56517d5f
    • H
      fix example code of java client (#5691) · dd9e669a
      huangdx0726 提交于
      dd9e669a
    • F
      pin debian release (#5689) · 5d6b78de
      Fernando Rejon Barrera 提交于
      5d6b78de
    • H
      fix bkenv has no effect bug when start bookie using bin/pulsar-daemon (#5675) · 16affa0d
      hangc0276 提交于
      when i start bookie using `bin/pulsar-daemon start bookie` command, i found the bookie environment variable defined in conf/bkenv.sh has no effect, but using $PULSAR_MEM and $PULSAR_GC instead.
      
      Then i check the bin/pulsar shell script, i found as follow:
      ```
      elif [ $COMMAND == "bookie" ]; then
          PULSAR_LOG_FILE=${PULSAR_LOG_FILE:-"bookkeeper.log"}
          # Pass BOOKIE_EXTRA_OPTS option defined in pulsar_env.sh
          OPTS="$OPTS $BOOKIE_EXTRA_OPTS"
          exec $JAVA $OPTS -Dpulsar.log.file=$PULSAR_LOG_FILE org.apache.bookkeeper.proto.BookieServer --conf $PULSAR_BOOKKEEPER_CONF $@
      ```
      but in pulsar_env.sh, the `$BOOKIE_EXTRA_OPTS` defined as follow:
      ```
      # Set BOOKIE_EXTRA_OPTS option here to ensure that all pulsar scripts can work seamless with bookkeeper
      
      # Extra options to be passed to the jvm
      BOOKIE_EXTRA_OPTS="${BOOKIE_EXTRA_OPTS} -Dio.netty.leakDetectionLevel=disabled -Dio.netty.recycler.maxCapacity.default=1000 -Dio.netty.recycler.linkCapacity=1024"
      ```
      `$BOOKIE_EXTRA_OPTS` do not define `$BOOKIE_MEM` and `$BOOKIE_GC`, then the pulsar script will using `$PULSAR_MEM` and `$PULSAR_GC` instead to start bookkeeper.
      
      So, i suggest to load conf/bkenv.sh in bin/pulsar script and using `$BOOKIE_EXTRA_OPTS` in conf/bkenv.sh instread of `$BOOKIE_EXTRA_OPTS` in bin/pulsar_env.sh
      16affa0d
    • Y
      Fix hangs when type invalid args at command-line (#5615) · d16e79a1
      Yong Zhang 提交于
      Fixes #5533 
      
      *Motivation*
      
      When we using command-line tools, it hangs after type an invalid args.
      
      *Modifications*
      
      We don't need to parse the command, just show the command usage.
      d16e79a1