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 2022/04/20 21:54:07 UTC

[trafficserver] branch 9.2.x updated: Fix plugin parent_select failover (#8676)

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

zwoop pushed a commit to branch 9.2.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/9.2.x by this push:
     new 517061258 Fix plugin parent_select failover (#8676)
517061258 is described below

commit 51706125808f5db886191bd835cadace94214215
Author: Robert O Butts <ro...@users.noreply.github.com>
AuthorDate: Wed Feb 23 09:07:38 2022 -0700

    Fix plugin parent_select failover (#8676)
    
    (cherry picked from commit 5d8235cb593ee5c84de306114224f40fdf1d5964)
---
 .../experimental/parent_select/parent_select.cc    | 138 +++-------------
 proxy/http/HttpTransact.cc                         |  28 ++--
 .../pluginTest/parent_select/peer.trace.gold       | 176 ++++++++++-----------
 .../pluginTest/parent_select/peer2.trace.gold      |  54 +++----
 4 files changed, 155 insertions(+), 241 deletions(-)

diff --git a/plugins/experimental/parent_select/parent_select.cc b/plugins/experimental/parent_select/parent_select.cc
index 83391e7c5..e3df98393 100644
--- a/plugins/experimental/parent_select/parent_select.cc
+++ b/plugins/experimental/parent_select/parent_select.cc
@@ -47,65 +47,9 @@ struct StrategyTxn {
   TSNextHopSelectionStrategy *strategy;
   void *txn; // void* because the actual type will depend on the strategy.
   int request_count;
-  const char *prev_host; // the actually tried host, used when send_request sets the response_action to be the next thing to try.
-  size_t prev_host_len;
-  in_port_t prev_port;
-  bool prev_is_retry;
-  bool prev_no_cache;
+  TSResponseAction prev_ra;
 };
 
-int
-handle_send_request(TSHttpTxn txnp, StrategyTxn *strategyTxn)
-{
-  TSDebug(PLUGIN_NAME, "handle_send_request calling");
-  TSDebug(PLUGIN_NAME, "handle_send_request got strategy '%s'", strategyTxn->strategy->name());
-
-  auto strategy = strategyTxn->strategy;
-
-  // if (strategyTxn->retry_attempts == 0) {
-  //   // just did a DoRemap, which means we need to set the response_action of what to do in the event of failure
-  //   // because a failure might not call read_response (e.g. dns failure)
-  //   strategyTxn->retry_attempts = 1;
-  //   TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
-  //   return TS_SUCCESS;
-  // }
-
-  // before sending a req, we need to set what to do on failure.
-  // Because some failures don't call handle_response before getting to HttpTransact::HandleResponse
-  // (e.g. connection failures)
-
-  TSResponseAction ra;
-  TSHttpTxnResponseActionGet(txnp, &ra);
-
-  TSDebug(PLUGIN_NAME, "handle_send_request setting prev %.*s:%d", int(ra.hostname_len), ra.hostname, ra.port);
-  strategyTxn->prev_host     = ra.hostname;
-  strategyTxn->prev_host_len = ra.hostname_len;
-  strategyTxn->prev_port     = ra.port;
-  strategyTxn->prev_is_retry = ra.is_retry;
-  strategyTxn->prev_no_cache = ra.no_cache;
-
-  strategy->next(txnp, strategyTxn->txn, ra.hostname, ra.hostname_len, ra.port, &ra.hostname, &ra.hostname_len, &ra.port,
-                 &ra.is_retry, &ra.no_cache);
-
-  ra.nextHopExists = ra.hostname_len != 0;
-  ra.fail = !ra.nextHopExists; // failed is whether to fail and return to the client. failed=false means to retry the parent we set
-                               // in the response_action
-
-  // we don't know if it's retryable yet, because we don't have a status. So set it retryable if we have something which could be
-  // retried. We'll set it retryable per the status in handle_response, and os_dns (which is called on connection failures, and
-  // always retryable [notwithstanding num_retries]).
-  ra.responseIsRetryable = ra.nextHopExists;
-  ra.goDirect            = strategy->goDirect();
-  ra.parentIsProxy       = strategy->parentIsProxy();
-
-  TSDebug(PLUGIN_NAME, "handle_send_request setting response_action hostname '%.*s' port %d direct %d proxy %d",
-          int(ra.hostname_len), ra.hostname, ra.port, ra.goDirect, ra.parentIsProxy);
-  TSHttpTxnResponseActionSet(txnp, &ra);
-
-  TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
-  return TS_SUCCESS;
-}
-
 // mark parents up or down, on failure or successful retry.
 void
 mark_response(TSHttpTxn txnp, StrategyTxn *strategyTxn, TSHttpStatus status)
@@ -118,17 +62,14 @@ mark_response(TSHttpTxn txnp, StrategyTxn *strategyTxn, TSHttpStatus status)
 
   TSResponseAction ra;
   // if the prev_host isn't null, then that was the actual host we tried which needs to be marked down.
-  if (strategyTxn->prev_host != nullptr) {
-    ra.hostname     = strategyTxn->prev_host;
-    ra.hostname_len = strategyTxn->prev_host_len;
-    ra.port         = strategyTxn->prev_port;
-    ra.is_retry     = strategyTxn->prev_is_retry;
-    ra.no_cache     = strategyTxn->prev_no_cache;
+  if (strategyTxn->prev_ra.hostname_len != 0) {
+    ra = strategyTxn->prev_ra;
     TSDebug(PLUGIN_NAME, "mark_response using prev %.*s:%d", int(ra.hostname_len), ra.hostname, ra.port);
   } else {
     TSHttpTxnResponseActionGet(txnp, &ra);
     TSDebug(PLUGIN_NAME, "mark_response using response_action %.*s:%d", int(ra.hostname_len), ra.hostname, ra.port);
   }
+
   if (isFailure && strategy->onFailureMarkParentDown(status)) {
     if (ra.hostname == nullptr) {
       TSError(
@@ -159,13 +100,6 @@ handle_read_response(TSHttpTxn txnp, StrategyTxn *strategyTxn)
 
   TSDebug(PLUGIN_NAME, "handle_read_response got strategy '%s'", strategy->name());
 
-  // increment request count here, not send_request, because we need to consistently increase with os_dns hooks.
-  // if we incremented the req count in send_request and not here, that would never be called on DNS failures, but DNS successes
-  // would call os_dns and also send_request, resulting in dns failures incrementing the count by 1, and dns successes but http
-  // failures would increment by 2. And successes would increment by 2. Hence, the only consistent way to count requests is on
-  // read_response and os_dns, and not send_request.
-  ++strategyTxn->request_count;
-
   TSMBuffer resp;
   TSMLoc resp_hdr;
   if (TS_SUCCESS != TSHttpTxnServerRespGet(txnp, &resp, &resp_hdr)) {
@@ -193,18 +127,15 @@ handle_read_response(TSHttpTxn txnp, StrategyTxn *strategyTxn)
     // Status.
     TSResponseAction ra;
     TSHttpTxnResponseActionGet(txnp, &ra);
-    ra.responseIsRetryable = strategy->responseIsRetryable(strategyTxn->request_count, status);
+    ra.responseIsRetryable = strategy->responseIsRetryable(strategyTxn->request_count - 1, status);
     TSHttpTxnResponseActionSet(txnp, &ra);
   }
 
   // un-set the "prev" hackery. That only exists for markdown, which we just did.
   // The response_action is now the next thing to try, if this was a failure,
   // and should now be considered authoritative for everything.
-  strategyTxn->prev_host     = nullptr;
-  strategyTxn->prev_host_len = 0;
-  strategyTxn->prev_port     = 0;
-  strategyTxn->prev_is_retry = false;
-  strategyTxn->prev_no_cache = false;
+
+  memset(&strategyTxn->prev_ra, 0, sizeof(TSResponseAction));
 
   TSHandleMLocRelease(resp, TS_NULL_MLOC, resp_hdr);
   TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
@@ -216,48 +147,37 @@ handle_os_dns(TSHttpTxn txnp, StrategyTxn *strategyTxn)
 {
   TSDebug(PLUGIN_NAME, "handle_os_dns calling");
 
-  ++strategyTxn->request_count; // this is called after connection failures. So if we got here, we attempted a request
-
-  // This is not called on the first attempt.
-  // Thus, if we got called here, we know it's because of a parent failure.
-  // So immediately find the next parent, and set the response_action.
+  ++strategyTxn->request_count;
 
   auto strategy = strategyTxn->strategy;
 
   TSDebug(PLUGIN_NAME, "handle_os_dns got strategy '%s'", strategy->name());
 
-  mark_response(txnp, strategyTxn, STATUS_CONNECTION_FAILURE);
-
-  // now, we need to figure out, are we the first call after send_response set the response_action as the next-thing-to-try,
-  // or are we a subsequent call, and need to actually set a new response_action
-
-  if (strategyTxn->prev_host != nullptr) {
-    TSDebug(PLUGIN_NAME, "handle_os_dns had prev, keeping existing response_action and un-setting prev");
-    // if strategyTxn->prev_host exists, this is the very first call after send_response set the response_action to the next thing
-    // to try. and no handle_response was called in-between (because it was a connection or dns failure) So keep that, and set
-    // prev_host=nullptr (so we get a new response_action the next time we're called)
-    strategyTxn->prev_host     = nullptr;
-    strategyTxn->prev_port     = 0;
-    strategyTxn->prev_is_retry = false;
-    strategyTxn->prev_no_cache = false;
-    TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE);
-    return TS_SUCCESS;
+  const TSServerState server_state = TSHttpTxnServerStateGet(txnp);
+  if (server_state == TS_SRVSTATE_CONNECTION_ERROR || server_state == TS_SRVSTATE_INACTIVE_TIMEOUT) {
+    mark_response(txnp, strategyTxn, STATUS_CONNECTION_FAILURE);
   }
 
   TSDebug(PLUGIN_NAME, "handle_os_dns had no prev, setting new response_action");
 
+  {
+    TSResponseAction ra;
+    TSHttpTxnResponseActionGet(txnp, &ra);
+    strategyTxn->prev_ra = ra;
+  }
+
   TSResponseAction ra;
-  memset(&ra, 0, sizeof(TSResponseAction)); // because {0} gives a C++ warning. Ugh.
-  const char *const exclude_host = nullptr;
-  const size_t exclude_host_len  = 0;
-  const in_port_t exclude_port   = 0;
+  memset(&ra, 0, sizeof(TSResponseAction));
+  const char *const exclude_host = strategyTxn->prev_ra.hostname;
+  const size_t exclude_host_len  = strategyTxn->prev_ra.hostname_len;
+  const in_port_t exclude_port   = strategyTxn->prev_ra.port;
   strategy->next(txnp, strategyTxn->txn, exclude_host, exclude_host_len, exclude_port, &ra.hostname, &ra.hostname_len, &ra.port,
                  &ra.is_retry, &ra.no_cache);
 
   ra.fail = ra.hostname == nullptr; // failed is whether to immediately fail and return the client a 502. In this case: whether or
                                     // not we found another parent.
   ra.nextHopExists       = ra.hostname_len != 0;
-  ra.responseIsRetryable = strategy->responseIsRetryable(strategyTxn->request_count, STATUS_CONNECTION_FAILURE);
+  ra.responseIsRetryable = strategy->responseIsRetryable(strategyTxn->request_count - 1, STATUS_CONNECTION_FAILURE);
   ra.goDirect            = strategy->goDirect();
   ra.parentIsProxy       = strategy->parentIsProxy();
   TSDebug(PLUGIN_NAME, "handle_os_dns setting response_action hostname '%.*s' port %d direct %d proxy %d is_retry %d exists %d",
@@ -298,14 +218,8 @@ handle_hook(TSCont contp, TSEvent event, void *edata)
   TSDebug(PLUGIN_NAME, "handle_hook got strategy '%s'", strategyTxn->strategy->name());
 
   switch (event) {
-  // case TS_EVENT_HTTP_READ_REQUEST_HDR:
-  //   return handle_read_request(txnp, strategyTxn);
-  case TS_EVENT_HTTP_SEND_REQUEST_HDR:
-    return handle_send_request(txnp, strategyTxn);
   case TS_EVENT_HTTP_READ_RESPONSE_HDR:
     return handle_read_response(txnp, strategyTxn);
-  // case TS_EVENT_HTTP_SEND_RESPONSE_HDR:
-  //   return handle_send_response(txnp, strategyTxn);
   case TS_EVENT_HTTP_OS_DNS:
     return handle_os_dns(txnp, strategyTxn);
   case TS_EVENT_HTTP_TXN_CLOSE:
@@ -417,16 +331,10 @@ TSRemapDoRemap(void *ih, TSHttpTxn txnp, TSRemapRequestInfo *rri)
   strategyTxn->strategy      = strategy;
   strategyTxn->txn           = strategy->newTxn();
   strategyTxn->request_count = 0;
-  strategyTxn->prev_host     = nullptr;
-  strategyTxn->prev_port     = 0;
-  strategyTxn->prev_is_retry = false;
-  strategyTxn->prev_no_cache = false;
+  memset(&strategyTxn->prev_ra, 0, sizeof(TSResponseAction));
   TSContDataSet(cont, (void *)strategyTxn);
 
-  // TSHttpTxnHookAdd(txnp, TS_HTTP_READ_REQUEST_HDR_HOOK, cont);
-  TSHttpTxnHookAdd(txnp, TS_HTTP_SEND_REQUEST_HDR_HOOK, cont);
   TSHttpTxnHookAdd(txnp, TS_HTTP_READ_RESPONSE_HDR_HOOK, cont);
-  // TSHttpTxnHookAdd(txnp, TS_HTTP_SEND_RESPONSE_HDR_HOOK, cont);
   TSHttpTxnHookAdd(txnp, TS_HTTP_OS_DNS_HOOK, cont);
   TSHttpTxnHookAdd(txnp, TS_HTTP_TXN_CLOSE_HOOK, cont);
 
diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc
index 0787e03c9..0244a9f7c 100644
--- a/proxy/http/HttpTransact.cc
+++ b/proxy/http/HttpTransact.cc
@@ -1769,11 +1769,21 @@ HttpTransact::HandleApiErrorJump(State *s)
   return;
 }
 
-// PPDNSLookupAPICall does an API callout, then calls PPDNSLookup
+// PPDNSLookupAPICall does an API callout if a plugin set the response_action,
+// then calls PPDNSLookup.
+// This is to preserve plugin hook calling behavior pre-9, which didn't call
+// the TS_HTTP_OS_DNS_HOOK on PPDNSLookup.
+// Since response_action is new in 9, only new plugins intentionally setting
+// it will have the new behavior of TS_HTTP_OS_DNS_HOOK firing on PPDNSLookup.
 void
 HttpTransact::PPDNSLookupAPICall(State *s)
 {
-  TRANSACT_RETURN(SM_ACTION_API_OS_DNS, PPDNSLookup);
+  TxnDebug("http_trans", "[HttpTransact::PPDNSLookupAPICall] response_action.handled %d", s->response_action.handled);
+  if (!s->response_action.handled) {
+    TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookup);
+  } else {
+    TRANSACT_RETURN(SM_ACTION_API_OS_DNS, PPDNSLookup);
+  }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1814,11 +1824,7 @@ HttpTransact::PPDNSLookup(State *s)
 
     if (!s->current.server->dst_addr.isValid()) {
       if (s->current.request_to == PARENT_PROXY) {
-        if (!s->response_action.handled) {
-          TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookup);
-        } else {
-          TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookupAPICall);
-        }
+        TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookupAPICall);
       } else if (s->parent_result.result == PARENT_DIRECT && s->http_config_param->no_dns_forward_to_parent != 1) {
         // We ran out of parents but parent configuration allows us to go to Origin Server directly
         CallOSDNSLookup(s);
@@ -2259,7 +2265,7 @@ HttpTransact::LookupSkipOpenServer(State *s)
   find_server_and_update_current_info(s);
 
   if (s->current.request_to == PARENT_PROXY) {
-    TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookup);
+    TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookupAPICall);
   } else if (s->parent_result.result == PARENT_FAIL) {
     handle_parent_died(s);
     return;
@@ -2966,7 +2972,7 @@ HttpTransact::HandleCacheOpenReadHit(State *s)
             ink_assert(s->pending_work == nullptr);
             s->pending_work = issue_revalidate;
 
-            TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookup);
+            TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookupAPICall);
           } else if (s->current.request_to == ORIGIN_SERVER) {
             return CallOSDNSLookup(s);
           } else {
@@ -3393,7 +3399,7 @@ HttpTransact::HandleCacheOpenReadMiss(State *s)
         return CallOSDNSLookup(s);
       }
       if (s->current.request_to == PARENT_PROXY) {
-        TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, HttpTransact::PPDNSLookup);
+        TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, HttpTransact::PPDNSLookupAPICall);
       } else {
         handle_parent_died(s);
         return;
@@ -3762,7 +3768,7 @@ HttpTransact::handle_response_from_parent(State *s)
   switch (next_lookup) {
   case PARENT_PROXY:
     ink_assert(s->current.request_to == PARENT_PROXY);
-    TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookup);
+    TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookupAPICall);
     break;
   case ORIGIN_SERVER:
     // Next lookup is Origin Server, try DNS for Origin Server
diff --git a/tests/gold_tests/pluginTest/parent_select/peer.trace.gold b/tests/gold_tests/pluginTest/parent_select/peer.trace.gold
index 4c1810eeb..85da76959 100644
--- a/tests/gold_tests/pluginTest/parent_select/peer.trace.gold
+++ b/tests/gold_tests/pluginTest/parent_select/peer.trace.gold
@@ -1,10 +1,10 @@
 trace_peer0.log:+++++++++ Incoming Request +++++++++
 trace_peer0.log:GET http://dummy.com/obj0 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
-trace_peer0.log:+++++++++ Proxy's Request +++++++++
-trace_peer0.log:GET http://not_used/obj0 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer0.log:+++++++++ Proxy's Request +++++++++
+trace_peer0.log:GET http://not_used/obj0 HTTP/1.1
 trace_peer0.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer0.log:GET http://not_used/obj0 HTTP/1.1
 trace_peer0.log:+++++++++ Incoming O.S. Response +++++++++
@@ -18,10 +18,10 @@ trace_peer0.log:HTTP/1.1 200 OK
 trace_peer0.log:+++++++++ Incoming Request +++++++++
 trace_peer0.log:GET http://not_used/obj7 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
-trace_peer0.log:+++++++++ Proxy's Request +++++++++
-trace_peer0.log:GET http://also_not_used/obj7 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer0.log:+++++++++ Proxy's Request +++++++++
+trace_peer0.log:GET http://also_not_used/obj7 HTTP/1.1
 trace_peer0.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer0.log:GET http://also_not_used/obj7 HTTP/1.1
 trace_peer0.log:+++++++++ Incoming O.S. Response +++++++++
@@ -35,10 +35,10 @@ trace_peer0.log:HTTP/1.1 200 OK
 trace_peer0.log:+++++++++ Incoming Request +++++++++
 trace_peer0.log:GET http://dummy.com/obj8 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer6
-trace_peer0.log:+++++++++ Proxy's Request +++++++++
-trace_peer0.log:GET http://not_used/obj8 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer0.log:+++++++++ Proxy's Request +++++++++
+trace_peer0.log:GET http://not_used/obj8 HTTP/1.1
 trace_peer0.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer0.log:GET http://not_used/obj8 HTTP/1.1
 trace_peer0.log:+++++++++ Incoming O.S. Response +++++++++
@@ -82,10 +82,10 @@ trace_peer0.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://dummy.com/obj1 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
-trace_peer1.log:+++++++++ Proxy's Request +++++++++
-trace_peer1.log:GET http://not_used/obj1 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer1.log:+++++++++ Proxy's Request +++++++++
+trace_peer1.log:GET http://not_used/obj1 HTTP/1.1
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://not_used/obj1 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -99,10 +99,10 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://dummy.com/obj9 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
-trace_peer1.log:+++++++++ Proxy's Request +++++++++
-trace_peer1.log:GET http://not_used/obj9 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer1.log:+++++++++ Proxy's Request +++++++++
+trace_peer1.log:GET http://not_used/obj9 HTTP/1.1
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://not_used/obj9 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -116,10 +116,10 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://not_used/obj10 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
-trace_peer1.log:+++++++++ Proxy's Request +++++++++
-trace_peer1.log:GET http://also_not_used/obj10 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer1.log:+++++++++ Proxy's Request +++++++++
+trace_peer1.log:GET http://also_not_used/obj10 HTTP/1.1
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://also_not_used/obj10 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -133,10 +133,10 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://dummy.com/obj3 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer1.log:+++++++++ Proxy's Request +++++++++
-trace_peer1.log:GET http://not_used/obj3 HTTP/1.1
 [3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer1.log:+++++++++ Proxy's Request +++++++++
+trace_peer1.log:GET http://not_used/obj3 HTTP/1.1
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://not_used/obj3 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -160,10 +160,10 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://dummy.com/obj11 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
-trace_peer1.log:+++++++++ Proxy's Request +++++++++
-trace_peer1.log:GET http://not_used/obj11 HTTP/1.1
 [5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer1.log:+++++++++ Proxy's Request +++++++++
+trace_peer1.log:GET http://not_used/obj11 HTTP/1.1
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://not_used/obj11 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -177,10 +177,10 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://dummy.com/obj2 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://not_used/obj2 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://not_used/obj2 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://not_used/obj2 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -194,10 +194,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://not_used/obj3 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://also_not_used/obj3 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://also_not_used/obj3 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://also_not_used/obj3 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -211,10 +211,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://not_used/obj4 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://also_not_used/obj4 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://also_not_used/obj4 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://also_not_used/obj4 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -228,10 +228,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://not_used/obj5 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://also_not_used/obj5 HTTP/1.1
 [3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://also_not_used/obj5 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://also_not_used/obj5 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -245,10 +245,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://not_used/obj6 HTTP/1.1
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://also_not_used/obj6 HTTP/1.1
 [4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://also_not_used/obj6 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://also_not_used/obj6 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -262,10 +262,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://dummy.com/obj10 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer1
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://not_used/obj10 HTTP/1.1
 [5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://not_used/obj10 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://not_used/obj10 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -279,10 +279,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://not_used/obj12 HTTP/1.1
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://also_not_used/obj12 HTTP/1.1
 [6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://also_not_used/obj12 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://also_not_used/obj12 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -316,10 +316,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://dummy.com/obj6 HTTP/1.1
 [9] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://not_used/obj6 HTTP/1.1
 [9] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [9] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://not_used/obj6 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://not_used/obj6 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -333,10 +333,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://dummy.com/obj14 HTTP/1.1
 [10] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
-trace_peer2.log:+++++++++ Proxy's Request +++++++++
-trace_peer2.log:GET http://not_used/obj14 HTTP/1.1
 [10] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [10] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer2.log:+++++++++ Proxy's Request +++++++++
+trace_peer2.log:GET http://not_used/obj14 HTTP/1.1
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://not_used/obj14 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -350,10 +350,10 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://not_used/obj0 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://also_not_used/obj0 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://also_not_used/obj0 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://also_not_used/obj0 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -367,10 +367,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://dummy.com/obj3 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://not_used/obj3 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://not_used/obj3 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://not_used/obj3 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -384,10 +384,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://dummy.com/obj11 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://not_used/obj11 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://not_used/obj11 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://not_used/obj11 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -401,10 +401,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://not_used/obj13 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://also_not_used/obj13 HTTP/1.1
 [3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://also_not_used/obj13 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://also_not_used/obj13 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -418,10 +418,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://not_used/obj15 HTTP/1.1
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://also_not_used/obj15 HTTP/1.1
 [4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream1
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://also_not_used/obj15 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://also_not_used/obj15 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -435,10 +435,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://dummy.com/obj1 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://not_used/obj1 HTTP/1.1
 [5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://not_used/obj1 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://not_used/obj1 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -452,10 +452,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://dummy.com/obj9 HTTP/1.1
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
-trace_peer3.log:+++++++++ Proxy's Request +++++++++
-trace_peer3.log:GET http://not_used/obj9 HTTP/1.1
 [6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer3.log:+++++++++ Proxy's Request +++++++++
+trace_peer3.log:GET http://not_used/obj9 HTTP/1.1
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://not_used/obj9 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -489,10 +489,10 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer4.log:+++++++++ Incoming Request +++++++++
 trace_peer4.log:GET http://dummy.com/obj4 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer4.log:+++++++++ Proxy's Request +++++++++
-trace_peer4.log:GET http://not_used/obj4 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer4.log:+++++++++ Proxy's Request +++++++++
+trace_peer4.log:GET http://not_used/obj4 HTTP/1.1
 trace_peer4.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer4.log:GET http://not_used/obj4 HTTP/1.1
 trace_peer4.log:+++++++++ Incoming O.S. Response +++++++++
@@ -506,10 +506,10 @@ trace_peer4.log:HTTP/1.1 200 OK
 trace_peer4.log:+++++++++ Incoming Request +++++++++
 trace_peer4.log:GET http://dummy.com/obj12 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer4.log:+++++++++ Proxy's Request +++++++++
-trace_peer4.log:GET http://not_used/obj12 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer4.log:+++++++++ Proxy's Request +++++++++
+trace_peer4.log:GET http://not_used/obj12 HTTP/1.1
 trace_peer4.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer4.log:GET http://not_used/obj12 HTTP/1.1
 trace_peer4.log:+++++++++ Incoming O.S. Response +++++++++
@@ -543,10 +543,10 @@ trace_peer4.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://not_used/obj1 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
-trace_peer5.log:+++++++++ Proxy's Request +++++++++
-trace_peer5.log:GET http://also_not_used/obj1 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer5.log:+++++++++ Proxy's Request +++++++++
+trace_peer5.log:GET http://also_not_used/obj1 HTTP/1.1
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://also_not_used/obj1 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -560,10 +560,10 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://dummy.com/obj5 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer5.log:+++++++++ Proxy's Request +++++++++
-trace_peer5.log:GET http://not_used/obj5 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer5.log:+++++++++ Proxy's Request +++++++++
+trace_peer5.log:GET http://not_used/obj5 HTTP/1.1
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://not_used/obj5 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -577,10 +577,10 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://dummy.com/obj13 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
-trace_peer5.log:+++++++++ Proxy's Request +++++++++
-trace_peer5.log:GET http://not_used/obj13 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer5.log:+++++++++ Proxy's Request +++++++++
+trace_peer5.log:GET http://not_used/obj13 HTTP/1.1
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://not_used/obj13 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -594,10 +594,10 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://not_used/obj14 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
-trace_peer5.log:+++++++++ Proxy's Request +++++++++
-trace_peer5.log:GET http://also_not_used/obj14 HTTP/1.1
 [3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream1
+trace_peer5.log:+++++++++ Proxy's Request +++++++++
+trace_peer5.log:GET http://also_not_used/obj14 HTTP/1.1
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://also_not_used/obj14 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -621,10 +621,10 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://dummy.com/obj7 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer0
-trace_peer5.log:+++++++++ Proxy's Request +++++++++
-trace_peer5.log:GET http://not_used/obj7 HTTP/1.1
 [5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer5.log:+++++++++ Proxy's Request +++++++++
+trace_peer5.log:GET http://not_used/obj7 HTTP/1.1
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://not_used/obj7 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -648,10 +648,10 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://dummy.com/obj15 HTTP/1.1
 [7] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
-trace_peer5.log:+++++++++ Proxy's Request +++++++++
-trace_peer5.log:GET http://not_used/obj15 HTTP/1.1
 [7] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [7] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer5.log:+++++++++ Proxy's Request +++++++++
+trace_peer5.log:GET http://not_used/obj15 HTTP/1.1
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://not_used/obj15 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -665,10 +665,10 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://dummy.com/obj6 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer6.log:+++++++++ Proxy's Request +++++++++
-trace_peer6.log:GET http://not_used/obj6 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer6.log:+++++++++ Proxy's Request +++++++++
+trace_peer6.log:GET http://not_used/obj6 HTTP/1.1
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://not_used/obj6 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -682,10 +682,10 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://not_used/obj8 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
-trace_peer6.log:+++++++++ Proxy's Request +++++++++
-trace_peer6.log:GET http://also_not_used/obj8 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream3
+trace_peer6.log:+++++++++ Proxy's Request +++++++++
+trace_peer6.log:GET http://also_not_used/obj8 HTTP/1.1
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://also_not_used/obj8 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -699,10 +699,10 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://dummy.com/obj14 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
-trace_peer6.log:+++++++++ Proxy's Request +++++++++
-trace_peer6.log:GET http://not_used/obj14 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
+trace_peer6.log:+++++++++ Proxy's Request +++++++++
+trace_peer6.log:GET http://not_used/obj14 HTTP/1.1
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://not_used/obj14 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -716,10 +716,10 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://dummy.com/obj2 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
-trace_peer6.log:+++++++++ Proxy's Request +++++++++
-trace_peer6.log:GET http://not_used/obj2 HTTP/1.1
 [3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer6.log:+++++++++ Proxy's Request +++++++++
+trace_peer6.log:GET http://not_used/obj2 HTTP/1.1
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://not_used/obj2 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -733,10 +733,10 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://dummy.com/obj10 HTTP/1.1
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_peer1
-trace_peer6.log:+++++++++ Proxy's Request +++++++++
-trace_peer6.log:GET http://not_used/obj10 HTTP/1.1
 [4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer6.log:+++++++++ Proxy's Request +++++++++
+trace_peer6.log:GET http://not_used/obj10 HTTP/1.1
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://not_used/obj10 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -750,10 +750,10 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://not_used/obj2 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://also_not_used/obj2 HTTP/1.1
 [0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://also_not_used/obj2 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://also_not_used/obj2 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -767,10 +767,10 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://dummy.com/obj7 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer0
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://not_used/obj7 HTTP/1.1
 [1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://not_used/obj7 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://not_used/obj7 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -784,10 +784,10 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://not_used/obj9 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream0
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://also_not_used/obj9 HTTP/1.1
 [2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://also_not_used/obj9 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://also_not_used/obj9 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -801,10 +801,10 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://not_used/obj11 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://also_not_used/obj11 HTTP/1.1
 [3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://also_not_used/obj11 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://also_not_used/obj11 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -818,10 +818,10 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://dummy.com/obj15 HTTP/1.1
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://not_used/obj15 HTTP/1.1
 [4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream4
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://not_used/obj15 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://not_used/obj15 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -845,10 +845,10 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://dummy.com/obj5 HTTP/1.1
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://not_used/obj5 HTTP/1.1
 [6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream5
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://not_used/obj5 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://not_used/obj5 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -882,10 +882,10 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://dummy.com/obj13 HTTP/1.1
 [9] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
-trace_peer7.log:+++++++++ Proxy's Request +++++++++
-trace_peer7.log:GET http://not_used/obj13 HTTP/1.1
 [9] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 [9] state->result: PARENT_SPECIFIED Chosen parent: ts_upstream2
+trace_peer7.log:+++++++++ Proxy's Request +++++++++
+trace_peer7.log:GET http://not_used/obj13 HTTP/1.1
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://not_used/obj13 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
diff --git a/tests/gold_tests/pluginTest/parent_select/peer2.trace.gold b/tests/gold_tests/pluginTest/parent_select/peer2.trace.gold
index 47eee1d83..784cf5ed7 100644
--- a/tests/gold_tests/pluginTest/parent_select/peer2.trace.gold
+++ b/tests/gold_tests/pluginTest/parent_select/peer2.trace.gold
@@ -1,9 +1,9 @@
 trace_peer0.log:+++++++++ Incoming Request +++++++++
 trace_peer0.log:GET http://ts_upstream0:UP_PORT0/obj0 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
+[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer0.log:+++++++++ Proxy's Request +++++++++
 trace_peer0.log:GET http://ts_upstream0:UP_PORT0/obj0 HTTP/1.1
-[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer0.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer0.log:GET http://ts_upstream0:UP_PORT0/obj0 HTTP/1.1
 trace_peer0.log:+++++++++ Incoming O.S. Response +++++++++
@@ -31,9 +31,9 @@ trace_peer0.log:HTTP/1.1 200 OK
 trace_peer0.log:+++++++++ Incoming Request +++++++++
 trace_peer0.log:GET http://ts_upstream0:UP_PORT0/obj8 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer6
+[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer0.log:+++++++++ Proxy's Request +++++++++
 trace_peer0.log:GET http://ts_upstream0:UP_PORT0/obj8 HTTP/1.1
-[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer0.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer0.log:GET http://ts_upstream0:UP_PORT0/obj8 HTTP/1.1
 trace_peer0.log:+++++++++ Incoming O.S. Response +++++++++
@@ -76,9 +76,9 @@ trace_peer0.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj1 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
+[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj1 HTTP/1.1
-[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj1 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -92,9 +92,9 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj9 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
+[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj9 HTTP/1.1
-[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj9 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -122,9 +122,9 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj3 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj3 HTTP/1.1
-[3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj3 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -147,9 +147,9 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer1.log:+++++++++ Incoming Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj11 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
+[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj11 HTTP/1.1
-[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer1.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer1.log:GET http://ts_upstream0:UP_PORT0/obj11 HTTP/1.1
 trace_peer1.log:+++++++++ Incoming O.S. Response +++++++++
@@ -163,9 +163,9 @@ trace_peer1.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj2 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
+[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer2.log:+++++++++ Proxy's Request +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj2 HTTP/1.1
-[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj2 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -235,9 +235,9 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj10 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer1
+[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer2.log:+++++++++ Proxy's Request +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj10 HTTP/1.1
-[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj10 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -292,9 +292,9 @@ trace_peer2.log:HTTP/1.1 200 OK
 trace_peer2.log:+++++++++ Incoming Request +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj14 HTTP/1.1
 [10] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
+[10] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer2.log:+++++++++ Proxy's Request +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj14 HTTP/1.1
-[10] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer2.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer2.log:GET http://ts_upstream0:UP_PORT0/obj14 HTTP/1.1
 trace_peer2.log:+++++++++ Incoming O.S. Response +++++++++
@@ -322,9 +322,9 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj3 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj3 HTTP/1.1
-[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj3 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -338,9 +338,9 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj11 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
+[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj11 HTTP/1.1
-[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj11 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -382,9 +382,9 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj1 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
+[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj1 HTTP/1.1
-[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj1 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -398,9 +398,9 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer3.log:+++++++++ Incoming Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj9 HTTP/1.1
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
+[6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj9 HTTP/1.1
-[6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer3.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer3.log:GET http://ts_upstream0:UP_PORT0/obj9 HTTP/1.1
 trace_peer3.log:+++++++++ Incoming O.S. Response +++++++++
@@ -432,9 +432,9 @@ trace_peer3.log:HTTP/1.1 200 OK
 trace_peer4.log:+++++++++ Incoming Request +++++++++
 trace_peer4.log:GET http://ts_upstream0:UP_PORT0/obj4 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer4.log:+++++++++ Proxy's Request +++++++++
 trace_peer4.log:GET http://ts_upstream0:UP_PORT0/obj4 HTTP/1.1
-[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer4.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer4.log:GET http://ts_upstream0:UP_PORT0/obj4 HTTP/1.1
 trace_peer4.log:+++++++++ Incoming O.S. Response +++++++++
@@ -448,9 +448,9 @@ trace_peer4.log:HTTP/1.1 200 OK
 trace_peer4.log:+++++++++ Incoming Request +++++++++
 trace_peer4.log:GET http://ts_upstream0:UP_PORT0/obj12 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer4.log:+++++++++ Proxy's Request +++++++++
 trace_peer4.log:GET http://ts_upstream0:UP_PORT0/obj12 HTTP/1.1
-[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer4.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer4.log:GET http://ts_upstream0:UP_PORT0/obj12 HTTP/1.1
 trace_peer4.log:+++++++++ Incoming O.S. Response +++++++++
@@ -498,9 +498,9 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj5 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj5 HTTP/1.1
-[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj5 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -514,9 +514,9 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj13 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
+[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj13 HTTP/1.1
-[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj13 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -553,9 +553,9 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj7 HTTP/1.1
 [5] state->result: PARENT_SPECIFIED Chosen parent: ts_peer0
+[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj7 HTTP/1.1
-[5] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj7 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -578,9 +578,9 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer5.log:+++++++++ Incoming Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj15 HTTP/1.1
 [7] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
+[7] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj15 HTTP/1.1
-[7] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer5.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer5.log:GET http://ts_upstream0:UP_PORT0/obj15 HTTP/1.1
 trace_peer5.log:+++++++++ Incoming O.S. Response +++++++++
@@ -594,9 +594,9 @@ trace_peer5.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj6 HTTP/1.1
 [0] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj6 HTTP/1.1
-[0] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj6 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -624,9 +624,9 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj14 HTTP/1.1
 [2] state->result: PARENT_SPECIFIED Chosen parent: ts_peer5
+[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj14 HTTP/1.1
-[2] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj14 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -640,9 +640,9 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj2 HTTP/1.1
 [3] state->result: PARENT_SPECIFIED Chosen parent: ts_peer7
+[3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj2 HTTP/1.1
-[3] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj2 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -656,9 +656,9 @@ trace_peer6.log:HTTP/1.1 200 OK
 trace_peer6.log:+++++++++ Incoming Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj10 HTTP/1.1
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_peer1
+[4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj10 HTTP/1.1
-[4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer6.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer6.log:GET http://ts_upstream0:UP_PORT0/obj10 HTTP/1.1
 trace_peer6.log:+++++++++ Incoming O.S. Response +++++++++
@@ -686,9 +686,9 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj7 HTTP/1.1
 [1] state->result: PARENT_SPECIFIED Chosen parent: ts_peer0
+[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj7 HTTP/1.1
-[1] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj7 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -730,9 +730,9 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj15 HTTP/1.1
 [4] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
+[4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj15 HTTP/1.1
-[4] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj15 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -755,9 +755,9 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj5 HTTP/1.1
 [6] state->result: PARENT_SPECIFIED Chosen parent: ts_peer2
+[6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj5 HTTP/1.1
-[6] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj5 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++
@@ -789,9 +789,9 @@ trace_peer7.log:HTTP/1.1 200 OK
 trace_peer7.log:+++++++++ Incoming Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj13 HTTP/1.1
 [9] state->result: PARENT_SPECIFIED Chosen parent: ts_peer3
+[9] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj13 HTTP/1.1
-[9] not firstcall, line_number: 0, result: PARENT_SPECIFIED
 trace_peer7.log:+++++++++ Proxy's Request after hooks +++++++++
 trace_peer7.log:GET http://ts_upstream0:UP_PORT0/obj13 HTTP/1.1
 trace_peer7.log:+++++++++ Incoming O.S. Response +++++++++