This is an automated email from the ASF dual-hosted git repository.

bcall pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new 08bbf91  TCL: Rmove TCL dependency from UrlRewrite
08bbf91 is described below

commit 08bbf911cb155d3dd635fb60578bb31da7bf2b8d
Author: Xavier Chi <chitianha...@gmail.com>
AuthorDate: Thu Oct 18 11:39:40 2018 -0500

    TCL: Rmove TCL dependency from UrlRewrite
---
 proxy/ReverseProxy.h           |  1 -
 proxy/http/remap/UrlRewrite.cc | 83 +++++++++++++++++++-----------------------
 proxy/http/remap/UrlRewrite.h  | 13 +++++--
 3 files changed, 47 insertions(+), 50 deletions(-)

diff --git a/proxy/ReverseProxy.h b/proxy/ReverseProxy.h
index 8839627..0ba5bc3 100644
--- a/proxy/ReverseProxy.h
+++ b/proxy/ReverseProxy.h
@@ -34,7 +34,6 @@
 
 #include "records/P_RecProcess.h"
 
-#include "tscore/ink_hash_table.h"
 #include "tscore/ink_defs.h"
 #include "HttpTransact.h"
 #include "RemapPluginInfo.h"
diff --git a/proxy/http/remap/UrlRewrite.cc b/proxy/http/remap/UrlRewrite.cc
index 8f2577b..3f3d0ed 100644
--- a/proxy/http/remap/UrlRewrite.cc
+++ b/proxy/http/remap/UrlRewrite.cc
@@ -24,7 +24,6 @@
 #include "UrlRewrite.h"
 #include "ProxyConfig.h"
 #include "ReverseProxy.h"
-#include "UrlMappingPathIndex.h"
 #include "RemapConfig.h"
 #include "tscore/I_Layout.h"
 #include "HttpSM.h"
