1
0
Fork 0

only build the status messages if actually necessary (#9318)

This commit is contained in:
Jan 2019-06-25 10:16:12 +02:00 committed by GitHub
parent 086c4e7b82
commit a5a656adbd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 30 deletions

View File

@ -78,76 +78,73 @@ static VPackBuilder& stripObjectIdsImpl(VPackBuilder& builder, VPackSlice const&
return builder;
}
arangodb::Result convertStatus(rocksdb::Status const& status, StatusHint hint,
std::string const& prefix, std::string const& postfix) {
std::string message = prefix + status.ToString() + postfix;
arangodb::Result convertStatus(rocksdb::Status const& status, StatusHint hint) {
switch (status.code()) {
case rocksdb::Status::Code::kOk:
return {TRI_ERROR_NO_ERROR};
case rocksdb::Status::Code::kNotFound:
switch (hint) {
case StatusHint::collection:
return {TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, std::move(message)};
return {TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, status.ToString()};
case StatusHint::database:
return {TRI_ERROR_ARANGO_DATABASE_NOT_FOUND, std::move(message)};
return {TRI_ERROR_ARANGO_DATABASE_NOT_FOUND, status.ToString()};
case StatusHint::document:
return {TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND, std::move(message)};
return {TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND, status.ToString()};
case StatusHint::index:
return {TRI_ERROR_ARANGO_INDEX_NOT_FOUND, std::move(message)};
return {TRI_ERROR_ARANGO_INDEX_NOT_FOUND, status.ToString()};
case StatusHint::view:
return {TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, std::move(message)};
return {TRI_ERROR_ARANGO_DATA_SOURCE_NOT_FOUND, status.ToString()};
case StatusHint::wal:
// suppress this error if the WAL is queried for changes that are not
// available
return {TRI_ERROR_NO_ERROR};
default:
return {TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND, std::move(message)};
return {TRI_ERROR_ARANGO_DOCUMENT_NOT_FOUND, status.ToString()};
}
case rocksdb::Status::Code::kCorruption:
return {TRI_ERROR_ARANGO_CORRUPTED_DATAFILE, std::move(message)};
return {TRI_ERROR_ARANGO_CORRUPTED_DATAFILE, status.ToString()};
case rocksdb::Status::Code::kNotSupported:
return {TRI_ERROR_NOT_IMPLEMENTED, std::move(message)};
return {TRI_ERROR_NOT_IMPLEMENTED, status.ToString()};
case rocksdb::Status::Code::kInvalidArgument:
return {TRI_ERROR_BAD_PARAMETER, std::move(message)};
return {TRI_ERROR_BAD_PARAMETER, status.ToString()};
case rocksdb::Status::Code::kIOError:
if (status.subcode() == rocksdb::Status::SubCode::kNoSpace) {
return {TRI_ERROR_ARANGO_FILESYSTEM_FULL, std::move(message)};
return {TRI_ERROR_ARANGO_FILESYSTEM_FULL, status.ToString()};
}
return {TRI_ERROR_ARANGO_IO_ERROR, std::move(message)};
return {TRI_ERROR_ARANGO_IO_ERROR, status.ToString()};
case rocksdb::Status::Code::kMergeInProgress:
return {TRI_ERROR_ARANGO_MERGE_IN_PROGRESS, std::move(message)};
return {TRI_ERROR_ARANGO_MERGE_IN_PROGRESS, status.ToString()};
case rocksdb::Status::Code::kIncomplete:
return {TRI_ERROR_ARANGO_INCOMPLETE_READ,
prefix + "'incomplete' error in storage engine " + postfix};
return {TRI_ERROR_ARANGO_INCOMPLETE_READ, "'incomplete' error in storage engine: " + status.ToString()};
case rocksdb::Status::Code::kShutdownInProgress:
return {TRI_ERROR_SHUTTING_DOWN, std::move(message)};
return {TRI_ERROR_SHUTTING_DOWN, status.ToString()};
case rocksdb::Status::Code::kTimedOut:
if (status.subcode() == rocksdb::Status::SubCode::kMutexTimeout) {
return {TRI_ERROR_LOCK_TIMEOUT, std::move(message)};
return {TRI_ERROR_LOCK_TIMEOUT, status.ToString()};
}
if (status.subcode() == rocksdb::Status::SubCode::kLockTimeout) {
return {TRI_ERROR_ARANGO_CONFLICT,
prefix + "timeout waiting to lock key " + postfix};
"timeout waiting to lock key " + status.ToString()};
}
return {TRI_ERROR_LOCK_TIMEOUT, std::move(message)};
return {TRI_ERROR_LOCK_TIMEOUT, status.ToString()};
case rocksdb::Status::Code::kAborted:
return {TRI_ERROR_TRANSACTION_ABORTED, std::move(message)};
return {TRI_ERROR_TRANSACTION_ABORTED, status.ToString()};
case rocksdb::Status::Code::kBusy:
if (status.subcode() == rocksdb::Status::SubCode::kDeadlock) {
return {TRI_ERROR_DEADLOCK};
return {TRI_ERROR_DEADLOCK, status.ToString()};
}
if (status.subcode() == rocksdb::Status::SubCode::kLockLimit) {
// should actually not occur with our RocksDB configuration
return {TRI_ERROR_RESOURCE_LIMIT,
prefix + "failed to acquire lock due to lock number limit " + postfix};
"failed to acquire lock due to lock number limit " + status.ToString()};
}
return {TRI_ERROR_ARANGO_CONFLICT, "write-write conflict"};
case rocksdb::Status::Code::kExpired:
return {TRI_ERROR_INTERNAL, prefix + "key expired; TTL was set in error " + postfix};
return {TRI_ERROR_INTERNAL, "key expired; TTL was set in error " + status.ToString()};
case rocksdb::Status::Code::kTryAgain:
return {TRI_ERROR_ARANGO_TRY_AGAIN, std::move(message)};
return {TRI_ERROR_ARANGO_TRY_AGAIN, status.ToString()};
default:
return {TRI_ERROR_INTERNAL, prefix + "unknown RocksDB status code " + postfix};
return {TRI_ERROR_INTERNAL, "unknown RocksDB status code " + status.ToString()};
}
}

View File

@ -43,9 +43,8 @@ namespace rocksutils {
enum StatusHint { none, document, collection, view, index, database, wal };
arangodb::Result convertStatus(rocksdb::Status const&, StatusHint hint = StatusHint::none,
std::string const& prefix = StaticStrings::Empty,
std::string const& postfix = StaticStrings::Empty);
arangodb::Result convertStatus(rocksdb::Status const&, StatusHint hint = StatusHint::none);
std::pair<VPackSlice, std::unique_ptr<VPackBuffer<uint8_t>>> stripObjectIds(
VPackSlice const& inputSlice, bool checkBeforeCopy = true);