------------------------------------------------------------ revno: 459 revision-id: [EMAIL PROTECTED] parent: [EMAIL PROTECTED] committer: Andrew Tridgell <[EMAIL PROTECTED]> branch nick: tridge timestamp: Mon 2007-06-04 20:22:44 +1000 message: make recovery daemon values tunable modified: common/ctdb.c ctdb.c-20061127094323-t50f58d65iaao5of-2 common/ctdb_recoverd.c recoverd.c-20070503213540-bvxuyd9jm1f7ig90-1 common/ctdb_tunables.c ctdb_tunables.c-20070604095258-4m34d7cm1qa7yos9-1 include/ctdb_private.h ctdb_private.h-20061117234101-o3qt14umlg9en8z0-13 === modified file 'common/ctdb.c' --- a/common/ctdb.c 2007-06-04 07:46:37 +0000 +++ b/common/ctdb.c 2007-06-04 10:22:44 +0000 @@ -523,14 +523,7 @@ ctdb->recovery_lock_fd = -1; ctdb->monitoring_mode = CTDB_MONITORING_ACTIVE; - /* set default values for tunables */ - ctdb->tunable.max_redirect_count = 3; - ctdb->tunable.seqnum_frequency = 1; - ctdb->tunable.control_timeout = 60; - ctdb->tunable.traverse_timeout = 20; - ctdb->tunable.monitoring_timeout = 2; - ctdb->tunable.monitoring_limit = 3; - ctdb->tunable.max_lacount = 7; + ctdb_tunables_set_defaults(ctdb); return ctdb; }
=== modified file 'common/ctdb_recoverd.c' --- a/common/ctdb_recoverd.c 2007-06-03 00:29:14 +0000 +++ b/common/ctdb_recoverd.c 2007-06-04 10:22:44 +0000 @@ -35,8 +35,8 @@ timed_out = 1; } -#define CONTROL_TIMEOUT() timeval_current_ofs(5, 0) -#define MONITOR_TIMEOUT() timeval_current_ofs(1, 0) +#define CONTROL_TIMEOUT() timeval_current_ofs(ctdb->tunable.recover_timeout, 0) +#define MONITOR_TIMEOUT() timeval_current_ofs(ctdb->tunable.monitor_frequency, 0) static int set_recovery_mode(struct ctdb_context *ctdb, struct ctdb_node_map *nodemap, uint32_t rec_mode) { @@ -50,7 +50,7 @@ } if (rec_mode == CTDB_RECOVERY_ACTIVE) { - ret = ctdb_ctrl_freeze(ctdb, timeval_current_ofs(5, 0), nodemap->nodes[j].vnn); + ret = ctdb_ctrl_freeze(ctdb, CONTROL_TIMEOUT(), nodemap->nodes[j].vnn); if (ret != 0) { DEBUG(0, (__location__ " Unable to freeze node %u\n", nodemap->nodes[j].vnn)); return -1; @@ -64,7 +64,7 @@ } if (rec_mode == CTDB_RECOVERY_NORMAL) { - ret = ctdb_ctrl_thaw(ctdb, timeval_current_ofs(5, 0), nodemap->nodes[j].vnn); + ret = ctdb_ctrl_thaw(ctdb, CONTROL_TIMEOUT(), nodemap->nodes[j].vnn); if (ret != 0) { DEBUG(0, (__location__ " Unable to thaw node %u\n", nodemap->nodes[j].vnn)); return -1; @@ -652,14 +652,16 @@ /* wait for a few seconds to collect all responses */ timed_out = 0; - event_add_timed(ctdb->ev, mem_ctx, timeval_current_ofs(3, 0), + event_add_timed(ctdb->ev, mem_ctx, timeval_current_ofs(ctdb->tunable.election_timeout, 0), timeout_func, ctdb); while (!timed_out) { event_loop_once(ctdb->ev); } } - +/* + the main monitoring loop + */ void monitor_cluster(struct ctdb_context *ctdb) { uint32_t vnn, num_active, recmode, recmaster; @@ -688,6 +690,14 @@ event_loop_once(ctdb->ev); } + /* get relevant tunables */ + ctdb_ctrl_get_tunable(ctdb, CONTROL_TIMEOUT(), CTDB_CURRENT_NODE, + "RecoverTimeout", &ctdb->tunable.recover_timeout); + ctdb_ctrl_get_tunable(ctdb, CONTROL_TIMEOUT(), CTDB_CURRENT_NODE, + "MonitorFrequency", &ctdb->tunable.monitor_frequency); + ctdb_ctrl_get_tunable(ctdb, CONTROL_TIMEOUT(), CTDB_CURRENT_NODE, + "ElectionTimeout", &ctdb->tunable.election_timeout); + vnn = ctdb_ctrl_getvnn(ctdb, CONTROL_TIMEOUT(), CTDB_CURRENT_NODE); if (vnn == (uint32_t)-1) { DEBUG(0,("Failed to get local vnn - retrying\n")); === modified file 'common/ctdb_tunables.c' --- a/common/ctdb_tunables.c 2007-06-04 09:53:19 +0000 +++ b/common/ctdb_tunables.c 2007-06-04 10:22:44 +0000 @@ -22,17 +22,32 @@ static const struct { const char *name; - size_t offset; + uint32_t default_v; + size_t offset; } tunable_map[] = { - { "MaxRedirectCount", offsetof(struct ctdb_tunable, max_redirect_count) }, - { "SeqnumFrequency", offsetof(struct ctdb_tunable, seqnum_frequency) }, - { "ControlTimeout", offsetof(struct ctdb_tunable, control_timeout) }, - { "TraverseTimeout", offsetof(struct ctdb_tunable, traverse_timeout) }, - { "MonitoringTimeout", offsetof(struct ctdb_tunable, monitoring_timeout) }, - { "MonitoringLimit", offsetof(struct ctdb_tunable, monitoring_limit) }, - { "MaxLACount", offsetof(struct ctdb_tunable, max_lacount) }, + { "MaxRedirectCount", 3, offsetof(struct ctdb_tunable, max_redirect_count) }, + { "SeqnumFrequency", 1, offsetof(struct ctdb_tunable, seqnum_frequency) }, + { "ControlTimeout", 60, offsetof(struct ctdb_tunable, control_timeout) }, + { "TraverseTimeout", 20, offsetof(struct ctdb_tunable, traverse_timeout) }, + { "MonitoringTimeout", 2, offsetof(struct ctdb_tunable, monitoring_timeout) }, + { "MonitoringLimit", 3, offsetof(struct ctdb_tunable, monitoring_limit) }, + { "MaxLACount", 7, offsetof(struct ctdb_tunable, max_lacount) }, + { "RecoverTimeout", 5, offsetof(struct ctdb_tunable, recover_timeout) }, + { "MonitorFrequency", 1, offsetof(struct ctdb_tunable, monitor_frequency) }, + { "ElectionTimeout", 3, offsetof(struct ctdb_tunable, election_timeout) }, }; +/* + set all tunables to defaults + */ +void ctdb_tunables_set_defaults(struct ctdb_context *ctdb) +{ + int i; + for (i=0;i<ARRAY_SIZE(tunable_map);i++) { + *(uint32_t *)(tunable_map[i].offset + (uint8_t*)&ctdb->tunable) = tunable_map[i].default_v; + } +} + /* get a tunable === modified file 'include/ctdb_private.h' --- a/include/ctdb_private.h 2007-06-04 09:53:19 +0000 +++ b/include/ctdb_private.h 2007-06-04 10:22:44 +0000 @@ -47,6 +47,9 @@ uint32_t monitoring_timeout; uint32_t monitoring_limit; uint32_t max_lacount; + uint32_t recover_timeout; + uint32_t monitor_frequency; + uint32_t election_timeout; }; /* @@ -971,4 +974,6 @@ int32_t ctdb_control_set_tunable(struct ctdb_context *ctdb, TDB_DATA indata); int32_t ctdb_control_list_tunables(struct ctdb_context *ctdb, TDB_DATA *outdata); +void ctdb_tunables_set_defaults(struct ctdb_context *ctdb); + #endif