From 460016428cf27484c333227f534c2e2f73a37fb1 Mon Sep 17 00:00:00 2001 From: Milind Changire Date: Sat, 15 Oct 2016 10:49:19 +0530 Subject: cluster/tier: handle fast demotions Demote files on priority if hi-watermark has been breached and continue to demote until the watermark drops below hi-watermark. Monitor watermark more frequently. Trigger demotion as soon as hi-watermark is breached. Add cluster.tier-emergency-demote-query-limit option to limit number of files returned from the database query for every iteration of tier_migrate_using_query_file(). If watermark hasn't dropped below hi-watermark during the first iteration, the next iteration will be triggered approximately 1 second after tier_demote() returns to the main tiering loop. Update changetimerecorder xlator to handle query for emergency demote mode. Add tier-ctr-interface.h: Move tier and ctr interface specific macros and struct definition from libglusterfs/src/gfdb/gfdb_data_store.h to new header libglusterfs/src/tier-ctr-interface.h Change-Id: If56af78c6c81d37529b9b6e65ae606ba5c99a811 BUG: 1366648 Signed-off-by: Milind Changire Reviewed-on: http://review.gluster.org/15158 Smoke: Gluster Build System CentOS-regression: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Dan Lambright --- .../features/changetimerecorder/src/changetimerecorder.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'xlators/features/changetimerecorder') diff --git a/xlators/features/changetimerecorder/src/changetimerecorder.c b/xlators/features/changetimerecorder/src/changetimerecorder.c index 4e4ea851a86..ffc4625626b 100644 --- a/xlators/features/changetimerecorder/src/changetimerecorder.c +++ b/xlators/features/changetimerecorder/src/changetimerecorder.c @@ -16,6 +16,7 @@ #include "syscall.h" #include "changetimerecorder.h" +#include "tier-ctr-interface.h" /*******************************inode forget***********************************/ @@ -1726,14 +1727,21 @@ ctr_db_query (xlator_t *this, goto out; } if (!ipc_ctr_params->is_promote) { - if (ipc_ctr_params->write_freq_threshold == 0 && - ipc_ctr_params->read_freq_threshold == 0) { + if (ipc_ctr_params->emergency_demote) { + /* emergency demotion mode */ + ret = find_all (conn_node, + ctr_db_query_callback, + (void *)&query_cbk_args, + ipc_ctr_params->query_limit); + } else { + if (ipc_ctr_params->write_freq_threshold == 0 && + ipc_ctr_params->read_freq_threshold == 0) { ret = find_unchanged_for_time ( conn_node, ctr_db_query_callback, (void *)&query_cbk_args, &ipc_ctr_params->time_stamp); - } else { + } else { ret = find_unchanged_for_time_freq ( conn_node, ctr_db_query_callback, @@ -1742,6 +1750,7 @@ ctr_db_query (xlator_t *this, ipc_ctr_params->write_freq_threshold, ipc_ctr_params->read_freq_threshold, _gf_false); + } } } else { if (ipc_ctr_params->write_freq_threshold == 0 && -- cgit