You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by xy...@apache.org on 2023/04/06 11:48:40 UTC

[pulsar-client-cpp] branch main updated: [feat] Support set producer access mode for C client. (#245)

This is an automated email from the ASF dual-hosted git repository.

xyz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 5ad3f25  [feat] Support set producer access mode for C client. (#245)
5ad3f25 is described below

commit 5ad3f251f40fb9fb13ca10a1886c9a52bd22491a
Author: Baodi Shi <ba...@apache.org>
AuthorDate: Thu Apr 6 19:48:34 2023 +0800

    [feat] Support set producer access mode for C client. (#245)
---
 include/pulsar/c/producer_configuration.h | 21 +++++++++++++++++++++
 lib/c/c_ProducerConfiguration.cc          | 10 ++++++++++
 tests/c/c_ProducerConfigurationTest.cc    |  4 ++++
 3 files changed, 35 insertions(+)

diff --git a/include/pulsar/c/producer_configuration.h b/include/pulsar/c/producer_configuration.h
index f8f74c2..f556694 100644
--- a/include/pulsar/c/producer_configuration.h
+++ b/include/pulsar/c/producer_configuration.h
@@ -78,6 +78,21 @@ typedef enum
     pulsar_ProducerSend
 } pulsar_producer_crypto_failure_action;
 
+typedef enum
+{
+    // By default multiple producers can publish on a topic.
+    pulsar_ProducerAccessModeShared = 0,
+    // Require exclusive access for producer.
+    // Fail immediately if there's already a producer connected.
+    pulsar_ProducerAccessModeExclusive = 1,
+    // Producer creation is pending until it can acquire exclusive access.
+    pulsar_ProducerAccessModeWaitForExclusive = 2,
+    // Acquire exclusive access for the producer.
+    // Any existing producer will be removed and invalidated immediately.
+    pulsar_ProducerAccessModeExclusiveWithFencing = 3
+
+} pulsar_producer_access_mode;
+
 typedef struct _pulsar_producer_configuration pulsar_producer_configuration_t;
 
 typedef struct _pulsar_crypto_key_reader pulsar_crypto_key_reader;
@@ -210,6 +225,12 @@ PULSAR_PUBLIC void pulsar_producer_configuration_set_chunking_enabled(pulsar_pro
 
 PULSAR_PUBLIC int pulsar_producer_configuration_is_chunking_enabled(pulsar_producer_configuration_t *conf);
 
+PULSAR_PUBLIC pulsar_producer_access_mode
+pulsar_producer_configuration_get_access_mode(pulsar_producer_configuration_t *conf);
+
+PULSAR_PUBLIC void pulsar_producer_configuration_set_access_mode(pulsar_producer_configuration_t *conf,
+                                                                 pulsar_producer_access_mode accessMode);
+
 // const CryptoKeyReaderPtr getCryptoKeyReader() const;
 // ProducerConfiguration &setCryptoKeyReader(CryptoKeyReaderPtr cryptoKeyReader);
 //
diff --git a/lib/c/c_ProducerConfiguration.cc b/lib/c/c_ProducerConfiguration.cc
index 868eddf..76e2e2d 100644
--- a/lib/c/c_ProducerConfiguration.cc
+++ b/lib/c/c_ProducerConfiguration.cc
@@ -232,3 +232,13 @@ void pulsar_producer_configuration_set_chunking_enabled(pulsar_producer_configur
 int pulsar_producer_configuration_is_chunking_enabled(pulsar_producer_configuration_t *conf) {
     return conf->conf.isChunkingEnabled();
 }
+
+pulsar_producer_access_mode pulsar_producer_configuration_get_access_mode(
+    pulsar_producer_configuration_t *conf) {
+    return (pulsar_producer_access_mode)conf->conf.getAccessMode();
+}
+
+void pulsar_producer_configuration_set_access_mode(pulsar_producer_configuration_t *conf,
+                                                   pulsar_producer_access_mode accessMode) {
+    conf->conf.setAccessMode((pulsar::ProducerConfiguration::ProducerAccessMode)accessMode);
+}
diff --git a/tests/c/c_ProducerConfigurationTest.cc b/tests/c/c_ProducerConfigurationTest.cc
index 1614227..9104326 100644
--- a/tests/c/c_ProducerConfigurationTest.cc
+++ b/tests/c/c_ProducerConfigurationTest.cc
@@ -25,4 +25,8 @@ TEST(C_ProducerConfigurationTest, testCApiConfig) {
     ASSERT_EQ(pulsar_producer_configuration_is_chunking_enabled(producer_conf), 0);
     pulsar_producer_configuration_set_chunking_enabled(producer_conf, 1);
     ASSERT_EQ(pulsar_producer_configuration_is_chunking_enabled(producer_conf), 1);
+
+    pulsar_producer_configuration_set_access_mode(producer_conf, pulsar_ProducerAccessModeExclusive);
+    ASSERT_EQ(pulsar_producer_configuration_get_access_mode(producer_conf),
+              pulsar_ProducerAccessModeExclusive);
 }