From 48e71fdf66e1fcdd6968474014d71a6e981bfab2 Mon Sep 17 00:00:00 2001 From: James Peach Date: Tue, 13 Sep 2016 14:35:39 -0700 Subject: [PATCH 1/2] TS-4862: Hoist common code to reset a metrics value. --- lib/records/P_RecCore.cc | 77 ++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/lib/records/P_RecCore.cc b/lib/records/P_RecCore.cc index 5ffcfe4c936..564361ab92f 100644 --- a/lib/records/P_RecCore.cc +++ b/lib/records/P_RecCore.cc @@ -805,6 +805,32 @@ RecExecConfigUpdateCbs(unsigned int update_required_type) return update_type; } +static RecErrT +reset_stat_record(RecRecord *rec) +{ + RecErrT err; + + if (i_am_the_record_owner(rec->rec_type)) { + rec_mutex_acquire(&(rec->lock)); + ++(rec->version); + err = RecDataSet(rec->data_type, &(rec->data), &(rec->data_default)) ? REC_ERR_OKAY : REC_ERR_FAIL; + rec_mutex_release(&(rec->lock)); + } else { + RecRecord r2; + + RecRecordInit(&r2); + r2.rec_type = rec->rec_type; + r2.name = rec->name; + r2.data_type = rec->data_type; + r2.data = rec->data_default; + + err = send_reset_message(&r2); + RecRecordFree(&r2); + } + + return err; +} + //------------------------------------------------------------------------ // RecResetStatRecord //------------------------------------------------------------------------ @@ -812,29 +838,10 @@ RecErrT RecResetStatRecord(const char *name) { RecRecord *r1 = NULL; - RecErrT err = REC_ERR_OKAY; + RecErrT err = REC_ERR_FAIL; if (ink_hash_table_lookup(g_records_ht, name, (void **)&r1)) { - if (i_am_the_record_owner(r1->rec_type)) { - rec_mutex_acquire(&(r1->lock)); - ++(r1->version); - RecDataSet(r1->data_type, &(r1->data), &(r1->data_default)); - rec_mutex_release(&(r1->lock)); - err = REC_ERR_OKAY; - } else { - RecRecord r2; - - RecRecordInit(&r2); - r2.rec_type = r1->rec_type; - r2.name = r1->name; - r2.data_type = r1->data_type; - r2.data = r1->data_default; - - err = send_reset_message(&r2); - RecRecordFree(&r2); - } - } else { - err = REC_ERR_FAIL; + err = reset_stat_record(r1); } return err; @@ -855,29 +862,21 @@ RecResetStatRecord(RecT type, bool all) for (i = 0; i < num_records; i++) { RecRecord *r1 = &(g_records[i]); - if (REC_TYPE_IS_STAT(r1->rec_type) && ((type == RECT_NULL) || (r1->rec_type == type)) && - (all || (r1->stat_meta.persist_type != RECP_NON_PERSISTENT)) && (r1->data_type != RECD_STRING)) { - if (i_am_the_record_owner(r1->rec_type)) { - rec_mutex_acquire(&(r1->lock)); - ++(r1->version); - if (!RecDataSet(r1->data_type, &(r1->data), &(r1->data_default))) { - err = REC_ERR_FAIL; - } - rec_mutex_release(&(r1->lock)); - } else { - RecRecord r2; + if (REC_TYPE_IS_STAT(r1->rec_type)) { + continue; + } - RecRecordInit(&r2); - r2.rec_type = r1->rec_type; - r2.name = r1->name; - r2.data_type = r1->data_type; - r2.data = r1->data_default; + if (r1->data_type == RECD_STRING) { + continue; + } - err = send_reset_message(&r2); - RecRecordFree(&r2); + if (((type == RECT_NULL) || (r1->rec_type == type)) && (all || (r1->stat_meta.persist_type != RECP_NON_PERSISTENT))) { + if (reset_stat_record(r1) != REC_ERR_OKAY) { + err = REC_ERR_FAIL; } } } + return err; } From 660ccb808bf8b64900574d73e60a4829a14ab829 Mon Sep 17 00:00:00 2001 From: James Peach Date: Tue, 13 Sep 2016 14:36:37 -0700 Subject: [PATCH 2/2] TS-4862: Fix metrics clearing. Fix the StatsReset API used by "traffic_ctl metrics clear". If the name is empty we need to clear all the metrics. The generic management message marshalling sends NULL as an empty string. --- mgmt/LocalManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mgmt/LocalManager.cc b/mgmt/LocalManager.cc index 58c3e01978b..67cad23d218 100644 --- a/mgmt/LocalManager.cc +++ b/mgmt/LocalManager.cc @@ -120,7 +120,7 @@ LocalManager::clearStats(const char *name) // stats getting cleared by progation of clearing the // cluster stats // - if (name) { + if (name && *name) { RecResetStatRecord(name); } else { RecResetStatRecord(RECT_NULL, true);