未验证 提交 0f7e8085 编写于 作者: B BossZou 提交者: GitHub

Fix HasPartition (#2997)

Signed-off-by: Nyhz <413554850@qq.com>
上级 2aa02094
......@@ -81,6 +81,9 @@ class SSDB {
virtual Status
ShowPartitions(const std::string& collection_name, std::vector<std::string>& partition_names) = 0;
virtual Status
HasPartition(const std::string& collection_name, const std::string& partition_tag, bool& exist) = 0;
virtual Status
InsertEntities(const std::string& collection_name, const std::string& partition_name, DataChunkPtr& data_chunk) = 0;
......
......@@ -373,6 +373,25 @@ SSDBImpl::ShowPartitions(const std::string& collection_name, std::vector<std::st
return Status::OK();
}
Status
SSDBImpl::HasPartition(const std::string& collection_name, const std::string& partition_tag, bool& exist) {
CHECK_INITIALIZED;
snapshot::ScopedSnapshotT ss;
STATUS_CHECK(snapshot::Snapshots::GetInstance().GetSnapshot(ss, collection_name));
auto partition_tags = std::move(ss->GetPartitionNames());
for (auto& tag : partition_tags) {
if (tag == partition_tag) {
exist = true;
return Status::OK();
}
}
exist = false;
return Status::OK();
}
Status
SSDBImpl::InsertEntities(const std::string& collection_name, const std::string& partition_name,
DataChunkPtr& data_chunk) {
......
......@@ -76,6 +76,9 @@ class SSDBImpl : public SSDB {
Status
ShowPartitions(const std::string& collection_name, std::vector<std::string>& partition_names) override;
Status
HasPartition(const std::string& collection_name, const std::string& partition_tag, bool& exist) override;
Status
InsertEntities(const std::string& collection_name, const std::string& partition_name,
DataChunkPtr& data_chunk) override;
......
......@@ -51,26 +51,13 @@ HasPartitionRequest::OnExecute() {
return status;
}
// only process root collection, ignore partition collection
engine::meta::CollectionSchema collection_schema;
collection_schema.collection_id_ = collection_name_;
status = DBWrapper::DB()->DescribeCollection(collection_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
return Status(SERVER_COLLECTION_NOT_EXIST, CollectionNotExistMsg(collection_name_));
} else {
return status;
}
} else {
if (!collection_schema.owner_collection_.empty()) {
return Status(SERVER_INVALID_COLLECTION_NAME, CollectionNotExistMsg(collection_name_));
}
bool exists = false;
STATUS_CHECK(DBWrapper::SSDB()->HasCollection(collection_name_, exists));
if (!exists) {
return Status(SERVER_COLLECTION_NOT_EXIST, CollectionNotExistMsg(collection_name_));
}
status = DBWrapper::DB()->HasPartition(collection_name_, partition_tag_, has_partition_);
if (!status.ok()) {
return status;
}
STATUS_CHECK(DBWrapper::SSDB()->HasPartition(collection_name_, partition_tag_, has_partition_));
} catch (std::exception& ex) {
return Status(SERVER_UNEXPECTED_ERROR, ex.what());
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册