diff options
author | Amitay Isaacs <amitay@gmail.com> | 2014-06-06 15:43:22 +1000 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2014-06-12 05:40:10 +0200 |
commit | e7c72588d187f9505444f48a1c5b19e47b15ccd9 (patch) | |
tree | 35c23d65b437d782e32357642456c7747ebbb0e3 /ctdb/server | |
parent | 27d1137e26703d7fa5fba638e56961384a140eb2 (diff) | |
download | samba-e7c72588d187f9505444f48a1c5b19e47b15ccd9.tar.gz samba-e7c72588d187f9505444f48a1c5b19e47b15ccd9.tar.xz samba-e7c72588d187f9505444f48a1c5b19e47b15ccd9.zip |
ctdb-logging: Move controls handling functions from common to server
Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Diffstat (limited to 'ctdb/server')
-rw-r--r-- | ctdb/server/ctdb_logging.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/ctdb/server/ctdb_logging.c b/ctdb/server/ctdb_logging.c index d33419177bb..f22c9f30ee9 100644 --- a/ctdb/server/ctdb_logging.c +++ b/ctdb/server/ctdb_logging.c @@ -644,5 +644,44 @@ int ctdb_init_tevent_logging(struct ctdb_context *ctdb) return ret; } +void ctdb_collect_log(struct ctdb_context *ctdb, struct ctdb_get_log_addr *log_addr) +{ + TDB_DATA data; - + data = ctdb_log_ringbuffer_collect_log(ctdb, log_addr->level); + + DEBUG(DEBUG_ERR,("Send log to %d:%d\n", (int)log_addr->pnn, (int)log_addr->srvid)); + ctdb_client_send_message(ctdb, log_addr->pnn, log_addr->srvid, data); + + if (data.dptr) { + talloc_free(data.dptr); + } +} + +int32_t ctdb_control_get_log(struct ctdb_context *ctdb, TDB_DATA addr) +{ + struct ctdb_get_log_addr *log_addr = (struct ctdb_get_log_addr *)addr.dptr; + pid_t child; + + /* spawn a child process to marshall the huge log blob and send it back + to the ctdb tool using a MESSAGE + */ + child = ctdb_fork_no_free_ringbuffer(ctdb); + if (child == (pid_t)-1) { + DEBUG(DEBUG_ERR,("Failed to fork a log collector child\n")); + return -1; + } + + if (child == 0) { + ctdb_set_process_name("ctdb_log_collector"); + if (switch_from_server_to_client(ctdb, "log-collector") != 0) { + DEBUG(DEBUG_CRIT, (__location__ "ERROR: failed to switch log collector child into client mode.\n")); + _exit(1); + } + /* do logging here */ + ctdb_collect_log(ctdb, log_addr); + _exit(0); + } + + return 0; +} |