#include <TcpLogger.h>

Inheritance diagram for Log::TcpLogger:
Collaboration diagram for Log::TcpLogger:

Public Types

typedef CbcPointer< TcpLoggerPointer
 

Public Member Functions

bool canBeCalled (AsyncCall &call) const
 whether we can be called More...
 
void callStart (AsyncCall &call)
 
virtual void callEnd ()
 called right after the called job method More...
 
virtual void callException (const std::exception &e)
 called when the job throws during an async call More...
 
void handleStopRequest ()
 process external request to terminate now (i.e. during this async call) More...
 
virtual void * toCbdata ()=0
 

Static Public Member Functions

static int Open (Logfile *lf, const char *path, size_t bufSz, int fatalFlag)
 
static void Start (const Pointer &job)
 
static void RegisterWithCacheManager ()
 

Public Attributes

const InstanceId< AsyncJobid
 job identifier More...
 

Protected Member Functions

 TcpLogger (size_t, bool, Ip::Address)
 
 ~TcpLogger () override
 
void endGracefully ()
 
void logRecord (const char *buf, size_t len)
 buffers record and possibly writes it to the remote logger More...
 
void flush ()
 write all currently buffered records ASAP More...
 
void start () override
 called by AsyncStart; do not call directly More...
 
bool doneAll () const override
 whether positive goal has been reached More...
 
void swanSong () override
 
void deleteThis (const char *aReason)
 
void mustStop (const char *aReason)
 
bool done () const
 the job is destroyed in callEnd() when done() More...
 
virtual const char * status () const
 internal cleanup; do not call directly More...
 

Static Protected Member Functions

static void ReportAllJobs (StoreEntry *)
 writes a cache manager report about all jobs existing in this worker More...
 

Protected Attributes

const char * stopReason
 reason for forcing done() to be true More...
 
const char * typeName
 kid (leaf) class name, for debugging More...
 
AsyncCall::Pointer inCall
 the asynchronous call being handled, if any More...
 
bool started_ = false
 Start() has finished successfully. More...
 
bool swanSang_ = false
 swanSong() was called More...
 

Private Member Functions

 CBDATA_CHILD (TcpLogger)
 
void delayedReconnect ()
 "sleep a little before trying to connect again" event callback More...
 
bool canFit (const size_t len) const
 whether len more bytes can be buffered More...
 
void appendRecord (const char *buf, size_t len)
 buffer a record that might exceed IoBufSize More...
 
void appendChunk (const char *chunk, const size_t len)
 buffer a record chunk without splitting it across buffers More...
 
void writeIfNeeded ()
 starts writing if and only if it is time to write accumulated records More...
 
void writeIfPossible ()
 starts writing if possible More...
 
void doConnect ()
 starts [re]connecting to the remote logger More...
 
void disconnect ()
 close our connection now, without flushing More...
 
void connectDone (const CommConnectCbParams &conn)
 Comm::ConnOpener callback. More...
 
void writeDone (const CommIoCbParams &io)
 Comm::Write callback. More...
 
void handleClosure (const CommCloseCbParams &io)
 
virtual void finalizedInCbdataChild ()=0
 hack: ensure CBDATA_CHILD() after a toCbdata()-defining CBDATA_INTERMEDIATE() More...
 

Static Private Member Functions

static void Flush (Logfile *lf)
 
static void WriteLine (Logfile *lf, const char *buf, size_t len)
 
static void StartLine (Logfile *lf)
 
static void EndLine (Logfile *lf)
 
static void Rotate (Logfile *lf, const int16_t)
 
static void Close (Logfile *lf)
 
static TcpLoggerStillLogging (Logfile *lf)
 
static void DelayedReconnect (void *data)
 Log::TcpLogger::delayedReconnect() wrapper. More...
 

Private Attributes

bool dieOnError
 
std::list< MemBlobPointerbuffers
 I/O buffers. More...
 
size_t bufferCapacity
 bufferedSize limit More...
 
size_t bufferedSize
 number of log record bytes stored in RAM now More...
 
