File Reference
#include "squid.h"
#include "acl/FilledChecklist.h"
#include "anyp/PortCfg.h"
#include "base/EnumIterator.h"
#include "CacheDigest.h"
#include "CachePeer.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

Go to the source code of this file.


#define MCAST_COUNT_RATE   900


bool peerAllowedToUse (const CachePeer *, PeerSelector *)
static int peerWouldBePinged (const CachePeer *, PeerSelector *)
static void neighborRemove (CachePeer *)
static void neighborAlive (CachePeer *, const MemObject *, const icp_common_t *)
static void neighborAliveHtcp (CachePeer *, const MemObject *, const HtcpReplyData *)
static void neighborCountIgnored (CachePeer *)
static void peerRefreshDNS (void *)
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 *sentry, CachePeer *peers)
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 ()
static void peerAlive (CachePeer *p)
CachePeergetDefaultParent (PeerSelector *ps)
CachePeergetNextPeer (CachePeer *p)
CachePeergetFirstPeer (void)
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)
CachePeerpeerFindByName (const char *name)
CachePeerpeerFindByNameAndPort (const char *name, unsigned short port)
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 peerConnectFailedSilent (CachePeer *p)
void peerConnectFailed (CachePeer *p)
void peerConnectSucceded (CachePeer *p)
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)
static void neighborDumpNonPeers (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)


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

Macro Definition Documentation


#define MCAST_COUNT_RATE   900

Definition at line 49 of file

Function Documentation

◆ dump_peer_options()

◆ dump_peers()

◆ getDefaultParent()

◆ getFirstPeer()

CachePeer * getFirstPeer ( void  )

Definition at line 507 of file

References Config, and SquidConfig::peers.

Referenced by statPeerSelect().

◆ getFirstUpParent()

◆ getNextPeer()

CachePeer * getNextPeer ( CachePeer p)

Definition at line 501 of file

References CachePeer::next.

Referenced by statPeerSelect().

◆ getRoundRobinParent()

◆ getWeightedRoundRobinParent()

◆ ignoreMulticastReply()

