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 2016/05/02 18:08:16 UTC

[trafficserver] branch master updated (131875c -> ec77407)

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  131875c   TS-4403: Fix stale-while-revalidate on DNS lookup failures (#609)
       new  346b546   TS-4380: Move ProxyShutdown to CoreAPI.cc.
       new  6b263f9   TS-4380: Make TSCacheClearT a bitmask.
       new  ebdcea4   TS-4380: Initial traffic_ctl support for server start/stop.
       new  ec77407   TS-4380: Update traffic_ctl documentation.

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:
 cmd/traffic_ctl/server.cc                      | 67 +++++++++++++++++++---
 cmd/traffic_line/traffic_line.cc               |  4 +-
 doc/appendices/command-line/traffic_ctl.en.rst | 19 +++++++
 mgmt/WebMgmtUtils.cc                           | 32 -----------
 mgmt/WebMgmtUtils.h                            |  2 -
 mgmt/api/APITestCliRemote.cc                   | 10 ++--
 mgmt/api/CoreAPI.cc                            | 77 ++++++++++++++++++--------
 mgmt/api/INKMgmtAPI.cc                         | 12 +++-
 mgmt/api/include/mgmtapi.h                     | 15 ++---
 9 files changed, 155 insertions(+), 83 deletions(-)

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

[trafficserver] 01/04: TS-4380: Move ProxyShutdown to CoreAPI.cc.

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 346b5465af6791c81dd1ce91e41384917592884e
Author: James Peach <jp...@apache.org>
AuthorDate: Sat Apr 30 09:33:29 2016 -0700

    TS-4380: Move ProxyShutdown to CoreAPI.cc.
    
    ProxyShutdown is only used in one place, so there's no need for a
    global symbol. Move it locally and make it static.
---
 mgmt/WebMgmtUtils.cc | 32 --------------------------------
 mgmt/WebMgmtUtils.h  |  2 --
 mgmt/api/CoreAPI.cc  | 34 +++++++++++++++++++++++++++++++++-
 3 files changed, 33 insertions(+), 35 deletions(-)

diff --git a/mgmt/WebMgmtUtils.cc b/mgmt/WebMgmtUtils.cc
index 2392102..429ba9e 100644
--- a/mgmt/WebMgmtUtils.cc
+++ b/mgmt/WebMgmtUtils.cc
@@ -1011,38 +1011,6 @@ substituteForHTMLChars(const char *buffer)
   return safeBuf;
 }
 
-// bool ProxyShutdown()
-//
-//  Attempts to turn the proxy off.  Returns
-//    true if the proxy is off when the call returns
-//    and false if it is still on
-//
-bool
-ProxyShutdown()
-{
-  int i = 0;
-
-  // Check to make sure that we are not already down
-  if (!lmgmt->processRunning()) {
-    return true;
-  }
-  // Send the shutdown event
-  lmgmt->signalEvent(MGMT_EVENT_SHUTDOWN, "shutdown");
-
-  // Wait for awhile for shtudown to happen
-  do {
-    mgmt_sleep_sec(1);
-    i++;
-  } while (i < 10 && lmgmt->processRunning());
-
-  // See if we succeeded
-  if (lmgmt->processRunning()) {
-    return false;
-  } else {
-    return true;
-  }
-}
-
 //
 //
 //  Sets the LocalManager variable:  proxy.node.hostname
diff --git a/mgmt/WebMgmtUtils.h b/mgmt/WebMgmtUtils.h
index a29c1c1..6b27f2b 100644
--- a/mgmt/WebMgmtUtils.h
+++ b/mgmt/WebMgmtUtils.h
@@ -98,8 +98,6 @@ char *substituteForHTMLChars(const char *buffer);
 InkHashTable *processFormSubmission(char *submission);
 InkHashTable *processFormSubmission_noSubstitute(char *submission);
 
