neighbors.cc File Reference
#include "squid.h"
#include "acl/FilledChecklist.h"
#include "anyp/PortCfg.h"
#include "base/EnumIterator.h"
#include "base/IoManip.h"
#include "base/PackableStream.h"
#include "base/PrecomputedCodeContext.h"
#include "CacheDigest.h"
#include "CachePeer.h"
#include "CachePeers.h"
#include "comm/Connection.h"
#include "comm/ConnOpener.h"
#include "debug/Messages.h"
#include "event.h"
#include "FwdState.h"
#include "globals.h"
#include "htcp.h"
#include "HttpRequest.h"
#include "icmp/net_db.h"
#include "ICP.h"
#include "int.h"
#include "ip/Address.h"
#include "ip/tools.h"
#include "ipcache.h"
#include "MemObject.h"
#include "mgr/Registration.h"
#include "multicast.h"
#include "neighbors.h"
#include "NeighborTypeDomainList.h"
#include "pconn.h"
#include "PeerDigest.h"
#include "PeerPoolMgr.h"
#include "PeerSelectState.h"
#include "RequestFlags.h"
#include "SquidConfig.h"
#include "SquidMath.h"
#include "stat.h"
#include "Store.h"
#include "store_key_md5.h"
#include "tools.h"
Include dependency graph for neighbors.cc:

Go to the source code of this file.

Macros

#define MCAST_COUNT_RATE   900
 

Functions

bool peerAllowedToUse (const CachePeer *, PeerSelector *)
 
static int peerWouldBePinged (const CachePeer *, PeerSelector *)
 
static void neighborAlive (CachePeer *, const MemObject *, const icp_common_t *)
 
static void neighborAliveHtcp (CachePeer *, const MemObject *, const HtcpReplyData *)
 
static void neighborCountIgnored (CachePeer *)
 
static void peerDnsRefreshCheck (void *)
 
static void peerDnsRefreshStart ()
 
static void peerProbeConnect (CachePeer *, const bool reprobeIfBusy=false)
 
static void peerCountMcastPeersDone (void *data)
 
static void peerCountMcastPeersStart (void *data)
 
static void peerCountMcastPeersSchedule (CachePeer *p, time_t when)
 
static void peerCountMcastPeersAbort (PeerSelector *)
 
static void peerCountMcastPeersCreateAndSend (CachePeer *const p)
 initiates an ICP transaction to a multicast peer More...
 
static void neighborIgnoreNonPeer (const Ip::Address &, icp_opcode)
 
static void dump_peers (StoreEntry *, CachePeers *)
 
const char * neighborTypeStr (const CachePeer *p)
 
CachePeerwhichPeer (const Ip::Address &from)
 
peer_t neighborType (const CachePeer *p, const AnyP::Uri &url)
 
bool peerCanOpenMore (const CachePeer *p)
 Whether we can open new connections to the peer (e.g., despite max-conn) More...
 
bool peerHasConnAvailable (const CachePeer *p)
 Whether the peer has idle or standby connections that can be used now. More...
 
void peerConnClosed (CachePeer *p)
 Notifies peer of an associated connection closure. More...
 
int peerHTTPOkay (const CachePeer *p, PeerSelector *ps)
 
int neighborsCount (PeerSelector *ps)
 
CachePeergetFirstUpParent (PeerSelector *ps)
 
CachePeergetRoundRobinParent (PeerSelector *ps)
 
CachePeergetWeightedRoundRobinParent (PeerSelector *ps)
 
static void peerClearRRLoop (void *data)
 
void peerClearRRStart (void)
 
void peerClearRR ()
 
void peerAlive (CachePeer *p)
 
CachePeergetDefaultParent (PeerSelector *ps)
 
static void neighborsRegisterWithCacheManager ()
 
void neighbors_init (void)
 
int neighborsUdpPing (HttpRequest *request, StoreEntry *entry, IRCB *callback, PeerSelector *ps, int *exprep, int *timeout)
 
lookup_t peerDigestLookup (CachePeer *p, PeerSelector *ps)
 
CachePeerneighborsDigestSelect (PeerSelector *ps)
 
void peerNoteDigestLookup (HttpRequest *request, CachePeer *p, lookup_t lookup)
 
static void neighborUpdateRtt (CachePeer *p, MemObject *mem)
 
static int ignoreMulticastReply (CachePeer *p, PeerSelector *ps)
 
void neighborsUdpAck (const cache_key *key, icp_common_t *header, const Ip::Address &from)
 
CachePeerfindCachePeerByName (const char *const name)
 cache_peer with a given name (or nil) More...
 
