On 03/28/2011 03:41 PM, Angus Salkeld wrote:
> This helps to quickly identify what service the application
> is connected to.
>
> The object will now look like:
> runtime.connections.corosync-objctl:CONFDB:19654:13.service_id=11
> runtime.connections.corosync-objctl:CONFDB:19654:13.client_pid=19654
> etc...
>
> This also makes it clearer to receivers of the dbus/snmp events
> what is going on.
>
> Signed-off-by: Angus Salkeld <[email protected]>
> ---
> exec/coroipcs.c | 26 +++++++++++++++++++-------
> exec/util.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
> exec/util.h | 6 ++++++
> 3 files changed, 72 insertions(+), 7 deletions(-)
>
> diff --git a/exec/coroipcs.c b/exec/coroipcs.c
> index b64c5a9..29655ba 100644
> --- a/exec/coroipcs.c
> +++ b/exec/coroipcs.c
> @@ -1546,15 +1546,27 @@ static void coroipcs_init_conn_stats (
> {
> char conn_name[CS_MAX_NAME_LENGTH];
> char proc_name[CS_MAX_NAME_LENGTH];
> + char int_str[4];
>
> if (conn->client_pid > 0) {
> - if (pid_to_name (conn->client_pid, proc_name,
> sizeof(proc_name)))
> - snprintf (conn_name, sizeof(conn_name), "%s:%d:%d",
> proc_name, conn->client_pid, conn->fd);
> - else
> - snprintf (conn_name, sizeof(conn_name), "%d:%d",
> conn->client_pid, conn->fd);
> - } else
> - snprintf (conn_name, sizeof(conn_name), "%d", conn->fd);
> -
> + if (pid_to_name (conn->client_pid, proc_name,
> sizeof(proc_name))) {
> + snprintf (conn_name, sizeof(conn_name),
> + "%s:%s:%d:%d", proc_name,
> + short_service_name_get(conn->service, int_str,
> 4),
> + conn->client_pid, conn->fd);
> + } else {
> + snprintf (conn_name, sizeof(conn_name),
> + "proc:%s:%d:%d",
> + short_service_name_get(conn->service, int_str,
> 4),
> + conn->client_pid,
> + conn->fd);
> + }
> + } else {
> + snprintf (conn_name, sizeof(conn_name),
> + "proc:%s:pid:%d",
> + short_service_name_get(conn->service, int_str, 4),
> + conn->fd);
> + }
> conn->stats_handle = api->stats_create_connection (conn_name,
> conn->client_pid, conn->fd);
> api->stats_update_value (conn->stats_handle, "service_id",
> &conn->service, sizeof(conn->service));
> diff --git a/exec/util.c b/exec/util.c
> index a3c2b87..9f31dfb 100644
> --- a/exec/util.c
> +++ b/exec/util.c
> @@ -44,6 +44,7 @@
> #include <assert.h>
>
> #include <corosync/corotypes.h>
> +#include <corosync/corodefs.h>
> #include <corosync/list.h>
> #include <corosync/engine/logsys.h>
> #include <corosync/coroipc_types.h>
> @@ -51,6 +52,52 @@
>
> LOGSYS_DECLARE_SUBSYS ("MAIN");
>
> +struct service_names {
> + const char *c_name;
> + int32_t c_val;
> +};
> +
> +static struct service_names servicenames[] =
> +{
> + { "EVS", EVS_SERVICE },
> + { "CLM", CLM_SERVICE },
> + { "AMF", AMF_SERVICE },
> + { "CKPT", CKPT_SERVICE },
> + { "EVT", EVT_SERVICE },
> + { "LCK", LCK_SERVICE },
> + { "MSG", MSG_SERVICE },
> + { "CFG", CFG_SERVICE },
> + { "CPG", CPG_SERVICE },
> + { "CMAN", CMAN_SERVICE },
> + { "PCMK", PCMK_SERVICE },
> + { "CONFDB", CONFDB_SERVICE },
> + { "QUORUM", QUORUM_SERVICE },
> + { "PLOAD", PLOAD_SERVICE },
> + { "TMR", TMR_SERVICE },
> + { "VOTEQUORUM", VOTEQUORUM_SERVICE },
> + { "NTF", NTF_SERVICE },
> + { "AMF", AMF_V2_SERVICE },
> + { "TST", TST_SV1_SERVICE },
> + { "TST", TST_SV2_SERVICE },
> + { "MON", MON_SERVICE },
> + { "WD", WD_SERVICE },
> + { NULL, -1 }
> +};
> +
> +const char * short_service_name_get(uint32_t service_id,
> + char *buf, size_t buf_size)
> +{
> + uint32_t i;
> +
> + for (i = 0; servicenames[i].c_name != NULL; i++) {
> + if (service_id == servicenames[i].c_val) {
> + return (servicenames[i].c_name);
> + }
> + }
> + snprintf(buf, buf_size, "%d", service_id);
> + return buf;
> +}
> +
> /*
> * Compare two names. returns non-zero on match.
> */
> diff --git a/exec/util.h b/exec/util.h
> index 0df192c..a3bb47c 100644
> --- a/exec/util.h
> +++ b/exec/util.h
> @@ -97,4 +97,10 @@ void _corosync_out_of_memory_error (void)
> __attribute__((noreturn));
> extern char *getcs_name_t (cs_name_t *name);
> extern void setcs_name_t (cs_name_t *name, char *str);
> extern int cs_name_tisEqual (cs_name_t *str1, char *str2);
> +/**
> + * Get the short name of a service from the service_id.
> + */
> +const char * short_service_name_get(uint32_t service_id,
> + char *buf, size_t buf_size);
> +
> #endif /* UTIL_H_DEFINED */
Reviewed-by: Steven Dake <[email protected]>
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais