summaryrefslogtreecommitdiff
path: root/src/irmd/registry.h
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2020-03-08 13:29:21 +0100
committerSander Vrijders <sander@ouroboros.rocks>2020-03-15 14:20:38 +0100
commitc80c93f11dbfb1b0c07f9a6f8b8d91024e5db507 (patch)
treec6ac06aa8841bcb4a403507deda4401594d5cdbe /src/irmd/registry.h
parent8796a612f0600fc973aa908b84ded837f3470512 (diff)
downloadouroboros-c80c93f11dbfb1b0c07f9a6f8b8d91024e5db507.tar.gz
ouroboros-c80c93f11dbfb1b0c07f9a6f8b8d91024e5db507.zip
irm: Revise naming API
This revises the naming API to treat names (or reg_name in the source) as first-class citizens of the architecture. This is more in line with the way they are described in the article. Operations have been added to create/destroy names independently of registering. This was previously done only as part of register, and there was no way to delete a name from the IRMd. The create call now allows specifying a policy for load-balancing incoming flows for a name. The default is the new round-robin load-balancer, the previous behaviour is still available as a spillover load-balancer. The register calls will still create a name if it doesn't exist, with the default round-robin load-balancer. The tools now have a "name" section, so the format is now irm name <operation> <name> ... Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks> Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/irmd/registry.h')
-rw-r--r--src/irmd/registry.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/irmd/registry.h b/src/irmd/registry.h
index 31c1b668..bc9aa23b 100644
--- a/src/irmd/registry.h
+++ b/src/irmd/registry.h
@@ -26,6 +26,7 @@
#include <ouroboros/hash.h>
#include <ouroboros/ipcp.h>
#include <ouroboros/list.h>
+#include <ouroboros/irm.h>
#include "proc_table.h"
#include "prog_table.h"
@@ -54,9 +55,11 @@ struct reg_entry {
struct list_head next;
char * name;
- /* Programs that can be instantiated by the irmd */
+ /* Policies for this name. */
+ enum pol_balance pol_lb; /* Load balance incoming flows. */
+ /* Programs that can be instantiated by the irmd. */
struct list_head reg_progs;
- /* Processes that are listening for this name */
+ /* Processes that are listening for this name. */
struct list_head reg_pids;
enum reg_name_state state;
@@ -72,7 +75,6 @@ void reg_entry_del_prog(struct reg_entry * e,
char * reg_entry_get_prog(struct reg_entry * e);
-
int reg_entry_add_pid(struct reg_entry * e,
pid_t pid);
@@ -84,6 +86,9 @@ void reg_entry_del_pid_el(struct reg_entry * e,
pid_t reg_entry_get_pid(struct reg_entry * e);
+void reg_entry_set_policy(struct reg_entry * e,
+ enum pol_balance p);
+
enum reg_name_state reg_entry_get_state(struct reg_entry * e);
int reg_entry_set_state(struct reg_entry * e,