From e77fa36e5202d64084515922f7972446633cf5fd Mon Sep 17 00:00:00 2001 From: Yunze Xu Date: Fri, 11 Jun 2021 03:54:07 +0800 Subject: [PATCH] [C++] Fix undefined behavior caused by uninitialized variables (#10892) * Use brace initializer to initialize configurations * Add config tests --- .../include/pulsar/ClientConfiguration.h | 2 + .../include/pulsar/ConsumerConfiguration.h | 6 + .../include/pulsar/ProducerConfiguration.h | 17 ++- pulsar-client-cpp/include/pulsar/Schema.h | 10 ++ .../lib/ClientConfigurationImpl.h | 38 ++--- .../lib/ConsumerConfigurationImpl.h | 51 ++----- .../lib/ProducerConfigurationImpl.h | 43 ++---- .../tests/ConsumerConfigurationTest.cc | 99 +++++++++++++ .../tests/NoOpsCryptoKeyReader.h | 36 +++++ .../tests/ProducerConfigurationTest.cc | 132 ++++++++++++++++++ .../tests/ReaderConfigurationTest.cc | 14 +- 11 files changed, 340 insertions(+), 108 deletions(-) create mode 100644 pulsar-client-cpp/tests/NoOpsCryptoKeyReader.h create mode 100644 pulsar-client-cpp/tests/ProducerConfigurationTest.cc diff --git a/pulsar-client-cpp/include/pulsar/ClientConfiguration.h b/pulsar-client-cpp/include/pulsar/ClientConfiguration.h index 71717c271dd1e..11bfc43f734fd 100644 --- a/pulsar-client-cpp/include/pulsar/ClientConfiguration.h +++ b/pulsar-client-cpp/include/pulsar/ClientConfiguration.h @@ -217,6 +217,8 @@ class PULSAR_PUBLIC ClientConfiguration { /** * Initialize stats interval in seconds. Stats are printed and reset after every `statsIntervalInSeconds`. * + * Default: 600 + * * Set to 0 means disabling stats collection. */ ClientConfiguration& setStatsIntervalInSeconds(const unsigned int&); diff --git a/pulsar-client-cpp/include/pulsar/ConsumerConfiguration.h b/pulsar-client-cpp/include/pulsar/ConsumerConfiguration.h index d0bc5ee78121e..bf7fdcd190646 100644 --- a/pulsar-client-cpp/include/pulsar/ConsumerConfiguration.h +++ b/pulsar-client-cpp/include/pulsar/ConsumerConfiguration.h @@ -187,6 +187,9 @@ class PULSAR_PUBLIC ConsumerConfiguration { * 10 seconds. An Exception is thrown if the given value is less than 10000 (10 seconds). * If a successful acknowledgement is not sent within the timeout all the unacknowledged messages are * redelivered. + * + * Default: 0, which means the the tracker for unacknowledged messages is disabled. + * * @param timeout in milliseconds */ void setUnAckedMessagesTimeoutMs(const uint64_t milliSeconds); @@ -269,6 +272,9 @@ class PULSAR_PUBLIC ConsumerConfiguration { /** * Set the time duration for which the broker side consumer stats will be cached in the client. + * + * Default: 30000, which means 30 seconds. + * * @param cacheTimeInMs in milliseconds */ void setBrokerConsumerStatsCacheTimeInMs(const long cacheTimeInMs); diff --git a/pulsar-client-cpp/include/pulsar/ProducerConfiguration.h b/pulsar-client-cpp/include/pulsar/ProducerConfiguration.h index 085d342d76316..3306b271d8c21 100644 --- a/pulsar-client-cpp/include/pulsar/ProducerConfiguration.h +++ b/pulsar-client-cpp/include/pulsar/ProducerConfiguration.h @@ -140,6 +140,8 @@ class PULSAR_PUBLIC ProducerConfiguration { * The first message uses (initialSequenceId + 1) as its sequence ID and subsequent messages are assigned * incremental sequence IDs. * + * Default: -1, which means the first message's sequence ID is 0. + * * @param initialSequenceId the initial sequence ID for the producer. * @return */ @@ -178,6 +180,8 @@ class PULSAR_PUBLIC ProducerConfiguration { * would fail unless blockIfQueueFull is set to true. Use {@link #setBlockIfQueueFull} to change the * blocking behavior. * + * Default: 1000 + * * @param maxPendingMessages max number of pending messages. * @return */ @@ -194,6 +198,8 @@ class PULSAR_PUBLIC ProducerConfiguration { * This setting will be used to lower the max pending messages for each partition * ({@link #setMaxPendingMessages(int)}), if the total exceeds the configured value. * + * Default: 50000 + * * @param maxPendingMessagesAcrossPartitions */ ProducerConfiguration& setMaxPendingMessagesAcrossPartitions(int maxPendingMessagesAcrossPartitions); @@ -206,6 +212,8 @@ class PULSAR_PUBLIC ProducerConfiguration { /** * Set the message routing modes for partitioned topics. * + * Default: UseSinglePartition + * * @param PartitionsRoutingMode partition routing mode. * @return */ @@ -233,6 +241,8 @@ class PULSAR_PUBLIC ProducerConfiguration { * Set the hashing scheme, which is a standard hashing function available when choosing the partition * used for a particular message. * + * Default: HashingScheme::BoostHash + * *

Standard hashing functions available are: *