Skip to content

Commit dfce03c

Browse files
committed
Add instrumentation logging around speculative execution
1 parent d227f6e commit dfce03c

File tree

2 files changed

+53
-0
lines changed

2 files changed

+53
-0
lines changed

src/request_handler.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,24 @@ RequestHandler::RequestHandler(const Request::ConstPtr& request, const ResponseF
167167
, manager_(NULL)
168168
, metrics_(metrics) {}
169169

170+
RequestHandler::~RequestHandler() {
171+
if (Logger::log_level() >= CASS_LOG_TRACE) {
172+
OStringStream ss;
173+
for (RequestTryVec::const_iterator it = request_tries_.begin(), end = request_tries_.end();
174+
it != end; ++it) {
175+
if (it != request_tries_.begin()) ss << ", ";
176+
ss << "(" << it->address << ", ";
177+
if (it->error != CASS_OK) {
178+
ss << cass_error_desc(it->error);
179+
} else {
180+
ss << it->latency;
181+
}
182+
ss << ")";
183+
}
184+
LOG_TRACE("Speculative execution attempts: [%s]", ss.str().c_str());
185+
}
186+
}
187+
170188
void RequestHandler::set_prepared_metadata(const PreparedMetadata::Entry::Ptr& entry) {
171189
wrapper_.set_prepared_metadata(entry);
172190
}
@@ -269,6 +287,10 @@ void RequestHandler::set_response(const Host::Ptr& host, const Response::Ptr& re
269287
metrics_->record_speculative_request(uv_hrtime() - start_time_ns_);
270288
}
271289
}
290+
291+
if (Logger::log_level() >= CASS_LOG_TRACE) {
292+
request_tries_.push_back(RequestTry(host->address(), uv_hrtime() - start_time_ns_));
293+
}
272294
}
273295

274296
void RequestHandler::set_error(CassError code, const String& message) {
@@ -289,6 +311,9 @@ void RequestHandler::set_error(const Host::Ptr& host, CassError code, const Stri
289311
set_error(code, message);
290312
}
291313
}
314+
if (Logger::log_level() >= CASS_LOG_TRACE) {
315+
request_tries_.push_back(RequestTry(host->address(), code));
316+
}
292317
}
293318

294319
void RequestHandler::set_error_with_error_response(const Host::Ptr& host,
@@ -297,6 +322,9 @@ void RequestHandler::set_error_with_error_response(const Host::Ptr& host,
297322
stop_request();
298323
running_executions_--;
299324
future_->set_error_with_response(host->address(), error, code, message);
325+
if (Logger::log_level() >= CASS_LOG_TRACE) {
326+
request_tries_.push_back(RequestTry(host->address(), code));
327+
}
300328
}
301329

302330
void RequestHandler::stop_timer() { timer_.stop(); }

src/request_handler.hpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,28 @@ class ExecutionProfile;
4747
class Timer;
4848
class TokenMap;
4949

50+
struct RequestTry {
51+
RequestTry()
52+
: error(CASS_OK)
53+
, latency(0) {}
54+
55+
RequestTry(const Address& address, uint64_t latency)
56+
: address(address)
57+
, error(CASS_OK)
58+
, latency(latency / (1000 * 1000)) {} // To milliseconds
59+
60+
RequestTry(const Address& address, CassError error)
61+
: address(address)
62+
, error(error)
63+
, latency(0) {}
64+
65+
Address address;
66+
CassError error;
67+
uint64_t latency;
68+
};
69+
70+
typedef SmallVector<RequestTry, 2> RequestTryVec;
71+
5072
class ResponseFuture : public Future {
5173
public:
5274
typedef SharedRefPtr<ResponseFuture> Ptr;
@@ -138,6 +160,7 @@ class RequestHandler : public RefCounted<RequestHandler> {
138160

139161
RequestHandler(const Request::ConstPtr& request, const ResponseFuture::Ptr& future,
140162
Metrics* metrics = NULL);
163+
~RequestHandler();
141164

142165
void set_prepared_metadata(const PreparedMetadata::Entry::Ptr& entry);
143166

@@ -210,6 +233,8 @@ class RequestHandler : public RefCounted<RequestHandler> {
210233
ConnectionPoolManager* manager_;
211234

212235
Metrics* const metrics_;
236+
237+
RequestTryVec request_tries_;
213238
};
214239

215240
class KeyspaceChangedResponse {

0 commit comments

Comments
 (0)