|
@@ -23,6 +23,7 @@ import io.grpc.ConnectivityState;
|
|
import io.grpc.ManagedChannel;
|
|
import io.grpc.ManagedChannel;
|
|
import io.grpc.ManagedChannelBuilder;
|
|
import io.grpc.ManagedChannelBuilder;
|
|
import io.grpc.StatusRuntimeException;
|
|
import io.grpc.StatusRuntimeException;
|
|
|
|
+import org.apache.commons.collections4.ListUtils;
|
|
|
|
|
|
import javax.annotation.Nonnull;
|
|
import javax.annotation.Nonnull;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
@@ -55,22 +56,23 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
}
|
|
}
|
|
|
|
|
|
try {
|
|
try {
|
|
- int port = Integer.parseInt(connectParam.getPort());
|
|
|
|
- if (port < 0 || port > 0xFFFF) {
|
|
|
|
- logSevere("Connect failed! Port {0} out of range", connectParam.getPort());
|
|
|
|
- throw new ConnectFailedException("Port " + port + " out of range");
|
|
|
|
- }
|
|
|
|
|
|
|
|
channel =
|
|
channel =
|
|
- ManagedChannelBuilder.forAddress(connectParam.getHost(), port)
|
|
|
|
|
|
+ ManagedChannelBuilder.forAddress(
|
|
|
|
+ connectParam.getHost(), Integer.parseInt(connectParam.getPort()))
|
|
.usePlaintext()
|
|
.usePlaintext()
|
|
.maxInboundMessageSize(Integer.MAX_VALUE)
|
|
.maxInboundMessageSize(Integer.MAX_VALUE)
|
|
|
|
+ .keepAliveTime(
|
|
|
|
+ connectParam.getKeepAliveTime(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS)
|
|
|
|
+ .keepAliveTimeout(
|
|
|
|
+ connectParam.getKeepAliveTimeout(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS)
|
|
|
|
+ .keepAliveWithoutCalls(connectParam.isKeepAliveWithoutCalls())
|
|
|
|
+ .idleTimeout(connectParam.getIdleTimeout(TimeUnit.NANOSECONDS), TimeUnit.NANOSECONDS)
|
|
.build();
|
|
.build();
|
|
|
|
|
|
- ConnectivityState connectivityState;
|
|
|
|
- connectivityState = channel.getState(true);
|
|
|
|
|
|
+ channel.getState(true);
|
|
|
|
|
|
- long timeout = connectParam.getTimeout();
|
|
|
|
|
|
+ long timeout = connectParam.getConnectTimeout(TimeUnit.MILLISECONDS);
|
|
logInfo("Trying to connect...Timeout in {0} ms", timeout);
|
|
logInfo("Trying to connect...Timeout in {0} ms", timeout);
|
|
|
|
|
|
final long checkFrequency = 100; // ms
|
|
final long checkFrequency = 100; // ms
|
|
@@ -92,7 +94,9 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
throw new ConnectFailedException("Exception occurred: " + e.toString());
|
|
throw new ConnectFailedException("Exception occurred: " + e.toString());
|
|
}
|
|
}
|
|
|
|
|
|
- logInfo("Connected successfully!\n{0}", connectParam.toString());
|
|
|
|
|
|
+ logInfo(
|
|
|
|
+ "Connection established successfully to host={0}, port={1}",
|
|
|
|
+ connectParam.getHost(), connectParam.getPort());
|
|
return new Response(Response.Status.SUCCESS);
|
|
return new Response(Response.Status.SUCCESS);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -107,7 +111,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public Response disconnect() throws InterruptedException {
|
|
public Response disconnect() throws InterruptedException {
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
} else {
|
|
} else {
|
|
@@ -129,7 +133,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public Response createTable(@Nonnull TableSchema tableSchema) {
|
|
public Response createTable(@Nonnull TableSchema tableSchema) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -168,7 +172,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public HasTableResponse hasTable(@Nonnull String tableName) {
|
|
public HasTableResponse hasTable(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new HasTableResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), false);
|
|
return new HasTableResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), false);
|
|
}
|
|
}
|
|
@@ -200,7 +204,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public Response dropTable(@Nonnull String tableName) {
|
|
public Response dropTable(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -229,7 +233,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public Response createIndex(@Nonnull CreateIndexParam createIndexParam) {
|
|
public Response createIndex(@Nonnull CreateIndexParam createIndexParam) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -268,7 +272,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public InsertResponse insert(@Nonnull InsertParam insertParam) {
|
|
public InsertResponse insert(@Nonnull InsertParam insertParam) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new InsertResponse(
|
|
return new InsertResponse(
|
|
new Response(Response.Status.CLIENT_NOT_CONNECTED), new ArrayList<>());
|
|
new Response(Response.Status.CLIENT_NOT_CONNECTED), new ArrayList<>());
|
|
@@ -317,10 +321,11 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public SearchResponse search(@Nonnull SearchParam searchParam) {
|
|
public SearchResponse search(@Nonnull SearchParam searchParam) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
- return new SearchResponse(
|
|
|
|
- new Response(Response.Status.CLIENT_NOT_CONNECTED), new ArrayList<>());
|
|
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED));
|
|
|
|
+ return searchResponse;
|
|
}
|
|
}
|
|
|
|
|
|
List<io.milvus.grpc.RowRecord> queryRowRecordList = getQueryRowRecordList(searchParam);
|
|
List<io.milvus.grpc.RowRecord> queryRowRecordList = getQueryRowRecordList(searchParam);
|
|
@@ -336,39 +341,43 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
.setNprobe(searchParam.getNProbe())
|
|
.setNprobe(searchParam.getNProbe())
|
|
.build();
|
|
.build();
|
|
|
|
|
|
- io.milvus.grpc.TopKQueryResultList response;
|
|
|
|
|
|
+ io.milvus.grpc.TopKQueryResult response;
|
|
|
|
|
|
try {
|
|
try {
|
|
response = blockingStub.search(request);
|
|
response = blockingStub.search(request);
|
|
|
|
|
|
if (response.getStatus().getErrorCode() == io.milvus.grpc.ErrorCode.SUCCESS) {
|
|
if (response.getStatus().getErrorCode() == io.milvus.grpc.ErrorCode.SUCCESS) {
|
|
- List<List<SearchResponse.QueryResult>> queryResultsList = getQueryResultsList(response);
|
|
|
|
|
|
+ SearchResponse searchResponse = buildSearchResponse(response);
|
|
|
|
+ searchResponse.setResponse(new Response(Response.Status.SUCCESS));
|
|
logInfo(
|
|
logInfo(
|
|
"Search completed successfully! Returned results for {0} queries",
|
|
"Search completed successfully! Returned results for {0} queries",
|
|
- queryResultsList.size());
|
|
|
|
- return new SearchResponse(new Response(Response.Status.SUCCESS), queryResultsList);
|
|
|
|
|
|
+ searchResponse.getNumQueries());
|
|
|
|
+ return searchResponse;
|
|
} else {
|
|
} else {
|
|
logSevere("Search failed:\n{0}", response.toString());
|
|
logSevere("Search failed:\n{0}", response.toString());
|
|
- return new SearchResponse(
|
|
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setResponse(
|
|
new Response(
|
|
new Response(
|
|
Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
|
|
Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
|
|
- response.getStatus().getReason()),
|
|
|
|
- new ArrayList<>());
|
|
|
|
|
|
+ response.getStatus().getReason()));
|
|
|
|
+ return searchResponse;
|
|
}
|
|
}
|
|
} catch (StatusRuntimeException e) {
|
|
} catch (StatusRuntimeException e) {
|
|
logSevere("search RPC failed:\n{0}", e.getStatus().toString());
|
|
logSevere("search RPC failed:\n{0}", e.getStatus().toString());
|
|
- return new SearchResponse(
|
|
|
|
- new Response(Response.Status.RPC_ERROR, e.toString()), new ArrayList<>());
|
|
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setResponse(new Response(Response.Status.RPC_ERROR, e.toString()));
|
|
|
|
+ return searchResponse;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public SearchResponse searchInFiles(@Nonnull SearchInFilesParam searchInFilesParam) {
|
|
public SearchResponse searchInFiles(@Nonnull SearchInFilesParam searchInFilesParam) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
- return new SearchResponse(
|
|
|
|
- new Response(Response.Status.CLIENT_NOT_CONNECTED), new ArrayList<>());
|
|
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED));
|
|
|
|
+ return searchResponse;
|
|
}
|
|
}
|
|
|
|
|
|
SearchParam searchParam = searchInFilesParam.getSearchParam();
|
|
SearchParam searchParam = searchInFilesParam.getSearchParam();
|
|
@@ -392,37 +401,40 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
.setSearchParam(searchParamToSet)
|
|
.setSearchParam(searchParamToSet)
|
|
.build();
|
|
.build();
|
|
|
|
|
|
- io.milvus.grpc.TopKQueryResultList response;
|
|
|
|
|
|
+ io.milvus.grpc.TopKQueryResult response;
|
|
|
|
|
|
try {
|
|
try {
|
|
response = blockingStub.searchInFiles(request);
|
|
response = blockingStub.searchInFiles(request);
|
|
|
|
|
|
if (response.getStatus().getErrorCode() == io.milvus.grpc.ErrorCode.SUCCESS) {
|
|
if (response.getStatus().getErrorCode() == io.milvus.grpc.ErrorCode.SUCCESS) {
|
|
|
|
+ SearchResponse searchResponse = buildSearchResponse(response);
|
|
|
|
+ searchResponse.setResponse(new Response(Response.Status.SUCCESS));
|
|
logInfo("Search in files {0} completed successfully!", searchInFilesParam.getFileIds());
|
|
logInfo("Search in files {0} completed successfully!", searchInFilesParam.getFileIds());
|
|
-
|
|
|
|
- List<List<SearchResponse.QueryResult>> queryResultsList = getQueryResultsList(response);
|
|
|
|
- return new SearchResponse(new Response(Response.Status.SUCCESS), queryResultsList);
|
|
|
|
|
|
+ return searchResponse;
|
|
} else {
|
|
} else {
|
|
logSevere(
|
|
logSevere(
|
|
"Search in files {0} failed:\n{1}",
|
|
"Search in files {0} failed:\n{1}",
|
|
searchInFilesParam.getFileIds(), response.toString());
|
|
searchInFilesParam.getFileIds(), response.toString());
|
|
- return new SearchResponse(
|
|
|
|
|
|
+
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setResponse(
|
|
new Response(
|
|
new Response(
|
|
Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
|
|
Response.Status.valueOf(response.getStatus().getErrorCodeValue()),
|
|
- response.getStatus().getReason()),
|
|
|
|
- new ArrayList<>());
|
|
|
|
|
|
+ response.getStatus().getReason()));
|
|
|
|
+ return searchResponse;
|
|
}
|
|
}
|
|
} catch (StatusRuntimeException e) {
|
|
} catch (StatusRuntimeException e) {
|
|
logSevere("searchInFiles RPC failed:\n{0}", e.getStatus().toString());
|
|
logSevere("searchInFiles RPC failed:\n{0}", e.getStatus().toString());
|
|
- return new SearchResponse(
|
|
|
|
- new Response(Response.Status.RPC_ERROR, e.toString()), new ArrayList<>());
|
|
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setResponse(new Response(Response.Status.RPC_ERROR, e.toString()));
|
|
|
|
+ return searchResponse;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public DescribeTableResponse describeTable(@Nonnull String tableName) {
|
|
public DescribeTableResponse describeTable(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new DescribeTableResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), null);
|
|
return new DescribeTableResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), null);
|
|
}
|
|
}
|
|
@@ -459,7 +471,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public ShowTablesResponse showTables() {
|
|
public ShowTablesResponse showTables() {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new ShowTablesResponse(
|
|
return new ShowTablesResponse(
|
|
new Response(Response.Status.CLIENT_NOT_CONNECTED), new ArrayList<>());
|
|
new Response(Response.Status.CLIENT_NOT_CONNECTED), new ArrayList<>());
|
|
@@ -493,7 +505,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public GetTableRowCountResponse getTableRowCount(@Nonnull String tableName) {
|
|
public GetTableRowCountResponse getTableRowCount(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new GetTableRowCountResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), 0);
|
|
return new GetTableRowCountResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), 0);
|
|
}
|
|
}
|
|
@@ -535,7 +547,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
|
|
|
|
private Response command(@Nonnull String command) {
|
|
private Response command(@Nonnull String command) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -564,7 +576,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
// TODO: make deleteByRange private for now
|
|
// TODO: make deleteByRange private for now
|
|
private Response deleteByRange(@Nonnull String tableName, @Nonnull DateRange dateRange) {
|
|
private Response deleteByRange(@Nonnull String tableName, @Nonnull DateRange dateRange) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -599,7 +611,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public Response preloadTable(@Nonnull String tableName) {
|
|
public Response preloadTable(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -628,7 +640,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public DescribeIndexResponse describeIndex(@Nonnull String tableName) {
|
|
public DescribeIndexResponse describeIndex(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new DescribeIndexResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), null);
|
|
return new DescribeIndexResponse(new Response(Response.Status.CLIENT_NOT_CONNECTED), null);
|
|
}
|
|
}
|
|
@@ -665,7 +677,7 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
@Override
|
|
@Override
|
|
public Response dropIndex(@Nonnull String tableName) {
|
|
public Response dropIndex(@Nonnull String tableName) {
|
|
|
|
|
|
- if (!isConnected()) {
|
|
|
|
|
|
+ if (!channelIsReadyOrIdle()) {
|
|
logWarning("You are not connected to Milvus server");
|
|
logWarning("You are not connected to Milvus server");
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
return new Response(Response.Status.CLIENT_NOT_CONNECTED);
|
|
}
|
|
}
|
|
@@ -726,25 +738,39 @@ public class MilvusGrpcClient implements MilvusClient {
|
|
.build();
|
|
.build();
|
|
}
|
|
}
|
|
|
|
|
|
- private List<List<SearchResponse.QueryResult>> getQueryResultsList(
|
|
|
|
- io.milvus.grpc.TopKQueryResultList searchResponse) {
|
|
|
|
- // TODO: refactor
|
|
|
|
- List<List<SearchResponse.QueryResult>> queryResultsList = new ArrayList<>();
|
|
|
|
- Optional<List<io.milvus.grpc.TopKQueryResult>> topKQueryResultList =
|
|
|
|
- Optional.ofNullable(searchResponse.getTopkQueryResultList());
|
|
|
|
- if (topKQueryResultList.isPresent()) {
|
|
|
|
- for (io.milvus.grpc.TopKQueryResult topKQueryResult : topKQueryResultList.get()) {
|
|
|
|
- List<SearchResponse.QueryResult> responseQueryResults = new ArrayList<>();
|
|
|
|
- List<io.milvus.grpc.QueryResult> queryResults = topKQueryResult.getQueryResultArraysList();
|
|
|
|
- for (io.milvus.grpc.QueryResult queryResult : queryResults) {
|
|
|
|
- SearchResponse.QueryResult responseQueryResult =
|
|
|
|
- new SearchResponse.QueryResult(queryResult.getId(), queryResult.getDistance());
|
|
|
|
- responseQueryResults.add(responseQueryResult);
|
|
|
|
- }
|
|
|
|
- queryResultsList.add(responseQueryResults);
|
|
|
|
- }
|
|
|
|
|
|
+ private SearchResponse buildSearchResponse(io.milvus.grpc.TopKQueryResult topKQueryResult) {
|
|
|
|
+
|
|
|
|
+ final int numQueries = (int) topKQueryResult.getRowNum();
|
|
|
|
+ final int topK =
|
|
|
|
+ numQueries == 0
|
|
|
|
+ ? 0
|
|
|
|
+ : topKQueryResult.getIdsCount()
|
|
|
|
+ / numQueries; // Guaranteed to be divisible from server side
|
|
|
|
+
|
|
|
|
+ List<List<Long>> resultIdsList = new ArrayList<>();
|
|
|
|
+ List<List<Float>> resultDistancesList = new ArrayList<>();
|
|
|
|
+ if (topK > 0) {
|
|
|
|
+ resultIdsList = ListUtils.partition(topKQueryResult.getIdsList(), topK);
|
|
|
|
+ resultDistancesList = ListUtils.partition(topKQueryResult.getDistancesList(), topK);
|
|
}
|
|
}
|
|
- return queryResultsList;
|
|
|
|
|
|
+
|
|
|
|
+ SearchResponse searchResponse = new SearchResponse();
|
|
|
|
+ searchResponse.setNumQueries(numQueries);
|
|
|
|
+ searchResponse.setTopK(topK);
|
|
|
|
+ searchResponse.setResultIdsList(resultIdsList);
|
|
|
|
+ searchResponse.setResultDistancesList(resultDistancesList);
|
|
|
|
+
|
|
|
|
+ return searchResponse;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private boolean channelIsReadyOrIdle() {
|
|
|
|
+ if (channel == null) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ ConnectivityState connectivityState = channel.getState(false);
|
|
|
|
+ return connectivityState == ConnectivityState.READY
|
|
|
|
+ || connectivityState
|
|
|
|
+ == ConnectivityState.IDLE; // Since a new RPC would take the channel out of idle mode
|
|
}
|
|
}
|
|
|
|
|
|
///////////////////// Log Functions//////////////////////
|
|
///////////////////// Log Functions//////////////////////
|