mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 06:47:41 +03:00
add some debugging to understand localstore not yet open errors
Reviewed By: chadaustin Differential Revision: D40877451 fbshipit-source-id: 0c86d7e9266543f77c589ace0237e9c3b7d15c93
This commit is contained in:
parent
23c8a651d3
commit
e244a30450
@ -30,6 +30,7 @@
|
||||
#include "eden/fs/telemetry/StructuredLogger.h"
|
||||
#include "eden/fs/utils/Bug.h"
|
||||
#include "eden/fs/utils/FaultInjector.h"
|
||||
#include "eden/fs/utils/Throw.h"
|
||||
|
||||
using folly::ByteRange;
|
||||
using folly::Synchronized;
|
||||
@ -274,6 +275,11 @@ RocksHandles openDB(AbsolutePathPiece path, RocksDBOpenMode mode) {
|
||||
|
||||
namespace facebook::eden {
|
||||
|
||||
RocksDbLocalStore::RockDBState::RockDBState() {
|
||||
XLOG(DBG2) << "Making a new RockDB localstore ( " << this
|
||||
<< " ). debug information for T136469251.";
|
||||
}
|
||||
|
||||
RocksDbLocalStore::RocksDbLocalStore(
|
||||
AbsolutePathPiece pathToRocksDb,
|
||||
std::shared_ptr<StructuredLogger> structuredLogger,
|
||||
@ -283,9 +289,14 @@ RocksDbLocalStore::RocksDbLocalStore(
|
||||
faultInjector_(*faultInjector),
|
||||
ioPool_(12, "RocksLocalStore"),
|
||||
pathToDb_{pathToRocksDb.copy()},
|
||||
mode_{mode} {}
|
||||
mode_{mode} {
|
||||
XLOG(DBG2) << "Making a new RockDB localstore ( " << this
|
||||
<< " ) . debug information for T136469251.";
|
||||
}
|
||||
|
||||
void RocksDbLocalStore::open() {
|
||||
XLOG(DBG2) << "Opening Rocksdb localstore ( " << this
|
||||
<< " ) . debug information for T136469251.";
|
||||
{
|
||||
auto handles = dbHandles_.wlock();
|
||||
switch (handles->status) {
|
||||
@ -308,7 +319,8 @@ void RocksDbLocalStore::open() {
|
||||
computeStats(/*publish=*/true, /*config=*/nullptr);
|
||||
XLOG(DBG2) << "RocksDB opened, clearing out old data ...";
|
||||
clearDeprecatedKeySpaces();
|
||||
XLOG(DBG2) << "RocksDB setup complete";
|
||||
XLOG(DBG2) << "RocksDB setup complete. ( " << this
|
||||
<< " ) . debug information for T136469251.";
|
||||
}
|
||||
|
||||
RocksDbLocalStore::~RocksDbLocalStore() {
|
||||
@ -325,6 +337,8 @@ void RocksDbLocalStore::close() {
|
||||
handles->handles = nullptr;
|
||||
}
|
||||
handles->status = RockDbHandleStatus::CLOSED;
|
||||
XLOG(DBG2) << "Closing Rocksdb localstore ( " << this
|
||||
<< " ) . debug information for T136469251.";
|
||||
}
|
||||
|
||||
folly::Synchronized<RocksDbLocalStore::RockDBState>::ConstRLockedPtr
|
||||
@ -332,7 +346,7 @@ RocksDbLocalStore::getHandles() const {
|
||||
auto handles = dbHandles_.rlock();
|
||||
switch (handles->status) {
|
||||
case RockDbHandleStatus::NOT_YET_OPENED:
|
||||
throwStoreNotYetOpenedError();
|
||||
throwStoreNotYetOpenedError(handles);
|
||||
case RockDbHandleStatus::OPEN:
|
||||
if (!handles->handles->db) {
|
||||
EDEN_BUG()
|
||||
@ -340,7 +354,7 @@ RocksDbLocalStore::getHandles() const {
|
||||
}
|
||||
break;
|
||||
case RockDbHandleStatus::CLOSED:
|
||||
throwStoreClosedError();
|
||||
throwStoreClosedError(handles);
|
||||
}
|
||||
|
||||
return handles;
|
||||
@ -763,17 +777,27 @@ void RocksDbLocalStore::autoGCFinished(
|
||||
}
|
||||
}
|
||||
|
||||
void RocksDbLocalStore::throwStoreClosedError() const {
|
||||
void RocksDbLocalStore::throwStoreClosedError(
|
||||
folly::Synchronized<RocksDbLocalStore::RockDBState>::ConstRLockedPtr&
|
||||
lockedState) const {
|
||||
// It might be nicer to throw an EdenError exception here.
|
||||
// At the moment we don't simply due to library dependency ordering in the
|
||||
// CMake-based build. We should ideally restructure the CMake-based build to
|
||||
// more closely match our Buck-based library configuration.
|
||||
throw std::runtime_error("the RocksDB local store is already closed");
|
||||
throwf<std::runtime_error>(
|
||||
"the RocksDB local store is already closed. Localstore: {}, state: {}",
|
||||
fmt::ptr(this),
|
||||
fmt::ptr(&*lockedState));
|
||||
}
|
||||
|
||||
void RocksDbLocalStore::throwStoreNotYetOpenedError() const {
|
||||
void RocksDbLocalStore::throwStoreNotYetOpenedError(
|
||||
folly::Synchronized<RocksDbLocalStore::RockDBState>::ConstRLockedPtr&
|
||||
lockedState) const {
|
||||
// see comment about EdenError in throwStoreClosedError
|
||||
throw std::runtime_error("the RocksDB local store has not yet been opened");
|
||||
throwf<std::runtime_error>(
|
||||
"the RocksDB local store has not yet been opened. Localstore: {}, state: {}",
|
||||
fmt::ptr(this),
|
||||
fmt::ptr(&*lockedState));
|
||||
}
|
||||
|
||||
} // namespace facebook::eden
|
||||
|
@ -62,6 +62,8 @@ class RocksDbLocalStore final : public LocalStore {
|
||||
struct RockDBState {
|
||||
std::unique_ptr<RocksHandles> handles;
|
||||
RockDbHandleStatus status{RockDbHandleStatus::NOT_YET_OPENED};
|
||||
|
||||
RockDBState();
|
||||
};
|
||||
|
||||
private:
|
||||
@ -74,8 +76,12 @@ class RocksDbLocalStore final : public LocalStore {
|
||||
* closed while the I/O operation is in progress.
|
||||
*/
|
||||
folly::Synchronized<RockDBState>::ConstRLockedPtr getHandles() const;
|
||||
[[noreturn]] void throwStoreClosedError() const;
|
||||
[[noreturn]] void throwStoreNotYetOpenedError() const;
|
||||
[[noreturn]] void throwStoreClosedError(
|
||||
folly::Synchronized<RocksDbLocalStore::RockDBState>::ConstRLockedPtr&
|
||||
lockedState) const;
|
||||
[[noreturn]] void throwStoreNotYetOpenedError(
|
||||
folly::Synchronized<RocksDbLocalStore::RockDBState>::ConstRLockedPtr&
|
||||
lockedState) const;
|
||||
std::shared_ptr<RocksDbLocalStore> getSharedFromThis() {
|
||||
return std::static_pointer_cast<RocksDbLocalStore>(shared_from_this());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user