HappyConnOpener.cc
Go to the documentation of this file.
115 SpareAllowanceGiver(): HappyOrderEnforcer("happy_eyeballs_connect_gap/happy_eyeballs_connect_limit enforcement") {}
189 HappyOrderEnforcer::startedWaiting(const HappyAbsoluteTime lastStart, const int cfgTimeoutMsec) const
208 eventAdd(name, &HappyOrderEnforcer::NoteWaitOver, const_cast<HappyOrderEnforcer*>(this), waitTime, 0, false);
330 HappyConnOpener::HappyConnOpener(const ResolvedPeers::Pointer &dests, const AsyncCallback<Answer> &callback, const HttpRequest::Pointer &request, const time_t aFwdStart, const int tries, const AccessLogEntry::Pointer &anAle):
499 HappyConnOpener::sendSuccess(const PeerConnectionPointer &conn, const bool reused, const char *connKind)
616 HappyConnOpener::handleConnOpenerAnswer(Attempt &attempt, const CommConnectCbParams ¶ms, const char *what)
740 } else if (currentPeer && !spareWaiting.forNewPeer && spareWaiting && destinations->doneWithSpares(*currentPeer)) {
Definition: AsyncJob.h:31
double current_dtime
the current UNIX time in seconds (with microsecond precision)
Definition: stub_libtime.cc:19
PeerConnectionPointer extractFront()
extracts and returns the first queued address
Definition: ResolvedPeers.cc:113
~HappyConnOpenerAnswer()
Definition: HappyConnOpener.cc:319
void notePrimeConnectDone(const CommConnectCbParams &)
Comm::ConnOpener callback for the prime connection attempt.
Definition: HappyConnOpener.cc:598
a connection opening attempt in progress (or falsy)
Definition: HappyConnOpener.h:138
const char * ranOutOfTimeOrAttemptsEarlier_
Reason to ran out of time or attempts.
Definition: HappyConnOpener.h:248
bool doneWithPrimes(const Comm::Connection ¤tPeer)
whether extractPrime() returns and will continue to return nil
Definition: ResolvedPeers.cc:187
bool destinationsFinalized
whether all of the available candidate paths received from DNS
Definition: ResolvedPeers.h:82
void setHost(const char *)
configures the origin server domain name
Definition: HappyConnOpener.cc:351
void stopGivingPrimeItsChance()
called when the prime attempt has used up its chance for a solo victory
Definition: HappyConnOpener.cc:672
Comm::ConnectionPointer pop(const Comm::ConnectionPointer &dest, const char *domain, bool keepOpen)
Definition: pconn.cc:458
AsyncCall::Pointer callback
a pending noteGavePrimeItsChance() or noteSpareAllowance() call
Definition: HappyConnOpener.h:47
void checkForNewConnection()
Definition: HappyConnOpener.cc:715
void jobDroppedAllowance()
reacts to HappyConnOpener dropping its spare connection allowance
Definition: HappyConnOpener.cc:274
ErrorState * makeError(const err_type type) const
Definition: HappyConnOpener.cc:476
a smart AsyncCall pointer for delivery of future results
Definition: AsyncCallbacks.h:31
void dequeue(HappyConnOpener &)
stops managing the job's wait; cancels the pending callback, if any
Definition: HappyConnOpener.cc:161
Definition: ConnOpener.h:24
PconnPool * fwdPconnPool
a collection of previously used persistent Squid-to-peer HTTP(S) connections
Definition: FwdState.cc:78
void cancelAttempt(Attempt &, const char *reason)
cancels the in-progress attempt, making its path a future candidate
Definition: HappyConnOpener.cc:511
Attempt prime
current connection opening attempt on the prime track (if any)
Definition: HappyConnOpener.h:207
HappyAbsoluteTime primeStart
the start of the first connection attempt for the currentPeer
Definition: HappyConnOpener.h:134
void maybeGivePrimeItsChance()
Definition: HappyConnOpener.cc:814
void maybeOpenSpareConnection()
if possible, starts a spare connection attempt
Definition: HappyConnOpener.cc:845
void CallBack(const CodeContext::Pointer &callbackContext, Fun &&callback)
Definition: CodeContext.h:126
void maybeOpenPrimeConnection()
starts a prime connection attempt if possible or does nothing otherwise
Definition: HappyConnOpener.cc:782
bool concurrencyLimitReached() const
whether opening a spare connection now would violate happy_eyeballs_connect_limit
Definition: HappyConnOpener.cc:303
void enqueue(HappyConnOpener &)
starts managing the job's wait; the job should expect a call back
Definition: HappyConnOpener.cc:152
RefCount< AsyncCallT< Dialer > > asyncCall(int aDebugSection, int aDebugLevel, const char *aName, const Dialer &aDialer)
Definition: AsyncCall.h:156
void updateSpareWaitAfterPrimeFailure()
reacts to a prime attempt failure
Definition: HappyConnOpener.cc:651
bool doneWithSpares(const Comm::Connection ¤tPeer)
whether extractSpare() returns and will continue to return nil
Definition: ResolvedPeers.cc:181
Attempt spare
current connection opening attempt on the spare track (if any)
Definition: HappyConnOpener.h:210
Answer * futureAnswer(const PeerConnectionPointer &)
Definition: HappyConnOpener.cc:485
ResolvedPeersPointer destinations
Candidate paths. Shared with the initiator. May not be finalized yet.
Definition: HappyConnOpener.h:204
bool readyNow(const HappyConnOpener &job) const override
Definition: HappyConnOpener.cc:248
virtual bool readyNow(const HappyConnOpener &) const =0
bool haveSpare(const Comm::Connection ¤tPeer)
whether extractSpare() would return a non-nil path right now
Definition: ResolvedPeers.cc:161
PeerConnectionPointer extractPrime(const Comm::Connection ¤tPeer)
Definition: ResolvedPeers.cc:120
time_t connectTimeout(const time_t fwdStart) const
Definition: Connection.cc:161
double HappyAbsoluteTime
absolute time in fractional seconds; compatible with current_timed
Definition: HappyConnOpener.h:33
ConnectionPointer cloneProfile() const
Create a new closed Connection with the same configuration as this one.
Definition: Connection.cc:62
void noteGavePrimeItsChance()
reacts to expired happy_eyeballs_connect_timeout
Definition: HappyConnOpener.cc:755
void startConnecting(Attempt &, PeerConnectionPointer &)
starts opening (or reusing) a connection to the given destination
Definition: HappyConnOpener.cc:542
std::list< CbcPointer< HappyConnOpener > > HappySpareWaitList
A FIFO queue of HappyConnOpener jobs waiting to open a spare connection.
Definition: HappyConnOpener.h:30
bool readyNow(const HappyConnOpener &job) const override
Definition: HappyConnOpener.cc:234
bool doneAll() const override
whether positive goal has been reached
Definition: HappyConnOpener.cc:366
void NoteOutgoingConnectionFailure(CachePeer *const peer)
Definition: CachePeer.h:246
#define CallJobHere(debugSection, debugLevel, job, Class, method)
Definition: AsyncJobCalls.h:59
void sendSuccess(const PeerConnectionPointer &conn, bool reused, const char *connKind)
send a successful result to the initiator (if it still needs an answer)
Definition: HappyConnOpener.cc:499
Definition: HappyConnOpener.h:105
bool ranOutOfTimeOrAttempts() const
Check for maximum connection tries and forwarding time restrictions.
Definition: HappyConnOpener.cc:885
void finish()
reacts to a natural attempt completion (successful or otherwise)
Definition: HappyConnOpener.cc:912
bool startedWaiting(const HappyAbsoluteTime lastStart, const int cfgTimeoutMsec) const
Definition: HappyConnOpener.cc:189
HappyOrderEnforcer(const char *aName)
Definition: HappyConnOpener.cc:58
static time_t ForwardTimeout(const time_t fwdStart)
time left to finish the whole forwarding process (which started at fwdStart)
Definition: FwdState.cc:423
Definition: CommCalls.h:165
void jobUsedAllowance()
reacts to HappyConnOpener getting a spare connection opening result
Definition: HappyConnOpener.cc:268
Definition: ResolvedPeers.h:121
HappyAbsoluteTime lastAllowanceStart
the time of the last noteSpareAllowance() call
Definition: HappyConnOpener.cc:139
JobWait< Comm::ConnOpener > connWait
waits for a connection to the peer to be established/opened
Definition: HappyConnOpener.h:156
PeerConnectionPointer extractSpare(const Comm::Connection ¤tPeer)
Definition: ResolvedPeers.cc:131
bool notificationPending
whether HappyConnOpener::noteCandidatesChange() is scheduled to fire
Definition: ResolvedPeers.h:85
Final result (an open connection or an error) sent to the job initiator.
Definition: HappyConnOpener.h:75
Definition: Stream.h:20
Definition: CommCalls.h:104
HappyAbsoluteTime waitEnd_
expected NoteWaitOver() call time (or zero)
Definition: HappyConnOpener.cc:83
bool doneWithPeer(const Comm::Connection ¤tPeer)
whether doneWithPrimes() and doneWithSpares() are true for currentPeer
Definition: ResolvedPeers.cc:193
Definition: HappyConnOpener.cc:54
void start(const JobPointer &aJob, const AsyncCall::Pointer &aCallback)
starts waiting for the given job to call the given callback
Definition: JobWait.h:69
virtual AsyncCall::Pointer notify(const CbcPointer< HappyConnOpener > &)=0
void reinstatePath(const PeerConnectionPointer &)
Definition: ResolvedPeers.cc:25
AsyncCall::Pointer notify(const CbcPointer< HappyConnOpener > &) override
Definition: HappyConnOpener.cc:240
bool gotSpareAllowance
whether we have received a permission to open a spare while spares are limited
Definition: HappyConnOpener.h:229
std::ostream & operator<<(std::ostream &os, const HappyConnOpenerAnswer &answer)
reports Answer details (for AsyncCall parameter debugging)
Definition: HappyConnOpener.cc:86
void jobGotInstantAllowance()
Definition: HappyConnOpener.cc:262
bool retriable_
whether we are opening connections for a request that may be resent
Definition: HappyConnOpener.h:235
HttpRequestPointer cause
the request that needs a to-server connection
Definition: HappyConnOpener.h:241
bool reuseOldConnection(PeerConnectionPointer &)
Definition: HappyConnOpener.cc:558
AsyncCall::Pointer notify(const CbcPointer< HappyConnOpener > &) override
Definition: HappyConnOpener.cc:255
void noteSpareConnectDone(const CommConnectCbParams &)
Comm::ConnOpener callback for the spare connection attempt.
Definition: HappyConnOpener.cc:605
Attempt(const CallbackMethod method, const char *methodName)
Definition: HappyConnOpener.cc:905
bool ignoreSpareRestrictions
whether spare connection attempts disregard happy_eyeballs_* settings
Definition: HappyConnOpener.h:226
const char * status() const override
internal cleanup; do not call directly
Definition: HappyConnOpener.cc:432
Definition: errorpage.h:88
void noteSpareAllowance()
reacts to satisfying happy_eyeballs_connect_gap and happy_eyeballs_connect_limit
Definition: HappyConnOpener.cc:763
void noteCandidatesChange()
reacts to changes in the destinations list
Definition: HappyConnOpener.cc:534
void stopWaitingForSpareAllowance()
called when the spare attempt should no longer obey spare connection limits
Definition: HappyConnOpener.cc:680
void cancelSpareWait(const char *reason)
stops waiting for the right conditions to open a spare connection
Definition: HappyConnOpener.cc:691
static void NoteWaitOver(void *raw)
Definition: HappyConnOpener.cc:217
HappyConnOpener(const ResolvedPeersPointer &, const AsyncCallback< Answer > &, const HttpRequestPointer &, time_t aFwdStart, int tries, const AccessLogEntryPointer &)
Definition: HappyConnOpener.cc:330
void finalize(const Comm::ConnectionPointer &conn)
upgrade stored peer selection details with a matching actual connection
Definition: ResolvedPeers.h:139
struct SquidConfig::@108 happyEyeballs
void(HappyConnOpener::*)(const CommConnectCbParams &) CallbackMethod
HappyConnOpener method implementing a ConnOpener callback.
Definition: HappyConnOpener.h:141
void eventAdd(const char *name, EVH *func, void *arg, double when, int weight, bool cbdata)
Definition: event.cc:107
HappySpareWait spareWaiting
preconditions for an attempt to open a spare connection
Definition: HappyConnOpener.h:217
void GetMarkingsToServer(HttpRequest *request, Comm::Connection &conn)
Definition: FwdState.cc:1560
enforces happy_eyeballs_connect_gap and happy_eyeballs_connect_limit
Definition: HappyConnOpener.cc:112
void handleConnOpenerAnswer(Attempt &, const CommConnectCbParams &, const char *connDescription)
prime/spare-agnostic processing of a Comm::ConnOpener result
Definition: HappyConnOpener.cc:616
void sendFailure()
inform the initiator about our failure to connect (if needed)
Definition: HappyConnOpener.cc:520
void openFreshConnection(Attempt &, PeerConnectionPointer &)
Definition: HappyConnOpener.cc:575
Introduction
- About Squid
- Why Squid?
- Squid Developers
- How to Donate
- How to Help Out
- Getting Squid
- Squid Source Packages
- Squid Deployment Case-Studies
- Squid Software Foundation
Documentation
- Quick Setup
- Configuration:
- FAQ and Wiki
- Guide Books:
- Non-English
- More...
Support
- Security Advisories
- Bugzilla Database
- Mailing lists
- Contacting us
- Commercial services
- Project Sponsors
- Squid-based products