You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2018/06/06 07:37:09 UTC
[trafficserver] 02/11: Parent Selection -- Add option to mark down
self specified as a parent.
This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch 8.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit b403852091e00d36b58ff0c772158b308ed4ed91
Author: Peter Chou <pb...@labs.att.com>
AuthorDate: Tue May 29 19:42:57 2018 +0000
Parent Selection -- Add option to mark down self specified as a parent.
Extends the proxy.config.http.parent_proxy.self_detect configuration
option so that a specified parent that has been detected as self may be
marked down instead of removed from the parent list.
This may be useful in some Parent Selection Consistent Hashing configurations
where we want the self-parent to remain in the hash ring but never be selected.
Simply removing the self-parent would change the distribution of parent
selection URLs across the remaining parents. This commit also makes this
the default behavior instead of filtering out self parents.
(cherry picked from commit d8df9fd9dccb7f28c49726cf689fca45c4b371d8)
---
doc/admin-guide/files/records.config.en.rst | 16 ++++++++++++---
mgmt/RecordsConfig.cc | 2 +-
proxy/ParentSelection.cc | 30 +++++++++++++++++++++--------
3 files changed, 36 insertions(+), 12 deletions(-)
diff --git a/doc/admin-guide/files/records.config.en.rst b/doc/admin-guide/files/records.config.en.rst
index 2770ae4..922f525 100644
--- a/doc/admin-guide/files/records.config.en.rst
+++ b/doc/admin-guide/files/records.config.en.rst
@@ -1186,10 +1186,20 @@ Parent Proxy Configuration
.. ts:cv:: CONFIG proxy.local.http.parent_proxy.disable_connect_tunneling INT 0
-.. ts:cv:: CONFIG proxy.config.http.parent_proxy.self_detect INT 1
+.. ts:cv:: CONFIG proxy.config.http.parent_proxy.self_detect INT 2
- Filter out hosts that are determined to be the same as the current host, e.g., localhost,
- that have been specified in any parent and secondary_parent lists in the parent.config file.
+ For each host that has been specified in a ``parent`` or ``secondary_parent`` list in the
+ :file:`parent.config` file, determine if the host is the same as the current host.
+ Obvious examples include ``localhost`` and ``127.0.0.1``. If a match is found,
+ take an action depending upon the value below.
+
+ ===== ======================================================================
+ Value Description
+ ===== ======================================================================
+ ``0`` Disables the feature by not checking for matches.
+ ``1`` Remove the matching host from the list.
+ ``2`` Mark the host down. This is the default.
+ ===== ======================================================================
HTTP Connection Timeouts
========================
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index e2c7513..53dc726 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -432,7 +432,7 @@ static const RecordElement RecordsConfig[] =
,
{RECT_CONFIG, "proxy.config.http.parent_proxy.mark_down_hostdb", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_INT, "[0-1]", RECA_NULL}
,
- {RECT_CONFIG, "proxy.config.http.parent_proxy.self_detect", RECD_INT, "1", RECU_DYNAMIC, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
+ {RECT_CONFIG, "proxy.config.http.parent_proxy.self_detect", RECD_INT, "2", RECU_DYNAMIC, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
,
{RECT_CONFIG, "proxy.config.http.forward.proxy_auth_to_parent", RECD_INT, "0", RECU_DYNAMIC, RR_NULL, RECC_NULL, nullptr, RECA_NULL}
,
diff --git a/proxy/ParentSelection.cc b/proxy/ParentSelection.cc
index 1181f88..188a2c8 100644
--- a/proxy/ParentSelection.cc
+++ b/proxy/ParentSelection.cc
@@ -40,7 +40,7 @@ typedef ControlMatcher<ParentRecord, ParentResult> P_table;
// Global Vars for Parent Selection
static const char modulePrefix[] = "[ParentSelection]";
static ConfigUpdateHandler<ParentConfig> *parentConfigUpdate = nullptr;
-static int self_detect = 1;
+static int self_detect = 2;
// Config var names
static const char *file_var = "proxy.config.http.parent_proxy.file";
@@ -353,6 +353,7 @@ ParentRecord::PreProcessParents(const char *val, const int line_num, char *buf,
std::string str;
Machine *machine = Machine::instance();
constexpr char PARENT_DELIMITERS[] = ";, ";
+ HostStatus &hs = HostStatus::instance();
token = strtok_r(_val, PARENT_DELIMITERS, &savePtr);
while (token != nullptr) {
@@ -362,15 +363,28 @@ ParentRecord::PreProcessParents(const char *val, const int line_num, char *buf,
memset(fqdn, 0, sizeof(fqdn));
strncpy(fqdn, token, len);
if (self_detect && machine->is_self(fqdn)) {
- Debug("parent_select", "token: %s, matches this machine. Removing self from parent list at line %d", fqdn, line_num);
- token = strtok_r(nullptr, PARENT_DELIMITERS, &savePtr);
- continue;
+ if (self_detect == 1) {
+ Debug("parent_select", "token: %s, matches this machine. Removing self from parent list at line %d", fqdn, line_num);
+ token = strtok_r(nullptr, PARENT_DELIMITERS, &savePtr);
+ continue;
+ } else {
+ Debug("parent_select", "token: %s, matches this machine. Marking down self from parent list at line %d", fqdn, line_num);
+ hs.createHostStat(fqdn);
+ hs.setHostStatus(fqdn, HostStatus_t::HOST_STATUS_DOWN);
+ }
}
} else {
if (self_detect && machine->is_self(token)) {
- Debug("parent_select", "token: %s, matches this machine. Removing self from parent list at line %d", token, line_num);
- token = strtok_r(nullptr, PARENT_DELIMITERS, &savePtr);
- continue;
+ if (self_detect == 1) {
+ Debug("parent_select", "token: %s, matches this machine. Removing self from parent list at line %d", token, line_num);
+ token = strtok_r(nullptr, PARENT_DELIMITERS, &savePtr);
+ continue;
+ } else {
+ Debug("parent_select", "token: %s, matches this machine. Marking down self from parent list at line %d", token,
+ line_num);
+ hs.createHostStat(token);
+ hs.setHostStatus(token, HostStatus_t::HOST_STATUS_DOWN);
+ }
}
}
@@ -585,7 +599,7 @@ ParentRecord::Init(matcher_line *line_info)
bool used = false;
ParentRR_t round_robin = P_NO_ROUND_ROBIN;
char buf[128];
- RecInt rec_self_detect = 1;
+ RecInt rec_self_detect = 2;
this->line_num = line_info->line_num;
this->scheme = nullptr;
--
To stop receiving notification emails like this one, please contact
zwoop@apache.org.