You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2017/02/21 03:37:56 UTC

[trafficserver] branch master updated (325faa5 -> 39f8e5c)

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

jpeach pushed a change to branch master
in repository https://git-dual.apache.org/repos/asf/trafficserver.git.

      from  325faa5   fix luajit make clean with system without gcc
       new  4bad64e   Add a Result class to carry error status.
       new  a7100ed   Use Result to show Cache configuration parse errors.
       new  5846e26   Rename Macher template parameters to avoid a name collision.
       new  39f8e5c   Replace config_parse_error with Result.

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "adds" were already present in the repository and have only
been added to this reference.


Summary of changes:
 iocore/cache/Cache.cc            |   7 +-
 iocore/cache/I_Store.h           |  10 +-
 iocore/cache/Store.cc            |  22 ++--
 iocore/dns/P_SplitDNSProcessor.h |   2 +-
 iocore/dns/SplitDNS.cc           |  18 +--
 lib/ts/Makefile.am               |  99 ++++++++--------
 lib/ts/MatcherUtils.cc           |  16 ---
 lib/ts/MatcherUtils.h            |  43 +------
 lib/ts/Result.h                  |  71 ++++++++++++
 lib/ts/TextBuffer.cc             |  33 +++---
 lib/ts/TextBuffer.h              |  47 ++++++--
 proxy/CacheControl.cc            |  16 +--
 proxy/CacheControl.h             |   4 +-
 proxy/ControlMatcher.cc          | 241 ++++++++++++++++++++-------------------
 proxy/ControlMatcher.h           |  53 ++++-----
 proxy/Main.cc                    |   6 +-
 proxy/ParentSelection.cc         |  12 +-
 proxy/ParentSelection.h          |   2 +-
 proxy/congest/Congestion.cc      |  31 +++--
 proxy/congest/Congestion.h       |   5 +-
 20 files changed, 389 insertions(+), 349 deletions(-)
 create mode 100644 lib/ts/Result.h

-- 
To stop receiving notification emails like this one, please contact
['"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>'].

[trafficserver] 01/04: Add a Result class to carry error status.

Posted by jp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jpeach pushed a commit to branch master
in repository https://git-dual.apache.org/repos/asf/trafficserver.git

commit 4bad64e4342da41bd82607157b87341a4a66850d
Author: James Peach <jp...@apache.org>
AuthorDate: Sat Feb 18 13:54:31 2017 -0800

    Add a Result class to carry error status.
---
 lib/ts/Makefile.am   | 99 ++++++++++++++++++++++++++--------------------------
 lib/ts/Result.h      | 71 +++++++++++++++++++++++++++++++++++++
 lib/ts/TextBuffer.cc | 33 ++++++++++--------
 lib/ts/TextBuffer.h  | 47 +++++++++++++++++++------
 4 files changed, 176 insertions(+), 74 deletions(-)

diff --git a/lib/ts/Makefile.am b/lib/ts/Makefile.am
index 18f387f..4c25c87 100644
--- a/lib/ts/Makefile.am
+++ b/lib/ts/Makefile.am
@@ -56,68 +56,27 @@ libtsutil_la_SOURCES = \
   ConsistentHash.h \
   ContFlags.cc \
   ContFlags.h \
+  defalloc.h \
   Diags.cc \
   Diags.h \
-  SourceLocation.h \
-  SourceLocation.cc \
   DynArray.h \
   EventNotify.cc \
   EventNotify.h \
+  fastlz.c \
+  fastlz.h \
   Hash.cc \
-  Hash.h \
   HashFNV.cc \
   HashFNV.h \
+  Hash.h \
   HashMD5.cc \
   HashMD5.h \
   HashSip.cc \
   HashSip.h \
   HostLookup.cc \
   HostLookup.h \
-  INK_MD5.h \
-  I_Layout.h \
-  I_Version.h \
-  InkErrno.h \
-  InkErrno.cc \
-  IntrusiveDList.h \
-  IpMap.cc \
-  IpMap.h \
-  IpMapConf.cc \
-  IpMapConf.h \
-  Layout.cc \
-  List.h \
-  MMH.cc \
-  MMH.h \
-  Map.h \
-  MatcherUtils.cc \
-  MatcherUtils.h \
-  ParseRules.cc \
-  ParseRules.h \
-  PriorityQueue.h \
-  Ptr.h \
-  RawHashTable.cc \
-  RawHashTable.h \
-  RbTree.cc \
-  RbTree.h \
-  Regex.cc \
-  Regex.h \
-  Regression.cc \
-  Regression.h \
-  SimpleTokenizer.h \
-  TestBox.h \
-  TextBuffer.cc \
-  TextBuffer.h \
-  Tokenizer.cc \
-  Tokenizer.h \
-  Trie.h \
-  TsBuffer.h \
-  Vec.cc \
-  Vec.h \
-  Version.cc \
-  defalloc.h \
-  fastlz.c \
-  fastlz.h \
   hugepages.cc \
   hugepages.h \
+  I_Layout.h \
   ink_aiocb.h \
   ink_align.h \
   ink_apidefs.h \
@@ -134,6 +93,8 @@ libtsutil_la_SOURCES = \
   ink_code.h \
   ink_defs.cc \
   ink_defs.h \
+  InkErrno.cc \
+  InkErrno.h \
   ink_error.cc \
   ink_error.h \
   ink_exception.h \
@@ -148,6 +109,7 @@ libtsutil_la_SOURCES = \
   ink_inout.h \
   ink_llqueue.h \
   ink_lockfile.h \
+  INK_MD5.h \
   ink_memory.cc \
   ink_memory.h \
   ink_mutex.cc \
@@ -171,10 +133,10 @@ libtsutil_la_SOURCES = \
   ink_sprintf.h \
   ink_stack_trace.cc \
   ink_stack_trace.h \
-  ink_string++.cc \
-  ink_string++.h \
   ink_string.cc \
+  ink_string++.cc \
   ink_string.h \
+  ink_string++.h \
   ink_sys_control.cc \
   ink_sys_control.h \
   ink_syslog.cc \
@@ -185,11 +147,50 @@ libtsutil_la_SOURCES = \
   ink_time.h \
   ink_uuid.cc \
   ink_uuid.h \
+  IntrusiveDList.h \
+  IpMap.cc \
+  IpMapConf.cc \
+  IpMapConf.h \
+  IpMap.h \
+  I_Version.h \
+  Layout.cc \
+  List.h \
   llqueue.cc \
   lockfile.cc \
+  Map.h \
+  MatcherUtils.cc \
+  MatcherUtils.h \
+  MemView.h MemView.cc \
+  MMH.cc \
+  MMH.h \
+  ParseRules.cc \
+  ParseRules.h \
+  PriorityQueue.h \
+  Ptr.h \
+  RawHashTable.cc \
+  RawHashTable.h \
+  RbTree.cc \
+  RbTree.h \
+  Regex.cc \
+  Regex.h \
+  Regression.cc \
+  Regression.h \
+  Result.h \
   signals.cc \
   signals.h \
-  MemView.h MemView.cc \
+  SimpleTokenizer.h \
+  SourceLocation.cc \
+  SourceLocation.h \
+  TestBox.h \
+  TextBuffer.cc \
+  TextBuffer.h \
+  Tokenizer.cc \
+  Tokenizer.h \
+  Trie.h \
+  TsBuffer.h \
+  Vec.cc \
+  Vec.h \
+  Version.cc \
   X509HostnameValidator.cc \
   X509HostnameValidator.h
 
diff --git a/lib/ts/Result.h b/lib/ts/Result.h
new file mode 100644
index 0000000..4cefbd8
--- /dev/null
+++ b/lib/ts/Result.h
@@ -0,0 +1,71 @@
+/** @file
+ *
+ *  A brief file description
+ *
+ *  @section license License
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+#ifndef RESULT_H_77147E59_67CF_4DD7_A58D_ED3502981E87
+#define RESULT_H_77147E59_67CF_4DD7_A58D_ED3502981E87
+
+#include "TextBuffer.h"
+
+// Result is simple error object that carries a success/fail status and
+// a corresponding error message for the failure case. It is a simplified
+// form of Rust's Result object in that we don't carry a return value for
+// the success case. Arguably it ought to just be Error(), but Diags.h
+// already owns that name.
+
+struct Result {
+  bool
+  failed() const
+  {
+    return !buf.empty();
+  }
+
+  const char *
+  message() const
+  {
+    return buf.bufPtr();
+  }
+
+  static Result
+  ok()
+  {
+    return Result();
+  }
+
+  static Result
+  failure(const char *fmt, ...) TS_PRINTFLIKE(1, 2)
+  {
+    Result result;
+    va_list ap;
+
+    va_start(ap, fmt);
+    result.buf.vformat(fmt, ap);
+    va_end(ap);
+
+    return result;
+  }
+
+private:
+  textBuffer buf;
+};
+
+#endif /* RESULT_H_77147E59_67CF_4DD7_A58D_ED3502981E87 */
diff --git a/lib/ts/TextBuffer.cc b/lib/ts/TextBuffer.cc
index f35f49b..0811e77 100644
--- a/lib/ts/TextBuffer.cc
+++ b/lib/ts/TextBuffer.cc
@@ -229,23 +229,19 @@ textBuffer::readFromFD(int fd)
   }
 }
 