size_t flushDebt
 how many record bytes we still need to write ASAP More...
 
bool quitOnEmpty
 whether this job should quit when buffers are empty More...
 
bool reconnectScheduled
 we are sleeping before the next connection attempt More...
 
bool writeScheduled
 we are waiting for the latest write() results More...
 
Comm::ConnectionPointer conn
 opened connection to the remote logger More...
 
Ip::Address remote
 where the remote logger expects our records More...
 
AsyncCall::Pointer closer
 handles unexpected/external conn closures More...
 
JobWait< Comm::ConnOpenerconnWait
 waits for a connection to the remote logger to be established/opened More...
 
uint64_t connectFailures
 number of sequential connection failures More...
 
uint64_t drops
 number of records dropped during the current outage More...
 

Static Private Attributes

static const size_t IoBufSize = 2*MAX_URL
 fixed I/O buffer size More...
 
static const size_t BufferCapacityMin = 2*Log::TcpLogger::IoBufSize
 minimum bufferCapacity value More...
 

Detailed Description

Sends log records to a remote TCP logger at the configured IP:port address. Handles loss of connectivity, record buffering, and buffer overflows.

Definition at line 33 of file TcpLogger.h.

Member Typedef Documentation

◆ Pointer

Definition at line 38 of file TcpLogger.h.

Constructor & Destructor Documentation

◆ TcpLogger()

Log::TcpLogger::TcpLogger ( size_t  bufCap,
bool  dieOnErr,
Ip::Address  them 
)
protected

Definition at line 36 of file TcpLogger.cc.

References bufferCapacity, BufferCapacityMin, DBG_IMPORTANT, debugs, MY_DEBUG_SECTION, and remote.

◆ ~TcpLogger()

Log::TcpLogger::~TcpLogger ( )
overrideprotected

Definition at line 60 of file TcpLogger.cc.

References assert.

Member Function Documentation

◆ appendChunk()

void Log::TcpLogger::appendChunk ( const char *  chunk,
const size_t  len 
)
private

Definition at line 220 of file TcpLogger.cc.

References debugs, Must, and MY_DEBUG_SECTION.

◆ appendRecord()

void Log::TcpLogger::appendRecord ( const char *  buf,
size_t  len 
)
private

Definition at line 200 of file TcpLogger.cc.

References min().

◆ callEnd()

void AsyncJob::callEnd ( )
virtualinherited

◆ callException()

◆ callStart()

void AsyncJob::callStart ( AsyncCall call)
inherited

◆ canBeCalled()

bool AsyncJob::canBeCalled ( AsyncCall call) const
inherited

Definition at line 117 of file AsyncJob.cc.

References AsyncCall::cancel(), debugs, and AsyncJob::inCall.

◆ canFit()

bool Log::TcpLogger::canFit ( const size_t  len) const
private

Definition at line 158 of file TcpLogger.cc.

References DBG_CRITICAL, DBG_IMPORTANT, debugs, fatal(), and MY_DEBUG_SECTION.

◆ CBDATA_CHILD()

Log::TcpLogger::CBDATA_CHILD ( TcpLogger  )
private

◆ Close()

void Log::TcpLogger::Close ( Logfile lf)
staticprivate

Definition at line 435 of file TcpLogger.cc.

References asyncCall(), Logfile::data, debugs, endGracefully(), and ScheduleCallHere.

◆ connectDone()

void Log::TcpLogger::connectDone ( const CommConnectCbParams conn)
private

◆ delayedReconnect()

void Log::TcpLogger::delayedReconnect ( )
private

Definition at line 321 of file TcpLogger.cc.

References conn, and Must.

Referenced by DelayedReconnect().

◆ DelayedReconnect()

void Log::TcpLogger::DelayedReconnect ( void *  data)
staticprivate

Definition at line 304 of file TcpLogger.cc.

References assert, delayedReconnect(), JobCallback, MY_DEBUG_SECTION, and ScheduleCallHere.

Referenced by connectDone().