@@ -67,9 +66,6 @@ UrlRewrite::UrlRewrite()
 {
   ats_scoped_str config_file_path;
 
-  forward_mappings.hash_lookup = reverse_mappings.hash_lookup = 
permanent_redirects.hash_lookup = temporary_redirects.hash_lookup =
-    forward_mappings_with_recv_port.hash_lookup                                
                 = nullptr;
-
   config_file_path = 
RecConfigReadConfigPath("proxy.config.url_remap.filename", "remap.config");
   if (!config_file_path) {
     pmgmt->signalManager(MGMT_SIGNAL_CONFIG_ERROR, "Unable to find 
proxy.config.url_remap.filename");
@@ -156,20 +152,12 @@ UrlRewrite::SetupBackdoorMapping()
 
 /** Deallocated a hash table and all the url_mappings in it. */
 void
-UrlRewrite::_destroyTable(InkHashTable *h_table)
+UrlRewrite::_destroyTable(std::unique_ptr<URLTable> &h_table)
 {
-  InkHashTableEntry *ht_entry;
-  InkHashTableIteratorState ht_iter;
-  UrlMappingPathIndex *item;
-
-  if (h_table != nullptr) { // Iterate over the hash tabel freeing up the all 
the url_mappings
-    //   contained with in
-    for (ht_entry = ink_hash_table_iterator_first(h_table, &ht_iter); ht_entry 
!= nullptr;) {
-      item = (UrlMappingPathIndex *)ink_hash_table_entry_value(h_table, 
ht_entry);
-      delete item;
-      ht_entry = ink_hash_table_iterator_next(h_table, &ht_iter);
+  if (h_table) {
+    for (auto it = h_table->begin(); it != h_table->end(); ++it) {
+      delete it->second;
     }
-    ink_hash_table_destroy(h_table);
   }
 }
 
@@ -205,15 +193,9 @@ UrlRewrite::Print()
 void
 UrlRewrite::PrintStore(MappingsStore &store)
 {
-  if (store.hash_lookup != nullptr) {
-    InkHashTableEntry *ht_entry;
-    InkHashTableIteratorState ht_iter;
-    UrlMappingPathIndex *value;
-
-    for (ht_entry = ink_hash_table_iterator_first(store.hash_lookup, 
&ht_iter); ht_entry != nullptr;) {
-      value = (UrlMappingPathIndex 
*)ink_hash_table_entry_value(store.hash_lookup, ht_entry);
-      value->Print();
-      ht_entry = ink_hash_table_iterator_next(store.hash_lookup, &ht_iter);
+  if (store.hash_lookup) {
+    for (auto it = store.hash_lookup->begin(); it != store.hash_lookup->end(); 
++it) {
+      it->second->Print();
     }
   }
 
@@ -229,13 +211,20 @@ UrlRewrite::PrintStore(MappingsStore &store)
 
 */
 url_mapping *
-UrlRewrite::_tableLookup(InkHashTable *h_table, URL *request_url, int 
request_port, char *request_host, int request_host_len)
+UrlRewrite::_tableLookup(std::unique_ptr<URLTable> &h_table, URL *request_url, 
int request_port, char *request_host,
+                         int request_host_len)
 {
-  UrlMappingPathIndex *ht_entry;
-  url_mapping *um = nullptr;
-  int ht_result;
+  if (!h_table) {
+    h_table.reset(new URLTable);
+  }
+  UrlMappingPathIndex *ht_entry = nullptr;
+  url_mapping *um               = nullptr;
+  int ht_result                 = 0;
 
-  ht_result = ink_hash_table_lookup(h_table, request_host, (void **)&ht_entry);
+  if (auto it = h_table->find(request_host); it != h_table->end()) {
+    ht_result = 1;
+    ht_entry  = it->second;
+  }
 
   if (likely(ht_result && ht_entry)) {
     // for empty host don't do a normal search, get a mapping arbitrarily
@@ -686,11 +675,11 @@ UrlRewrite::BuildTable(const char *path)
   ink_assert(num_rules_redirect_temporary == 0);
   ink_assert(num_rules_forward_with_recv_port == 0);
 
-  forward_mappings.hash_lookup                = 
ink_hash_table_create(InkHashTableKeyType_String);
-  reverse_mappings.hash_lookup                = 
ink_hash_table_create(InkHashTableKeyType_String);
-  permanent_redirects.hash_lookup             = 
ink_hash_table_create(InkHashTableKeyType_String);
-  temporary_redirects.hash_lookup             = 
ink_hash_table_create(InkHashTableKeyType_String);
-  forward_mappings_with_recv_port.hash_lookup = 
ink_hash_table_create(InkHashTableKeyType_String);
+  forward_mappings.hash_lookup.reset(new URLTable);
+  reverse_mappings.hash_lookup.reset(new URLTable);
+  permanent_redirects.hash_lookup.reset(new URLTable);
+  temporary_redirects.hash_lookup.reset(new URLTable);
+  forward_mappings_with_recv_port.hash_lookup.reset(new URLTable);
 
   if (!remap_parse_config(path, this)) {
     // XXX handle file reload error
@@ -699,27 +688,27 @@ UrlRewrite::BuildTable(const char *path)
 
   // Destroy unused tables
   if (num_rules_forward == 0) {
-    forward_mappings.hash_lookup = 
ink_hash_table_destroy(forward_mappings.hash_lookup);
+    forward_mappings.hash_lookup.reset(nullptr);
   } else {
-    if (ink_hash_table_isbound(forward_mappings.hash_lookup, "")) {
+    if (forward_mappings.hash_lookup->find("") != 
forward_mappings.hash_lookup->end()) {
       nohost_rules = 1;
     }
   }
 
   if (num_rules_reverse == 0) {
-    reverse_mappings.hash_lookup = 
ink_hash_table_destroy(reverse_mappings.hash_lookup);
+    reverse_mappings.hash_lookup.reset(nullptr);
   }
 
   if (num_rules_redirect_permanent == 0) {
-    permanent_redirects.hash_lookup = 
ink_hash_table_destroy(permanent_redirects.hash_lookup);
+    permanent_redirects.hash_lookup.reset(nullptr);
   }
 
   if (num_rules_redirect_temporary == 0) {
-    temporary_redirects.hash_lookup = 
ink_hash_table_destroy(temporary_redirects.hash_lookup);
+    temporary_redirects.hash_lookup.reset(nullptr);
   }
 
   if (num_rules_forward_with_recv_port == 0) {
-    forward_mappings_with_recv_port.hash_lookup = 
ink_hash_table_destroy(forward_mappings_with_recv_port.hash_lookup);
+    forward_mappings_with_recv_port.hash_lookup.reset(nullptr);
   }
 
   return 0;
@@ -731,8 +720,11 @@ UrlRewrite::BuildTable(const char *path)
 
 */
 bool
-UrlRewrite::TableInsert(InkHashTable *h_table, url_mapping *mapping, const 
char *src_host)
+UrlRewrite::TableInsert(std::unique_ptr<URLTable> &h_table, url_mapping 
*mapping, const char *src_host)
 {
+  if (!h_table) {
+    h_table.reset(new URLTable);
+  }
   char src_host_tmp_buf[1];
   UrlMappingPathIndex *ht_contents;
 
@@ -741,16 +733,17 @@ UrlRewrite::TableInsert(InkHashTable *h_table, 
url_mapping *mapping, const char
     src_host_tmp_buf[0] = 0;
   }
   // Insert the new_mapping into hash table
-  if (ink_hash_table_lookup(h_table, src_host, (void **)&ht_contents)) {
+  if (auto it = h_table->find(src_host); it != h_table->end()) {
+    ht_contents = it->second;
     // There is already a path index for this host
-    if (ht_contents == nullptr) {
+    if (it->second == nullptr) {
       // why should this happen?
       Warning("Found entry cannot be null!");
       return false;
     }
   } else {
     ht_contents = new UrlMappingPathIndex();
-    ink_hash_table_insert(h_table, src_host, ht_contents);
+    h_table->emplace(src_host, ht_contents);
   }
   if (!ht_contents->Insert(mapping)) {
     Warning("Could not insert new mapping");
diff --git a/proxy/http/remap/UrlRewrite.h b/proxy/http/remap/UrlRewrite.h
index 016ecde..dafb1d3 100644
--- a/proxy/http/remap/UrlRewrite.h
+++ b/proxy/http/remap/UrlRewrite.h
@@ -25,9 +25,12 @@
 
 #include "tscore/ink_config.h"
 #include "UrlMapping.h"
+#include "UrlMappingPathIndex.h"
 #include "HttpTransact.h"
 #include "tscore/Regex.h"
 
+#include <memory>
+
 #define URL_REMAP_FILTER_NONE 0x00000000
 #define URL_REMAP_FILTER_REFERER 0x00000001      /* enable "referer" header 
validation */
 #define URL_REMAP_FILTER_REDIRECT_FMT 0x00010000 /* enable redirect URL 
formatting */
@@ -53,6 +56,7 @@ enum mapping_type {
 class UrlRewrite : public RefCountObj
 {
 public:
+  using URLTable = std::unordered_map<std::string, UrlMappingPathIndex *>;
   UrlRewrite();
   ~UrlRewrite() override;
 
@@ -114,7 +118,7 @@ public:
   typedef Queue<RegexMapping> RegexMappingList;
 
   struct MappingsStore {
-    InkHashTable *hash_lookup;
+    std::unique_ptr<URLTable> hash_lookup;
     RegexMappingList regex_list;
     bool
     empty()
@@ -138,7 +142,7 @@ public:
   bool InsertMapping(mapping_type maptype, url_mapping *new_mapping, 
RegexMapping *reg_map, const char *src_host,
                      bool is_cur_mapping_regex);
 
-  bool TableInsert(InkHashTable *h_table, url_mapping *mapping, const char 
*src_host);
+  bool TableInsert(std::unique_ptr<URLTable> &h_table, url_mapping *mapping, 
const char *src_host);
 
   MappingsStore forward_mappings;
   MappingsStore reverse_mappings;
@@ -195,12 +199,13 @@ private:
 
   bool _mappingLookup(MappingsStore &mappings, URL *request_url, int 
request_port, const char *request_host, int request_host_len,
                       UrlMappingContainer &mapping_container);
-  url_mapping *_tableLookup(InkHashTable *h_table, URL *request_url, int 
request_port, char *request_host, int request_host_len);
+  url_mapping *_tableLookup(std::unique_ptr<URLTable> &h_table, URL 
*request_url, int request_port, char *request_host,
+                            int request_host_len);
   bool _regexMappingLookup(RegexMappingList &regex_mappings, URL *request_url, 
int request_port, const char *request_host,
                            int request_host_len, int rank_ceiling, 
UrlMappingContainer &mapping_container);
   int _expandSubstitutions(int *matches_info, const RegexMapping *reg_map, 
const char *matched_string, char *dest_buf,
                            int dest_buf_size);
-  void _destroyTable(InkHashTable *h_table);
+  void _destroyTable(std::unique_ptr<URLTable> &h_table);
   void _destroyList(RegexMappingList &regexes);
   inline bool _addToStore(MappingsStore &store, url_mapping *new_mapping, 
RegexMapping *reg_map, const char *src_host,
                           bool is_cur_mapping_regex, int &count);

Reply via email to