@@ -772,6 +772,20 @@ butil::Status VectorIndexDiskANN::DoBuild(const pb::common::Range& region_range,
772772 return butil::Status::OK ();
773773 }
774774
775+ // count too many, set error to diskann.
776+ if (region_count > Constant::kDiskannMaxCount ) {
777+ std::string s = fmt::format (" region : {} vector current count {} is more than max count {}. set error to diskann" ,
778+ Id (), region_count, Constant::kDiskannMaxCount );
779+ DINGO_LOG (WARNING) << s;
780+ status = SendVectorSetImportTooManyRequestWrapper ();
781+ if (!status.ok ()) {
782+ DINGO_LOG (ERROR) << status.error_cstr ();
783+ return status;
784+ }
785+ state = pb::common::DiskANNCoreState::IMPORTING;
786+ return butil::Status (pb::error::Errno::EDISKANN_IMPORT_COUNT_TOO_MANY, s);
787+ }
788+
775789 auto iter = reader->NewIterator (Constant::kVectorDataCF , ts, options);
776790
777791 if (!iter) {
@@ -1224,6 +1238,55 @@ butil::Status VectorIndexDiskANN::SendVectorSetNoDataRequestWrapper() {
12241238 return butil::Status::OK ();
12251239}
12261240
1241+ butil::Status VectorIndexDiskANN::SendVectorSetImportTooManyRequest (const google::protobuf::Message& request,
1242+ google::protobuf::Message& response) {
1243+ butil::Status status;
1244+ if (!InitChannel (diskann_server_addr)) {
1245+ std::string s = fmt::format (" Init channel failed, addr : {}" , diskann_server_addr);
1246+ DINGO_LOG (ERROR) << s;
1247+ return butil::Status (pb::error::Errno::EINTERNAL, s);
1248+ }
1249+
1250+ // count rpc
1251+ status = SendRequest (" DiskAnnService" , " VectorSetImportTooMany" , request, response);
1252+ if (!status.ok ()) {
1253+ std::string s = fmt::format (" VectorSetImportTooMany request failed, errcode: {} errmsg: {}" ,
1254+ pb::error::Errno_Name (status.error_code ()), status.error_cstr ());
1255+ DINGO_LOG (ERROR) << s;
1256+ return butil::Status (status.error_code (), s);
1257+ }
1258+
1259+ return butil::Status::OK ();
1260+ }
1261+ butil::Status VectorIndexDiskANN::SendVectorSetImportTooManyRequestWrapper () {
1262+ butil::Status status;
1263+
1264+ // count rpc
1265+ pb::diskann::VectorSetImportTooManyRequest vector_set_import_too_many_request;
1266+ pb::diskann::VectorSetImportTooManyResponse vector_set_import_too_many_response;
1267+
1268+ vector_set_import_too_many_request.set_vector_index_id (Id ());
1269+ status = SendVectorSetImportTooManyRequest (vector_set_import_too_many_request, vector_set_import_too_many_response);
1270+ if (!status.ok ()) {
1271+ std::string s = fmt::format (" VectorSetImportTooMany request failed, errcode: {} errmsg: {}" ,
1272+ pb::error::Errno_Name (status.error_code ()), status.error_cstr ());
1273+ DINGO_LOG (ERROR) << s;
1274+ return butil::Status (status.error_code (), s);
1275+ }
1276+
1277+ if (vector_set_import_too_many_response.error ().errcode () != pb::error::Errno::OK) {
1278+ std::string s =
1279+ fmt::format (" VectorSetImportTooMany response error, errcode: {} errmsg: {} state: {}" ,
1280+ pb::error::Errno_Name (vector_set_import_too_many_response.error ().errcode ()),
1281+ vector_set_import_too_many_response.error ().errmsg (),
1282+ pb::common::DiskANNCoreState_Name (vector_set_import_too_many_response.state ())); // state
1283+ DINGO_LOG (ERROR) << s;
1284+ return butil::Status (vector_set_import_too_many_response.error ().errcode (), s);
1285+ }
1286+
1287+ return butil::Status::OK ();
1288+ }
1289+
12271290butil::Status VectorIndexDiskANN::SendVectorBuildRequest (const google::protobuf::Message& request,
12281291 google::protobuf::Message& response) {
12291292 butil::Status status;
0 commit comments