int neighborUp (const CachePeer *p)
 
time_t positiveTimeout (const time_t timeout)
 
static void peerDNSConfigure (const ipcache_addrs *ia, const Dns::LookupDetails &, void *data)
 
static void peerScheduleDnsRefreshCheck (const double delayInSeconds)
 
static bool peerProbeIsBusy (const CachePeer *p)
 whether new TCP probes are currently banned More...
 
static void peerProbeConnectDone (const Comm::ConnectionPointer &conn, Comm::Flag status, int, void *data)
 
static void peerCountHandleIcpReply (CachePeer *p, peer_t, AnyP::ProtocolType proto, void *, void *data)
 
static void neighborDumpPeers (StoreEntry *sentry)
 
void dump_peer_options (StoreEntry *sentry, CachePeer *p)
 
void neighborsHtcpReply (const cache_key *key, HtcpReplyData *htcp, const Ip::Address &from)
 
void neighborsHtcpClear (StoreEntry *e, HttpRequest *req, const HttpRequestMethod &method, htcp_clr_reason reason)
 

Variables

static IPH peerDNSConfigure
 
static CNCB peerProbeConnectDone
 
static IRCB peerCountHandleIcpReply
 
static OBJH neighborDumpPeers
 
static unsigned short echo_port
 
static int NLateReplies = 0
 

Macro Definition Documentation

◆ MCAST_COUNT_RATE

#define MCAST_COUNT_RATE   900

Definition at line 53 of file neighbors.cc.

Function Documentation

◆ dump_peer_options()

◆ dump_peers()

static void dump_peers ( StoreEntry sentry,
CachePeers peers 
)
static

◆ findCachePeerByName()

CachePeer* findCachePeerByName ( const char *const  name)

Definition at line 1048 of file neighbors.cc.

References CurrentCachePeers().

Referenced by ConfigParser::cachePeer(), and parse_peer().

◆ getDefaultParent()

◆ getFirstUpParent()

◆ getRoundRobinParent()

◆ getWeightedRoundRobinParent()

◆ ignoreMulticastReply()

static int ignoreMulticastReply ( CachePeer p,
PeerSelector ps 
)
static

Definition at line 905 of file neighbors.cc.

References CachePeer::mcast_responder, CachePeer::options, and peerHTTPOkay().

Referenced by neighborsHtcpReply(), and neighborsUdpAck().

◆ neighborAlive()

static void neighborAlive ( CachePeer p,
const MemObject ,
const icp_common_t header 
)
static

◆ neighborAliveHtcp()

static void neighborAliveHtcp ( CachePeer p,
const MemObject ,
const HtcpReplyData htcp 
)
static

◆ neighborCountIgnored()

static void neighborCountIgnored ( CachePeer p)
static

Definition at line 877 of file neighbors.cc.

References CachePeer::ignored_replies, NLateReplies, and CachePeer::stats.

Referenced by neighborsHtcpReply(), and neighborsUdpAck().

◆ neighborDumpPeers()

static void neighborDumpPeers ( StoreEntry sentry)
static

Definition at line 1376 of file neighbors.cc.

References Config, dump_peers(), and SquidConfig::peers.

◆ neighborIgnoreNonPeer()

static void neighborIgnoreNonPeer ( const Ip::Address from,
icp_opcode  opcode 
)
static

Definition at line 888 of file neighbors.cc.

References DBG_IMPORTANT, debugs, Debug::Extra(), icp_opcode_str, and isPowTen().

Referenced by neighborsUdpAck().

◆ neighbors_init()

◆ neighborsCount()

int neighborsCount ( PeerSelector ps)

Definition at line 267 of file neighbors.cc.

References CurrentCachePeers(), debugs, and peerWouldBePinged().

Referenced by peerSelectIcpPing().

◆ neighborsDigestSelect()

◆ neighborsHtcpClear()

void neighborsHtcpClear ( StoreEntry e,
HttpRequest req,
const HttpRequestMethod method,
htcp_clr_reason  reason 
)

◆ neighborsHtcpReply()

◆ neighborsRegisterWithCacheManager()

static void neighborsRegisterWithCacheManager ( )
static

Definition at line 496 of file neighbors.cc.

References neighborDumpPeers, and Mgr::RegisterAction().

Referenced by neighbors_init().

◆ neighborsUdpAck()

◆ neighborsUdpPing()

◆ neighborType()

◆ neighborTypeStr()

const char* neighborTypeStr ( const CachePeer p)

◆ neighborUp()

◆ neighborUpdateRtt()

◆ peerAlive()

◆ peerAllowedToUse()

◆ peerCanOpenMore()