-// Shutdown the proxy
-bool ProxyShutdown();
 int setHostnameVar();
 void appendDefaultDomain(char *hostname, int bufLength);
 
diff --git a/mgmt/api/CoreAPI.cc b/mgmt/api/CoreAPI.cc
index ed5e3ea..1fe0707 100644
--- a/mgmt/api/CoreAPI.cc
+++ b/mgmt/api/CoreAPI.cc
@@ -142,6 +142,38 @@ DiagnosticMessage(TSDiagsT mode, const char *fmt, va_list ap)
 /***************************************************************************
  * Control Operations
  ***************************************************************************/
+
+// bool ProxyShutdown()
+//
+//  Attempts to turn the proxy off.  Returns
+//    true if the proxy is off when the call returns
+//    and false if it is still on
+//
+static bool
+ProxyShutdown()
+{
+  int i = 0;
+
+  // Check to make sure that we are not already down
+  if (!lmgmt->processRunning()) {
+    return true;
+  }
+
+  lmgmt->processShutdown(false /* only shut down the proxy*/);
+
+  // Wait for awhile for shtudown to happen
+  do {
+    mgmt_sleep_sec(1);
+    i++;
+  } while (i < 10 && lmgmt->processRunning());
+
+  // See if we succeeded
+  if (lmgmt->processRunning()) {
+    return false;
+  } else {
+    return true;
+  }
+}
 /*-------------------------------------------------------------------------
  * ProxyStateGet
  *-------------------------------------------------------------------------
@@ -161,7 +193,7 @@ ProxyStateGet()
  * ProxyStateSet
  *-------------------------------------------------------------------------
  * If state == TS_PROXY_ON, will turn on TS (unless it's already running).
- * If steat == TS_PROXY_OFF, will turn off TS (unless it's already off).
+ * If state == TS_PROXY_OFF, will turn off TS (unless it's already off).
  * tsArgs  - (optional) a string with space delimited options that user
  *            wants to start traffic Server with
  */

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

[trafficserver] 04/04: TS-4380: Update traffic_ctl documentation.

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 ec77407f6f02e5a108bf07f07bd65286b8ce1b9c
Author: James Peach <jp...@apache.org>
AuthorDate: Sat Apr 30 10:37:11 2016 -0700

    TS-4380: Update traffic_ctl documentation.
---
 doc/appendices/command-line/traffic_ctl.en.rst | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/doc/appendices/command-line/traffic_ctl.en.rst b/doc/appendices/command-line/traffic_ctl.en.rst
index e1b5a2a..6d32561 100644
--- a/doc/appendices/command-line/traffic_ctl.en.rst
+++ b/doc/appendices/command-line/traffic_ctl.en.rst
@@ -213,11 +213,30 @@ traffic_ctl server
     :program:`traffic_manager` is also restarted.
 
 .. program:: traffic_ctl server
+.. option:: start
+
+   Start :program:`traffic_server` if it is already running.
+
+.. program:: traffic_ctl server start
+.. option:: --clear-cache
+
+   Clear the disk cache upon startup.
+
+.. option:: --clear-hostdb
+
+   Clear the DNS resolver cache upon startup.
+
+.. program:: traffic_ctl server
 .. option:: status
 
    Show the current proxy server status, indicating if we're running or not.
 
 .. program:: traffic_ctl server
+.. option:: stop
+
+   Stop the running :program:`traffic_server` process.
+
+.. program:: traffic_ctl server
 .. option:: backtrace
 
     Show a full stack trace of all the :program:`traffic_server` threads.

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

[trafficserver] 02/04: TS-4380: Make TSCacheClearT a bitmask.

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 6b263f9780b77c7cce17039631f36c5a7092360e
Author: James Peach <jp...@apache.org>
AuthorDate: Sun Apr 24 14:12:22 2016 -0700

    TS-4380: Make TSCacheClearT a bitmask.
    
    Make TSCacheClearT a bitmask so that on server restart we will be
    able to clear the cache, hostdb or both.