-char *
-textBuffer::bufPtr()
-{
-  return bufferStart;
-}
-
 void
-textBuffer::format(const char *fmt, ...)
+textBuffer::vformat(const char *fmt, va_list ap)
 {
-  va_list ap;
-  bool done = false;
-
-  do {
+  for (bool done = false; !done;) {
     int num;
 
-    va_start(ap, fmt);
-    num = vsnprintf(this->nextAdd, this->spaceLeft, fmt, ap);
+    // Copy the args in case the buffer isn't big enough and we need to
+    // try again. Vsnprintf modifies the va_list on each pass.
+    va_list args;
+    va_copy(args, ap);
+
+    num = vsnprintf(this->nextAdd, this->spaceLeft, fmt, args);
+
     va_end(ap);
 
     if ((unsigned)num < this->spaceLeft) {
@@ -260,8 +256,17 @@ textBuffer::format(const char *fmt, ...)
         return;
       }
     }
+  }
+}
+
+void
+textBuffer::format(const char *fmt, ...)
+{
+  va_list ap;
 
-  } while (!done);
+  va_start(ap, fmt);
+  vformat(fmt, ap);
+  va_end(ap);
 }
 
 void
diff --git a/lib/ts/TextBuffer.h b/lib/ts/TextBuffer.h
index d2ee112..5e96cd0 100644
--- a/lib/ts/TextBuffer.h
+++ b/lib/ts/TextBuffer.h
@@ -35,22 +35,47 @@
 #include "ts/ink_platform.h"
 #include "ts/ink_apidefs.h"
 
+#include <stdarg.h>
+
 class textBuffer
 {
 public:
-  inkcoreapi textBuffer(int size);
-  inkcoreapi ~textBuffer();
+  textBuffer() {}
+  textBuffer(const textBuffer &rhs)
+  {
+    if (!rhs.empty()) {
+      copyFrom(rhs.bufPtr(), rhs.spaceUsed());
+    }
+  }
+
+  textBuffer(int size);
+  ~textBuffer();
+
   int rawReadFromFile(int fd);
   int readFromFD(int fd);
-  inkcoreapi int copyFrom(const void *, unsigned num_bytes);
+  int copyFrom(const void *, unsigned num_bytes);
   void reUse();
-  inkcoreapi char *bufPtr();
+  void chomp();
+  void slurp(int);
+
+  char *
+  bufPtr()
+  {
+    return bufferStart;
+  }
+
+  const char *
+  bufPtr() const
+  {
+    return bufferStart;
+  }
 
   void
   clear()
   {
     this->reUse();
   }
+
   void
   resize(unsigned nbytes)
   {
@@ -63,24 +88,24 @@ public:
     return (size_t)(nextAdd - bufferStart);
   };
 
-  void chomp();
-  void slurp(int);
   bool
   empty() const
   {
     return this->spaceUsed() == 0;
   }
+
   void format(const char *fmt, ...) TS_PRINTFLIKE(2, 3);
+  void vformat(const char *fmt, va_list ap);
 
   char *release();
 
 private:
-  textBuffer(const textBuffer &);
   int enlargeBuffer(unsigned N);
-  size_t currentSize;
-  size_t spaceLeft;
-  char *bufferStart;
-  char *nextAdd;
+
+  size_t currentSize = 0;
+  size_t spaceLeft   = 0;
+  char *bufferStart  = nullptr;
+  char *nextAdd      = nullptr;
 };
 
 #endif

-- 
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.

[trafficserver] 03/04: Rename Macher template parameters to avoid a name collision.

Posted by jp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jpeach pushed a commit to branch master
in repository https://git-dual.apache.org/repos/asf/trafficserver.git

commit 5846e26f98f1922771b5accc5a4667580f0eae4e
Author: James Peach <jp...@apache.org>
AuthorDate: Sat Feb 18 14:19:45 2017 -0800

    Rename Macher template parameters to avoid a name collision.
---
 proxy/ControlMatcher.cc | 194 ++++++++++++++++++++++++------------------------
 proxy/ControlMatcher.h  |  44 +++++------
 2 files changed, 119 insertions(+), 119 deletions(-)

diff --git a/proxy/ControlMatcher.cc b/proxy/ControlMatcher.cc
index dba507b..13cb1a7 100644
--- a/proxy/ControlMatcher.cc
+++ b/proxy/ControlMatcher.cc
@@ -87,54 +87,54 @@ HttpRequestData::get_client_ip()
  *   Begin class HostMatcher
  *************************************************************/
 
-template <class Data, class Result>
-HostMatcher<Data, Result>::HostMatcher(const char *name, const char *filename)
+template <class Data, class MatchResult>
+HostMatcher<Data, MatchResult>::HostMatcher(const char *name, const char *filename)
   : data_array(nullptr), array_len(-1), num_el(-1), matcher_name(name), file_name(filename)
 {
   host_lookup = new HostLookup(name);
 }
 
-template <class Data, class Result> HostMatcher<Data, Result>::~HostMatcher()
+template <class Data, class MatchResult> HostMatcher<Data, MatchResult>::~HostMatcher()
 {
   delete host_lookup;
   delete[] data_array;
 }
 
 //
-// template <class Data,class Result>
-// void HostMatcher<Data,Result>::Print()
+// template <class Data,class MatchResult>
+// void HostMatcher<Data,MatchResult>::Print()
 //
 //  Debugging Method
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-HostMatcher<Data, Result>::Print()
+HostMatcher<Data, MatchResult>::Print()
 {
   printf("\tHost/Domain Matcher with %d elements\n", num_el);
   host_lookup->Print(PrintFunc);
 }
 
 //
-// template <class Data,class Result>
-// void HostMatcher<Data,Result>::PrintFunc(void* opaque_data)
+// template <class Data,class MatchResult>
+// void HostMatcher<Data,MatchResult>::PrintFunc(void* opaque_data)
 //
 //  Debugging Method
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-HostMatcher<Data, Result>::PrintFunc(void *opaque_data)
+HostMatcher<Data, MatchResult>::PrintFunc(void *opaque_data)
 {
   Data *d = (Data *)opaque_data;
   d->Print();
 }
 
-// void HostMatcher<Data,Result>::AllocateSpace(int num_entries)
+// void HostMatcher<Data,MatchResult>::AllocateSpace(int num_entries)
 //
 //  Allocates the the HostLeaf and Data arrays
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-HostMatcher<Data, Result>::AllocateSpace(int num_entries)
+HostMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 {
   // Should not have been allocated before
   ink_assert(array_len == -1);
@@ -147,14 +147,14 @@ HostMatcher<Data, Result>::AllocateSpace(int num_entries)
   num_el    = 0;
 }
 
-// void HostMatcher<Data,Result>::Match(RequestData* rdata, Result* result)
+// void HostMatcher<Data,MatchResult>::Match(RequestData* rdata, MatchResult* result)
 //
 //  Searches our tree and updates argresult for each element matching
 //    arg hostname
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-HostMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
+HostMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 {
   void *opaque_ptr;
   Data *data_ptr;
@@ -180,7 +180,7 @@ HostMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
 }
 
 //
-// config_parse_error HostMatcher<Data,Result>::NewEntry(bool domain_record,
+// config_parse_error HostMatcher<Data,MatchResult>::NewEntry(bool domain_record,
 //          char* match_data, char* match_info, int line_num)
 //
 //   Creates a new host/domain record
@@ -189,9 +189,9 @@ HostMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
 //   If not, returns a pointer to malloc allocated error string
 //     that the caller MUST DEALLOCATE
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 config_parse_error
-HostMatcher<Data, Result>::NewEntry(matcher_line *line_info)
+HostMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   config_parse_error error = config_parse_error::ok();
@@ -234,10 +234,10 @@ HostMatcher<Data, Result>::NewEntry(matcher_line *line_info)
  *************************************************************/
 
 //
-// UrlMatcher<Data,Result>::UrlMatcher()
+// UrlMatcher<Data,MatchResult>::UrlMatcher()
 //
-template <class Data, class Result>
-UrlMatcher<Data, Result>::UrlMatcher(const char *name, const char *filename)
+template <class Data, class MatchResult>
+UrlMatcher<Data, MatchResult>::UrlMatcher(const char *name, const char *filename)
   : url_ht(nullptr),
     url_str(nullptr),
     url_value(nullptr),
