mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 09:30:45 +00:00
storage_proxy: log failed attempts at communicating
If an exception happens in the query path, we'll never know about it. They are currently being ignored. Investigating this, I found out that this is because the readers in storage_proxy.cc handles them - but don't log they anywhere. This patch introduces such logging. the error() function takes an sstring not an exception_ptr: this is so we can reuse it in the future to also log problems from other hosts (currently not done). We have a separate helper to extract the message from the current exception before we pass it to error() Fixes #110 Signed-off-by: Glauber Costa <glommer@cloudius-systems.com>
This commit is contained in:
committed by
Avi Kivity
parent
a540a4352b
commit
1ed6333566
@@ -1229,8 +1229,9 @@ public:
|
||||
future<> done() {
|
||||
return _done_promise.get_future();
|
||||
}
|
||||
virtual void error(gms::inet_address ep) {
|
||||
// do nothing for now, request will timeout eventually
|
||||
virtual void error(gms::inet_address ep, sstring why) {
|
||||
// do nothing other than log for now, request will timeout eventually
|
||||
logger.error("Exception when communicating with {}: {}", ep, why);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1431,6 +1432,16 @@ public:
|
||||
virtual ~abstract_read_executor() {};
|
||||
|
||||
protected:
|
||||
static sstring error_sstring(std::exception_ptr eptr) {
|
||||
try {
|
||||
std::rethrow_exception(eptr);
|
||||
} catch(std::exception& e) {
|
||||
return sstring(e.what());
|
||||
} catch(...) {
|
||||
return sstring("Unknown exception");
|
||||
}
|
||||
}
|
||||
|
||||
future<foreign_ptr<lw_shared_ptr<reconcilable_result>>> make_mutation_data_request(lw_shared_ptr<query::read_command> cmd, gms::inet_address ep) {
|
||||
if (is_me(ep)) {
|
||||
return get_local_storage_proxy().query_mutations_locally(cmd, _partition_range);
|
||||
@@ -1465,7 +1476,7 @@ protected:
|
||||
try {
|
||||
resolver->add_mutate_data(ep, f.get0());
|
||||
} catch(...) {
|
||||
resolver->error(ep);
|
||||
resolver->error(ep, error_sstring(std::current_exception()));
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1476,7 +1487,7 @@ protected:
|
||||
try {
|
||||
resolver->add_data(ep, f.get0());
|
||||
} catch(...) {
|
||||
resolver->error(ep);
|
||||
resolver->error(ep, error_sstring(std::current_exception()));
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1487,7 +1498,7 @@ protected:
|
||||
try {
|
||||
resolver->add_digest(ep, f.get0());
|
||||
} catch(...) {
|
||||
resolver->error(ep);
|
||||
resolver->error(ep, error_sstring(std::current_exception()));
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user