bool peerCanOpenMore ( const CachePeer p)

◆ peerClearRR()

void peerClearRR ( )

Called whenever the round-robin counters need to be reset to a sane state. So far those times are:

  • On startup and reconfigure - to set the counters to sane initial settings.
  • When a CachePeer has revived from dead, to prevent the revived CachePeer being flooded with requests which it has 'missed' during the down period.

Definition at line 442 of file neighbors.cc.

References CurrentCachePeers().

Referenced by peerAlive(), and peerClearRRLoop().

◆ peerClearRRLoop()

static void peerClearRRLoop ( void *  data)
static

This gets called every 5 minutes to clear the round-robin counter. The exact timing is an arbitrary default, set on estimate timing of a large number of requests in a high-performance environment during the period. The larger the number of requests between cycled resets the more balanced the operations.

Parameters
dataunused

TODO: Make the reset timing a selectable parameter in squid.conf

Definition at line 413 of file neighbors.cc.

References eventAdd(), and peerClearRR().

Referenced by peerClearRRStart().

◆ peerClearRRStart()

void peerClearRRStart ( void  )

This gets called on startup and restart to kick off the CachePeer round-robin maintenance event. It ensures that no matter how many times its called no more than one event is scheduled.

Definition at line 425 of file neighbors.cc.

References peerClearRRLoop().

Referenced by parse_peer().

◆ peerConnClosed()

◆ peerCountHandleIcpReply()

◆ peerCountMcastPeersAbort()

◆ peerCountMcastPeersCreateAndSend()

◆ peerCountMcastPeersDone()

static void peerCountMcastPeersDone ( void *  data)
static

Definition at line 1323 of file neighbors.cc.

References CallBack().

Referenced by peerCountMcastPeersCreateAndSend().

◆ peerCountMcastPeersSchedule()

static void peerCountMcastPeersSchedule ( CachePeer p,
time_t  when 
)
static

◆ peerCountMcastPeersStart()

static void peerCountMcastPeersStart ( void *  data)
static

◆ peerDigestLookup()

◆ peerDNSConfigure()

◆ peerDnsRefreshCheck()

static void peerDnsRefreshCheck ( void *  )
static

◆ peerDnsRefreshStart()

static void peerDnsRefreshStart ( )
static

◆ peerHasConnAvailable()

bool peerHasConnAvailable ( const CachePeer p)

Definition at line 226 of file neighbors.cc.

References PconnPool::count(), debugs, CachePeer::pool, and CachePeer::standby.

Referenced by peerHTTPOkay().

◆ peerHTTPOkay()

◆ peerNoteDigestLookup()

void peerNoteDigestLookup ( HttpRequest request,
CachePeer p,
lookup_t  lookup 
)

◆ peerProbeConnect()

◆ peerProbeConnectDone()

static void peerProbeConnectDone ( const Comm::ConnectionPointer conn,
Comm::Flag  status,
int  ,
void *  data 
)
static

◆ peerProbeIsBusy()

static bool peerProbeIsBusy ( const CachePeer p)
static

◆ peerScheduleDnsRefreshCheck()

static void peerScheduleDnsRefreshCheck ( const double  delayInSeconds)
static

◆ peerWouldBePinged()

◆ positiveTimeout()

time_t positiveTimeout ( const time_t  timeout)
Returns
max(1, timeout)

Definition at line 1092 of file neighbors.cc.

References max().

Referenced by FwdState::connectingTimeout(), and PeerPoolMgr::handleOpenedConnection().

◆ whichPeer()

Variable Documentation

◆ echo_port

unsigned short echo_port
static

Definition at line 78 of file neighbors.cc.

Referenced by neighbors_init(), and neighborsUdpPing().

◆ neighborDumpPeers

OBJH neighborDumpPeers
static

Definition at line 75 of file neighbors.cc.

Referenced by neighborsRegisterWithCacheManager().

◆ NLateReplies

int NLateReplies = 0
static

Definition at line 80 of file neighbors.cc.

Referenced by neighborCountIgnored().

◆ peerCountHandleIcpReply

IRCB peerCountHandleIcpReply
static

Definition at line 72 of file neighbors.cc.

Referenced by peerCountMcastPeersCreateAndSend().

◆ peerDNSConfigure

IPH peerDNSConfigure
static

Definition at line 64 of file neighbors.cc.

Referenced by peerAlive(), and peerDnsRefreshStart().

◆ peerProbeConnectDone

CNCB peerProbeConnectDone
static

Definition at line 66 of file neighbors.cc.

Referenced by peerProbeConnect().

 

Introduction

Documentation

Support

Miscellaneous