diff options
| author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-10-10 15:04:18 +1100 |
|---|---|---|
| committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2009-10-10 15:04:18 +1100 |
| commit | 3219f81710da86de1bf500c451cfb1fa673cee06 (patch) | |
| tree | d81a233fe802b5575a498d06342fcb6e636c7553 | |
| parent | 6cf7d8e131738c9da56b28b6b09fe8800ae8deb2 (diff) | |
add a control to read the db priority from a database
(This used to be ctdb commit ca6d045e419f308f57e74d4c978907afb05ddb85)
| -rw-r--r-- | ctdb/client/ctdb_client.c | 27 | ||||
| -rw-r--r-- | ctdb/include/ctdb.h | 1 | ||||
| -rw-r--r-- | ctdb/include/ctdb_private.h | 1 | ||||
| -rw-r--r-- | ctdb/server/ctdb_control.c | 11 | ||||
| -rw-r--r-- | ctdb/tools/ctdb.c | 26 |
5 files changed, 66 insertions, 0 deletions
diff --git a/ctdb/client/ctdb_client.c b/ctdb/client/ctdb_client.c index ebf28a626b..3134f629b0 100644 --- a/ctdb/client/ctdb_client.c +++ b/ctdb/client/ctdb_client.c @@ -3968,3 +3968,30 @@ int ctdb_ctrl_set_db_priority(struct ctdb_context *ctdb, struct timeval timeout, return 0; } +int ctdb_ctrl_get_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t db_id, uint32_t *priority) +{ + int ret; + int32_t res; + TDB_DATA data; + TALLOC_CTX *tmp_ctx = talloc_new(NULL); + + data.dptr = (uint8_t*)&db_id; + data.dsize = sizeof(db_id); + + ret = ctdb_control(ctdb, destnode, 0, + CTDB_CONTROL_GET_DB_PRIORITY, 0, data, + tmp_ctx, NULL, &res, &timeout, NULL); + if (ret != 0 || res < 0) { + DEBUG(DEBUG_ERR,(__location__ " ctdb_control for set_db_priority failed\n")); + talloc_free(tmp_ctx); + return -1; + } + + if (priority) { + *priority = res; + } + + talloc_free(tmp_ctx); + + return 0; +} diff --git a/ctdb/include/ctdb.h b/ctdb/include/ctdb.h index 4786176de0..839d581327 100644 --- a/ctdb/include/ctdb.h +++ b/ctdb/include/ctdb.h @@ -680,5 +680,6 @@ struct ctdb_db_priority { }; int ctdb_ctrl_set_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, struct ctdb_db_priority *db_prio); +int ctdb_ctrl_get_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t db_id, uint32_t *priority); #endif diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h index 5a72a468bc..d5f44995de 100644 --- a/ctdb/include/ctdb_private.h +++ b/ctdb/include/ctdb_private.h @@ -597,6 +597,7 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0, CTDB_CONTROL_SET_BAN_STATE = 109, CTDB_CONTROL_GET_BAN_STATE = 110, CTDB_CONTROL_SET_DB_PRIORITY = 111, + CTDB_CONTROL_GET_DB_PRIORITY = 112, }; /* diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c index 184758f36a..b962e41837 100644 --- a/ctdb/server/ctdb_control.c +++ b/ctdb/server/ctdb_control.c @@ -530,6 +530,17 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb, CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_db_priority)); return ctdb_control_set_db_priority(ctdb, indata); + case CTDB_CONTROL_GET_DB_PRIORITY: { + uint32_t db_id; + struct ctdb_db_context *ctdb_db; + + CHECK_CONTROL_DATA_SIZE(sizeof(db_id)); + db_id = *(uint32_t *)indata.dptr; + ctdb_db = find_ctdb_db(ctdb, db_id); + if (ctdb_db == NULL) return -1; + return ctdb_db->priority; + } + default: DEBUG(DEBUG_CRIT,(__location__ " Unknown CTDB control opcode %u\n", opcode)); return -1; diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c index b533df1d79..599a882a14 100644 --- a/ctdb/tools/ctdb.c +++ b/ctdb/tools/ctdb.c @@ -2777,6 +2777,31 @@ static int control_setdbprio(struct ctdb_context *ctdb, int argc, const char **a } /* + get db priority + */ +static int control_getdbprio(struct ctdb_context *ctdb, int argc, const char **argv) +{ + uint32_t db_id, priority; + int ret; + + if (argc < 1) { + usage(); + } + + db_id = strtoul(argv[0], NULL, 0); + + ret = ctdb_ctrl_get_db_priority(ctdb, TIMELIMIT(), options.pnn, db_id, &priority); + if (ret != 0) { + DEBUG(DEBUG_ERR,("Unable to get db prio\n")); + return -1; + } + + DEBUG(DEBUG_ERR,("Priority:%u\n", priority)); + + return 0; +} + +/* run an eventscript on a node */ static int control_eventscript(struct ctdb_context *ctdb, int argc, const char **argv) @@ -3453,6 +3478,7 @@ static const struct { { "setlmasterrole", control_setlmasterrole, false, false, "Set LMASTER role to on/off", "{on|off}"}, { "setrecmasterrole", control_setrecmasterrole, false, false, "Set RECMASTER role to on/off", "{on|off}"}, { "setdbprio", control_setdbprio, false, false, "Set DB priority", "<dbid> <prio:1-3>"}, + { "getdbprio", control_getdbprio, false, false, "Get DB priority", "<dbid>"}, }; /* |