◆ deleteThis()

void AsyncJob::deleteThis ( const char *  aReason)
protectedinherited

◆ disconnect()

void Log::TcpLogger::disconnect ( )
private

Definition at line 381 of file TcpLogger.cc.

References comm_remove_close_handler(), and conn.

◆ doConnect()

◆ done()

bool AsyncJob::done ( ) const
protectedinherited

◆ doneAll()

bool Log::TcpLogger::doneAll ( ) const
overrideprotectedvirtual

Reimplemented from AsyncJob.

Definition at line 73 of file TcpLogger.cc.

References conn, debugs, AsyncJob::doneAll(), and MY_DEBUG_SECTION.

◆ endGracefully()

void Log::TcpLogger::endGracefully ( )
protected

Called when Squid is reconfiguring (or exiting) to give us a chance to flush remaining buffers and end this job w/o loss of data. No new log records are expected. Must be used as (or inside) an async job call and will result in [eventual] job termination.

Definition at line 102 of file TcpLogger.cc.

References assert.

Referenced by Close().

◆ EndLine()

void Log::TcpLogger::EndLine ( Logfile lf)
staticprivate

Definition at line 423 of file TcpLogger.cc.

References SquidConfig::buffered_logs, Config, and SquidConfig::onoff.

◆ finalizedInCbdataChild()

virtual void CbdataParent::finalizedInCbdataChild ( )
privatepure virtualinherited

◆ flush()

void Log::TcpLogger::flush ( )
protected

Definition at line 111 of file TcpLogger.cc.

◆ Flush()

void Log::TcpLogger::Flush ( Logfile lf)
staticprivate

Definition at line 404 of file TcpLogger.cc.

◆ handleClosure()

void Log::TcpLogger::handleClosure ( const CommCloseCbParams io)
private

This is our comm_close_handler. It is called when some external force (e.g., reconfigure or shutdown) is closing the connection (rather than us).

Definition at line 367 of file TcpLogger.cc.

References assert, and conn.

Referenced by connectDone().

◆ handleStopRequest()

void AsyncJob::handleStopRequest ( )
inlineinherited

Definition at line 73 of file AsyncJob.h.

References AsyncJob::mustStop().

◆ logRecord()

void Log::TcpLogger::logRecord ( const char *  buf,
size_t  len 
)
protected

Definition at line 118 of file TcpLogger.cc.

◆ mustStop()

◆ Open()

◆ RegisterWithCacheManager()

void AsyncJob::RegisterWithCacheManager ( )
staticinherited

Definition at line 215 of file AsyncJob.cc.

References Mgr::RegisterAction(), and AsyncJob::ReportAllJobs().

Referenced by mainInitialize().

◆ ReportAllJobs()

void AsyncJob::ReportAllJobs ( StoreEntry e)
staticprotectedinherited

Definition at line 198 of file AsyncJob.cc.

References AllJobs().

Referenced by AsyncJob::RegisterWithCacheManager().

◆ Rotate()

void Log::TcpLogger::Rotate ( Logfile lf,
const int16_t   
)
staticprivate

Definition at line 430 of file TcpLogger.cc.

◆ start()

void Log::TcpLogger::start ( )
overrideprotectedvirtual

Reimplemented from AsyncJob.

Definition at line 67 of file TcpLogger.cc.

◆ Start()

◆ StartLine()

void Log::TcpLogger::StartLine ( Logfile lf)
staticprivate

Definition at line 418 of file TcpLogger.cc.

◆ status()

◆ StillLogging()

Log::TcpLogger * Log::TcpLogger::StillLogging ( Logfile lf)
staticprivate

Converts Logfile into a pointer to a valid TcpLogger job or, if the logger job has quit, into a nill pointer

Definition at line 396 of file TcpLogger.cc.

References Logfile::data.

◆ swanSong()

void Log::TcpLogger::swanSong ( )
overrideprotectedvirtual

Reimplemented from AsyncJob.

Definition at line 95 of file TcpLogger.cc.

