std::for_each(partVertices.begin(), partVertices.end(), [&](auto& pv) {
auto partId = pv.first;
const auto& vertices = pv.second;
std::vector<kvstore::KV> data;
std::for_each(vertices.begin(), vertices.end(), [&](auto& v) {
const auto& tags = v.get_tags();
std::for_each(tags.begin(), tags.end(), [&](auto& tag) {
VLOG(3) << "PartitionID: " << partId << ", VertexID: " << v.get_id()
<< ", TagID: " << tag.get_tag_id() << ", TagVersion: " << folly::Endian::big(version);
auto key = NebulaKeyUtils::vertexKey(partId, v.get_id(),
tag.get_tag_id(), version);
data.emplace_back(std::move(key), std::move(tag.get_props()));
if (FLAGS_enable_vertex_cache && vertexCache_ != nullptr) {
vertexCache_->evict(std::make_pair(v.get_id(), tag.get_tag_id()), partId);
VLOG(3) << "Evict cache for vId " << v.get_id()
<< ", tagId " << tag.get_tag_id();
}
});
});
doPut(spaceId_, partId, std::move(data));
});
在evit后put前其他线程访问会造成cache数据永久不一致。
应该是在put成功之后evit.