summaryrefslogtreecommitdiffstats
path: root/ctdb/server
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2013-06-25 15:25:16 +1000
committerAmitay Isaacs <amitay@gmail.com>2013-07-10 14:33:18 +1000
commitd36aa928fd3bbdd55d429bb5abe4a67c0f875a8d (patch)
treece37e71241216c5cb8cd29749e3021ef17eb4062 /ctdb/server
parentc0798dfb6429ab8665db0ee69140ff881506384d (diff)
ctdbd: Remove incomplete ctdb_db_statistics_wire structure
Send the ctdb_db_statistics directly instead of first copying it to duplicate ctdb_db_statistics_wire structure. This simplifies the implementation of the control to get database statistics. Signed-off-by: Amitay Isaacs <amitay@gmail.com> (This used to be ctdb commit 26a4653df594d351ca0dc1bd5f5b2f5b0eb0a9a5)
Diffstat (limited to 'ctdb/server')
-rw-r--r--ctdb/server/ctdb_control.c15
-rw-r--r--ctdb/server/ctdb_ltdb_server.c52
2 files changed, 12 insertions, 55 deletions
diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c
index a8771f3176..690608eef6 100644
--- a/ctdb/server/ctdb_control.c
+++ b/ctdb/server/ctdb_control.c
@@ -651,9 +651,18 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
CHECK_CONTROL_DATA_SIZE(size);
return ctdb_control_schedule_for_deletion(ctdb, indata);
}
- case CTDB_CONTROL_GET_DB_STATISTICS:
- CHECK_CONTROL_DATA_SIZE(sizeof(uint32_t));
- return ctdb_control_get_db_statistics(ctdb, *(uint32_t *)indata.dptr, outdata);
+ case CTDB_CONTROL_GET_DB_STATISTICS: {
+ 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;
+ outdata->dptr = (uint8_t *)&ctdb_db->statistics;
+ outdata->dsize = sizeof(ctdb_db->statistics);
+ return 0;
+ }
case CTDB_CONTROL_RELOAD_PUBLIC_IPS:
CHECK_CONTROL_DATA_SIZE(0);
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index d7f741b62c..c8715ee425 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -1498,55 +1498,3 @@ int ctdb_set_db_sticky(struct ctdb_context *ctdb, struct ctdb_db_context *ctdb_d
return 0;
}
-
-int32_t ctdb_control_get_db_statistics(struct ctdb_context *ctdb,
- uint32_t db_id,
- TDB_DATA *outdata)
-{
- struct ctdb_db_context *ctdb_db;
- struct ctdb_db_statistics_wire *stats;
- int i;
- int len;
- char *ptr;
-
- ctdb_db = find_ctdb_db(ctdb, db_id);
- if (!ctdb_db) {
- DEBUG(DEBUG_ERR,("Unknown db_id 0x%x in get_db_statistics\n", db_id));
- return -1;
- }
-
- len = offsetof(struct ctdb_db_statistics_wire, hot_keys);
- for (i = 0; i < MAX_HOT_KEYS; i++) {
- len += 8 + ctdb_db->statistics.hot_keys[i].key.dsize;
- }
-
- stats = talloc_size(outdata, len);
- if (stats == NULL) {
- DEBUG(DEBUG_ERR,("Failed to allocate db statistics wire structure\n"));
- return -1;
- }
-
- stats->db_ro_delegations = ctdb_db->statistics.db_ro_delegations;
- stats->db_ro_revokes = ctdb_db->statistics.db_ro_revokes;
- for (i = 0; i < MAX_COUNT_BUCKETS; i++) {
- stats->hop_count_bucket[i] = ctdb_db->statistics.hop_count_bucket[i];
- }
- stats->num_hot_keys = MAX_HOT_KEYS;
-
- ptr = &stats->hot_keys[0];
- for (i = 0; i < MAX_HOT_KEYS; i++) {
- *(uint32_t *)ptr = ctdb_db->statistics.hot_keys[i].count;
- ptr += 4;
-
- *(uint32_t *)ptr = ctdb_db->statistics.hot_keys[i].key.dsize;
- ptr += 4;
-
- memcpy(ptr, ctdb_db->statistics.hot_keys[i].key.dptr, ctdb_db->statistics.hot_keys[i].key.dsize);
- ptr += ctdb_db->statistics.hot_keys[i].key.dsize;
- }
-
- outdata->dptr = (uint8_t *)stats;
- outdata->dsize = len;
-
- return 0;
-}