---
 cmd/traffic_line/traffic_line.cc |  4 ++--
 mgmt/api/APITestCliRemote.cc     | 10 +++++-----
 mgmt/api/CoreAPI.cc              | 43 +++++++++++++++++++---------------------
 mgmt/api/INKMgmtAPI.cc           | 12 ++++++++---
 mgmt/api/include/mgmtapi.h       | 15 +++++++-------
 5 files changed, 44 insertions(+), 40 deletions(-)

diff --git a/cmd/traffic_line/traffic_line.cc b/cmd/traffic_line/traffic_line.cc
index a0194ad..cfa28e7 100644
--- a/cmd/traffic_line/traffic_line.cc
+++ b/cmd/traffic_line/traffic_line.cc
@@ -66,13 +66,13 @@ handleArgInvocation()
   } else if (ShutdownMgmtLocal == 1) {
     return TSRestart(restart);
   } else if (Shutdown == 1) {
-    return TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_OFF);
+    return TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_NONE);
   } else if (BounceCluster == 1) {
     return TSBounce(restart | TS_RESTART_OPT_CLUSTER);
   } else if (BounceLocal == 1) {
     return TSBounce(restart);
   } else if (Startup == 1) {
-    return TSProxyStateSet(TS_PROXY_ON, TS_CACHE_CLEAR_OFF);
+    return TSProxyStateSet(TS_PROXY_ON, TS_CACHE_CLEAR_NONE);
   } else if (ClearCluster == 1) {
     return TSStatsReset(true, NULL);
   } else if (ClearNode == 1) {
diff --git a/mgmt/api/APITestCliRemote.cc b/mgmt/api/APITestCliRemote.cc
index a6a38e7..39cd000 100644
--- a/mgmt/api/APITestCliRemote.cc
+++ b/mgmt/api/APITestCliRemote.cc
@@ -859,18 +859,18 @@ void
 start_TS(char *tsArgs)
 {
   TSMgmtError ret;
-  TSCacheClearT clear = TS_CACHE_CLEAR_OFF;
+  TSCacheClearT clear = TS_CACHE_CLEAR_NONE;
   char *args;
 
   strtok(tsArgs, ":");
   args = strtok(NULL, ":");
   if (args) {
     if (strcmp(args, "all\n") == 0)
-      clear = TS_CACHE_CLEAR_ON;
+      clear = TS_CACHE_CLEAR_CACHE;
     else if (strcmp(args, "hostdb\n") == 0)
       clear = TS_CACHE_CLEAR_HOSTDB;
   } else {
-    clear = TS_CACHE_CLEAR_OFF;
+    clear = TS_CACHE_CLEAR_NONE;
   }
 
   printf("STARTING PROXY with cache: %d\n", clear);
@@ -886,7 +886,7 @@ stop_TS()
   TSMgmtError ret;
 
   printf("STOPPING PROXY\n");
-  if ((ret = TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_OFF)) != TS_ERR_OKAY)
+  if ((ret = TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_NONE)) != TS_ERR_OKAY)
     printf("[TSProxyStateSet] turn off FAILED\n");
   print_err("stop_TS", ret);
 }
@@ -2267,7 +2267,7 @@ sync_test()
     printf("[TSRecordSet] proxy.config.http.cache.fuzz.probability=-0.3333\n");
 
   TSMgmtError ret;
-  if ((ret = TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_OFF)) != TS_ERR_OKAY)
+  if ((ret = TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_NONE)) != TS_ERR_OKAY)
     printf("[TSProxyStateSet] turn off FAILED\n");
   print_err("stop_TS", ret);
 }
diff --git a/mgmt/api/CoreAPI.cc b/mgmt/api/CoreAPI.cc
index 1fe0707..605e42c 100644
--- a/mgmt/api/CoreAPI.cc
+++ b/mgmt/api/CoreAPI.cc
@@ -203,9 +203,8 @@ ProxyStateSet(TSProxyStateT state, TSCacheClearT clear)
   int i = 0;
   char tsArgs[MAX_BUF_SIZE];
   char *proxy_options;
