From: Amos Jeffries Date: Thu, 4 Sep 2008 04:33:48 +0000 (+1200) Subject: Author: Marin Stavrev X-Git-Tag: SQUID_3_1_0_1~49^2~63 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=452bb8e2cbc614cce3edb499ed1cfc3997855f3b;p=thirdparty%2Fsquid.git Author: Marin Stavrev Fix bug in ZPH parent/sibling hit marking. When a peer (parent or sibling) hit was detected the TOS was changed using the local hit TOS marking (zph_tos_local) value instead of the one configured in the zph_tos_peer parameter. --- diff --git a/src/client_side_reply.cc b/src/client_side_reply.cc index a971611989..94cb42bdfa 100644 --- a/src/client_side_reply.cc +++ b/src/client_side_reply.cc @@ -1585,52 +1585,12 @@ clientReplyContext::doGetMoreData() assert(http->out.size == 0); assert(http->out.offset == 0); #if USE_ZPH_QOS - if(Config.zph_tos_local || Config.zph_tos_peer || - (Config.onoff.zph_preserve_miss_tos && Config.zph_preserve_miss_tos_mask) ) + if (Config.zph_tos_local) { - int need_change = 0; - int hit = 0; - int tos = 0; - int tos_old = 0; - int tos_len = sizeof(tos_old); - int res; - - if (Config.zph_tos_local) { - /* local hit */ - hit = 1; - tos = Config.zph_tos_local; - } - else if(Config.zph_tos_peer && - (http->request->hier.code==SIBLING_HIT || - (Config.onoff.zph_tos_parent && http->request->hier.code==PARENT_HIT ) ) ) - { - /* sibling or parent hit */ - hit = 1; - tos = Config.zph_tos_peer; - } - - if(http->request->flags.proxy_keepalive) { - res = getsockopt(http->getConn()->fd, IPPROTO_IP, IP_TOS, &tos_old, (socklen_t*)&tos_len); - if (res < 0) { - debugs(33, 1, "ZPH: error in getsockopt(IP_TOS) on keepalived FD "<< http->getConn()->fd << " " << xstrerror()); - } - else if (hit && tos_old != tos) { - /* HIT: 1-st request, or previous was MISS, - * or local/parent hit change. - */ - need_change = 1; - } - } - else if (hit) { - /* no keepalive */ - need_change = 1; - } - if(need_change) { - comm_set_tos(http->getConn()->fd,tos); - } + debugs(33, 2, "ZPH Local hit, TOS="<getConn()->fd,Config.zph_tos_local); } #endif /* USE_ZPH_QOS */ - tempBuffer.offset = reqofs; tempBuffer.length = getNextNode()->readBuffer.length; tempBuffer.data = getNextNode()->readBuffer.data; @@ -1895,13 +1855,22 @@ clientReplyContext::sendMoreData (StoreIOBuffer result) body_buf = buf; } -#if USE_ZPH_QOS - if (reqofs==0 && !logTypeIsATcpHit(http->logType) && - Config.onoff.zph_preserve_miss_tos && - Config.zph_preserve_miss_tos_mask) +#if USE_ZPH_QOS + if (reqofs==0 && !logTypeIsATcpHit(http->logType)) { - int tos = fd_table[fd].upstreamTOS & Config.zph_preserve_miss_tos_mask; - comm_set_tos(fd,tos); + int tos = 0; + if (Config.zph_tos_peer && + (http->request->hier.code==SIBLING_HIT || + Config.onoff.zph_tos_parent && http->request->hier.code==PARENT_HIT) ) + { + tos = Config.zph_tos_peer; + debugs(33, 2, "ZPH: Peer hit with hier.code="<request->hier.code<<", TOS="<