提交 61517339 编写于 作者: B BossZou 提交者: Jin Hai

Fix http server bug (#1096)

* refactoring(create_table done)

* refactoring

* refactor server delivery (insert done)

* refactoring server module (count_table done)

* server refactor done

* cmake pass

* refactor server module done.

* set grpc response status correctly

* format done.

* fix redefine ErrorMap()

* optimize insert reducing ids data copy

* optimize grpc request with reducing data copy

* clang format

* [skip ci] Refactor server module done. update changlog. prepare for PR

* remove explicit and change int32_t to int64_t

* add web server

* [skip ci] add license in web module

* modify header include & comment oatpp environment config

* add port configure & create table in handler

* modify web url

* simple url complation done & add swagger

* make sure web url

* web functionality done. debuging

* add web unittest

* web test pass

* add web server port

* add web server port in template

* update unittest cmake file

* change web server default port to 19121

* rename method in web module & unittest pass

* add search case in unittest for web module

* rename some variables

* fix bug

* unittest pass

* web prepare

* fix cmd bug(check server status)

* update changlog

* add web port validate & default set

* clang-format pass

* add web port test in unittest

* add CORS & redirect root to swagger ui

* add web status

* web table method func cascade test pass

* add config url in web module

* modify thirdparty cmake to avoid building oatpp test

* clang format

* update changlog

* add constants in web module

* reserve Config.cpp

* fix constants reference bug

* replace web server with async module

* modify component to support async

* format

* developing controller & add test clent into unittest

* add web port into demo/server_config

* modify thirdparty cmake to allow build test

* remove  unnecessary comment

* add endpoint info in controller

* finish web test(bug here)

* clang format

* add web test cpp to lint exclusions

* check null field in GetConfig

* add macro RETURN STATUS DTo

* fix cmake conflict

* fix crash when exit server

* remove surplus comments & add http param check

* add uri /docs to direct swagger

* format

* change cmd to system

* add default value & unittest in web module

* add macros to judge if GPU supported

* add macros in unit & add default in index dto & print error message when bind http port fail

* format (fix #788)

* fix cors bug (not completed)

* comment cors

* change web framework to simple api

* comments optimize

* change to simple API

* remove comments in controller.hpp

* remove EP_COMMON_CMAKE_ARGS in oatpp and oatpp-swagger

* add ep cmake args to sqlite

* clang-format

* change a format

* test pass

* change name to

* fix compiler issue(oatpp-swagger depend on oatpp)

* add & in start_server.h

* specify lib location with oatpp and oatpp-swagger

* add comments

* add swagger definition

* [skip ci] change http method options status code

* remove oatpp swagger(fix #970)

* remove comments

* check Start web behavior

* add default to cpu_cache_capacity

* remove swagger component.hpp & /docs url

* remove /docs info

* remove /docs in unittest

* remove space in test rpc

* remove repeate info in CHANGLOG

* change cache_insert_data default value as a constant

* [skip ci] Fix some broken links (#960)

* [skip ci] Fix broken link

* [skip ci] Fix broken link

* [skip ci] Fix broken link

* [skip ci] Fix broken links

* fix issue 373 (#964)

* fix issue 373

* Adjustment format

* Adjustment format

* Adjustment format

* change readme

* #966 update NOTICE.md (#967)

* remove comments

* check Start web behavior

* add default to cpu_cache_capacity

* remove swagger component.hpp & /docs url

* remove /docs info

* remove /docs in unittest

* remove space in test rpc

* remove repeate info in CHANGLOG

* change cache_insert_data default value as a constant

* adjust web port cofig place

* rename web_port variable

* change gpu resources invoke way to cmd()

* set advanced config name add DEFAULT

* change config setting to cmd

* modify ..

* optimize code

* assign TableDto' count default value 0 (fix #995)

* check if table exists when show partitions (fix #1028)

* check table exists when drop partition (fix #1029)

* check if partition name is legal (fix #1022)

* modify status code when partition tag is illegal

* update changlog

* add info to /system url

* add binary index and add bin uri & handler method(not completed)

* optimize http insert and search time(fix #1066) | add binary vectors support(fix #1067)

* fix test partition bug

* fix test bug when check insert records

* add binary vectors test

* add default for offset and page_size

* fix uinttest bug

* [skip ci] remove comments

* optimize web code for PR comments

* add new folder named utils

* check offset and pagesize (fix #1082)

* improve error message if offset or page_size is not legal (fix #1075)

* add log into web module

* update changlog

* check gpu sources setting when assign repeated value (fix #990)

* update changlog

* clang-format pass

* add default handler in http handler

* [skip ci] improve error msg when check gpu resources

* change check offset way

* remove func IsIntStr

* add case

* change int32 to int64 when check number str

* add log in we module(doing)

* update test case

* add log in web controller
Co-authored-by: Njielinxu <52057195+jielinxu@users.noreply.github.com>
Co-authored-by: NJackLCL <53512883+JackLCL@users.noreply.github.com>
Co-authored-by: NCai Yudong <yudong.cai@zilliz.com>
上级 658f100a
......@@ -11,6 +11,7 @@ Please mark all change in change log and use the issue from GitHub
- \#805 - IVFTest.gpu_seal_test unittest failed
- \#831 - Judge branch error in CommonUtil.cpp
- \#977 - Server crash when create tables concurrently
- \#990 - check gpu resources setting when assign repeated value
- \#995 - table count set to 0 if no tables found
- \#1010 - improve error message when offset or page_size is equal 0
- \#1022 - check if partition name is legal
......@@ -18,6 +19,8 @@ Please mark all change in change log and use the issue from GitHub
- \#1029 - check if table exists when try to delete partition
- \#1066 - optimize http insert and search speed
- \#1067 - Add binary vectors support in http server
- \#1075 - improve error message when page size or offset is illegal
- \#1082 - check page_size or offset value to avoid float
## Feature
- \#216 - Add CLI to get server info
......
......@@ -22,6 +22,7 @@
#include <regex>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include "config/YamlConfigMgr.h"
......@@ -791,9 +792,19 @@ Config::CheckGpuResourceConfigSearchResources(const std::vector<std::string>& va
return Status(SERVER_INVALID_ARGUMENT, msg);
}
std::unordered_set<std::string> value_set;
for (auto& resource : value) {
CONFIG_CHECK(CheckGpuResource(resource));
value_set.insert(resource);
}
if (value_set.size() != value.size()) {
std::string msg =
"Invalid gpu build search resource. "
"Possible reason: gpu_resource_config.gpu_search_resources contains duplicate resources.";
return Status(SERVER_INVALID_ARGUMENT, msg);
}
return Status::OK();
}
......@@ -806,8 +817,17 @@ Config::CheckGpuResourceConfigBuildIndexResources(const std::vector<std::string>
return Status(SERVER_INVALID_ARGUMENT, msg);
}
std::unordered_set<std::string> value_set;
for (auto& resource : value) {
CONFIG_CHECK(CheckGpuResource(resource));
value_set.insert(resource);
}
if (value_set.size() != value.size()) {
std::string msg =
"Invalid gpu build index resource. "
"Possible reason: gpu_resource_config.build_index_resources contains duplicate resources.";
return Status(SERVER_INVALID_ARGUMENT, msg);
}
return Status::OK();
......
......@@ -21,6 +21,9 @@ namespace milvus {
namespace server {
namespace web {
////////////////////////////////////////////////////
static const char* WEB_LOG_PREFIX = "[Web] ";
////////////////////////////////////////////////////
static const char* CORS_KEY_METHODS = "Access-Control-Allow-Methods";
......
......@@ -31,6 +31,7 @@
#include "server/web_impl/utils/Util.h"
#include "utils/StringHelpFunctions.h"
#include "utils/TimeRecorder.h"
#include "utils/ValidationUtil.h"
namespace milvus {
namespace server {
......@@ -439,20 +440,21 @@ WebRequestHandler::ShowTables(const OString& offset, const OString& page_size,
int64_t page_size_value = 10;
if (nullptr != offset.get()) {
try {
offset_value = std::stol(offset->std_str());
} catch (const std::exception& e) {
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM, "Query param \'offset\' is illegal, only type of \'int\' allowed");
std::string offset_str = offset->std_str();
if (!ValidationUtil::ValidateStringIsNumber(offset_str).ok()) {
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM,
"Query param \'offset\' is illegal, only non-negative integer supported");
}
offset_value = std::stol(offset_str);
}
if (nullptr != page_size.get()) {
try {
page_size_value = std::stol(page_size->std_str());
} catch (const std::exception& e) {
std::string page_size_str = page_size->std_str();
if (!ValidationUtil::ValidateStringIsNumber(page_size_str).ok()) {
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM,
"Query param \'page_size\' is illegal, only type of \'int\' allowed");
"Query param \'page_size\' is illegal, only non-negative integer supported");
}
page_size_value = std::stol(page_size_str);
}
if (offset_value < 0 || page_size_value < 0) {
......@@ -557,21 +559,21 @@ WebRequestHandler::ShowPartitions(const OString& offset, const OString& page_siz
int64_t page_size_value = 10;
if (nullptr != offset.get()) {
try {
offset_value = std::stol(offset->std_str());
} catch (const std::exception& e) {
std::string msg = "Query param \'offset\' is illegal. Reason: " + std::string(e.what());
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM, msg.c_str());
std::string offset_str = offset->std_str();
if (!ValidationUtil::ValidateStringIsNumber(offset_str).ok()) {
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM,
"Query param \'offset\' is illegal, only non-negative integer supported");
}
offset_value = std::stol(offset_str);
}
if (nullptr != page_size.get()) {
try {
page_size_value = std::stol(page_size->std_str());
} catch (const std::exception& e) {
std::string msg = "Query param \'page_size\' is illegal. Reason: " + std::string(e.what());
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM, msg.c_str());
std::string page_size_str = page_size->std_str();
if (!ValidationUtil::ValidateStringIsNumber(page_size_str).ok()) {
RETURN_STATUS_DTO(ILLEGAL_QUERY_PARAM,
"Query param \'page_size\' is illegal, only non-negative integer supported");
}
page_size_value = std::stol(page_size_str);
}
if (offset_value < 0 || page_size_value < 0) {
......
......@@ -92,6 +92,7 @@ class WebRequestHandler {
public:
WebRequestHandler() {
context_ptr_ = GenContextPtr("Web Handler");
request_handler_ = RequestHandler();
}
StatusDto::ObjectWrapper
......
......@@ -17,6 +17,7 @@
#pragma once
#include <string>
#include <vector>
#include "db/Types.h"
......
......@@ -308,7 +308,7 @@ ValidationUtil::ValidateStringIsNumber(const std::string& str) {
return Status(SERVER_INVALID_ARGUMENT, "Invalid number");
}
try {
int32_t value = std::stoi(str);
int64_t value = std::stol(str);
if (value < 0) {
return Status(SERVER_INVALID_ARGUMENT, "Negative number");
}
......
......@@ -578,9 +578,11 @@ TEST_F(ConfigTest, SERVER_CONFIG_INVALID_TEST) {
ASSERT_FALSE(config.SetGpuResourceConfigCacheThreshold("-0.1").ok());
ASSERT_FALSE(config.SetGpuResourceConfigSearchResources("gpu10").ok());
ASSERT_FALSE(config.SetGpuResourceConfigSearchResources("gpu0, gpu0").ok());
ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gup2").ok());
ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gpu16").ok());
ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gpu0, gpu0, gpu1").ok());
#endif
}
......
......@@ -508,7 +508,7 @@ class TestClient : public oatpp::web::client::ApiClient {
API_CALL("POST", "/tables", createTable, BODY_DTO(milvus::server::web::TableRequestDto::ObjectWrapper, body))
API_CALL("GET", "/tables", showTables, QUERY(Int64, offset), QUERY(Int64, page_size))
API_CALL("GET", "/tables", showTables, QUERY(String, offset), QUERY(String, page_size))
API_CALL("OPTIONS", "/tables/{table_name}", optionsTable, PATH(String, table_name, "table_name"))
......@@ -518,7 +518,7 @@ class TestClient : public oatpp::web::client::ApiClient {
API_CALL("OPTIONS", "/tables/{table_name}/indexes", optionsIndexes, PATH(String, table_name, "table_name"))
API_CALL("POST", "/tables/{table_name}/indexes",createIndex,
API_CALL("POST", "/tables/{table_name}/indexes", createIndex,
PATH(String, table_name, "table_name"), BODY_DTO(milvus::server::web::IndexRequestDto::ObjectWrapper, body))
API_CALL("GET", "/tables/{table_name}/indexes", getIndex, PATH(String, table_name, "table_name"))
......@@ -527,44 +527,25 @@ class TestClient : public oatpp::web::client::ApiClient {
API_CALL("OPTIONS", "/tables/{table_name}/partitions", optionsPartitions, PATH(String, table_name, "table_name"))
API_CALL("POST",
"/tables/{table_name}/partitions",
createPartition,
PATH(String, table_name, "table_name"),
BODY_DTO(milvus::server::web::PartitionRequestDto::ObjectWrapper, body))
API_CALL("GET",
"/tables/{table_name}/partitions",
showPartitions,
PATH(String, table_name, "table_name"),
QUERY(Int64, offset),
QUERY(Int64, page_size))
API_CALL("OPTIONS",
"/tables/{table_name}/partitions/{partition_tag}",
optionsParTag,
PATH(String, table_name, "table_name"),
PATH(String, partition_tag, "partition_tag"))
API_CALL("DELETE",
"/tables/{table_name}/partitions/{partition_tag}",
dropPartition,
PATH(String, table_name, "table_name"),
PATH(String, partition_tag))
API_CALL("POST", "/tables/{table_name}/partitions", createPartition,
PATH(String, table_name, "table_name"), BODY_DTO(milvus::server::web::PartitionRequestDto::ObjectWrapper, body))
API_CALL("GET", "/tables/{table_name}/partitions", showPartitions,
PATH(String, table_name, "table_name"), QUERY(String, offset), QUERY(String, page_size))
API_CALL("OPTIONS", "/tables/{table_name}/partitions/{partition_tag}", optionsParTag,
PATH(String, table_name, "table_name"), PATH(String, partition_tag, "partition_tag"))
API_CALL("DELETE", "/tables/{table_name}/partitions/{partition_tag}", dropPartition,
PATH(String, table_name, "table_name"), PATH(String, partition_tag))
API_CALL("OPTIONS", "/tables/{table_name}/vectors", optionsVectors, PATH(String, table_name, "table_name"))
API_CALL("POST",
"/tables/{table_name}/vectors",
insert,
PATH(String, table_name, "table_name"),
BODY_DTO(milvus::server::web::InsertRequestDto::ObjectWrapper, body))
API_CALL("POST", "/tables/{table_name}/vectors", insert,
PATH(String, table_name, "table_name"), BODY_DTO(milvus::server::web::InsertRequestDto::ObjectWrapper, body))
API_CALL("PUT",
"/tables/{table_name}/vectors",
search,
PATH(String, table_name, "table_name"),
BODY_DTO(milvus::server::web::SearchRequestDto::ObjectWrapper, body))
API_CALL("PUT", "/tables/{table_name}/vectors", search,
PATH(String, table_name, "table_name"), BODY_DTO(milvus::server::web::SearchRequestDto::ObjectWrapper, body))
API_CALL("GET", "/system/{msg}", cmd, PATH(String, cmd_str, "msg"))
......@@ -769,30 +750,45 @@ TEST_F(WebControllerTest, GET_TABLE) {
TEST_F(WebControllerTest, SHOW_TABLES) {
// test query table limit 1
auto response = client_ptr->showTables(1, 1, conncetion_ptr);
auto response = client_ptr->showTables("1", "1", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
auto result_dto = response->readBodyToDto<milvus::server::web::TableListFieldsDto>(object_mapper.get());
ASSERT_TRUE(result_dto->count->getValue() > 0);
ASSERT_TRUE(result_dto->count->getValue() >= 0);
// test query table empty
response = client_ptr->showTables(0, 0, conncetion_ptr);
response = client_ptr->showTables("0", "0", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
response = client_ptr->showTables(-1, 0, conncetion_ptr);
response = client_ptr->showTables("-1", "0", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
response = client_ptr->showTables("0", "-10", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
// test wrong param
response = client_ptr->showTables("0.1", "1", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
response = client_ptr->showTables("1", "1.1", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
response = client_ptr->showTables(0, -10, conncetion_ptr);
response = client_ptr->showTables("0", "90000000000000000000000000000000000000000000000000000000", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
}
TEST_F(WebControllerTest, DROP_TABLE) {
auto table_name = "table_drop_test" + OString(RandomName().c_str());
GenTable(table_name, 128, 100, "L2");
sleep(1);
auto response = client_ptr->dropTable(table_name, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_204.code, response->getStatusCode());
table_name = "table_drop_test_not_exists_" + OString(RandomName().c_str());
response = client_ptr->dropTable(table_name, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
auto error_dto = response->readBodyToDto<milvus::server::web::StatusDto>(object_mapper.get());
ASSERT_EQ(milvus::server::web::StatusCode::TABLE_NOT_EXISTS, error_dto->code->getValue());
}
TEST_F(WebControllerTest, INSERT) {
......@@ -809,6 +805,9 @@ TEST_F(WebControllerTest, INSERT) {
auto result_dto = response->readBodyToDto<milvus::server::web::VectorIdsDto>(object_mapper.get());
ASSERT_EQ(20, result_dto->ids->count());
response = client_ptr->insert(table_name + "ooowrweindexsgs", insert_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
response = client_ptr->dropTable(table_name, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_204.code, response->getStatusCode());
}
......@@ -876,6 +875,10 @@ TEST_F(WebControllerTest, INDEX) {
response = client_ptr->dropIndex(table_name, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_204.code, response->getStatusCode());
// create index without existing table
response = client_ptr->createIndex(table_name + "fgafafafafafUUUUUUa124254", index_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
index_dto->index_type = "J46";
response = client_ptr->createIndex(table_name, index_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
......@@ -918,6 +921,11 @@ TEST_F(WebControllerTest, INDEX) {
auto result_index_dto = response->readBodyToDto<milvus::server::web::IndexDto>(object_mapper.get());
ASSERT_EQ("FLAT", result_index_dto->index_type->std_str());
ASSERT_EQ(10, result_index_dto->nlist->getValue());
// get index of table which not exists
response = client_ptr->getIndex(table_name + "dfaedXXXdfdfet4t343aa4", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
auto error_dto = response->readBodyToDto<milvus::server::web::StatusDto>(object_mapper.get());
ASSERT_EQ(milvus::server::web::StatusCode::TABLE_NOT_EXISTS, error_dto->code->getValue());
}
TEST_F(WebControllerTest, PARTITION) {
......@@ -942,6 +950,11 @@ TEST_F(WebControllerTest, PARTITION) {
auto create_result_dto = response->readBodyToDto<milvus::server::web::StatusDto>(object_mapper.get());
ASSERT_EQ(milvus::server::web::StatusCode::SUCCESS, create_result_dto->code);
response = client_ptr->createPartition(table_name + "afafanotgitdiexists", par_param);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
error_dto = response->readBodyToDto<milvus::server::web::StatusDto>(object_mapper.get());
ASSERT_EQ(milvus::server::web::StatusCode::TABLE_NOT_EXISTS, error_dto->code);
// insert 200 vectors into table with tag = 'tag01'
OQueryParams query_params;
// add partition tag
......@@ -956,15 +969,34 @@ TEST_F(WebControllerTest, PARTITION) {
ASSERT_EQ(OStatus::CODE_201.code, response->getStatusCode());
// Show all partitins
response = client_ptr->showPartitions(table_name, 0, 10, conncetion_ptr);
response = client_ptr->showPartitions(table_name, "0", "10", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
auto result_dto = response->readBodyToDto<milvus::server::web::PartitionListDto>(object_mapper.get());
ASSERT_EQ(1, result_dto->partitions->count());
ASSERT_EQ("tag01", result_dto->partitions->get(0)->partition_tag->std_str());
ASSERT_EQ(par_param->partition_name->std_str(), result_dto->partitions->get(0)->partition_name->std_str());
response = client_ptr->showPartitions(table_name, "0", "-1", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
response = client_ptr->showPartitions(table_name, "0.1", "7", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
response = client_ptr->showPartitions(table_name, "0", "1.6", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
response = client_ptr->showPartitions(table_name, "567a", "1", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
// show without existing tables
response = client_ptr->showPartitions(table_name + "dfafaefaluanqibazao990099", "0", "10", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
error_dto = response->readBodyToDto<milvus::server::web::StatusDto>(object_mapper.get());
ASSERT_EQ(milvus::server::web::StatusCode::TABLE_NOT_EXISTS, error_dto->code->getValue());
response = client_ptr->dropPartition(table_name, "tag01", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_204.code, response->getStatusCode());
// drop without existing tables
response = client_ptr->dropPartition(table_name + "565755682353464aaasafdsfagagqq1223", "tag01", conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
}
TEST_F(WebControllerTest, SEARCH) {
......@@ -1026,6 +1058,12 @@ TEST_F(WebControllerTest, SEARCH) {
search_request_dto->tags->pushBack(par_param->partition_tag);
response = client_ptr->search(table_name, search_request_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
// Test search without existing table
response = client_ptr->search(table_name + "999piyanning", search_request_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_404.code, response->getStatusCode());
error_dto = response->readBodyToDto<milvus::server::web::StatusDto>(object_mapper.get());
ASSERT_EQ(milvus::server::web::StatusCode::TABLE_NOT_EXISTS, error_dto->code->getValue());
}
TEST_F(WebControllerTest, SEARCH_BIN) {
......@@ -1091,7 +1129,7 @@ TEST_F(WebControllerTest, CMD) {
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
}
TEST_F(WebControllerTest, ADVANCEDCONFIG) {
TEST_F(WebControllerTest, ADVANCED_CONFIG) {
auto response = client_ptr->getAdvanced(conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
......@@ -1119,10 +1157,16 @@ TEST_F(WebControllerTest, ADVANCEDCONFIG) {
config_dto->use_blas_threshold = 1000;
response = client_ptr->setAdvanced(config_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
//// test fault
// cpu cache capacity exceed total memory
config_dto->cpu_cache_capacity = 10000000;
response = client_ptr->setAdvanced(config_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
}
#ifdef MILVUS_GPU_VERSION
TEST_F(WebControllerTest, GPUCONFIG) {
TEST_F(WebControllerTest, GPU_CONFIG) {
auto response = client_ptr->getGPUConfig(conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
......@@ -1149,11 +1193,26 @@ TEST_F(WebControllerTest, GPUCONFIG) {
response = client_ptr->setGPUConfig(gpu_config_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
//// test fault config
// cache capacity exceed GPU mem size
gpu_config_dto->cache_capacity = 100000;
response = client_ptr->setGPUConfig(gpu_config_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
gpu_config_dto->cache_capacity = 1;
// duplicate resources
gpu_config_dto->search_resources->clear();
gpu_config_dto->search_resources->pushBack("GPU0");
gpu_config_dto->search_resources->pushBack("GPU1");
gpu_config_dto->search_resources->pushBack("GPU0");
response = client_ptr->setGPUConfig(gpu_config_dto, conncetion_ptr);
ASSERT_EQ(OStatus::CODE_400.code, response->getStatusCode());
}
#endif
TEST_F(WebControllerTest, DEVICESCONFIG) {
TEST_F(WebControllerTest, DEVICES_CONFIG) {
auto response = WebControllerTest::client_ptr->getDevices(conncetion_ptr);
ASSERT_EQ(OStatus::CODE_200.code, response->getStatusCode());
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册