static int ignoreMulticastReply ( CachePeer p,
PeerSelector ps 

Definition at line 989 of file

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 

◆ neighborAliveHtcp()

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

◆ neighborCountIgnored()

static void neighborCountIgnored ( CachePeer p)

Definition at line 938 of file

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

Referenced by neighborsHtcpReply(), and neighborsUdpAck().

◆ neighborDumpNonPeers()

static void neighborDumpNonPeers ( StoreEntry sentry)

Definition at line 1513 of file

References dump_peers(), and non_peers.

◆ neighborDumpPeers()

static void neighborDumpPeers ( StoreEntry sentry)

Definition at line 1507 of file

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

◆ neighborIgnoreNonPeer()

◆ neighborRemove()

static void neighborRemove ( CachePeer target)

Definition at line 513 of file

References Config, first_ping, CachePeer::next, SquidConfig::npeers, and SquidConfig::peers.

Referenced by neighbors_init(), and neighborsUdpAck().

◆ neighbors_init()

◆ neighborsCount()

int neighborsCount ( PeerSelector ps)

Definition at line 273 of file

References Config, debugs, CachePeer::next, SquidConfig::peers, and peerWouldBePinged().

Referenced by peerSelectIcpPing().

◆ neighborsDigestSelect()

◆ neighborsHtcpClear()

◆ neighborsHtcpReply()

◆ neighborsRegisterWithCacheManager()

static void neighborsRegisterWithCacheManager ( )

◆ neighborsUdpAck()

◆ neighborsUdpPing()

int neighborsUdpPing ( HttpRequest request,
StoreEntry entry,
IRCB callback,
PeerSelector ps,
int exprep,
int timeout 

◆ neighborType()

◆ neighborTypeStr()

const char * neighborTypeStr ( const CachePeer p)

◆ neighborUp()

◆ neighborUpdateRtt()

◆ peerAlive()

◆ peerAllowedToUse()

◆ peerCanOpenMore()

bool peerCanOpenMore ( const CachePeer p)

◆ peerClearRR()

void peerClearRR ( void  )

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 447 of file

References Config, CachePeer::next, SquidConfig::peers, and CachePeer::rr_count.

Referenced by peerAlive(), and peerClearRRLoop().

◆ peerClearRRLoop()

static void peerClearRRLoop ( void *  data)

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.


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

Definition at line 418 of file

References eventAdd(), peerClearRR(), and peerClearRRLoop().

Referenced by peerClearRRLoop(), and 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 430 of file

References peerClearRRLoop().

Referenced by parse_peer().

◆ peerConnClosed()

◆ peerConnectFailed()

◆ peerConnectFailedSilent()

◆ peerConnectSucceded()

◆ peerCountHandleIcpReply()

◆ peerCountMcastPeersAbort()

◆ peerCountMcastPeersCreateAndSend()

◆ peerCountMcastPeersDone()

static void peerCountMcastPeersDone ( void *  data)

Definition at line 1454 of file

References CallBack().

Referenced by peerCountMcastPeersCreateAndSend().

◆ peerCountMcastPeersSchedule()

static void peerCountMcastPeersSchedule ( CachePeer p,
time_t  when 

◆ peerCountMcastPeersStart()

static void peerCountMcastPeersStart ( void *  data)

◆ peerDigestLookup()

◆ peerDNSConfigure()

◆ peerFindByName()

CachePeer * peerFindByName ( const char *  name)

◆ peerFindByNameAndPort()

CachePeer * peerFindByNameAndPort ( const char *  name,
unsigned short  port 

◆ peerHasConnAvailable()

bool peerHasConnAvailable ( const CachePeer p)

Definition at line 232 of file

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

Referenced by peerHTTPOkay().

◆ peerHTTPOkay()

◆ peerNoteDigestLookup()

void peerNoteDigestLookup ( HttpRequest request,
CachePeer p,
lookup_t  lookup 

Definition at line 872 of file

References debugs, CachePeer::host, lookup_t_str, and request().

Referenced by PeerSelector::handleIcpReply(), and neighborsDigestSelect().

◆ peerProbeConnect()

◆ peerProbeConnectDone()

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

◆ peerProbeIsBusy()

static bool peerProbeIsBusy ( const CachePeer p)

◆ peerRefreshDNS()

◆ peerWouldBePinged()

◆ positiveTimeout()

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

Definition at line 1195 of file

References max().

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

◆ whichPeer()

Variable Documentation

◆ echo_port

unsigned short echo_port

Definition at line 75 of file

Referenced by neighbors_init(), and neighborsUdpPing().

◆ first_ping

CachePeer* first_ping = nullptr

◆ neighborDumpNonPeers

OBJH neighborDumpNonPeers

Definition at line 72 of file

Referenced by neighborsRegisterWithCacheManager().

◆ neighborDumpPeers

OBJH neighborDumpPeers

Definition at line 71 of file

Referenced by neighborsRegisterWithCacheManager().

◆ NLateReplies

int NLateReplies = 0

Definition at line 77 of file

Referenced by neighborCountIgnored().

◆ non_peers

CachePeer* non_peers = nullptr

Definition at line 948 of file

Referenced by neighborDumpNonPeers(), and neighborIgnoreNonPeer().

◆ peerCountHandleIcpReply

IRCB peerCountHandleIcpReply

Definition at line 68 of file

Referenced by peerCountMcastPeersCreateAndSend().

◆ peerDNSConfigure

IPH peerDNSConfigure

Definition at line 60 of file

Referenced by peerConnectSucceded(), and peerRefreshDNS().

◆ peerProbeConnectDone

CNCB peerProbeConnectDone

Definition at line 62 of file

Referenced by peerProbeConnect().






Web Site Translations