[tor-commits] [tor/master] Multiple subscribers or publishers per subsystem

dgoulet at torproject.org dgoulet at torproject.org
Tue Jun 11 16:06:55 UTC 2019


commit a8a0144d1183a3598bffe6c552507c9dcbdcd474
Author: Taylor Yu <catalyst at torproject.org>
Date:   Mon Apr 1 14:53:39 2019 -0500

    Multiple subscribers or publishers per subsystem
    
    Allow a subsystem to register to publish or subscribe a given message
    from multiple places.
    
    Part of ticket 29976.
---
 src/lib/pubsub/pubsub_check.c | 26 +++++---------------------
 src/test/test_pubsub_build.c  | 43 -------------------------------------------
 2 files changed, 5 insertions(+), 64 deletions(-)

diff --git a/src/lib/pubsub/pubsub_check.c b/src/lib/pubsub/pubsub_check.c
index a3c22d4f2..bf1196df2 100644
--- a/src/lib/pubsub/pubsub_check.c
+++ b/src/lib/pubsub/pubsub_check.c
@@ -172,34 +172,20 @@ pubsub_cfg_dump(const pubsub_cfg_t *cfg, int severity, const char *prefix)
 
 /**
  * Helper: fill a bitarray <b>out</b> with entries corresponding to the
- * subsystems listed in <b>items</b>.  If any subsystem is listed more than
- * once, log a warning.  Return 0 on success, -1 on failure.
+ * subsystems listed in <b>items</b>.
  **/
-static int
+static void
 get_message_bitarray(const pubsub_adjmap_t *map,
-                     message_id_t msg,
                      const smartlist_t *items,
-                     const char *operation,
                      bitarray_t **out)
 {
-  bool ok = true;
   *out = bitarray_init_zero((unsigned)map->n_subsystems);
   if (! items)
-    return 0;
+    return;
 
   SMARTLIST_FOREACH_BEGIN(items, const pubsub_cfg_t *, cfg) {
-    if (bitarray_is_set(*out, cfg->subsys)) {
-      log_warn(LD_MESG|LD_BUG,
-               "Message \"%s\" is configured to be %s by subsystem "
-               "\"%s\" more than once.",
-               get_message_id_name(msg), operation,
-               get_subsys_id_name(cfg->subsys));
-      ok = false;
-    }
     bitarray_set(*out, cfg->subsys);
   } SMARTLIST_FOREACH_END(cfg);
-
-  return ok ? 0 : -1;
 }
 
 /**
@@ -222,10 +208,8 @@ lint_message_graph(const pubsub_adjmap_t *map,
   bitarray_t *subscribed_by = NULL;
   bool ok = true;
 
-  if (get_message_bitarray(map, msg, pub, "published", &published_by) < 0)
-    ok = false;
-  if (get_message_bitarray(map, msg, sub, "subscribed", &subscribed_by) < 0)
-    ok = false;
+  get_message_bitarray(map, pub, &published_by);
+  get_message_bitarray(map, sub, &subscribed_by);
 
   /* Check whether any subsystem is publishing and subscribing the same
    * message. [??]
diff --git a/src/test/test_pubsub_build.c b/src/test/test_pubsub_build.c
index ce5bf6008..021323fbf 100644
--- a/src/test/test_pubsub_build.c
+++ b/src/test/test_pubsub_build.c
@@ -493,48 +493,6 @@ test_pubsub_build_sub_many(void *arg)
   tor_free(sysname);
 }
 
-/* The same subsystem can only declare one publish or subscribe. */
-static void
-test_pubsub_build_pubsub_redundant(void *arg)
-{
-  (void)arg;
-  pubsub_builder_t *b = NULL;
-  dispatch_t *dispatcher = NULL;
-  pubsub_connector_t *c = NULL;
-
-  b = pubsub_builder_new();
-  seed_pubsub_builder_basic(b);
-  pub_binding_t btmp;
-
-  {
-    c = pubsub_connector_for_subsystem(b, get_subsys_id("sys2"));
-    DISPATCH_ADD_SUB(c, main, bunch_of_coconuts);
-    pubsub_add_pub_(c, &btmp, get_channel_id("main"),
-                    get_message_id("yes_we_have_no"),
-                    get_msg_type_id("string"),
-                    0 /* flags */,
-                    "somewhere.c", 22);
-    pubsub_connector_free(c);
-  };
-
-  setup_full_capture_of_logs(LOG_WARN);
-  dispatcher = pubsub_builder_finalize(b, NULL);
-  b = NULL;
-  tt_assert(dispatcher == NULL);
-
-  expect_log_msg_containing(
-    "Message \"yes_we_have_no\" is configured to be published by "
-    "subsystem \"sys2\" more than once.");
-  expect_log_msg_containing(
-    "Message \"bunch_of_coconuts\" is configured to be subscribed by "
-    "subsystem \"sys2\" more than once.");
-
- done:
-  pubsub_builder_free(b);
-  dispatch_free(dispatcher);
-  teardown_capture_of_logs();
-}
-
 /* It's fine to declare the excl flag. */
 static void
 test_pubsub_build_excl_ok(void *arg)
@@ -614,7 +572,6 @@ struct testcase_t pubsub_build_tests[] = {
   T(pubsub_same, TT_FORK),
   T(pubsub_multi, TT_FORK),
   T(sub_many, TT_FORK),
-  T(pubsub_redundant, TT_FORK),
   T(excl_ok, TT_FORK),
   T(excl_bad, TT_FORK),
   END_OF_TESTCASES





More information about the tor-commits mailing list