The branch, 1.2.40 has been updated via b54938c8dfaac046aee9eec92724e7ba2153d65a (commit) via ba78c020dcb525762e5fde943fc60084120884ed (commit) from d967d1bcf72d32312ca765bb467d03ddd4690cb7 (commit)
http://gitweb.samba.org/?p=ctdb.git;a=shortlog;h=1.2.40 - Log ----------------------------------------------------------------- commit b54938c8dfaac046aee9eec92724e7ba2153d65a Author: Ronnie Sahlberg <ronniesahlb...@gmail.com> Date: Thu Mar 29 10:10:04 2012 +1100 New version 1.2.43 commit ba78c020dcb525762e5fde943fc60084120884ed Author: Volker Lendecke <v...@samba.org> Date: Mon Oct 31 13:29:13 2011 +0100 Add CTDB_CONTROL_CHECK_SRVID ----------------------------------------------------------------------- Summary of changes: include/ctdb_private.h | 2 ++ include/ctdb_protocol.h | 1 + packaging/RPM/ctdb.spec.in | 4 +++- server/ctdb_control.c | 3 +++ server/ctdb_daemon.c | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 1 deletions(-) Changeset truncated at 500 lines: diff --git a/include/ctdb_private.h b/include/ctdb_private.h index 8180722..e3b5a20 100644 --- a/include/ctdb_private.h +++ b/include/ctdb_private.h @@ -967,6 +967,8 @@ int ctdb_dispatch_message(struct ctdb_context *ctdb, uint64_t srvid, TDB_DATA da int daemon_register_message_handler(struct ctdb_context *ctdb, uint32_t client_id, uint64_t srvid); int ctdb_deregister_message_handler(struct ctdb_context *ctdb, uint64_t srvid, void *private_data); int daemon_deregister_message_handler(struct ctdb_context *ctdb, uint32_t client_id, uint64_t srvid); +int daemon_check_srvids(struct ctdb_context *ctdb, TDB_DATA indata, + TDB_DATA *outdata); int32_t ctdb_ltdb_enable_seqnum(struct ctdb_context *ctdb, uint32_t db_id); int32_t ctdb_ltdb_update_seqnum(struct ctdb_context *ctdb, uint32_t db_id, uint32_t srcnode); diff --git a/include/ctdb_protocol.h b/include/ctdb_protocol.h index c874148..99acd43 100644 --- a/include/ctdb_protocol.h +++ b/include/ctdb_protocol.h @@ -372,6 +372,7 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0, CTDB_CONTROL_GET_STAT_HISTORY = 127, CTDB_CONTROL_SCHEDULE_FOR_DELETION = 128, CTDB_CONTROL_SET_DB_READONLY = 129, + CTDB_CONTROL_CHECK_SRVIDS = 130, }; /* diff --git a/packaging/RPM/ctdb.spec.in b/packaging/RPM/ctdb.spec.in index 7519be1..9ec9192 100644 --- a/packaging/RPM/ctdb.spec.in +++ b/packaging/RPM/ctdb.spec.in @@ -3,7 +3,7 @@ Name: ctdb Summary: Clustered TDB Vendor: Samba Team Packager: Samba Team <sa...@samba.org> -Version: 1.2.42 +Version: 1.2.43 Release: 1GITHASH Epoch: 0 License: GNU GPL version 3 @@ -144,6 +144,8 @@ development libraries for ctdb %{_libdir}/libctdb.a %changelog +* Thu Mar 29 2012 : Version 1.2.43 + - Add CTDB_CONTROL_CHECK_SRVID control * Mon Mar 12 2012 : Version 1.2.42 - Allow non-readonly database UPDATE_RECORD to create non-existing records or else net command and the registry breaks. diff --git a/server/ctdb_control.c b/server/ctdb_control.c index 9c2f742..5968b3e 100644 --- a/server/ctdb_control.c +++ b/server/ctdb_control.c @@ -263,6 +263,9 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb, case CTDB_CONTROL_DEREGISTER_SRVID: return daemon_deregister_message_handler(ctdb, client_id, srvid); + case CTDB_CONTROL_CHECK_SRVIDS: + return daemon_check_srvids(ctdb, indata, outdata); + case CTDB_CONTROL_ENABLE_SEQNUM: CHECK_CONTROL_DATA_SIZE(sizeof(uint32_t)); return ctdb_ltdb_enable_seqnum(ctdb, *(uint32_t *)indata.dptr); diff --git a/server/ctdb_daemon.c b/server/ctdb_daemon.c index caa70cf..81cec67 100644 --- a/server/ctdb_daemon.c +++ b/server/ctdb_daemon.c @@ -204,6 +204,42 @@ int daemon_deregister_message_handler(struct ctdb_context *ctdb, uint32_t client return ctdb_deregister_message_handler(ctdb, srvid, client); } +int daemon_check_srvids(struct ctdb_context *ctdb, TDB_DATA indata, + TDB_DATA *outdata) +{ + uint64_t *ids; + int i, num_ids; + uint8_t *results; + + if ((indata.dsize % sizeof(uint64_t)) != 0) { + DEBUG(DEBUG_ERR, ("Bad indata in daemon_check_srvids, " + "size=%d\n", (int)indata.dsize)); + return -1; + } + + ids = (uint64_t *)indata.dptr; + num_ids = indata.dsize / 8; + + results = talloc_zero_array(outdata, uint8_t, (num_ids+7)/8); + if (results == NULL) { + DEBUG(DEBUG_ERR, ("talloc failed in daemon_check_srvids\n")); + return -1; + } + for (i=0; i<num_ids; i++) { + struct ctdb_message_list *ml; + for (ml=ctdb->message_list; ml; ml=ml->next) { + if (ml->srvid == ids[i]) { + break; + } + } + if (ml != NULL) { + results[i/8] |= (1 << (i%8)); + } + } + outdata->dptr = (uint8_t *)results; + outdata->dsize = talloc_get_size(results); + return 0; +} /* destroy a ctdb_client -- CTDB repository