diff --git a/src/storage/mutate/AddEdgesAtomicProcessor.cpp b/src/storage/mutate/AddEdgesAtomicProcessor.cpp index 23e893a43..7f06c3f70 100644 --- a/src/storage/mutate/AddEdgesAtomicProcessor.cpp +++ b/src/storage/mutate/AddEdgesAtomicProcessor.cpp @@ -49,13 +49,8 @@ void AddEdgesAtomicProcessor::processByChain(const cpp2::AddEdgesRequest& req) { for (auto& part : *req.parts_ref()) { auto localPart = part.first; for (auto& edge : part.second) { - auto stPartId = env_->metaClient_->partId(spaceId_, + auto remotePart = env_->metaClient_->partId(spaceId_, (*(*edge.key_ref()).dst_ref()).getStr()); - if (!stPartId.ok()) { - failedPart[localPart] = nebula::cpp2::ErrorCode::E_SPACE_NOT_FOUND; - break; - } - auto remotePart = stPartId.value(); ChainId cid{localPart, remotePart}; if (FLAGS_trace_toss) { auto& ekey = *edge.key_ref(); diff --git a/src/storage/test/TossEnvironment.h b/src/storage/test/TossEnvironment.h index 7f473dedc..f4df2d2fd 100644 --- a/src/storage/test/TossEnvironment.h +++ b/src/storage/test/TossEnvironment.h @@ -545,9 +545,7 @@ struct TossEnvironment { int32_t getPartId(const std::string& src) { // auto stPart = mClient_->partId(spaceId_, edgeKey.src.getStr()); - auto stPart = mClient_->partId(spaceId_, src); - LOG_IF(FATAL, !stPart.ok()) << "mClient_->partId failed"; - return stPart.value(); + return mClient_->partId(spaceId_, src); } /** diff --git a/src/storage/transaction/TransactionManager.cpp b/src/storage/transaction/TransactionManager.cpp index 545f87191..f6c63e387 100644 --- a/src/storage/transaction/TransactionManager.cpp +++ b/src/storage/transaction/TransactionManager.cpp @@ -231,11 +231,7 @@ TransactionManager::updateEdgeAtomic(size_t vIdLen, PartitionID partId, const cpp2::EdgeKey& edgeKey, GetBatchFunc batchGetter) { - auto stRemotePart = env_->metaClient_->partId(spaceId, (*edgeKey.dst_ref()).getStr()); - if (!stRemotePart.ok()) { - return folly::makeFuture(nebula::cpp2::ErrorCode::E_UNKNOWN); - } - auto remotePart = stRemotePart.value(); + auto remotePart = env_->metaClient_->partId(spaceId, (*edgeKey.dst_ref()).getStr()); auto localKey = TransactionUtils::edgeKey(vIdLen, partId, edgeKey); std::vector data{std::make_pair(localKey, "")}; @@ -265,11 +261,8 @@ TransactionManager::resumeTransaction(size_t vIdLen, auto c = folly::makePromiseContract(); auto dst = NebulaKeyUtils::getDstId(vIdLen, localKey); - auto stRemotePartId = env_->metaClient_->partId(spaceId, dst.str()); - if (!stRemotePartId.ok()) { - return nebula::cpp2::ErrorCode::E_SPACE_NOT_FOUND; - } - auto remoteKey = TransactionUtils::reverseRawKey(vIdLen, stRemotePartId.value(), localKey); + auto remotePartId = env_->metaClient_->partId(spaceId, dst.str()); + auto remoteKey = TransactionUtils::reverseRawKey(vIdLen, remotePartId, localKey); LOG_IF(INFO, FLAGS_trace_toss) << "try to get remote key=" << folly::hexlify(remoteKey) << ", according to lock=" << folly::hexlify(lockKey); diff --git a/src/tools/db-dump/DbDumper.cpp b/src/tools/db-dump/DbDumper.cpp index 0e151deab..7d2300e33 100644 --- a/src/tools/db-dump/DbDumper.cpp +++ b/src/tools/db-dump/DbDumper.cpp @@ -82,6 +82,12 @@ Status DbDumper::initSpace() { } spaceVidLen_ = spaceVidLen.value(); + auto vidTypeStatus = metaClient_->getSpaceVidType(spaceId_); + if (!vidTypeStatus) { + return vidTypeStatus.status(); + } + spaceVidType_ = std::move(vidTypeStatus).value(); + auto partNum = metaClient_->partsNum(spaceId_); if (!partNum.ok()) { return Status::Error("Get partition number from '%s' failed.", FLAGS_space_name.c_str()); @@ -94,7 +100,15 @@ Status DbDumper::initParams() { std::vector tags, edges; try { folly::splitTo(',', FLAGS_parts, std::inserter(parts_, parts_.begin()), true); - folly::splitTo(',', FLAGS_vids, std::inserter(vids_, vids_.begin()), true); + if (spaceVidType_ == meta::cpp2::PropertyType::INT64) { + std::vector intVids; + folly::splitTo(',', FLAGS_vids, std::inserter(intVids, intVids.begin()), true); + for (auto vid : intVids) { + vids_.emplace(std::string(reinterpret_cast(&vid), 8)); + } + } else { + folly::splitTo(',', FLAGS_vids, std::inserter(vids_, vids_.begin()), true); + } folly::splitTo(',', FLAGS_tags, std::inserter(tags, tags.begin()), true); folly::splitTo(',', FLAGS_edges, std::inserter(edges, edges.begin()), true); } catch (const std::exception& e) { @@ -209,7 +223,7 @@ void DbDumper::run() { if (!isValidVidLen(vid)) { continue; } - auto partId = std::hash()(vid) % partNum_ + 1; + auto partId = metaClient_->partId(partNum_, vid); auto prefix = NebulaKeyUtils::vertexPrefix(spaceVidLen_, partId, vid); seek(prefix); } @@ -221,7 +235,7 @@ void DbDumper::run() { if (!isValidVidLen(vid)) { continue; } - auto partId = std::hash()(vid) % partNum_ + 1; + auto partId = metaClient_->partId(partNum_, vid); for (auto edgeType : edgeTypes_) { auto prefix = NebulaKeyUtils::edgePrefix(spaceVidLen_, partId, vid, edgeType); seek(prefix); @@ -235,7 +249,7 @@ void DbDumper::run() { if (!isValidVidLen(vid)) { continue; } - auto partId = std::hash()(vid) % partNum_ + 1; + auto partId = metaClient_->partId(partNum_, vid); for (auto tagId : tagIds_) { auto prefix = NebulaKeyUtils::vertexPrefix(spaceVidLen_, partId, vid, tagId); seek(prefix); @@ -249,7 +263,7 @@ void DbDumper::run() { if (!isValidVidLen(vid)) { continue; } - auto partId = std::hash()(vid) % partNum_ + 1; + auto partId = metaClient_->partId(partNum_, vid); for (auto edgeType : edgeTypes_) { auto prefix = NebulaKeyUtils::edgePrefix(spaceVidLen_, partId, vid, edgeType); seek(prefix); @@ -260,7 +274,7 @@ void DbDumper::run() { if (!isValidVidLen(vid)) { continue; } - auto partId = std::hash()(vid) % partNum_ + 1; + auto partId = metaClient_->partId(partNum_, vid); for (auto tagId : tagIds_) { auto prefix = NebulaKeyUtils::vertexPrefix(spaceVidLen_, partId, vid, tagId); seek(prefix); @@ -515,7 +529,7 @@ void DbDumper::iterates(kvstore::RocksPrefixIter* it) { inline void DbDumper::printTagKey(const folly::StringPiece& key) { auto part = NebulaKeyUtils::getPart(key); - auto vid = NebulaKeyUtils::getVertexId(spaceVidLen_, key); + auto vid = getVertexId(NebulaKeyUtils::getVertexId(spaceVidLen_, key)); auto tagId = NebulaKeyUtils::getTagId(spaceVidLen_, key); std::cout << "[vertex] key: " << part << ", " << vid << ", " << getTagName(tagId); } @@ -523,8 +537,8 @@ inline void DbDumper::printTagKey(const folly::StringPiece& key) { inline void DbDumper::printEdgeKey(const folly::StringPiece& key) { auto part = NebulaKeyUtils::getPart(key); auto edgeType = NebulaKeyUtils::getEdgeType(spaceVidLen_, key); - auto src = NebulaKeyUtils::getSrcId(spaceVidLen_, key); - auto dst = NebulaKeyUtils::getDstId(spaceVidLen_, key); + auto src = getVertexId(NebulaKeyUtils::getSrcId(spaceVidLen_, key)); + auto dst = getVertexId(NebulaKeyUtils::getDstId(spaceVidLen_, key)); auto rank = NebulaKeyUtils::getRank(spaceVidLen_, key); std::cout << "[edge] key: " << part << ", " << src << ", " << getEdgeName(edgeType) << ", " << rank << ", " << dst; @@ -569,5 +583,15 @@ std::string DbDumper::getEdgeName(const EdgeType edgeType) { return name.value(); } } + +Value DbDumper::getVertexId(const folly::StringPiece &vidStr) { + if (spaceVidType_ == meta::cpp2::PropertyType::INT64) { + int64_t val; + memcpy(reinterpret_cast(&val), vidStr.begin(), sizeof(int64_t)); + return val; + } else { + return vidStr.str(); + } +} } // namespace storage } // namespace nebula diff --git a/src/tools/db-dump/DbDumper.h b/src/tools/db-dump/DbDumper.h index 5add06ae7..ce29a2938 100644 --- a/src/tools/db-dump/DbDumper.h +++ b/src/tools/db-dump/DbDumper.h @@ -65,6 +65,8 @@ class DbDumper { bool isValidVidLen(VertexID vid); + Value getVertexId(const folly::StringPiece &vidStr); + private: std::unique_ptr db_; rocksdb::Options options_; @@ -72,6 +74,7 @@ class DbDumper { std::unique_ptr schemaMng_; GraphSpaceID spaceId_; int32_t spaceVidLen_; + meta::cpp2::PropertyType spaceVidType_; int32_t partNum_; std::unordered_set parts_; std::unordered_set vids_;