2 * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 /* DEBUG: section 54 Interprocess Communication */
11 #ifndef SQUID_IPC_INQUIRER_H
12 #define SQUID_IPC_INQUIRER_H
14 #include "base/AsyncJob.h"
15 #include "base/AsyncJobCalls.h"
16 #include "base/forward.h"
17 #include "ipc/forward.h"
18 #include "ipc/Request.h"
19 #include "ipc/Response.h"
20 #include "ipc/StrandCoords.h"
25 /// Coordinator's job that sends a cache manage request to each strand,
26 /// aggregating individual strand responses and dumping the result if needed
27 class Inquirer
: public AsyncJob
29 CBDATA_CLASS(Inquirer
);
32 Inquirer(Request::Pointer aRequest
, const Ipc::StrandCoords
& coords
, double aTimeout
);
35 /// finds and calls the right Inquirer upon strand's response
36 static void HandleRemoteAck(const Response
& response
);
38 /* has-to-be-public AsyncJob API */
39 virtual void callException(const std::exception
& e
);
41 CodeContextPointer codeContext
;
46 virtual void swanSong();
47 virtual bool doneAll() const;
48 virtual const char *status() const;
50 /// inquire the next strand
51 virtual void inquire();
52 /// perform cleanup actions on completion of job
53 virtual void cleanup();
54 /// do specific exception handling
55 virtual void handleException(const std::exception
& e
);
56 /// send response to client
57 virtual void sendResponse() = 0;
58 /// perform aggregating of responses and returns true if need to continue
59 virtual bool aggregate(Response::Pointer aResponse
) = 0;
62 void handleRemoteAck(Response::Pointer response
);
64 static void RequestTimedOut(void* param
);
65 void requestTimedOut();
66 void removeTimeoutEvent();
69 Request::Pointer request
; ///< cache manager request received from client
71 Ipc::StrandCoords strands
; ///< all strands we want to query, in order
72 Ipc::StrandCoords::const_iterator pos
; ///< strand we should query now
74 const double timeout
; ///< number of seconds to wait for strand response
76 static RequestId::Index LastRequestId
; ///< last requestId used
81 #endif /* SQUID_IPC_INQUIRER_H */