diff options
Diffstat (limited to 'libglusterfs/src/logging.c')
-rw-r--r-- | libglusterfs/src/logging.c | 276 |
1 files changed, 1 insertions, 275 deletions
diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index a8a7d4dc933..7fbcacb4e44 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -105,298 +105,24 @@ gf_log_init (const char *file) } -static int -dummy_init (xlator_t *xl) -{ - return 0; -} - - -static int -gf_log_notify (xlator_t *this_xl, int event, void *data, ...) -{ - int ret = 0; - - switch (event) { - case GF_EVENT_CHILD_UP: - break; - - case GF_EVENT_CHILD_DOWN: - break; - - default: - ret = default_notify (this_xl, event, data); - break; - } - - return ret; -} - - -/* - * Get a dummy xlator for the purpose of central logging. - * An xlator is needed because a transport cannot exist without - * an xlator. - */ - -static xlator_t * -__get_dummy_xlator (glusterfs_ctx_t *ctx, const char *remote_host, - const char *transport, uint32_t remote_port) -{ - volume_opt_list_t *vol_opt = NULL; - xlator_t * trav = NULL; - - int ret = 0; - - xlator_t * top = NULL; - xlator_t * trans = NULL; - xlator_list_t * parent = NULL; - xlator_list_t * tmp = NULL; - - top = GF_CALLOC (1, sizeof (*top), gf_common_mt_xlator_t); - if (!top) - goto out; - - trans = GF_CALLOC (1, sizeof (*trans), gf_common_mt_xlator_t); - if (!trans) - goto out; - - INIT_LIST_HEAD (&top->volume_options); - INIT_LIST_HEAD (&trans->volume_options); - - top->name = "log-dummy"; - top->ctx = ctx; - top->next = trans; - top->init = dummy_init; - top->notify = gf_log_notify; - top->children = (void *) GF_CALLOC (1, sizeof (*top->children), - gf_common_mt_xlator_list_t); - - if (!top->children) - goto out; - - top->children->xlator = trans; - - trans->name = "log-transport"; - trans->ctx = ctx; - trans->prev = top; - trans->init = dummy_init; - trans->notify = default_notify; - trans->options = get_new_dict (); - - parent = GF_CALLOC (1, sizeof(*parent), gf_common_mt_xlator_list_t); - - if (!parent) - goto out; - - parent->xlator = top; - - if (trans->parents == NULL) - trans->parents = parent; - else { - tmp = trans->parents; - while (tmp->next) - tmp = tmp->next; - tmp->next = parent; - } - - /* TODO: log on failure to set dict */ - if (remote_host) { - ret = dict_set (trans->options, "remote-host", - str_to_data ((char *)remote_host)); - } - - if (remote_port) - ret = dict_set_uint32 (trans->options, "remote-port", - remote_port); - - /* - * 'option remote-subvolume <x>' is needed here even though - * its not used - */ - ret = dict_set_static_ptr (trans->options, "remote-subvolume", - "brick"); - ret = dict_set_static_ptr (trans->options, "disable-handshake", "on"); - ret = dict_set_static_ptr (trans->options, "non-blocking-io", "off"); - - if (transport) { - char *transport_type = GF_CALLOC (1, strlen (transport) + 10, - gf_common_mt_char); - ERR_ABORT (transport_type); - strcpy(transport_type, transport); - - if (strchr (transport_type, ':')) - *(strchr (transport_type, ':')) = '\0'; - - ret = dict_set_dynstr (trans->options, "transport-type", - transport_type); - } - - xlator_set_type (trans, "protocol/client"); - - trav = top; - while (trav) { - /* Get the first volume_option */ - if (!list_empty (&trav->volume_options)) { - list_for_each_entry (vol_opt, - &trav->volume_options, list) - break; - if ((ret = - validate_xlator_volume_options (trav, - vol_opt->given_opt)) < 0) { - gf_log (trav->name, GF_LOG_ERROR, - "validating translator failed"); - return NULL; - } - } - trav = trav->next; - } - - if (xlator_tree_init (top) != 0) - return NULL; - -out: - return top; -} - - /* * Initialize logging to a central server. * If successful, log messages will be written both to * the local file and to the remote server. */ -static xlator_t * logging_xl = NULL; static int __central_log_enabled = 0; -static pthread_t logging_thread; - struct _msg_queue { struct list_head msgs; }; -static struct _msg_queue msg_queue; - -static pthread_cond_t msg_cond; -static pthread_mutex_t msg_cond_mutex; -static pthread_mutex_t msg_queue_mutex; - struct _log_msg { const char *msg; struct list_head queue; }; -int32_t -gf_log_central_cbk (call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno) -{ - struct _log_msg *msg = NULL; - - msg = (struct _log_msg *) cookie; - - GF_FREE ((char *)(msg->msg)); - - STACK_DESTROY (frame->root); - - return 0; -} - - -void * -logging_thread_loop (void *arg) -{ - struct _log_msg *msg; - - call_frame_t *frame = NULL; - - while (1) { - pthread_mutex_lock (&msg_cond_mutex); - { - pthread_cond_wait (&msg_cond, &msg_cond_mutex); - - while (!list_empty (&msg_queue.msgs)) { - pthread_mutex_lock (&msg_queue_mutex); - { - msg = list_entry (msg_queue.msgs.next, - struct _log_msg, - queue); - - list_del_init (&msg->queue); - } - pthread_mutex_unlock (&msg_queue_mutex); - - frame = create_frame (logging_xl, - logging_xl->ctx->pool); - - frame->local = logging_xl->private; - - STACK_WIND_COOKIE (frame, (void *) msg, - gf_log_central_cbk, - logging_xl->children->xlator, - logging_xl->children->xlator->mops->log, - msg->msg); - } - - } - pthread_mutex_unlock (&msg_cond_mutex); - } - - return NULL; -} - - -int -gf_log_central_init (glusterfs_ctx_t *ctx, const char *remote_host, - const char *transport, uint32_t remote_port) -{ - logging_xl = __get_dummy_xlator (ctx, remote_host, transport, - remote_port); - - if (!logging_xl) { - goto out; - } - - __central_log_enabled = 1; - - INIT_LIST_HEAD (&msg_queue.msgs); - - pthread_cond_init (&msg_cond, NULL); - pthread_mutex_init (&msg_cond_mutex, NULL); - pthread_mutex_init (&msg_queue_mutex, NULL); - - pthread_create (&logging_thread, NULL, logging_thread_loop, NULL); - -out: - return 0; -} - - -int -gf_log_central (const char *msg) -{ - struct _log_msg *lm = NULL; - - lm = GF_CALLOC (1, sizeof (*lm), gf_common_mt_log_msg); - - if (!lm) - goto out; - - INIT_LIST_HEAD (&lm->queue); - - lm->msg = gf_strdup (msg); - - pthread_mutex_lock (&msg_queue_mutex); - { - list_add_tail (&lm->queue, &msg_queue.msgs); - } - pthread_mutex_unlock (&msg_queue_mutex); - - pthread_cond_signal (&msg_cond); - -out: - return 0; -} void @@ -526,7 +252,7 @@ unlock: glusterfs_central_log_flag_set (); { - gf_log_central (msg); + //gf_log_central (msg); } glusterfs_central_log_flag_unset (); } |