-  bool found;
 
-  memset(tsArgs, 0, MAX_BUF_SIZE);
+  ink_zero(tsArgs);
 
   switch (state) {
   case TS_PROXY_OFF:
@@ -213,28 +212,22 @@ ProxyStateSet(TSProxyStateT state, TSCacheClearT clear)
       goto Lerror;        // unsuccessful shutdown
     break;
   case TS_PROXY_ON:
-    if (lmgmt->processRunning()) // already on
+    if (lmgmt->processRunning()) { // already on
       break;
+    }
 
-    // taken from mgmt/Main.cc when check the -tsArgs option
-    // Update cmd line overrides/environmental overrides/etc
-    switch (clear) {
-    case TS_CACHE_CLEAR_ON: // traffic_server -K
-      snprintf(tsArgs, sizeof(tsArgs), "-K -M");
-      break;
-    case TS_CACHE_CLEAR_HOSTDB: // traffic_server -k
-      snprintf(tsArgs, sizeof(tsArgs), "-k -M");
-      break;
-    case TS_CACHE_CLEAR_OFF:
-      // use default tsargs in records.config
-      int rec_err = RecGetRecordString_Xmalloc("proxy.config.proxy_binary_opts", &proxy_options);
-      found = (rec_err == REC_ERR_OKAY);
-      if (!found)
-        goto Lerror;
-
-      snprintf(tsArgs, MAX_BUF_SIZE, "%s", proxy_options);
+    // Start with the default options from records.config.
+    if (RecGetRecordString_Xmalloc("proxy.config.proxy_binary_opts", &proxy_options) == REC_ERR_OKAY) {
+      snprintf(tsArgs, sizeof(tsArgs), "%s", proxy_options);
       ats_free(proxy_options);
-      break;
+    }
+
+    if (clear & TS_CACHE_CLEAR_CACHE) {
+      ink_strlcat(tsArgs, " -K", sizeof(tsArgs));
+    }
+
+    if (clear & TS_CACHE_CLEAR_HOSTDB) {
+      ink_strlcat(tsArgs, " -k", sizeof(tsArgs));
     }
 
     if (strlen(tsArgs) > 0) { /* Passed command line args for proxy */
@@ -245,11 +238,15 @@ ProxyStateSet(TSProxyStateT state, TSCacheClearT clear)
 
     lmgmt->run_proxy = true;
     lmgmt->listenForProxy();
+
     do {
       mgmt_sleep_sec(1);
     } while (i++ < 20 && (lmgmt->proxy_running == 0));
-    if (!lmgmt->processRunning())
+
+    if (!lmgmt->processRunning()) {
       goto Lerror;
+    }
+
     break;
   default:
     goto Lerror;
@@ -258,7 +255,7 @@ ProxyStateSet(TSProxyStateT state, TSCacheClearT clear)
   return TS_ERR_OKAY;
 
 Lerror:
-  return TS_ERR_FAIL; /* failed to set proxy  state */
+  return TS_ERR_FAIL; /* failed to set proxy state */
 }
 
 #if TS_USE_REMOTE_UNWINDING
diff --git a/mgmt/api/INKMgmtAPI.cc b/mgmt/api/INKMgmtAPI.cc
index f989b71..596b85e 100644
--- a/mgmt/api/INKMgmtAPI.cc
+++ b/mgmt/api/INKMgmtAPI.cc
@@ -1686,13 +1686,19 @@ TSProxyStateGet()
 /* TSProxyStateSet: set the proxy state (on/off)
  * Input:  proxy_state - set to on/off
  *         clear - start TS with cache clearing option,
- *                 when stopping TS should always be TS_CACHE_CLEAR_OFF
+ *                 when stopping TS should always be TS_CACHE_CLEAR_NONE
  * Output: TSMgmtError
  */
 tsapi TSMgmtError
-TSProxyStateSet(TSProxyStateT proxy_state, TSCacheClearT clear)
+TSProxyStateSet(TSProxyStateT proxy_state, unsigned clear)
 {
-  return ProxyStateSet(proxy_state, clear);
+  unsigned mask = TS_CACHE_CLEAR_NONE | TS_CACHE_CLEAR_CACHE | TS_CACHE_CLEAR_HOSTDB;
+
+  if (clear & ~mask) {
+    return TS_ERR_PARAMS;
+  }
+
+  return ProxyStateSet(proxy_state, static_cast<TSCacheClearT>(clear));
 }
 
 tsapi TSMgmtError
diff --git a/mgmt/api/include/mgmtapi.h b/mgmt/api/include/mgmtapi.h
index fbadc9c..64e4945 100644
--- a/mgmt/api/include/mgmtapi.h
+++ b/mgmt/api/include/mgmtapi.h
@@ -144,9 +144,9 @@ typedef enum {
 
 /* used when starting Traffic Server process */
 typedef enum {
-  TS_CACHE_CLEAR_ON,     /* run TS in  "clear entire cache" mode */
-  TS_CACHE_CLEAR_HOSTDB, /* run TS in "only clear the host db cache" mode */
-  TS_CACHE_CLEAR_OFF     /* starts TS in regualr mode w/o any options */
+  TS_CACHE_CLEAR_NONE = 0,          /* starts TS in regular mode w/o any options */
+  TS_CACHE_CLEAR_CACHE = (1 << 0),  /* run TS in  "clear cache" mode */
+  TS_CACHE_CLEAR_HOSTDB = (1 << 1), /* run TS in "clear the host db cache" mode */
 } TSCacheClearT;
 
 /*--- diagnostic output operations ----------------------------------------*/
@@ -900,12 +900,13 @@ tsapi TSProxyStateT TSProxyStateGet();
 
 /* TSProxyStateSet: set the proxy state (on/off)
  * Input:  proxy_state - set to on/off
- *         clear - specifies if want to start TS with clear_cache or
- *                 clear_cache_hostdb option, or just run TS with no options;
- *                  only applies when turning proxy on
+ *         clear - a TSCacheClearT bitmask,
+ *            specifies if want to start TS with clear_cache or
+ *            clear_cache_hostdb option, or just run TS with no options;
+ *            only applies when turning proxy on
  * Output: TSMgmtError
  */
-tsapi TSMgmtError TSProxyStateSet(TSProxyStateT proxy_state, TSCacheClearT clear);
+tsapi TSMgmtError TSProxyStateSet(TSProxyStateT proxy_state, unsigned clear);
 
 /* TSProxyBacktraceGet: get a backtrace of the proxy
  * Input:  unsigned options - stack trace options

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

[trafficserver] 03/04: TS-4380: Initial traffic_ctl support for server start/stop.

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 ebdcea436ec273e25a76df3b770a264d450f318d
Author: James Peach <jp...@apache.org>
AuthorDate: Sun Apr 24 14:30:56 2016 -0700

    TS-4380: Initial traffic_ctl support for server start/stop.
    
    Implement a basic version of the "server start" and "server stop"
    subcommands for traffic_ctl. This brings feature parity with
    traffic_line.
---
 cmd/traffic_ctl/server.cc | 67 +++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 59 insertions(+), 8 deletions(-)

diff --git a/cmd/traffic_ctl/server.cc b/cmd/traffic_ctl/server.cc
index 70db76f..0b7115f 100644
--- a/cmd/traffic_ctl/server.cc
+++ b/cmd/traffic_ctl/server.cc
@@ -26,17 +26,17 @@
 static int drain = 0;
 static int manager = 0;
 
-const ArgumentDescription opts[] = {
-  {"drain", '-', "Wait for client connections to drain before restarting", "F", &drain, NULL, NULL},
-  {"manager", '-', "Restart traffic_manager as well as traffic_server", "F", &manager, NULL, NULL},
-};
-
 static int
 restart(unsigned argc, const char **argv, unsigned flags)
 {
   TSMgmtError error;
   const char *usage = (flags & TS_RESTART_OPT_CLUSTER) ? "cluster restart [OPTIONS]" : "server restart [OPTIONS]";
 
+  const ArgumentDescription opts[] = {
+    {"drain", '-', "Wait for client connections to drain before restarting", "F", &drain, NULL, NULL},
+    {"manager", '-', "Restart traffic_manager as well as traffic_server", "F", &manager, NULL, NULL},
+  };
+
   if (!CtrlProcessArguments(argc, argv, opts, countof(opts)) || n_file_arguments != 0) {
     return CtrlCommandUsage(usage, opts, countof(opts));
   }
@@ -116,6 +116,57 @@ server_status(unsigned argc, const char **argv)
   return CTRL_EX_OK;
 }
 
+static int
+server_stop(unsigned argc, const char **argv)
+{
+  TSMgmtError error;
+
+  // I am not sure whether it really makes sense to add the --drain option here.
+  // TSProxyStateSet() is a synchronous API, returning only after the proxy has
+  // been shut down. However, draining can take a long time and we don't want
+  // to wait for it. Maybe the right approach is to make the stop async.
+  if (!CtrlProcessArguments(argc, argv, NULL, 0) || n_file_arguments != 0) {
+    return CtrlCommandUsage("server stop");
+  }
+
+  error = TSProxyStateSet(TS_PROXY_OFF, TS_CACHE_CLEAR_NONE);
+  if (error != TS_ERR_OKAY) {
+    CtrlMgmtError(error, "server stop failed");
+    return CTRL_EX_ERROR;
+  }
+
+  return CTRL_EX_OK;
+}
+
+static int
+server_start(unsigned argc, const char **argv)
+{
+  TSMgmtError error;
+  int cache = 0;
+  int hostdb = 0;
+  unsigned clear = TS_CACHE_CLEAR_NONE;
+
+  const ArgumentDescription opts[] = {
+    {"clear-cache", '-', "Clear the disk cache on startup", "F", &cache, NULL, NULL},
+    {"clear-hostdb", '-', "Clear the DNS cache on startup", "F", &hostdb, NULL, NULL},
+  };
+
+  if (!CtrlProcessArguments(argc, argv, opts, countof(opts)) || n_file_arguments != 0) {
+    return CtrlCommandUsage("server start [OPTIONS]", opts, countof(opts));
+  }
+
+  clear |= cache ? TS_CACHE_CLEAR_CACHE : TS_CACHE_CLEAR_NONE;
+  clear |= hostdb ? TS_CACHE_CLEAR_HOSTDB : TS_CACHE_CLEAR_NONE;
+
+  error = TSProxyStateSet(TS_PROXY_ON, clear);
+  if (error != TS_ERR_OKAY) {
+    CtrlMgmtError(error, "server start failed");
+    return CTRL_EX_ERROR;
+  }
+
+  return CTRL_EX_OK;
+}
+
 int
 subcommand_cluster(unsigned argc, const char **argv)
 {
@@ -131,11 +182,11 @@ int
 subcommand_server(unsigned argc, const char **argv)
 {
   const subcommand commands[] = {
-    {server_restart, "restart", "Restart Traffic Server"},
     {server_backtrace, "backtrace", "Show a full stack trace of the traffic_server process"},
+    {server_restart, "restart", "Restart Traffic Server"},
+    {server_start, "start", "Start the proxy"},
     {server_status, "status", "Show the proxy status"},
-
-    /* XXX do the 'shutdown' and 'startup' commands make sense? */
+    {server_stop, "stop", "Stop the proxy"},
   };
 
   return CtrlGenericSubcommand("server", commands, countof(commands), argc, argv);

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