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