1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-10 01:18:15 +03:00

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>
This commit is contained in:
Amitay Isaacs 2014-06-06 15:43:22 +10:00 committed by Martin Schwenke
parent 27d1137e26
commit e7c72588d1
2 changed files with 40 additions and 42 deletions

View File

@ -162,47 +162,6 @@ TDB_DATA ctdb_log_ringbuffer_collect_log(TALLOC_CTX *mem_ctx,
return data; return data;
} }
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);
}
ctdb_collect_log(ctdb, log_addr);
_exit(0);
}
return 0;
}
void ctdb_clear_log(struct ctdb_context *ctdb) void ctdb_clear_log(struct ctdb_context *ctdb)
{ {
first_entry = 0; first_entry = 0;

View File

@ -644,5 +644,44 @@ int ctdb_init_tevent_logging(struct ctdb_context *ctdb)
return ret; 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;
}