@@ -251,9 +251,9 @@ UrlMatcher<Data, Result>::UrlMatcher(const char *name, const char *filename)
 }
 
 //
-// UrlMatcher<Data,Result>::~UrlMatcher()
+// UrlMatcher<Data,MatchResult>::~UrlMatcher()
 //
-template <class Data, class Result> UrlMatcher<Data, Result>::~UrlMatcher()
+template <class Data, class MatchResult> UrlMatcher<Data, MatchResult>::~UrlMatcher()
 {
   ink_hash_table_destroy(url_ht);
   for (int i = 0; i < num_el; i++) {
@@ -265,13 +265,13 @@ template <class Data, class Result> UrlMatcher<Data, Result>::~UrlMatcher()
 }
 
 //
-// void UrlMatcher<Data,Result>::Print()
+// void UrlMatcher<Data,MatchResult>::Print()
 //
 //   Debugging function
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-UrlMatcher<Data, Result>::Print()
+UrlMatcher<Data, MatchResult>::Print()
 {
   printf("\tUrl Matcher with %d elements\n", num_el);
   for (int i = 0; i < num_el; i++) {
@@ -281,11 +281,11 @@ UrlMatcher<Data, Result>::Print()
 }
 
 //
-// void UrlMatcher<Data,Result>::AllocateSpace(int num_entries)
+// void UrlMatcher<Data,MatchResult>::AllocateSpace(int num_entries)
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-UrlMatcher<Data, Result>::AllocateSpace(int num_entries)
+UrlMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 {
   // Should not have been allocated before
   ink_assert(array_len == -1);
@@ -299,11 +299,11 @@ UrlMatcher<Data, Result>::AllocateSpace(int num_entries)
 }
 
 //
-// config_parse_error UrlMatcher<Data,Result>::NewEntry(matcher_line* line_info)
+// config_parse_error UrlMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 config_parse_error
-UrlMatcher<Data, Result>::NewEntry(matcher_line *line_info)
+UrlMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   char *pattern;
@@ -344,14 +344,14 @@ UrlMatcher<Data, Result>::NewEntry(matcher_line *line_info)
 }
 
 //
-// void UrlMatcher<Data,Result>::Match(RD* rdata, Result* result)
+// void UrlMatcher<Data,MatchResult>::Match(RD* rdata, MatchResult* result)
 //
 //   Coduncts a linear search through the regex array and
 //     updates arg result for each regex that matches arg URL
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-UrlMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
+UrlMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 {
   char *url_str;
   int *value;
@@ -379,18 +379,18 @@ UrlMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
 }
 
 //
-// RegexMatcher<Data,Result>::RegexMatcher()
+// RegexMatcher<Data,MatchResult>::RegexMatcher()
 //
-template <class Data, class Result>
-RegexMatcher<Data, Result>::RegexMatcher(const char *name, const char *filename)
+template <class Data, class MatchResult>
+RegexMatcher<Data, MatchResult>::RegexMatcher(const char *name, const char *filename)
   : re_array(nullptr), re_str(nullptr), data_array(nullptr), array_len(-1), num_el(-1), matcher_name(name), file_name(filename)
 {
 }
 
 //
-// RegexMatcher<Data,Result>::~RegexMatcher()
+// RegexMatcher<Data,MatchResult>::~RegexMatcher()
 //
-template <class Data, class Result> RegexMatcher<Data, Result>::~RegexMatcher()
+template <class Data, class MatchResult> RegexMatcher<Data, MatchResult>::~RegexMatcher()
 {
   for (int i = 0; i < num_el; i++) {
     pcre_free(re_array[i]);
@@ -402,13 +402,13 @@ template <class Data, class Result> RegexMatcher<Data, Result>::~RegexMatcher()
 }
 
 //
-// void RegexMatcher<Data,Result>::Print()
+// void RegexMatcher<Data,MatchResult>::Print()
 //
 //   Debugging function
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-RegexMatcher<Data, Result>::Print()
+RegexMatcher<Data, MatchResult>::Print()
 {
   printf("\tRegex Matcher with %d elements\n", num_el);
   for (int i = 0; i < num_el; i++) {
@@ -418,11 +418,11 @@ RegexMatcher<Data, Result>::Print()
 }
 
 //
-// void RegexMatcher<Data,Result>::AllocateSpace(int num_entries)
+// void RegexMatcher<Data,MatchResult>::AllocateSpace(int num_entries)
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-RegexMatcher<Data, Result>::AllocateSpace(int num_entries)
+RegexMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 {
   // Should not have been allocated before
   ink_assert(array_len == -1);
@@ -440,11 +440,11 @@ RegexMatcher<Data, Result>::AllocateSpace(int num_entries)
 }
 
 //
-// config_parse_error RegexMatcher<Data,Result>::NewEntry(matcher_line* line_info)
+// config_parse_error RegexMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 config_parse_error
-RegexMatcher<Data, Result>::NewEntry(matcher_line *line_info)
+RegexMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   char *pattern;
@@ -494,14 +494,14 @@ RegexMatcher<Data, Result>::NewEntry(matcher_line *line_info)
 }
 
 //
-// void RegexMatcher<Data,Result>::Match(RequestData* rdata, Result* result)
+// void RegexMatcher<Data,MatchResult>::Match(RequestData* rdata, MatchResult* result)
 //
 //   Coduncts a linear search through the regex array and
 //     updates arg result for each regex that matches arg URL
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-RegexMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
+RegexMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 {
   char *url_str;
   int r;
@@ -538,23 +538,23 @@ RegexMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
 }
 
 //
-// HostRegexMatcher<Data,Result>::HostRegexMatcher()
+// HostRegexMatcher<Data,MatchResult>::HostRegexMatcher()
 //
-template <class Data, class Result>
-HostRegexMatcher<Data, Result>::HostRegexMatcher(const char *name, const char *filename)
-  : RegexMatcher<Data, Result>(name, filename)
+template <class Data, class MatchResult>
+HostRegexMatcher<Data, MatchResult>::HostRegexMatcher(const char *name, const char *filename)
+  : RegexMatcher<Data, MatchResult>(name, filename)
 {
 }
 
 //
-// void HostRegexMatcher<Data,Result>::Match(RequestData* rdata, Result* result)
+// void HostRegexMatcher<Data,MatchResult>::Match(RequestData* rdata, MatchResult* result)
 //
 //   Conducts a linear search through the regex array and
 //     updates arg result for each regex that matches arg host_regex
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-HostRegexMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
+HostRegexMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 {
   const char *url_str;
   int r;
@@ -586,28 +586,28 @@ HostRegexMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
 }
 
 //
-// IpMatcher<Data,Result>::IpMatcher()
+// IpMatcher<Data,MatchResult>::IpMatcher()
 //
-template <class Data, class Result>
-IpMatcher<Data, Result>::IpMatcher(const char *name, const char *filename)
+template <class Data, class MatchResult>
+IpMatcher<Data, MatchResult>::IpMatcher(const char *name, const char *filename)
   : data_array(nullptr), array_len(-1), num_el(-1), matcher_name(name), file_name(filename)
 {
 }
 
 //
-// IpMatcher<Data,Result>::~IpMatcher()
+// IpMatcher<Data,MatchResult>::~IpMatcher()
 //
-template <class Data, class Result> IpMatcher<Data, Result>::~IpMatcher()
+template <class Data, class MatchResult> IpMatcher<Data, MatchResult>::~IpMatcher()
 {
   delete[] data_array;
 }
 
 //
-// void IpMatcher<Data,Result>::AllocateSpace(int num_entries)
+// void IpMatcher<Data,MatchResult>::AllocateSpace(int num_entries)
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-IpMatcher<Data, Result>::AllocateSpace(int num_entries)
+IpMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 {
   // Should not have been allocated before
   ink_assert(array_len == -1);
@@ -619,7 +619,7 @@ IpMatcher<Data, Result>::AllocateSpace(int num_entries)
 }
 
 //
-// config_parse_error IpMatcher<Data,Result>::NewEntry(matcher_line* line_info)
+// config_parse_error IpMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
 //
 //    Inserts a range the ip lookup table.
 //        Creates new table levels as needed
@@ -628,9 +628,9 @@ IpMatcher<Data, Result>::AllocateSpace(int num_entries)
 //     allocated error string which the CALLEE is responsible
 //     for deallocating
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 config_parse_error
-IpMatcher<Data, Result>::NewEntry(matcher_line *line_info)
+IpMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   const char *errptr;
@@ -673,11 +673,11 @@ IpMatcher<Data, Result>::NewEntry(matcher_line *line_info)
 }
 
 //
-// void IpMatcherData,Result>::Match(in_addr_t addr, RequestData* rdata, Result* result)
+// void IpMatcherData,MatchResult>::Match(in_addr_t addr, RequestData* rdata, MatchResult* result)
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-IpMatcher<Data, Result>::Match(sockaddr const *addr, RequestData *rdata, Result *result)
+IpMatcher<Data, MatchResult>::Match(sockaddr const *addr, RequestData *rdata, MatchResult *result)
 {
   void *raw;
   if (ip_map.contains(addr, &raw)) {
@@ -687,9 +687,9 @@ IpMatcher<Data, Result>::Match(sockaddr const *addr, RequestData *rdata, Result
   }
 }
 
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-IpMatcher<Data, Result>::Print()
+IpMatcher<Data, MatchResult>::Print()
 {
   printf("\tIp Matcher with %d elements, %zu ranges.\n", num_el, ip_map.getCount());
   for (IpMap::iterator spot(ip_map.begin()), limit(ip_map.end()); spot != limit; ++spot) {
@@ -699,8 +699,8 @@ IpMatcher<Data, Result>::Print()
   }
 }
 
-template <class Data, class Result>
-ControlMatcher<Data, Result>::ControlMatcher(const char *file_var, const char *name, const matcher_tags *tags, int flags_in)
+template <class Data, class MatchResult>
+ControlMatcher<Data, MatchResult>::ControlMatcher(const char *file_var, const char *name, const matcher_tags *tags, int flags_in)
 {
   flags = flags_in;
   ink_assert(flags & (ALLOW_HOST_TABLE | ALLOW_REGEX_TABLE | ALLOW_URL_TABLE | ALLOW_IP_TABLE));
@@ -731,7 +731,7 @@ ControlMatcher<Data, Result>::ControlMatcher(const char *file_var, const char *n
   }
 }
 
-template <class Data, class Result> ControlMatcher<Data, Result>::~ControlMatcher()
+template <class Data, class MatchResult> ControlMatcher<Data, MatchResult>::~ControlMatcher()
 {
   delete reMatch;
   delete urlMatch;
@@ -740,13 +740,13 @@ template <class Data, class Result> ControlMatcher<Data, Result>::~ControlMatche
   delete hrMatch;
 }
 
-// void ControlMatcher<Data, Result>::Print()
+// void ControlMatcher<Data, MatchResult>::Print()
 //
 //   Debugging method
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-ControlMatcher<Data, Result>::Print()
+ControlMatcher<Data, MatchResult>::Print()
 {
   printf("Control Matcher Table: %s\n", matcher_name);
   if (hostMatch != nullptr) {
@@ -766,14 +766,14 @@ ControlMatcher<Data, Result>::Print()
   }
 }
 
-// void ControlMatcher<Data, Result>::Match(RequestData* rdata
-//                                          Result* result)
+// void ControlMatcher<Data, MatchResult>::Match(RequestData* rdata
+//                                          MatchResult* result)
 //
-//   Queries each table for the Result*
+//   Queries each table for the MatchResult*
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 void
-ControlMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
+ControlMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 {
   if (hostMatch != nullptr) {
     hostMatch->Match(rdata, result);
@@ -797,9 +797,9 @@ ControlMatcher<Data, Result>::Match(RequestData *rdata, Result *result)
 //    Reads the cache.config file and build the records array
 //      from it
 //
-template <class Data, class Result>
+template <class Data, class MatchResult>
 int
-ControlMatcher<Data, Result>::BuildTableFromString(char *file_buf)
+ControlMatcher<Data, MatchResult>::BuildTableFromString(char *file_buf)
 {
   // Table build locals
   Tokenizer bufTok("\n");
@@ -893,27 +893,27 @@ ControlMatcher<Data, Result>::BuildTableFromString(char *file_buf)
   }
   // Now allocate space for the record pointers
   if ((flags & ALLOW_REGEX_TABLE) && regex > 0) {
-    reMatch = new RegexMatcher<Data, Result>(matcher_name, config_file_path);
+    reMatch = new RegexMatcher<Data, MatchResult>(matcher_name, config_file_path);
     reMatch->AllocateSpace(regex);
   }
 
   if ((flags & ALLOW_URL_TABLE) && url > 0) {
-    urlMatch = new UrlMatcher<Data, Result>(matcher_name, config_file_path);
+    urlMatch = new UrlMatcher<Data, MatchResult>(matcher_name, config_file_path);
     urlMatch->AllocateSpace(url);
   }
 
   if ((flags & ALLOW_HOST_TABLE) && hostDomain > 0) {
-    hostMatch = new HostMatcher<Data, Result>(matcher_name, config_file_path);
+    hostMatch = new HostMatcher<Data, MatchResult>(matcher_name, config_file_path);
     hostMatch->AllocateSpace(hostDomain);
   }
 
   if ((flags & ALLOW_IP_TABLE) && ip > 0) {
-    ipMatch = new IpMatcher<Data, Result>(matcher_name, config_file_path);
+    ipMatch = new IpMatcher<Data, MatchResult>(matcher_name, config_file_path);
     ipMatch->AllocateSpace(ip);
   }
 
   if ((flags & ALLOW_HOST_REGEX_TABLE) && hostregex > 0) {
-    hrMatch = new HostRegexMatcher<Data, Result>(matcher_name, config_file_path);
+    hrMatch = new HostRegexMatcher<Data, MatchResult>(matcher_name, config_file_path);
     hrMatch->AllocateSpace(hostregex);
   }
   // Traverse the list and build the records table
@@ -959,9 +959,9 @@ ControlMatcher<Data, Result>::BuildTableFromString(char *file_buf)
   return numEntries;
 }
 
-template <class Data, class Result>
+template <class Data, class MatchResult>
 int
-ControlMatcher<Data, Result>::BuildTable()
+ControlMatcher<Data, MatchResult>::BuildTable()
 {
   // File I/O Locals
   char *file_buf;
diff --git a/proxy/ControlMatcher.h b/proxy/ControlMatcher.h
index 9d7a530..0501dbb 100644
--- a/proxy/ControlMatcher.h
+++ b/proxy/ControlMatcher.h
@@ -165,12 +165,12 @@ public:
   URL **cache_info_parent_selection_url;
 };
 
-template <class Data, class Result> class UrlMatcher
+template <class Data, class MatchResult> class UrlMatcher
 {
 public:
   UrlMatcher(const char *name, const char *filename);
   ~UrlMatcher();
-  void Match(RequestData *rdata, Result *result);
+  void Match(RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
   config_parse_error NewEntry(matcher_line *line_info);
   void Print();
@@ -197,12 +197,12 @@ protected:
   const char *file_name;    // Used for Debug/Warning/Error messages
 };
 
-template <class Data, class Result> class RegexMatcher
+template <class Data, class MatchResult> class RegexMatcher
 {
 public:
   RegexMatcher(const char *name, const char *filename);
   ~RegexMatcher();
-  void Match(RequestData *rdata, Result *result);
+  void Match(RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
   config_parse_error NewEntry(matcher_line *line_info);
   void Print();
@@ -228,19 +228,19 @@ protected:
   const char *file_name;    // Used for Debug/Warning/Error messages
 };
 
-template <class Data, class Result> class HostRegexMatcher : public RegexMatcher<Data, Result>
+template <class Data, class MatchResult> class HostRegexMatcher : public RegexMatcher<Data, MatchResult>
 {
 public:
   HostRegexMatcher(const char *name, const char *filename);
-  void Match(RequestData *rdata, Result *result);
+  void Match(RequestData *rdata, MatchResult *result);
 };
 
-template <class Data, class Result> class HostMatcher
+template <class Data, class MatchResult> class HostMatcher
 {
 public:
   HostMatcher(const char *name, const char *filename);
   ~HostMatcher();
-  void Match(RequestData *rdata, Result *result);
+  void Match(RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
   config_parse_error NewEntry(matcher_line *line_info);
   void Print();
@@ -271,12 +271,12 @@ private:
   const char *file_name;    // Used for Debug/Warning/Error messages
 };
 
-template <class Data, class Result> class IpMatcher
+template <class Data, class MatchResult> class IpMatcher
 {
 public:
   IpMatcher(const char *name, const char *filename);
   ~IpMatcher();
-  void Match(sockaddr const *ip_addr, RequestData *rdata, Result *result);
+  void Match(sockaddr const *ip_addr, RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
   config_parse_error NewEntry(matcher_line *line_info);
   void Print();
@@ -308,7 +308,7 @@ public:
 #define ALLOW_URL_TABLE 1 << 4
 #define DONT_BUILD_TABLE 1 << 5 // for testing
 
-template <class Data, class Result> class ControlMatcher
+template <class Data, class MatchResult> class ControlMatcher
 {
 public:
   // Parameter name must not be deallocated before this
@@ -318,7 +318,7 @@ public:
   ~ControlMatcher();
   int BuildTable();
   int BuildTableFromString(char *str);
-  void Match(RequestData *rdata, Result *result);
+  void Match(RequestData *rdata, MatchResult *result);
   void Print();
 
   int
@@ -326,38 +326,38 @@ public:
   {
     return m_numEntries;
   }
-  HostMatcher<Data, Result> *
+  HostMatcher<Data, MatchResult> *
   getHostMatcher()
   {
     return hostMatch;
   }
-  RegexMatcher<Data, Result> *
+  RegexMatcher<Data, MatchResult> *
   getReMatcher()
   {
     return reMatch;
   }
-  UrlMatcher<Data, Result> *
+  UrlMatcher<Data, MatchResult> *
   getUrlMatcher()
   {
     return urlMatch;
   }
-  IpMatcher<Data, Result> *
+  IpMatcher<Data, MatchResult> *
   getIPMatcher()
   {
     return ipMatch;
   }
-  HostRegexMatcher<Data, Result> *
+  HostRegexMatcher<Data, MatchResult> *
   getHrMatcher()
   {
     return hrMatch;
   }
 
   // private:
-  RegexMatcher<Data, Result> *reMatch;
-  UrlMatcher<Data, Result> *urlMatch;
-  HostMatcher<Data, Result> *hostMatch;
-  IpMatcher<Data, Result> *ipMatch;
-  HostRegexMatcher<Data, Result> *hrMatch;
+  RegexMatcher<Data, MatchResult> *reMatch;
+  UrlMatcher<Data, MatchResult> *urlMatch;
+  HostMatcher<Data, MatchResult> *hostMatch;
+  IpMatcher<Data, MatchResult> *ipMatch;
+  HostRegexMatcher<Data, MatchResult> *hrMatch;
   const matcher_tags *config_tags;
   char config_file_path[PATH_NAME_MAX];
   int flags;

-- 
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.

[trafficserver] 04/04: Replace config_parse_error with Result.

Posted by jp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jpeach pushed a commit to branch master
in repository https://git-dual.apache.org/repos/asf/trafficserver.git

commit 39f8e5c057386bffd51f5ba2284d2e715543e100
Author: James Peach <jp...@apache.org>
AuthorDate: Sat Feb 18 14:41:53 2017 -0800

    Replace config_parse_error with Result.
---
 iocore/dns/P_SplitDNSProcessor.h |  2 +-
 iocore/dns/SplitDNS.cc           | 18 ++++++-------
 lib/ts/MatcherUtils.cc           | 16 ------------
 lib/ts/MatcherUtils.h            | 43 +------------------------------
 proxy/CacheControl.cc            | 16 ++++++------
 proxy/CacheControl.h             |  4 +--
 proxy/ControlMatcher.cc          | 55 ++++++++++++++++++++--------------------
 proxy/ControlMatcher.h           |  9 ++++---
 proxy/ParentSelection.cc         | 12 ++++-----
 proxy/ParentSelection.h          |  2 +-
 proxy/congest/Congestion.cc      | 31 +++++++++++-----------
 proxy/congest/Congestion.h       |  5 ++--
 12 files changed, 79 insertions(+), 134 deletions(-)

diff --git a/iocore/dns/P_SplitDNSProcessor.h b/iocore/dns/P_SplitDNSProcessor.h
index 33e9947..16481b4 100644
--- a/iocore/dns/P_SplitDNSProcessor.h
+++ b/iocore/dns/P_SplitDNSProcessor.h
@@ -196,7 +196,7 @@ public:
   SplitDNSRecord();
   ~SplitDNSRecord();
 
-  config_parse_error Init(matcher_line *line_info);
+  Result Init(matcher_line *line_info);
 
   const char *ProcessDNSHosts(char *val);
   const char *ProcessDomainSrchList(char *val);
diff --git a/iocore/dns/SplitDNS.cc b/iocore/dns/SplitDNS.cc
index 4a043d0..9bd69f0 100644
--- a/iocore/dns/SplitDNS.cc
+++ b/iocore/dns/SplitDNS.cc
@@ -428,7 +428,7 @@ SplitDNSRecord::ProcessDomainSrchList(char *val)
    matcher_line* line_info - contains parsed label/value pairs
    of the current split.config line
    -------------------------------------------------------------- */
-config_parse_error
+Result
 SplitDNSRecord::Init(matcher_line *line_info)
 {
   const char *errPtr = nullptr;
@@ -447,7 +447,7 @@ SplitDNSRecord::Init(matcher_line *line_info)
 
     if (strcasecmp(label, "def_domain") == 0) {
       if (nullptr != (errPtr = ProcessDefDomain(val))) {
-        return config_parse_error("%s %s at line %d", modulePrefix, errPtr, line_num);
+        return Result::failure("%s %s at line %d", modulePrefix, errPtr, line_num);
       }
       line_info->line[0][i] = nullptr;
       line_info->num_el--;
@@ -456,7 +456,7 @@ SplitDNSRecord::Init(matcher_line *line_info)
 
     if (strcasecmp(label, "search_list") == 0) {
       if (nullptr != (errPtr = ProcessDomainSrchList(val))) {
-        return config_parse_error("%s %s at line %d", modulePrefix, errPtr, line_num);
+        return Result::failure("%s %s at line %d", modulePrefix, errPtr, line_num);
       }
       line_info->line[0][i] = nullptr;
       line_info->num_el--;
@@ -465,7 +465,7 @@ SplitDNSRecord::Init(matcher_line *line_info)
 
     if (strcasecmp(label, "named") == 0) {
       if (nullptr != (errPtr = ProcessDNSHosts(val))) {
-        return config_parse_error("%s %s at line %d", modulePrefix, errPtr, line_num);
+        return Result::failure("%s %s at line %d", modulePrefix, errPtr, line_num);
       }
       line_info->line[0][i] = nullptr;
       line_info->num_el--;
@@ -474,7 +474,7 @@ SplitDNSRecord::Init(matcher_line *line_info)
   }
 
   if (!ats_is_ip(&m_servers.x_server_ip[0].sa)) {
-    return config_parse_error("%s No server specified in splitdns.config at line %d", modulePrefix, line_num);
+    return Result::failure("%s No server specified in splitdns.config at line %d", modulePrefix, line_num);
   }
 
   DNSHandler *dnsH  = new DNSHandler;
@@ -484,8 +484,8 @@ SplitDNSRecord::Init(matcher_line *line_info)
   if ((-1 == ink_res_init(res, m_servers.x_server_ip, m_dnsSrvr_cnt, dns_search, m_servers.x_def_domain,
                           m_servers.x_domain_srch_list, nullptr))) {
     char ab[INET6_ADDRPORTSTRLEN];
-    return config_parse_error("Failed to build res record for the servers %s ...",
-                              ats_ip_ntop(&m_servers.x_server_ip[0].sa, ab, sizeof ab));
+    return Result::failure("Failed to build res record for the servers %s ...",
+                           ats_ip_ntop(&m_servers.x_server_ip[0].sa, ab, sizeof ab));
   }
 
   dnsH->m_res = res;
@@ -503,11 +503,11 @@ SplitDNSRecord::Init(matcher_line *line_info)
   if (line_info->num_el > 0) {
     tmp = ProcessModifiers(line_info);
     if (tmp != nullptr) {
-      return config_parse_error("%s %s at line %d in splitdns.config", modulePrefix, tmp, line_num);
+      return Result::failure("%s %s at line %d in splitdns.config", modulePrefix, tmp, line_num);
     }
   }
 
-  return config_parse_error::ok();
+  return Result::ok();
 }
 
 /* --------------------------------------------------------------
diff --git a/lib/ts/MatcherUtils.cc b/lib/ts/MatcherUtils.cc
index 5c5f32f..6e155a6 100644
--- a/lib/ts/MatcherUtils.cc
+++ b/lib/ts/MatcherUtils.cc
@@ -37,22 +37,6 @@
 #include "ts/MatcherUtils.h"
 #include "ts/Tokenizer.h"
 
-config_parse_error::config_parse_error(const char *fmt, ...)
-{
-  va_list ap;
-  int num;
-
-  va_start(ap, fmt);
-  num = vsnprintf(nullptr, 0, fmt, ap);
-  va_end(ap);
-
-  this->msg = (char *)ats_malloc(num + 1);
-
-  va_start(ap, fmt);
-  vsnprintf(&this->msg[0], num + 1, fmt, ap);
-  va_end(ap);
-}
-
 // char* readIntoBuffer(const char* file_path, const char* module_name,
 //                          int* read_size_ptr)
 //
diff --git a/lib/ts/MatcherUtils.h b/lib/ts/MatcherUtils.h
index 4893234..1cbe7b0 100644
--- a/lib/ts/MatcherUtils.h
+++ b/lib/ts/MatcherUtils.h
@@ -33,6 +33,7 @@
 #define _MATCHER_UTILS_H_
 
 #include "ts/ParseRules.h"
+#include "ts/Result.h"
 #include "ts/ink_inet.h"
 
 // Look in MatcherUtils.cc for comments on function usage
@@ -114,48 +115,6 @@ extern const matcher_tags socks_server_tags;
 
 const char *parseConfigLine(char *line, matcher_line *p_line, const matcher_tags *tags);
 
-struct config_parse_error {
-  // Wrapper to make a syntactically nice success value.
-  static config_parse_error
-  ok()
-  {
-    return config_parse_error();
-  }
-
-  config_parse_error(const config_parse_error &rhs)
-  {
-    if (rhs.msg.get()) {
-      this->msg = ats_strdup(rhs.msg.get());
-    }
-  }
-
-  explicit config_parse_error(const char *fmt, ...) TS_NONNULL(2) TS_PRINTFLIKE(2, 3);
-
-  config_parse_error &
-  operator=(const config_parse_error &rhs)
-  {
-    if (rhs.msg.get()) {
-      this->msg = ats_strdup(rhs.msg.get());
-    } else {
-      this->msg = (char *)nullptr;
-    }
-
-    return *this;
-  }
-
-  const char *
-  get() const
-  {
-    return msg.get();
-  }
-
-  // A config error object evaluates to true if there is an error message.
-  operator bool() const { return msg.get() != nullptr; }
-private:
-  config_parse_error() {}
-  ats_scoped_str msg;
-};
-
 // inline void LowerCaseStr(char* str)
 //
 //   Modifies str so all characters are lower
diff --git a/proxy/CacheControl.cc b/proxy/CacheControl.cc
index 947aabb..d945b67 100644
--- a/proxy/CacheControl.cc
+++ b/proxy/CacheControl.cc
@@ -239,7 +239,7 @@ CacheControlRecord::Print()
   ControlBase::Print();
 }
 
-// config_parse_error CacheControlRecord::Init(matcher_line* line_info)
+// Result CacheControlRecord::Init(matcher_line* line_info)
 //
 //    matcher_line* line_info - contains parsed label/value
 //      pairs of the current cache.config line
@@ -248,7 +248,7 @@ CacheControlRecord::Print()
 //      Otherwise, returns an error string that the caller MUST
 //        DEALLOCATE with free()
 //
-config_parse_error
+Result
 CacheControlRecord::Init(matcher_line *line_info)
 {
   int time_in;
@@ -272,7 +272,7 @@ CacheControlRecord::Init(matcher_line *line_info)
       char *ptr = nullptr;
       int v     = strtol(val, &ptr, 0);
       if (!ptr || v < 0 || v > 4) {
-        return config_parse_error("Value for " TWEAK_CACHE_RESPONSES_TO_COOKIES " must be an integer in the range 0..4");
+        return Result::failure("Value for " TWEAK_CACHE_RESPONSES_TO_COOKIES " must be an integer in the range 0..4");
       } else {
         cache_responses_to_cookies = v;
       }
@@ -316,7 +316,7 @@ CacheControlRecord::Init(matcher_line *line_info)
         directive = CC_IGNORE_SERVER_NO_CACHE;
         d_found   = true;
       } else {
-        return config_parse_error("%s Invalid action at line %d in cache.config", modulePrefix, line_num);
+        return Result::failure("%s Invalid action at line %d in cache.config", modulePrefix, line_num);
       }
     } else {
       if (strcasecmp(label, "revalidate") == 0) {
@@ -336,7 +336,7 @@ CacheControlRecord::Init(matcher_line *line_info)
           this->time_arg = time_in;
 
         } else {
-          return config_parse_error("%s %s at line %d in cache.config", modulePrefix, tmp, line_num);
+          return Result::failure("%s %s at line %d in cache.config", modulePrefix, tmp, line_num);
         }
       }
     }
@@ -350,18 +350,18 @@ CacheControlRecord::Init(matcher_line *line_info)
   }
 
   if (d_found == false) {
-    return config_parse_error("%s No directive in cache.config at line %d", modulePrefix, line_num);
+    return Result::failure("%s No directive in cache.config at line %d", modulePrefix, line_num);
   }
   // Process any modifiers to the directive, if they exist
   if (line_info->num_el > 0) {
     tmp = ProcessModifiers(line_info);
 
     if (tmp != nullptr) {
-      return config_parse_error("%s %s at line %d in cache.config", modulePrefix, tmp, line_num);
+      return Result::failure("%s %s at line %d in cache.config", modulePrefix, tmp, line_num);
     }
   }
 
-  return config_parse_error::ok();
+  return Result::ok();
 }
 
 // void CacheControlRecord::UpdateMatch(CacheControlResult* result, RequestData* rdata)
diff --git a/proxy/CacheControl.h b/proxy/CacheControl.h
index 259eea5..6d598e1 100644
--- a/proxy/CacheControl.h
+++ b/proxy/CacheControl.h
@@ -34,7 +34,7 @@
 #include "Main.h"
 #include "P_EventSystem.h"
 #include "ControlBase.h"
-#include "ts/MatcherUtils.h"
+#include "ts/Result.h"
 
 struct RequestData;
 
@@ -126,7 +126,7 @@ public:
   CacheControlType directive;
   int time_arg;
   int cache_responses_to_cookies;
-  config_parse_error Init(matcher_line *line_info);
+  Result Init(matcher_line *line_info);
   inkcoreapi void UpdateMatch(CacheControlResult *result, RequestData *rdata);
   void Print();
 };
diff --git a/proxy/ControlMatcher.cc b/proxy/ControlMatcher.cc
index 13cb1a7..a49f854 100644
--- a/proxy/ControlMatcher.cc
+++ b/proxy/ControlMatcher.cc
@@ -180,7 +180,7 @@ HostMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 }
 
 //
-// config_parse_error HostMatcher<Data,MatchResult>::NewEntry(bool domain_record,
+// Result HostMatcher<Data,MatchResult>::NewEntry(bool domain_record,
 //          char* match_data, char* match_info, int line_num)
 //
 //   Creates a new host/domain record
@@ -190,11 +190,11 @@ HostMatcher<Data, MatchResult>::Match(RequestData *rdata, MatchResult *result)
 //     that the caller MUST DEALLOCATE
 //
 template <class Data, class MatchResult>
-config_parse_error
+Result
 HostMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
-  config_parse_error error = config_parse_error::ok();
+  Result error = Result::ok();
   char *match_data;
 
   // Make sure space has been allocated
@@ -217,7 +217,7 @@ HostMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   // Fill in the parameter info
   cur_d = data_array + num_el;
   error = cur_d->Init(line_info);
-  if (error) {
+  if (error.failed()) {
     // There was a problem so undo the effects this function
     memset(cur_d, 0, sizeof(Data));
   } else {
@@ -299,16 +299,16 @@ UrlMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 }
 
 //
-// config_parse_error UrlMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
+// Result UrlMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
 //
 template <class Data, class MatchResult>
-config_parse_error
+Result
 UrlMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   char *pattern;
   int *value;
-  config_parse_error error = config_parse_error::ok();
+  Result error = Result::ok();
 
   // Make sure space has been allocated
   ink_assert(num_el >= 0);
@@ -323,7 +323,7 @@ UrlMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   ink_assert(pattern != nullptr);
 
   if (ink_hash_table_lookup(url_ht, pattern, (void **)&value)) {
-    return config_parse_error("%s url expression error (have exist) at line %d position", matcher_name, line_info->line_num);
+    return Result::failure("%s url expression error (have exist) at line %d position", matcher_name, line_info->line_num);
   }
 
   // Remove our consumed label from the parsed line
@@ -333,7 +333,7 @@ UrlMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   // Fill in the parameter info
   cur_d = data_array + num_el;
   error = cur_d->Init(line_info);
-  if (error) {
+  if (error.failed()) {
     url_str[num_el]   = ats_strdup(pattern);
     url_value[num_el] = num_el;
     ink_hash_table_insert(url_ht, url_str[num_el], (void *)&url_value[num_el]);
@@ -440,17 +440,17 @@ RegexMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 }
 
 //
-// config_parse_error RegexMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
+// Result RegexMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
 //
 template <class Data, class MatchResult>
-config_parse_error
+Result
 RegexMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   char *pattern;
   const char *errptr;
   int erroffset;
-  config_parse_error error = config_parse_error::ok();
+  Result error = Result::ok();
 
   // Make sure space has been allocated
   ink_assert(num_el >= 0);
@@ -467,8 +467,8 @@ RegexMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   // Create the compiled regular expression
   re_array[num_el] = pcre_compile(pattern, 0, &errptr, &erroffset, nullptr);
   if (!re_array[num_el]) {
-    return config_parse_error("%s regular expression error at line %d position %d : %s", matcher_name, line_info->line_num,
-                              erroffset, errptr);
+    return Result::failure("%s regular expression error at line %d position %d : %s", matcher_name, line_info->line_num, erroffset,
+                           errptr);
   }
   re_str[num_el] = ats_strdup(pattern);
 
@@ -480,7 +480,7 @@ RegexMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   cur_d = data_array + num_el;
   error = cur_d->Init(line_info);
 
-  if (error) {
+  if (error.failed()) {
     // There was a problem so undo the effects this function
     ats_free(re_str[num_el]);
     re_str[num_el] = nullptr;
@@ -619,7 +619,7 @@ IpMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 }
 
 //
-// config_parse_error IpMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
+// Result IpMatcher<Data,MatchResult>::NewEntry(matcher_line* line_info)
 //
 //    Inserts a range the ip lookup table.
 //        Creates new table levels as needed
@@ -629,14 +629,14 @@ IpMatcher<Data, MatchResult>::AllocateSpace(int num_entries)
 //     for deallocating
 //
 template <class Data, class MatchResult>
-config_parse_error
+Result
 IpMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
 {
   Data *cur_d;
   const char *errptr;
   char *match_data;
   IpEndpoint addr1, addr2;
-  config_parse_error error = config_parse_error::ok();
+  Result error = Result::ok();
 
   // Make sure space has been allocated
   ink_assert(num_el >= 0);
@@ -654,7 +654,7 @@ IpMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   // Extract the IP range
   errptr = ExtractIpRange(match_data, &addr1.sa, &addr2.sa);
   if (errptr != nullptr) {
-    return config_parse_error("%s %s at %s line %d", matcher_name, errptr, file_name, line_info->line_num);
+    return Result::failure("%s %s at %s line %d", matcher_name, errptr, file_name, line_info->line_num);
   }
 
   // Remove our consumed label from the parsed line
@@ -664,7 +664,7 @@ IpMatcher<Data, MatchResult>::NewEntry(matcher_line *line_info)
   // Fill in the parameter info
   cur_d = data_array + num_el;
   error = cur_d->Init(line_info);
-  if (!error) {
+  if (!error.failed()) {
     ip_map.mark(&addr1.sa, &addr2.sa, cur_d);
     ++num_el;
   }
@@ -842,8 +842,9 @@ ControlMatcher<Data, MatchResult>::BuildTableFromString(char *file_buf)
 
       if (errptr != nullptr) {
         if (config_tags != &socks_server_tags) {
-          config_parse_error error("%s discarding %s entry at line %d : %s", matcher_name, config_file_path, line_num, errptr);
-          SignalError(error.get(), alarmAlready);
+          Result error =
+            Result::failure("%s discarding %s entry at line %d : %s", matcher_name, config_file_path, line_num, errptr);
+          SignalError(error.message(), alarmAlready);
         }
         ats_free(current);
       } else {
@@ -919,7 +920,7 @@ ControlMatcher<Data, MatchResult>::BuildTableFromString(char *file_buf)
   // Traverse the list and build the records table
   current = first;
   while (current != nullptr) {
-    config_parse_error error = config_parse_error::ok();
+    Result error = Result::ok();
 
     second_pass++;
     if ((flags & ALLOW_HOST_TABLE) && current->type == MATCH_DOMAIN) {
@@ -935,14 +936,14 @@ ControlMatcher<Data, MatchResult>::BuildTableFromString(char *file_buf)
     } else if ((flags & ALLOW_HOST_REGEX_TABLE) && current->type == MATCH_HOST_REGEX) {
       error = hrMatch->NewEntry(current);
     } else {
-      error = config_parse_error("%s discarding %s entry with unknown type at line %d", matcher_name, config_file_path,
-                                 current->line_num);
+      error =
+        Result::failure("%s discarding %s entry with unknown type at line %d", matcher_name, config_file_path, current->line_num);
     }
 
     // Check to see if there was an error in creating
     //   the NewEntry
-    if (error) {
-      SignalError(error.get(), alarmAlready);
+    if (error.failed()) {
+      SignalError(error.message(), alarmAlready);
     }
 
     // Deallocate the parsing structure
diff --git a/proxy/ControlMatcher.h b/proxy/ControlMatcher.h
index 0501dbb..b3f0f0d 100644
--- a/proxy/ControlMatcher.h
+++ b/proxy/ControlMatcher.h
@@ -90,6 +90,7 @@
 #include "ts/DynArray.h"
 #include "ts/ink_hash_table.h"
 #include "ts/IpMap.h"
+#include "ts/Result.h"
 #include "ts/MatcherUtils.h"
 
 #include "ts/ink_apidefs.h"
@@ -172,7 +173,7 @@ public:
   ~UrlMatcher();
   void Match(RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
-  config_parse_error NewEntry(matcher_line *line_info);
+  Result NewEntry(matcher_line *line_info);
   void Print();
 
   int
@@ -204,7 +205,7 @@ public:
   ~RegexMatcher();
   void Match(RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
-  config_parse_error NewEntry(matcher_line *line_info);
+  Result NewEntry(matcher_line *line_info);
   void Print();
 
   int
@@ -242,7 +243,7 @@ public:
   ~HostMatcher();
   void Match(RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
-  config_parse_error NewEntry(matcher_line *line_info);
+  Result NewEntry(matcher_line *line_info);
   void Print();
 
   int
@@ -278,7 +279,7 @@ public:
   ~IpMatcher();
   void Match(sockaddr const *ip_addr, RequestData *rdata, MatchResult *result);
   void AllocateSpace(int num_entries);
-  config_parse_error NewEntry(matcher_line *line_info);
+  Result NewEntry(matcher_line *line_info);
   void Print();
 
   int
diff --git a/proxy/ParentSelection.cc b/proxy/ParentSelection.cc
index 3b08812..6659f9d 100644
--- a/proxy/ParentSelection.cc
+++ b/proxy/ParentSelection.cc
@@ -505,7 +505,7 @@ ParentRecord::DefaultInit(char *val)
   }
 }
 
-// config_parse_error ParentRecord::Init(matcher_line* line_info)
+// Result ParentRecord::Init(matcher_line* line_info)
 //
 //    matcher_line* line_info - contains parsed label/value
 //      pairs of the current cache.config line
@@ -514,7 +514,7 @@ ParentRecord::DefaultInit(char *val)
 //      Otherwise, returns an error string that the caller MUST
 //        DEALLOCATE with ats_free()
 //
-config_parse_error
+Result
 ParentRecord::Init(matcher_line *line_info)
 {
   const char *errPtr = nullptr;
@@ -622,7 +622,7 @@ ParentRecord::Init(matcher_line *line_info)
     }
     // Report errors generated by ProcessParents();
     if (errPtr != nullptr) {
-      return config_parse_error("%s %s at line %d", modulePrefix, errPtr, line_num);
+      return Result::failure("%s %s at line %d", modulePrefix, errPtr, line_num);
     }
 
     if (used == true) {
@@ -657,14 +657,14 @@ ParentRecord::Init(matcher_line *line_info)
   }
 
   if (this->parents == nullptr && go_direct == false) {
-    return config_parse_error("%s No parent specified in parent.config at line %d", modulePrefix, line_num);
+    return Result::failure("%s No parent specified in parent.config at line %d", modulePrefix, line_num);
   }
   // Process any modifiers to the directive, if they exist
   if (line_info->num_el > 0) {
     tmp = ProcessModifiers(line_info);
 
     if (tmp != nullptr) {
-      return config_parse_error("%s %s at line %d in parent.config", modulePrefix, tmp, line_num);
+      return Result::failure("%s %s at line %d in parent.config", modulePrefix, tmp, line_num);
     }
     // record SCHEME modifier if present.
     // NULL if not present
@@ -698,7 +698,7 @@ ParentRecord::Init(matcher_line *line_info)
     ink_release_assert(0);
   }
 
-  return config_parse_error::ok();
+  return Result::ok();
 }
 
 // void ParentRecord::UpdateMatch(ParentResult* result, RequestData* rdata);
diff --git a/proxy/ParentSelection.h b/proxy/ParentSelection.h
index 78c0942..10686a8 100644
--- a/proxy/ParentSelection.h
+++ b/proxy/ParentSelection.h
@@ -133,7 +133,7 @@ public:
 
   ~ParentRecord();
 
-  config_parse_error Init(matcher_line *line_info);
+  Result Init(matcher_line *line_info);
   bool DefaultInit(char *val);
   void UpdateMatch(ParentResult *result, RequestData *rdata);
   void Print();
diff --git a/proxy/congest/Congestion.cc b/proxy/congest/Congestion.cc
index bf33cfa..e2bfdfd 100644
--- a/proxy/congest/Congestion.cc
+++ b/proxy/congest/Congestion.cc
@@ -125,14 +125,13 @@ CongestionControlRecord::setdefault()
   max_connection          = DEFAULT_max_connection;
 }
 
-config_parse_error
+Result
 CongestionControlRecord::validate()
 {
-#define IsGt0(var)                                                                                \
-  if (var < 1) {                                                                                  \
-    config_parse_error error("line %d: invalid %s = %d, %s must > 0", line_num, #var, var, #var); \
-    cleanup();                                                                                    \
-    return error;                                                                                 \
+#define IsGt0(var)                                                                              \
+  if (var < 1) {                                                                                \
+    cleanup();                                                                                  \
+    return Result::failure("line %d: invalid %s = %d, %s must > 0", line_num, #var, var, #var); \
   }
 
   if (error_page == NULL) {
@@ -140,10 +139,9 @@ CongestionControlRecord::validate()
   }
   if (max_connection_failures >= CONG_RULE_MAX_max_connection_failures ||
       (max_connection_failures <= 0 && max_connection_failures != CONG_RULE_ULIMITED_max_connection_failures)) {
-    config_parse_error error("line %d: invalid %s = %d not in [1, %d) range", line_num, "max_connection_failures",
-                             max_connection_failures, CONG_RULE_MAX_max_connection_failures);
     cleanup();
-    return error;
+    return Result::failure("line %d: invalid %s = %d not in [1, %d) range", line_num, "max_connection_failures",
+                           max_connection_failures, CONG_RULE_MAX_max_connection_failures);
   }
 
   IsGt0(fail_window);
@@ -160,10 +158,10 @@ CongestionControlRecord::validate()
 // max_connection == 0, no connection allow to the origin server for the rule
 #undef IsGt0
 
-  return config_parse_error::ok();
+  return Result::ok();
 }
 
-config_parse_error
+Result
 CongestionControlRecord::Init(matcher_line *line_info)
 {
   const char *tmp;
@@ -233,16 +231,17 @@ CongestionControlRecord::Init(matcher_line *line_info)
     tmp = ProcessModifiers(line_info);
 
     if (tmp != NULL) {
-      return config_parse_error("%s %s at line %d in congestion.config", congestPrefix, tmp, line_num);
+      return Result::failure("%s %s at line %d in congestion.config", congestPrefix, tmp, line_num);
     }
   }
 
-  config_parse_error error = validate();
-  if (!error) {
-    pRecord = new CongestionControlRecord(*this);
+  Result result = validate();
+  if (result.failed()) {
+    return result;
   }
 
-  return error;
+  pRecord = new CongestionControlRecord(*this);
+  return Result::ok();
 }
 
 void
diff --git a/proxy/congest/Congestion.h b/proxy/congest/Congestion.h
index 3507d10..4c4dd86 100644
--- a/proxy/congest/Congestion.h
+++ b/proxy/congest/Congestion.h
@@ -32,6 +32,7 @@
 #define CONGESTION_H_
 
 #include "ts/ink_platform.h"
+#include "ts/Result.h"
 #include "P_EventSystem.h"
 #include "ControlBase.h"
 #include "ControlMatcher.h"
@@ -65,13 +66,13 @@ public:
   CongestionControlRecord();
   CongestionControlRecord(const CongestionControlRecord &rec);
   ~CongestionControlRecord();
-  config_parse_error Init(matcher_line *line_info);
+  Result Init(matcher_line *line_info);
   void UpdateMatch(CongestionControlRule *pRule, RequestData *rdata);
   void Print();
 
   void cleanup();
   void setdefault();
-  config_parse_error validate();
+  Result validate();
 
   int rank; // matching preference
             /*

-- 
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.

[trafficserver] 02/04: Use Result to show Cache configuration parse errors.

Posted by jp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jpeach pushed a commit to branch master
in repository https://git-dual.apache.org/repos/asf/trafficserver.git

commit a7100edbc4cf3b357de43b91dfe3ddbf7493bcbb
Author: James Peach <jp...@apache.org>
AuthorDate: Sat Feb 18 13:54:52 2017 -0800

    Use Result to show Cache configuration parse errors.
---
 iocore/cache/Cache.cc  |  7 +++----
 iocore/cache/I_Store.h | 10 ++++------
 iocore/cache/Store.cc  | 22 ++++++++--------------
 proxy/Main.cc          |  6 ++++--
 4 files changed, 19 insertions(+), 26 deletions(-)

diff --git a/iocore/cache/Cache.cc b/iocore/cache/Cache.cc
index 3ac09dd..1088845 100644
--- a/iocore/cache/Cache.cc
+++ b/iocore/cache/Cache.cc
@@ -3285,10 +3285,9 @@ ink_cache_init(ModuleVersion v)
 
   REC_ReadConfigInteger(cacheProcessor.wait_for_cache, "proxy.config.http.wait_for_cache");
 
-  const char *err = nullptr;
-  if ((err = theCacheStore.read_config())) {
-    printf("Failed to read cache storage configuration - %s\n", err);
-    exit(1);
+  Result result = theCacheStore.read_config();
+  if (result.failed()) {
+    Fatal("Failed to read cache storage configuration: %s", result.message());
   }
 }
 
diff --git a/iocore/cache/I_Store.h b/iocore/cache/I_Store.h
index de6ceb7..9f9ef21 100644
--- a/iocore/cache/I_Store.h
+++ b/iocore/cache/I_Store.h
@@ -32,6 +32,7 @@
 #define _Store_h_
 
 #include "ts/ink_platform.h"
+#include "ts/Result.h"
 
 #define STORE_BLOCK_SIZE 8192
 #define STORE_BLOCK_SHIFT 13
@@ -258,12 +259,9 @@ struct Store {
   // The number of disks/paths we could actually read and parse.
   unsigned n_disks;
   Span **disk;
-  //
-  // returns nullptr on success
-  // if fd >= 0 then on failure it returns an error string
-  //            otherwise on failure it returns (char *)-1
-  //
-  const char *read_config();
+
+  Result read_config();
+
   int write_config_data(int fd) const;
 
   /// Additional configuration key values.
diff --git a/iocore/cache/Store.cc b/iocore/cache/Store.cc
index e922d3b..54ea293 100644
--- a/iocore/cache/Store.cc
+++ b/iocore/cache/Store.cc
@@ -306,7 +306,7 @@ Lagain:
   return found ? 0 : -1;
 }
 
-const char *
+Result
 Store::read_config()
 {
   int n_dsstore   = 0;
@@ -321,8 +321,7 @@ Store::read_config()
   Debug("cache_init", "Store::read_config, fd = -1, \"%s\"", (const char *)storage_path);
   fd = ::open(storage_path, O_RDONLY);
   if (fd < 0) {
-    err = "error on open";
-    goto Lfail;
+    return Result::failure("open %s: %s", (const char *)storage_path, strerror(errno));
   }
 
   // For each line
@@ -358,8 +357,8 @@ Store::read_config()
     while (nullptr != (e = tokens.getNext())) {
       if (ParseRules::is_digit(*e)) {
         if ((size = ink_atoi64(e)) <= 0) {
-          err = "error parsing size";
-          goto Lfail;
+          delete sd;
+          return Result::failure("failed to parse size '%s'", e);
         }
       } else if (0 == strncasecmp(HASH_BASE_STRING_KEY, e, sizeof(HASH_BASE_STRING_KEY) - 1)) {
         e += sizeof(HASH_BASE_STRING_KEY) - 1;
@@ -372,8 +371,8 @@ Store::read_config()
         if ('=' == *e)
           ++e;
         if (!*e || !ParseRules::is_digit(*e) || 0 >= (volume_num = ink_atoi(e))) {
-          err = "error parsing volume number";
-          goto Lfail;
+          delete sd;
+          return Result::failure("failed to parse volume number '%s'", e);
         }
       }
     }
@@ -390,6 +389,7 @@ Store::read_config()
       ats_free(pp);
       continue;
     }
+
     ats_free(pp);
     n_dsstore++;
 
@@ -421,14 +421,8 @@ Store::read_config()
   }
   sd = nullptr; // these are all used.
   sort();
-  return nullptr;
-
-Lfail:
-  // Do clean up.
-  if (sd)
-    delete sd;
 
-  return err;
+  return Result::ok();
 }
 
 int
diff --git a/proxy/Main.cc b/proxy/Main.cc
index edf6c8f..5e36723 100644
--- a/proxy/Main.cc
+++ b/proxy/Main.cc
@@ -597,8 +597,10 @@ cmd_list(char * /* cmd ATS_UNUSED */)
 
   Note("Cache Storage:");
   Store tStore;
-  if (tStore.read_config() != nullptr) {
-    Note("config read failure");
+  Result result = tStore.read_config();
+
+  if (result.failed()) {
+    Note("Failed to read cache storage configuration: %s", result.message());
     return CMD_FAILED;
   } else {
     tStore.write_config_data(fileno(stdout));

-- 
To stop receiving notification emails like this one, please contact
"commits@trafficserver.apache.org" <co...@trafficserver.apache.org>.