diff options
Diffstat (limited to 'db/db_impl/db_impl.cc')
-rw-r--r-- | db/db_impl/db_impl.cc | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/db/db_impl/db_impl.cc b/db/db_impl/db_impl.cc index 20c3c2bd4..d617fe3e7 100644 --- a/db/db_impl/db_impl.cc +++ b/db/db_impl/db_impl.cc @@ -3945,10 +3945,10 @@ Status DBImpl::GetDbSessionId(std::string& session_id) const { return Status::OK(); } -void DBImpl::SetDbSessionId() { +std::string DBImpl::GenerateDbSessionId(Env* env) { // GenerateUniqueId() generates an identifier that has a negligible // probability of being duplicated, ~128 bits of entropy - std::string uuid = env_->GenerateUniqueId(); + std::string uuid = env->GenerateUniqueId(); // Hash and reformat that down to a more compact format, 20 characters // in base-36 ([0-9A-Z]), which is ~103 bits of entropy, which is enough @@ -3959,15 +3959,21 @@ void DBImpl::SetDbSessionId() { // * Visually distinct from DB id format uint64_t a = NPHash64(uuid.data(), uuid.size(), 1234U); uint64_t b = NPHash64(uuid.data(), uuid.size(), 5678U); - db_session_id_.resize(20); + std::string db_session_id; + db_session_id.resize(20); static const char* const base36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; size_t i = 0; for (; i < 10U; ++i, a /= 36U) { - db_session_id_[i] = base36[a % 36]; + db_session_id[i] = base36[a % 36]; } for (; i < 20U; ++i, b /= 36U) { - db_session_id_[i] = base36[b % 36]; + db_session_id[i] = base36[b % 36]; } + return db_session_id; +} + +void DBImpl::SetDbSessionId() { + db_session_id_ = GenerateDbSessionId(env_); TEST_SYNC_POINT_CALLBACK("DBImpl::SetDbSessionId", &db_session_id_); } |