ソースを参照

dmq_usrloc: add modparam for cflags replication

Stefan Mititelu 7 ヶ月 前
コミット
a83ec38863

+ 2 - 0
src/modules/dmq_usrloc/dmq_usrloc.c

@@ -37,6 +37,7 @@ static int child_init(int);
 int dmq_usrloc_enable = 0;
 int _dmq_usrloc_sync = 1;
 int _dmq_usrloc_replicate_socket_info = 0;
+int _dmq_usrloc_replicate_cflags = 1;
 int _dmq_usrloc_batch_size = 0;
 int _dmq_usrloc_batch_msg_contacts = 1;
 int _dmq_usrloc_batch_msg_size = 60000;
@@ -54,6 +55,7 @@ static param_export_t params[] = {
 	{"enable", PARAM_INT, &dmq_usrloc_enable},
 	{"sync", PARAM_INT, &_dmq_usrloc_sync},
 	{"replicate_socket_info", PARAM_INT, &_dmq_usrloc_replicate_socket_info},
+	{"replicate_cflags", PARAM_INT, &_dmq_usrloc_replicate_cflags},
 	{"batch_msg_contacts", PARAM_INT, &_dmq_usrloc_batch_msg_contacts},
 	{"batch_msg_size", PARAM_INT, &_dmq_usrloc_batch_msg_size},
 	{"batch_size", PARAM_INT, &_dmq_usrloc_batch_size},

+ 38 - 0
src/modules/dmq_usrloc/doc/dmq_usrloc_admin.xml

@@ -292,6 +292,44 @@ modparam("dmq_usrloc", "replicate_socket_info", 1)
 </programlisting>
 	</example>
 	</section>
+	<section id="usrloc_dmq.p.replicate_cflags">
+		<title><varname>replicate_cflags</varname> (int)</title>
+		<para>
+			The parameter controls whether the cflags replication is active or not.
+			This is important for anycast scenarios.
+			The value can be:
+			<itemizedlist>
+			<listitem>
+			<para>
+				0 - disabled
+			</para>
+			</listitem>
+			<listitem>
+			<para>
+				1 - enabled, replicate cflags
+			</para>
+			</listitem>
+			<listitem>
+			<para>
+				> 1 - enabled, set cflags corresponding to this value, on replicated peers
+			</para>
+			</listitem>
+			</itemizedlist>
+		</para>
+		<para>
+		<emphasis>
+			Default value is 1.
+		</emphasis>
+		</para>
+		<example>
+		<title>Set <varname>replicate_cflags</varname> parameter</title>
+		<programlisting format="linespecific">
+...
+modparam("dmq_usrloc", "replicate_cflags", 97) # will set cflags corresponding to 1 + 32 + 64
+...
+		</programlisting>
+		</example>
+	</section>
 	<section id="usrloc_dmq.p.usrloc_delete">
 		<title><varname>usrloc_delete</varname> (int)</title>
 		<para>

+ 7 - 1
src/modules/dmq_usrloc/usrloc_sync.c

@@ -60,6 +60,7 @@ static void srjson_to_xavp(srjson_t *json, sr_xavp_t **xavp);
 
 extern int _dmq_usrloc_sync;
 extern int _dmq_usrloc_replicate_socket_info;
+extern int _dmq_usrloc_replicate_cflags;
 extern int _dmq_usrloc_batch_msg_contacts;
 extern int _dmq_usrloc_batch_msg_size;
 extern int _dmq_usrloc_batch_size;
@@ -421,7 +422,12 @@ static int usrloc_dmq_execute_action(srjson_t *jdoc_action, dmq_node_t *node)
 		} else if(strcmp(it->string, "flags") == 0) {
 			flags = SRJSON_GET_UINT(it);
 		} else if(strcmp(it->string, "cflags") == 0) {
-			cflags = SRJSON_GET_UINT(it);
+			if(_dmq_usrloc_replicate_cflags == 1) {
+				cflags = SRJSON_GET_UINT(it);
+			} else if(_dmq_usrloc_replicate_cflags > 1) {
+				cflags = _dmq_usrloc_replicate_cflags;
+			}
+			// else don't replicate cflags
 		} else if(strcmp(it->string, "q") == 0) {
 			q = SRJSON_GET_UINT(it);
 		} else if(strcmp(it->string, "last_modified") == 0) {