References AsyncJob::swanSong().

◆ toCbdata()

virtual void * CbdataParent::toCbdata ( )
pure virtualinherited

◆ writeDone()

void Log::TcpLogger::writeDone ( const CommIoCbParams io)
private

◆ writeIfNeeded()

void Log::TcpLogger::writeIfNeeded ( )
private

Definition at line 126 of file TcpLogger.cc.

◆ writeIfPossible()

void Log::TcpLogger::writeIfPossible ( )
private

◆ WriteLine()

void Log::TcpLogger::WriteLine ( Logfile lf,
const char *  buf,
size_t  len 
)
staticprivate

Definition at line 411 of file TcpLogger.cc.

Member Data Documentation

◆ bufferCapacity

size_t Log::TcpLogger::bufferCapacity
private

Definition at line 100 of file TcpLogger.h.

Referenced by TcpLogger().

◆ BufferCapacityMin

const size_t Log::TcpLogger::BufferCapacityMin = 2*Log::TcpLogger::IoBufSize
staticprivate

Definition at line 92 of file TcpLogger.h.

Referenced by TcpLogger().

◆ bufferedSize

size_t Log::TcpLogger::bufferedSize
private

Definition at line 101 of file TcpLogger.h.

◆ buffers

std::list<MemBlobPointer> Log::TcpLogger::buffers
private

Definition at line 99 of file TcpLogger.h.

◆ closer

AsyncCall::Pointer Log::TcpLogger::closer
private

Definition at line 110 of file TcpLogger.h.

◆ conn

Comm::ConnectionPointer Log::TcpLogger::conn
private

Definition at line 108 of file TcpLogger.h.

◆ connectFailures

uint64_t Log::TcpLogger::connectFailures
private

Definition at line 115 of file TcpLogger.h.

◆ connWait

JobWait<Comm::ConnOpener> Log::TcpLogger::connWait
private

Definition at line 113 of file TcpLogger.h.

◆ dieOnError

bool Log::TcpLogger::dieOnError
private

Whether this job must kill Squid on the first unrecoverable error. Note that we may be able to recover from a failure to connect, but we cannot recover from forgetting (dropping) a record while connecting.

Definition at line 97 of file TcpLogger.h.

◆ drops

uint64_t Log::TcpLogger::drops
private

Definition at line 116 of file TcpLogger.h.

◆ flushDebt

size_t Log::TcpLogger::flushDebt
private

Definition at line 102 of file TcpLogger.h.

◆ id

const InstanceId<AsyncJob> AsyncJob::id
inherited

Definition at line 75 of file AsyncJob.h.

◆ inCall

AsyncCall::Pointer AsyncJob::inCall
protectedinherited

◆ IoBufSize

const size_t Log::TcpLogger::IoBufSize = 2*MAX_URL
staticprivate

Definition at line 91 of file TcpLogger.h.

◆ quitOnEmpty

bool Log::TcpLogger::quitOnEmpty
private

Definition at line 104 of file TcpLogger.h.

◆ reconnectScheduled

bool Log::TcpLogger::reconnectScheduled
private

Definition at line 105 of file TcpLogger.h.

◆ remote

Ip::Address Log::TcpLogger::remote
private

Definition at line 109 of file TcpLogger.h.

Referenced by TcpLogger().

◆ started_

bool AsyncJob::started_ = false
protectedinherited

Definition at line 88 of file AsyncJob.h.

Referenced by AsyncJob::~AsyncJob(), AsyncJob::callEnd(), and AsyncJob::Start().

◆ stopReason

const char* AsyncJob::stopReason
protectedinherited

◆ swanSang_

bool AsyncJob::swanSang_ = false
protectedinherited

Definition at line 89 of file AsyncJob.h.

Referenced by AsyncJob::~AsyncJob(), and AsyncJob::callEnd().

◆ typeName

◆ writeScheduled

bool Log::TcpLogger::writeScheduled
private

Definition at line 106 of file TcpLogger.h.


The documentation for this class was generated from the following files:

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors