HappyConnOpener.h
Go to the documentation of this file.
35 explicit operator bool() const { return toGivePrimeItsChance || forSpareAllowance || forPrimesToFail || forNewPeer; }
131 HappyConnOpener(const ResolvedPeersPointer &, const AsyncCall::Pointer &, HttpRequestPointer &, const time_t aFwdStart, int tries, const AccessLogEntryPointer &al);
201 void handleConnOpenerAnswer(Attempt &, const CommConnectCbParams &, const char *connDescription);
virtual ~CbDialer()=default
Definition: AsyncJob.h:32
~HappyConnOpenerAnswer()
Definition: HappyConnOpener.cc:318
void notePrimeConnectDone(const CommConnectCbParams &)
Comm::ConnOpener callback for the prime connection attempt.
Definition: HappyConnOpener.cc:588
a connection opening attempt in progress (or falsy)
Definition: HappyConnOpener.h:157
const char * ranOutOfTimeOrAttemptsEarlier_
Reason to ran out of time or attempts.
Definition: HappyConnOpener.h:265
CbDialer(Method method, Initiator *initiator)
Definition: HappyConnOpener.h:115
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:660
void(Initiator::* Method)(Answer &)
Definition: HappyConnOpener.h:113
virtual ~HappyConnOpener() override
Definition: HappyConnOpener.cc:344
AsyncCall::Pointer callback
a pending noteGavePrimeItsChance() or noteSpareAllowance() call
Definition: HappyConnOpener.h:44
virtual void print(std::ostream &os) const override
Definition: HappyConnOpener.h:121
void checkForNewConnection()
Definition: HappyConnOpener.cc:703
ErrorState * makeError(const err_type type) const
Definition: HappyConnOpener.cc:462
void cancelAttempt(Attempt &, const char *reason)
cancels the in-progress attempt, making its path a future candidate
Definition: HappyConnOpener.cc:498
virtual void start() override
called by AsyncStart; do not call directly
Definition: HappyConnOpener.cc:359
int n_tries
number of connection opening attempts, including those in the requestor
Definition: HappyConnOpener.h:262
Attempt prime
current connection opening attempt on the prime track (if any)
Definition: HappyConnOpener.h:225
HappyAbsoluteTime primeStart
the start of the first connection attempt for the currentPeer
Definition: HappyConnOpener.h:153
void maybeGivePrimeItsChance()
Definition: HappyConnOpener.cc:802
void maybeOpenSpareConnection()
if possible, starts a spare connection attempt
Definition: HappyConnOpener.cc:833
void maybeOpenPrimeConnection()
starts a prime connection attempt if possible or does nothing otherwise
Definition: HappyConnOpener.cc:770
void setRetriable(bool retriable)
configures whether the request may be retried later if things go wrong
Definition: HappyConnOpener.h:138
void updateSpareWaitAfterPrimeFailure()
reacts to a prime attempt failure
Definition: HappyConnOpener.cc:639
Attempt spare
current connection opening attempt on the spare track (if any)
Definition: HappyConnOpener.h:228
Answer * futureAnswer(const PeerConnectionPointer &)
Definition: HappyConnOpener.cc:471
ResolvedPeersPointer destinations
Candidate paths. Shared with the initiator. May not be finalized yet.
Definition: HappyConnOpener.h:222
HappyConnOpener(const ResolvedPeersPointer &, const AsyncCall::Pointer &, HttpRequestPointer &, const time_t aFwdStart, int tries, const AccessLogEntryPointer &al)
Definition: HappyConnOpener.cc:329
bool success() const
whether HappyConnOpener succeeded, returning a usable connection
Definition: HappyConnOpener.h:78
CBDATA_CHILD(HappyConnOpener)
double HappyAbsoluteTime
absolute time in fractional seconds; compatible with current_timed
Definition: HappyConnOpener.h:30
void noteGavePrimeItsChance()
reacts to expired happy_eyeballs_connect_timeout
Definition: HappyConnOpener.cc:743
void startConnecting(Attempt &, PeerConnectionPointer &)
starts opening (or reusing) a connection to the given destination
Definition: HappyConnOpener.cc:530
std::list< CbcPointer< HappyConnOpener > > HappySpareWaitList
A FIFO queue of HappyConnOpener jobs waiting to open a spare connection.
Definition: HappyConnOpener.h:27
virtual bool doneAll() const override
whether positive goal has been reached
Definition: HappyConnOpener.cc:366
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:485
Definition: HappyConnOpener.h:103
bool ranOutOfTimeOrAttempts() const
Check for maximum connection tries and forwarding time restrictions.
Definition: HappyConnOpener.cc:873
void finish()
reacts to a natural attempt completion (successful or otherwise)
Definition: HappyConnOpener.cc:900
std::ostream & operator<<(std::ostream &, const HappyConnOpenerAnswer &)
reports Answer details (for AsyncCall parameter debugging)
Definition: HappyConnOpener.cc:85
friend std::ostream & operator<<(std::ostream &, const Attempt &)
HappyConnOpener::Attempt printer for debugging.
Definition: HappyConnOpener.cc:418
Definition: ResolvedPeers.h:121
JobWait< Comm::ConnOpener > connWait
waits for a connection to the peer to be established/opened
Definition: HappyConnOpener.h:175
Final result (an open connection or an error) sent to the job initiator.
Definition: HappyConnOpener.h:73
Definition: CommCalls.h:110
Definition: HappyConnOpener.cc:54
void allowPersistent(bool permitted)
configures reuse of old connections
Definition: HappyConnOpener.h:135
keeps track of HappyConnOpener spare track waiting state
Definition: HappyConnOpener.h:33
Definition: AsyncCall.h:106
bool gotSpareAllowance
whether we have received a permission to open a spare while spares are limited
Definition: HappyConnOpener.h:247
bool retriable_
whether we are opening connections for a request that may be resent
Definition: HappyConnOpener.h:253
AsyncCall dialer for our callback. Gives us access to callback Answer.
Definition: HappyConnOpener.h:110
HttpRequestPointer cause
the request that needs a to-server connection
Definition: HappyConnOpener.h:259
bool reuseOldConnection(PeerConnectionPointer &)
Definition: HappyConnOpener.cc:546
void noteSpareConnectDone(const CommConnectCbParams &)
Comm::ConnOpener callback for the spare connection attempt.
Definition: HappyConnOpener.cc:595
Attempt(const CallbackMethod method, const char *methodName)
Definition: HappyConnOpener.cc:893
bool ignoreSpareRestrictions
whether spare connection attempts disregard happy_eyeballs_* settings
Definition: HappyConnOpener.h:244
virtual const char * status() const override
internal cleanup; do not call directly
Definition: HappyConnOpener.cc:432
Definition: errorpage.h:87
void noteSpareAllowance()
reacts to satisfying happy_eyeballs_connect_gap and happy_eyeballs_connect_limit
Definition: HappyConnOpener.cc:751
void noteCandidatesChange()
reacts to changes in the destinations list
Definition: HappyConnOpener.cc:522
void stopWaitingForSpareAllowance()
called when the spare attempt should no longer obey spare connection limits
Definition: HappyConnOpener.cc:668
void cancelSpareWait(const char *reason)
stops waiting for the right conditions to open a spare connection
Definition: HappyConnOpener.cc:679
Definition: AsyncCall.h:40
void(HappyConnOpener::*)(const CommConnectCbParams &) CallbackMethod
HappyConnOpener method implementing a ConnOpener callback.
Definition: HappyConnOpener.h:160
HappySpareWait spareWaiting
preconditions for an attempt to open a spare connection
Definition: HappyConnOpener.h:235
AsyncCall::Pointer callback_
handler to be called on connection completion.
Definition: HappyConnOpener.h:219
void handleConnOpenerAnswer(Attempt &, const CommConnectCbParams &, const char *connDescription)
prime/spare-agnostic processing of a Comm::ConnOpener result
Definition: HappyConnOpener.cc:606
void sendFailure()
inform the initiator about our failure to connect (if needed)
Definition: HappyConnOpener.cc:507
void openFreshConnection(Attempt &, PeerConnectionPointer &)
Definition: HappyConnOpener.cc:563