diff --git a/src/meta/client/MetaClient.cpp b/src/meta/client/MetaClient.cpp index 37bb43fddfd..2585f244536 100644 --- a/src/meta/client/MetaClient.cpp +++ b/src/meta/client/MetaClient.cpp @@ -290,6 +290,7 @@ bool MetaClient::loadSchemas(GraphSpaceID spaceId, << ", Name " << tagIt.tag_name << ", Version " << tagIt.version << " Successfully!"; } + std::unordered_set> edges; for (auto& edgeIt : edgeItemVec) { std::shared_ptr schema(new NebulaSchemaProvider(edgeIt.version)); for (auto colIt : edgeIt.schema.get_columns()) { @@ -304,7 +305,12 @@ bool MetaClient::loadSchemas(GraphSpaceID spaceId, if (it == allEdgeMap.end()) { std::vector v = {edgeIt.edge_name}; allEdgeMap.emplace(spaceId, std::move(v)); + edges.emplace(spaceId, edgeIt.edge_type); } else { + if (edges.find({spaceId, edgeIt.edge_type}) != edges.cend()) { + continue; + } + edges.emplace(spaceId, edgeIt.edge_type); it->second.emplace_back(edgeIt.edge_name); } // get the latest edge version diff --git a/src/meta/client/MetaClient.h b/src/meta/client/MetaClient.h index e5cecb74278..21a1b9fce4c 100644 --- a/src/meta/client/MetaClient.h +++ b/src/meta/client/MetaClient.h @@ -416,6 +416,7 @@ class MetaClient { StatusOr getEdgeNameByTypeFromCache(const GraphSpaceID& space, const EdgeType edgeType); + // get all lastest version edge StatusOr> getAllEdgeFromCache(const GraphSpaceID& space); PartsMap getPartsMapFromCache(const HostAddr& host); diff --git a/src/meta/processors/schemaMan/ListEdgesProcessor.cpp b/src/meta/processors/schemaMan/ListEdgesProcessor.cpp index db114f0347a..ad3115ac317 100644 --- a/src/meta/processors/schemaMan/ListEdgesProcessor.cpp +++ b/src/meta/processors/schemaMan/ListEdgesProcessor.cpp @@ -21,6 +21,7 @@ void ListEdgesProcessor::process(const cpp2::ListEdgesReq& req) { onFinished(); return; } + decltype(resp_.edges) edges; while (iter->valid()) { auto key = iter->key(); diff --git a/src/storage/mutate/DeleteEdgesProcessor.cpp b/src/storage/mutate/DeleteEdgesProcessor.cpp index 89dbfd0ebce..90283998c98 100644 --- a/src/storage/mutate/DeleteEdgesProcessor.cpp +++ b/src/storage/mutate/DeleteEdgesProcessor.cpp @@ -20,12 +20,13 @@ void DeleteEdgesProcessor::process(const cpp2::DeleteEdgesRequest& req) { } if (indexes_.empty()) { - std::for_each(req.parts.begin(), req.parts.end(), [&](auto &partEdges) { - callingNum_ += partEdges.second.size(); + std::for_each(req.parts.begin(), req.parts.end(), [this](auto &partEdges) { + this->callingNum_ += partEdges.second.size(); }); - std::for_each(req.parts.begin(), req.parts.end(), [&](auto &partEdges) { + std::for_each(req.parts.begin(), req.parts.end(), [spaceId, this](auto &partEdges) { auto partId = partEdges.first; - std::for_each(partEdges.second.begin(), partEdges.second.end(), [&](auto &edgeKey) { + std::for_each(partEdges.second.begin(), partEdges.second.end(), + [spaceId, partId, this](auto &edgeKey) { auto start = NebulaKeyUtils::edgeKey(partId, edgeKey.src, edgeKey.edge_type, @@ -38,12 +39,12 @@ void DeleteEdgesProcessor::process(const cpp2::DeleteEdgesRequest& req) { edgeKey.ranking, edgeKey.dst, std::numeric_limits::max()); - doRemoveRange(spaceId, partId, start, end); + this->doRemoveRange(spaceId, partId, start, end); }); }); } else { callingNum_ = req.parts.size(); - std::for_each(req.parts.begin(), req.parts.end(), [&](auto &partEdges) { + std::for_each(req.parts.begin(), req.parts.end(), [spaceId, this](auto &partEdges) { auto partId = partEdges.first; auto atomic = [spaceId, partId, edges = std::move(partEdges.second), this]() -> std::string { diff --git a/src/storage/mutate/DeleteVerticesProcessor.cpp b/src/storage/mutate/DeleteVerticesProcessor.cpp index b0a9ad18516..590742ad709 100644 --- a/src/storage/mutate/DeleteVerticesProcessor.cpp +++ b/src/storage/mutate/DeleteVerticesProcessor.cpp @@ -21,8 +21,8 @@ void DeleteVerticesProcessor::process(const cpp2::DeleteVerticesRequest& req) { } if (indexes_.empty()) { - std::for_each(partVertices.begin(), partVertices.end(), [&](auto& pv) { - callingNum_ += pv.second.size(); + std::for_each(partVertices.begin(), partVertices.end(), [this](auto& pv) { + this->callingNum_ += pv.second.size(); }); for (auto pv = partVertices.begin(); pv != partVertices.end(); pv++) { @@ -57,11 +57,10 @@ void DeleteVerticesProcessor::process(const cpp2::DeleteVerticesRequest& req) { } } else { callingNum_ = req.parts.size(); - std::for_each(req.parts.begin(), req.parts.end(), [&](auto &partVerticse) { - auto partId = partVerticse.first; - const auto &vertices = partVerticse.second; - auto atomic = [&]() -> std::string { - return deleteVertices(spaceId, partId, vertices); + std::for_each(req.parts.begin(), req.parts.end(), [spaceId, this](auto &pv) { + auto partId = pv.first; + auto atomic = [spaceId, partId, v = std::move(pv.second), this]() -> std::string { + return deleteVertices(spaceId, partId, v); }; auto callback = [spaceId, partId, this](kvstore::ResultCode code) {