You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2019/04/12 16:56:27 UTC
[trafficserver] branch 8.1.x updated: TCL: Remove TCL dependency
from Alarms
This is an automated email from the ASF dual-hosted git repository.
bcall pushed a commit to branch 8.1.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/8.1.x by this push:
new 21e0da5 TCL: Remove TCL dependency from Alarms
21e0da5 is described below
commit 21e0da5dfc90e2d5facb4a49200279c25a37e84d
Author: Xavier Chi <ch...@gmail.com>
AuthorDate: Mon Oct 15 11:32:21 2018 -0500
TCL: Remove TCL dependency from Alarms
(cherry picked from commit e8f19ed05f811b159fb036a2e928c947c69d01cf)
Conflicts:
mgmt/Alarms.h
---
mgmt/Alarms.cc | 87 ++++++++++++++++++++++-------------------------------
mgmt/Alarms.h | 14 ++++-----
mgmt/api/CoreAPI.cc | 13 ++------
3 files changed, 45 insertions(+), 69 deletions(-)
diff --git a/mgmt/Alarms.cc b/mgmt/Alarms.cc
index 0ab514d..3446056 100644
--- a/mgmt/Alarms.cc
+++ b/mgmt/Alarms.cc
@@ -73,19 +73,19 @@ alarm_script_dir()
Alarms::Alarms()
{
- cur_cb = 0;
- cblist = ink_hash_table_create(InkHashTableKeyType_String);
- local_alarms = ink_hash_table_create(InkHashTableKeyType_String);
- remote_alarms = ink_hash_table_create(InkHashTableKeyType_String);
+ cur_cb = 0;
ink_mutex_init(&mutex);
alarmOEMcount = minOEMkey;
} /* End Alarms::Alarms */
Alarms::~Alarms()
{
- ink_hash_table_destroy(cblist);
- ink_hash_table_destroy_and_free_values(local_alarms);
- ink_hash_table_destroy_and_free_values(remote_alarms);
+ for (auto &&it : local_alarms) {
+ ats_free(it.second);
+ }
+ for (auto &&it : remote_alarms) {
+ ats_free(it.second);
+ }
ink_mutex_destroy(&mutex);
} /* End Alarms::Alarms */
@@ -97,7 +97,7 @@ Alarms::registerCallback(AlarmCallbackFunc func)
ink_mutex_acquire(&mutex);
snprintf(cb_buf, sizeof(cb_buf), "%d", cur_cb++);
Debug("alarm", "[Alarms::registerCallback] Registering Alarms callback");
- ink_hash_table_insert(cblist, cb_buf, (void *)func);
+ cblist.emplace(cb_buf, func);
ink_mutex_release(&mutex);
} /* End Alarms::registerCallback */
@@ -106,7 +106,6 @@ Alarms::isCurrentAlarm(alarm_t a, char *ip)
{
bool ret = false;
char buf[80];
- InkHashTableValue hash_value;
ink_mutex_acquire(&mutex);
if (!ip) {
@@ -115,9 +114,9 @@ Alarms::isCurrentAlarm(alarm_t a, char *ip)
snprintf(buf, sizeof(buf), "%d-%s", a, ip);
}
- if (!ip && ink_hash_table_lookup(local_alarms, buf, &hash_value) != 0) {
+ if (!ip && local_alarms.find(buf) != local_alarms.end()) {
ret = true;
- } else if (ip && ink_hash_table_lookup(remote_alarms, buf, &hash_value) != 0) {
+ } else if (ip && remote_alarms.find(buf) != remote_alarms.end()) {
ret = true;
}
ink_mutex_release(&mutex);
@@ -128,7 +127,6 @@ void
Alarms::resolveAlarm(alarm_t a, char *ip)
{
char buf[80];
- InkHashTableValue hash_value;
ink_mutex_acquire(&mutex);
if (!ip) {
@@ -137,15 +135,15 @@ Alarms::resolveAlarm(alarm_t a, char *ip)
snprintf(buf, sizeof(buf), "%d-%s", a, ip);
}
- if (!ip && ink_hash_table_lookup(local_alarms, buf, &hash_value) != 0) {
- ink_hash_table_delete(local_alarms, buf);
- ats_free(((Alarm *)hash_value)->description);
+ if (!ip && local_alarms.find(buf) != local_alarms.end()) {
+ Alarm *hash_value = local_alarms[buf];
+ local_alarms.erase(buf);
+ ats_free(hash_value->description);
ats_free(hash_value);
- } else if (ip && ink_hash_table_lookup(remote_alarms, buf, &hash_value) != 0) {
- char buf2[1024];
-
- snprintf(buf2, sizeof(buf2), "aresolv: %d\n", a);
- ink_hash_table_delete(remote_alarms, buf);
+ } else if (ip && remote_alarms.find(buf) != remote_alarms.end()) {
+ Alarm *hash_value = remote_alarms[buf];
+ remote_alarms.erase(buf);
+ ats_free(hash_value->description);
ats_free(hash_value);
}
ink_mutex_release(&mutex);
@@ -162,9 +160,6 @@ Alarms::signalAlarm(alarm_t a, const char *desc, const char *ip)
int priority;
char buf[80];
Alarm *atmp;
- InkHashTableValue hash_value;
- InkHashTableEntry *entry;
- InkHashTableIteratorState iterator_state;
/* Assign correct priorities */
switch (a) {
@@ -236,16 +231,16 @@ Alarms::signalAlarm(alarm_t a, const char *desc, const char *ip)
alarmOEMcount++;
}
snprintf(buf, sizeof(buf), "%d", a);
- if (ink_hash_table_lookup(local_alarms, buf, &hash_value) != 0) {
+ if (local_alarms.find(buf) != local_alarms.end()) {
ink_mutex_release(&mutex);
return;
}
} else {
snprintf(buf, sizeof(buf), "%d-%s", a, ip);
- if (ink_hash_table_lookup(remote_alarms, buf, &hash_value) != 0) {
+ if (auto it = remote_alarms.find(buf); it != remote_alarms.end()) {
// Reset the seen flag so that we know the remote alarm is
// still active
- atmp = (Alarm *)hash_value;
+ atmp = it->second;
atmp->seen = true;
ink_mutex_release(&mutex);
return;
@@ -262,11 +257,11 @@ Alarms::signalAlarm(alarm_t a, const char *desc, const char *ip)
if (!ip) {
atmp->local = true;
atmp->inet_address = 0;
- ink_hash_table_insert(local_alarms, (InkHashTableKey)(buf), (atmp));
+ local_alarms.emplace(buf, atmp);
} else {
atmp->local = false;
atmp->inet_address = inet_addr(ip);
- ink_hash_table_insert(remote_alarms, (InkHashTableKey)(buf), (atmp));
+ local_alarms.emplace(buf, atmp);
}
// Swap desc with time-stamped description. Kinda hackish
@@ -290,9 +285,8 @@ Alarms::signalAlarm(alarm_t a, const char *desc, const char *ip)
ink_mutex_release(&mutex);
- for (entry = ink_hash_table_iterator_first(cblist, &iterator_state); entry != nullptr;
- entry = ink_hash_table_iterator_next(cblist, &iterator_state)) {
- AlarmCallbackFunc func = (AlarmCallbackFunc)ink_hash_table_entry_value(remote_alarms, entry);
+ for (auto &&it : cblist) {
+ AlarmCallbackFunc func = it.second;
Debug("alarm", "[Alarms::signalAlarm] invoke callback for %d", a);
(*(func))(a, ip, desc);
}
@@ -312,16 +306,11 @@ Alarms::signalAlarm(alarm_t a, const char *desc, const char *ip)
void
Alarms::resetSeenFlag(char *ip)
{
- InkHashTableEntry *entry;
- InkHashTableIteratorState iterator_state;
-
ink_mutex_acquire(&mutex);
- for (entry = ink_hash_table_iterator_first(remote_alarms, &iterator_state); entry != nullptr;
- entry = ink_hash_table_iterator_next(remote_alarms, &iterator_state)) {
- char *key = (char *)ink_hash_table_entry_key(remote_alarms, entry);
- Alarm *tmp = (Alarm *)ink_hash_table_entry_value(remote_alarms, entry);
-
- if (strstr(key, ip)) {
+ for (auto &&it : remote_alarms) {
+ std::string const &key = it.first;
+ Alarm *tmp = it.second;
+ if (key.find(ip) != std::string::npos) {
tmp->seen = false;
}
}
@@ -337,18 +326,14 @@ Alarms::resetSeenFlag(char *ip)
void
Alarms::clearUnSeen(char *ip)
{
- InkHashTableEntry *entry;
- InkHashTableIteratorState iterator_state;
-
ink_mutex_acquire(&mutex);
- for (entry = ink_hash_table_iterator_first(remote_alarms, &iterator_state); entry != nullptr;
- entry = ink_hash_table_iterator_next(remote_alarms, &iterator_state)) {
- char *key = (char *)ink_hash_table_entry_key(remote_alarms, entry);
- Alarm *tmp = (Alarm *)ink_hash_table_entry_value(remote_alarms, entry);
-
- if (strstr(key, ip)) { /* Make sure alarm is for correct ip */
- if (!tmp->seen) { /* Make sure we did not see it in peer's report */
- ink_hash_table_delete(remote_alarms, key); /* Safe in iterator? */
+ for (auto &&it : remote_alarms) {
+ std::string const &key = it.first;
+ Alarm *tmp = it.second;
+
+ if (key.find(ip) != std::string::npos) { /* Make sure alarm is for correct ip */
+ if (!tmp->seen) { /* Make sure we did not see it in peer's report */
+ remote_alarms.erase(key);
ats_free(tmp->description);
ats_free(tmp);
}
diff --git a/mgmt/Alarms.h b/mgmt/Alarms.h
index 5b83f1e..46e2f9e 100644
--- a/mgmt/Alarms.h
+++ b/mgmt/Alarms.h
@@ -34,11 +34,9 @@
#pragma once
-#include <cstdlib>
-#include <cstdio>
-
-#include "tscore/ink_hash_table.h"
#include "tscore/ink_mutex.h"
+#include <unordered_map>
+#include <string>
class AppVersionInfo;
@@ -116,7 +114,7 @@ public:
void execAlarmBin(const char *desc);
const char *getAlarmText(alarm_t id);
- InkHashTable *
+ std::unordered_map<std::string, Alarm *> const &
getLocalAlarms()
{
return local_alarms;
@@ -126,9 +124,9 @@ private:
int cur_cb;
ink_mutex mutex;
- InkHashTable *cblist;
- InkHashTable *local_alarms;
- InkHashTable *remote_alarms;
+ std::unordered_map<std::string, AlarmCallbackFunc> cblist;
+ std::unordered_map<std::string, Alarm *> local_alarms;
+ std::unordered_map<std::string, Alarm *> remote_alarms;
/* counter is added in order to provide unique keys for OEM alarms,
since an OEM_ALARM type can be associated with many different
diff --git a/mgmt/api/CoreAPI.cc b/mgmt/api/CoreAPI.cc
index e479eb6..842c2b1 100644
--- a/mgmt/api/CoreAPI.cc
+++ b/mgmt/api/CoreAPI.cc
@@ -38,7 +38,6 @@
#include "Rollback.h"
#include "WebMgmtUtils.h"
#include "tscore/Diags.h"
-#include "tscore/ink_hash_table.h"
#include "ExpandingArray.h"
//#include "I_AccCrypto.h"
@@ -790,9 +789,6 @@ EventResolve(const char *event_name)
TSMgmtError
ActiveEventGetMlt(LLQ *active_events)
{
- InkHashTable *event_ht;
- InkHashTableEntry *entry;
- InkHashTableIteratorState iterator_state;
int event_id;
char *event_name;
@@ -803,15 +799,12 @@ ActiveEventGetMlt(LLQ *active_events)
// Alarms stores a hashtable of all active alarms where:
// key = alarm_t,
// value = alarm_description defined in Alarms.cc alarmText[] array
- event_ht = lmgmt->alarm_keeper->getLocalAlarms();
+ std::unordered_map<std::string, Alarm *> const &event_ht = lmgmt->alarm_keeper->getLocalAlarms();
// iterate through hash-table and insert event_name's into active_events list
- for (entry = ink_hash_table_iterator_first(event_ht, &iterator_state); entry != nullptr;
- entry = ink_hash_table_iterator_next(event_ht, &iterator_state)) {
- char *key = (char *)ink_hash_table_entry_key(event_ht, entry);
-
+ for (auto &&it : event_ht) {
// convert key to int; insert into llQ
- event_id = ink_atoi(key);
+ event_id = ink_atoi(it.first.c_str());
event_name = get_event_name(event_id);
if (event_name) {
if (!enqueue(active_events, event_name)) { // returns true if successful