未验证 提交 1e167202 编写于 作者: Y yukun 提交者: GitHub

Using CollectionMappings in DescribeCollection (#2990)

* Use unordered_map in CollectionMappings
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Fix ParseMetaUri bug
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>

* Delete GetVectorsByID
Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>
上级 6783d36c
......@@ -27,7 +27,6 @@
#include "server/delivery/request/DropPartitionRequest.h"
#include "server/delivery/request/FlushRequest.h"
#include "server/delivery/request/GetVectorIDsRequest.h"
#include "server/delivery/request/GetVectorsByIDRequest.h"
#include "server/delivery/request/HasCollectionRequest.h"
#include "server/delivery/request/HasPartitionRequest.h"
#include "server/delivery/request/InsertRequest.h"
......@@ -85,15 +84,6 @@ RequestHandler::Insert(const std::shared_ptr<Context>& context, const std::strin
return request_ptr->status();
}
Status
RequestHandler::GetVectorsByID(const std::shared_ptr<Context>& context, const std::string& collection_name,
const std::vector<int64_t>& ids, std::vector<engine::VectorsData>& vectors) {
BaseRequestPtr request_ptr = GetVectorsByIDRequest::Create(context, collection_name, ids, vectors);
RequestScheduler::ExecRequest(request_ptr);
return request_ptr->status();
}
Status
RequestHandler::GetVectorIDs(const std::shared_ptr<Context>& context, const std::string& collection_name,
const std::string& segment_name, std::vector<int64_t>& vector_ids) {
......
......@@ -43,10 +43,6 @@ class RequestHandler {
Insert(const std::shared_ptr<Context>& context, const std::string& collection_name, engine::VectorsData& vectors,
const std::string& partition_tag);
Status
GetVectorsByID(const std::shared_ptr<Context>& context, const std::string& collection_name,
const std::vector<int64_t>& ids, std::vector<engine::VectorsData>& vectors);
Status
GetVectorIDs(const std::shared_ptr<Context>& context, const std::string& collection_name,
const std::string& segment_name, std::vector<int64_t>& vector_ids);
......
......@@ -49,7 +49,7 @@ DescribeHybridCollectionRequest::OnExecute() {
try {
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
auto status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
if (!status.ok()) {
return status;
......
......@@ -62,7 +62,7 @@ HybridSearchRequest::OnExecute() {
// step 2: check table existence
// only process root table, ignore partition table
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(query_ptr_->collection_id, collection, fields_schema);
fiu_do_on("HybridSearchRequest.OnExecute.describe_table_fail",
status = Status(milvus::SERVER_UNEXPECTED_ERROR, ""));
......
......@@ -55,7 +55,7 @@ CompactRequest::OnExecute() {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
......
......@@ -49,7 +49,7 @@ CountCollectionRequest::OnExecute() {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
......
......@@ -67,7 +67,7 @@ CreateIndexRequest::OnExecute() {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
fiu_do_on("CreateIndexRequest.OnExecute.not_has_collection",
status = Status(milvus::SERVER_UNEXPECTED_ERROR, ""));
......
......@@ -56,7 +56,7 @@ CreatePartitionRequest::OnExecute() {
// only process root collection, ignore partition collection
bool exist = false;
status = DBWrapper::DB()->HasCollection(collection_name_, exist);
status = DBWrapper::SSDB()->HasCollection(collection_name_, exist);
if (!exist) {
return Status(SERVER_COLLECTION_NOT_EXIST, CollectionNotExistMsg(collection_name_));
}
......
......@@ -54,7 +54,7 @@ DeleteByIDRequest::OnExecute() {
// step 2: check collection existence
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
......
......@@ -49,7 +49,7 @@ DescribeIndexRequest::OnExecute() {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
fiu_do_on("DropIndexRequest.OnExecute.collection_not_exist",
status = Status(milvus::SERVER_UNEXPECTED_ERROR, ""));
......
......@@ -49,7 +49,7 @@ DropCollectionRequest::OnExecute() {
// step 2: check collection existence
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
fiu_do_on("DropCollectionRequest.OnExecute.db_not_found", status = Status(milvus::DB_NOT_FOUND, ""));
......
......@@ -53,7 +53,7 @@ DropIndexRequest::OnExecute() {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
fiu_do_on("DropIndexRequest.OnExecute.collection_not_exist",
status = Status(milvus::SERVER_UNEXPECTED_ERROR, ""));
......
......@@ -47,7 +47,7 @@ DropPartitionRequest::OnExecute() {
/* check collection */
bool exist = false;
auto status = DBWrapper::DB()->HasCollection(collection_name_, exist);
auto status = DBWrapper::SSDB()->HasCollection(collection_name_, exist);
if (!exist) {
return Status(SERVER_COLLECTION_NOT_EXIST, CollectionNotExistMsg(collection_name_));
}
......
......@@ -60,7 +60,7 @@ FlushRequest::OnExecute() {
for (auto& name : collection_names_) {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(name, collection, fields_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
......
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#include "server/delivery/request/GetVectorsByIDRequest.h"
#include "server/DBWrapper.h"
#include "server/ValidationUtil.h"
#include "utils/Log.h"
#include "utils/TimeRecorder.h"
#include <memory>
#include <vector>
namespace milvus {
namespace server {
constexpr uint64_t MAX_COUNT_RETURNED = 1000;
GetVectorsByIDRequest::GetVectorsByIDRequest(const std::shared_ptr<milvus::server::Context>& context,
const std::string& collection_name, const std::vector<int64_t>& ids,
std::vector<engine::VectorsData>& vectors)
: BaseRequest(context, BaseRequest::kGetVectorByID),
collection_name_(collection_name),
ids_(ids),
vectors_(vectors) {
}
BaseRequestPtr
GetVectorsByIDRequest::Create(const std::shared_ptr<milvus::server::Context>& context,
const std::string& collection_name, const std::vector<int64_t>& ids,
std::vector<engine::VectorsData>& vectors) {
return std::shared_ptr<BaseRequest>(new GetVectorsByIDRequest(context, collection_name, ids, vectors));
}
Status
GetVectorsByIDRequest::OnExecute() {
try {
std::string hdr = "GetVectorsByIDRequest(collection=" + collection_name_ + ")";
TimeRecorderAuto rc(hdr);
// step 1: check arguments
if (ids_.empty()) {
return Status(SERVER_INVALID_ARGUMENT, "No vector id specified");
}
if (ids_.size() > MAX_COUNT_RETURNED) {
std::string msg = "Input id array size cannot exceed: " + std::to_string(MAX_COUNT_RETURNED);
return Status(SERVER_INVALID_ARGUMENT, msg);
}
auto status = ValidateCollectionName(collection_name_);
if (!status.ok()) {
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_));
}
}
// step 2: get vector data, now only support get one id
return DBWrapper::DB()->GetVectorsByID(collection_schema, ids_, vectors_);
} catch (std::exception& ex) {
return Status(SERVER_UNEXPECTED_ERROR, ex.what());
}
return Status::OK();
}
} // namespace server
} // namespace milvus
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#pragma once
#include "server/delivery/request/BaseRequest.h"
#include <memory>
#include <string>
#include <vector>
namespace milvus {
namespace server {
class GetVectorsByIDRequest : public BaseRequest {
public:
static BaseRequestPtr
Create(const std::shared_ptr<milvus::server::Context>& context, const std::string& collection_name,
const std::vector<int64_t>& ids, std::vector<engine::VectorsData>& vectors);
protected:
GetVectorsByIDRequest(const std::shared_ptr<milvus::server::Context>& context, const std::string& collection_name,
const std::vector<int64_t>& ids, std::vector<engine::VectorsData>& vectors);
Status
OnExecute() override;
private:
std::string collection_name_;
std::vector<int64_t> ids_;
std::vector<engine::VectorsData>& vectors_;
};
} // namespace server
} // namespace milvus
......@@ -48,7 +48,7 @@ PreloadCollectionRequest::OnExecute() {
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
......
......@@ -55,7 +55,7 @@ ShowCollectionInfoRequest::OnExecute() {
// step 2: check collection existence
// only process root collection, ignore partition collection
engine::snapshot::CollectionPtr collection;
std::unordered_map<engine::snapshot::FieldPtr, std::vector<engine::snapshot::FieldElementPtr>> fields_schema;
engine::snapshot::CollectionMappings fields_schema;
status = DBWrapper::SSDB()->DescribeCollection(collection_name_, collection, fields_schema);
if (!status.ok()) {
if (status.code() == DB_NOT_FOUND) {
......
......@@ -43,7 +43,7 @@ ShowPartitionsRequest::OnExecute() {
/* check collection existence */
bool exist = false;
auto status = DBWrapper::DB()->HasCollection(collection_name_, exist);
auto status = DBWrapper::SSDB()->HasCollection(collection_name_, exist);
if (!exist) {
return Status(SERVER_COLLECTION_NOT_EXIST, CollectionNotExistMsg(collection_name_));
}
......
......@@ -955,7 +955,8 @@ Status
WebRequestHandler::GetVectorsByIDs(const std::string& collection_name, const std::vector<int64_t>& ids,
nlohmann::json& json_out) {
std::vector<engine::VectorsData> vector_batch;
auto status = request_handler_.GetVectorsByID(context_ptr_, collection_name, ids, vector_batch);
auto status = Status::OK();
// auto status = request_handler_.GetVectorsByID(context_ptr_, collection_name, ids, vector_batch);
if (!status.ok()) {
return status;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册