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);
}