storage无法保证cache一致性~~~

        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.

还是不够,要做cas更新。而且write之后要把version和当前数据写入cache才能保证cache一致性。

我们对一致性要求不高,这里先提出来问题。

浙ICP备20010487号