diff --git a/README.md b/README.md index 189d08a..1c66034 100644 --- a/README.md +++ b/README.md @@ -24,14 +24,14 @@ You can use **Apache Maven** or **Gradle**/**Grails** to download the SDK. com.tencent.tcvectordb vectordatabase-sdk-java - 2.0.6 + 2.0.9 ``` - Gradle/Grails ```gradle - compile 'com.tencent.tcvectordb:vectordatabase-sdk-java:2.0.6' + compile 'com.tencent.tcvectordb:vectordatabase-sdk-java:2.0.9' ``` ### Examples diff --git a/tcvectordb/.DS_Store b/tcvectordb/.DS_Store new file mode 100644 index 0000000..3a130ba Binary files /dev/null and b/tcvectordb/.DS_Store differ diff --git a/tcvectordb/README.md b/tcvectordb/README.md index 63ac539..1d9ffb7 100644 --- a/tcvectordb/README.md +++ b/tcvectordb/README.md @@ -24,14 +24,14 @@ You can use **Apache Maven** or **Gradle**/**Grails** to download the SDK. com.tencent.tcvectordb vectordatabase-sdk-java - 2.0.6 + 2.0.9 ``` - Gradle/Grails ```gradle - compile 'com.tencent.tcvectordb:vectordatabase-sdk-java:2.0.6' + compile 'com.tencent.tcvectordb:vectordatabase-sdk-java:2.0.9' ``` ### Examples diff --git a/tcvectordb/pom.xml b/tcvectordb/pom.xml index e8446ec..04fad9b 100644 --- a/tcvectordb/pom.xml +++ b/tcvectordb/pom.xml @@ -4,7 +4,7 @@ com.tencent.tcvectordb vectordatabase-sdk-java - 2.0.6 + 2.0.9 jar vectordatabase-sdk-java diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExample.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExample.java index 6721734..b735246 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExample.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/examples/VectorDBExample.java @@ -21,10 +21,8 @@ package com.tencent.tcvectordb.examples; import com.tencent.tcvectordb.client.VectorDBClient; +import com.tencent.tcvectordb.model.*; import com.tencent.tcvectordb.model.Collection; -import com.tencent.tcvectordb.model.Database; -import com.tencent.tcvectordb.model.DocField; -import com.tencent.tcvectordb.model.Document; import com.tencent.tcvectordb.model.param.collection.*; import com.tencent.tcvectordb.model.param.dml.*; import com.tencent.tcvectordb.model.param.entity.AffectRes; diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/ParamException.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/ParamException.java index c9daf78..f666aff 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/ParamException.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/ParamException.java @@ -27,4 +27,8 @@ public class ParamException extends VectorDBException { public ParamException(String message) { super(message); } + + public ParamException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/VectorDBException.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/VectorDBException.java index 895169d..1461d01 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/VectorDBException.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/exception/VectorDBException.java @@ -28,4 +28,8 @@ public class VectorDBException extends RuntimeException { public VectorDBException(String message) { super(message); } + + public VectorDBException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/model/param/database/ConnectParam.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/model/param/database/ConnectParam.java index eea17f4..3e0f8de 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/model/param/database/ConnectParam.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/model/param/database/ConnectParam.java @@ -101,7 +101,7 @@ public static class Builder { /** * connect timeout, unit is second */ - private int connectTimeout = 2; + private int connectTimeout = 10; /** * max idle connection count, unit is second */ diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/service/GrpcStub.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/service/GrpcStub.java index 32244b2..3e1dfbc 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/service/GrpcStub.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/service/GrpcStub.java @@ -66,8 +66,10 @@ public class GrpcStub extends HttpStub{ private String authorization; private int timeout = 10; private static final Logger logger = LoggerFactory.getLogger(GrpcStub.class.getName()); + private ConnectParam connectParam; public GrpcStub(ConnectParam param){ - super(param); + super(); + connectParam = param; this.authorization = String.format("Bearer account=%s&api_key=%s",param.getUsername(), param.getKey()); this.channel = OkHttpChannelBuilder.forTarget(this.getAddress(param.getUrl())). @@ -137,6 +139,7 @@ public void dropDatabase(Database database) { @Override public AffectRes createAIDatabase(AIDatabase aiDatabase) { + super.initHttpStub(this.connectParam); return super.createAIDatabase(aiDatabase); } @@ -164,6 +167,7 @@ public DataBaseTypeRes describeDatabase(Database database) { @Override public AffectRes dropAIDatabase(AIDatabase aiDatabase) { + super.initHttpStub(this.connectParam); return super.dropAIDatabase(aiDatabase); } @@ -300,6 +304,7 @@ public void createCollection(CreateCollectionParam params) { @Override public void createCollectionView(CreateCollectionViewParam params) { + super.initHttpStub(this.connectParam); super.createCollectionView(params); } @@ -365,6 +370,7 @@ public AffectRes truncateCollection(String databaseName, String collectionName, @Override public AffectRes truncateCollectionView(String databaseName, String collectionName, DataBaseTypeEnum dbType) { + super.initHttpStub(this.connectParam); return super.truncateCollectionView(databaseName, collectionName, dbType); } @@ -513,6 +519,7 @@ public List queryDocument(QueryParamInner param, boolean ai) { @Override public SearchRes searchDocument(SearchParamInner param, DataBaseTypeEnum dbType) { if (dbType.equals(DataBaseTypeEnum.AI_DB)){ + super.initHttpStub(this.connectParam); return super.searchDocument(param, dbType); } Olama.SearchRequest.Builder builder = Olama.SearchRequest.newBuilder().setDatabase(param.getDatabase()). @@ -786,66 +793,79 @@ public BaseRes rebuildIndex(RebuildIndexParamInner param) { @Override public AffectRes setAIAlias(String databaseName, String collectionName, String aliasName) { + super.initHttpStub(this.connectParam); return super.setAIAlias(databaseName, collectionName, aliasName); } @Override public AffectRes deleteAIAlias(String databaseName, String aliasName) { + super.initHttpStub(this.connectParam); return super.deleteAIAlias(databaseName, aliasName); } @Override public List listCollectionView(String databaseName) { + super.initHttpStub(this.connectParam); return super.listCollectionView(databaseName); } @Override public CollectionView describeCollectionView(String databaseName, String collectionName) { + super.initHttpStub(this.connectParam); return super.describeCollectionView(databaseName, collectionName); } @Override public AffectRes dropCollectionView(String databaseName, String collectionName) { + super.initHttpStub(this.connectParam); return super.dropCollectionView(databaseName, collectionName); } @Override public List queryAIDocument(CollectionViewQueryParamInner queryParamInner) { + super.initHttpStub(this.connectParam); return super.queryAIDocument(queryParamInner); } @Override public AffectRes deleteAIDocument(CollectionViewDeleteParamInner deleteParamInner) { + super.initHttpStub(this.connectParam); return super.deleteAIDocument(deleteParamInner); } @Override public SearchContentRes searchAIDocument(SearchDocParamInner searchDocParamInner) { + super.initHttpStub(this.connectParam); return super.searchAIDocument(searchDocParamInner); } @Override public AffectRes updateAIDocument(CollectionViewUpdateParamInner updateParamInner) { + super.initHttpStub(this.connectParam); return super.updateAIDocument(updateParamInner); } @Override public void upload(String databaseName, String collectionName, LoadAndSplitTextParam loadAndSplitTextParam, Map metaDataMap) throws Exception { + super.initHttpStub(this.connectParam); super.upload(databaseName, collectionName, loadAndSplitTextParam, metaDataMap); } @Override public GetDocumentSetRes getFile(String databaseName, String collectionName, String fileName, String fileId) { + super.initHttpStub(this.connectParam); return super.getFile(databaseName, collectionName, fileName, fileId); } @Override public GetChunksRes getChunks(String databaseName, String collectionName, String documentSetName, String documentSetId, Integer limit, Integer offset) { + super.initHttpStub(this.connectParam); return super.getChunks(databaseName, collectionName, documentSetName, documentSetId, limit, offset); } @Override public BaseRes rebuildAIIndex(RebuildIndexParamInner param) { + super.initHttpStub(this.connectParam); return super.rebuildAIIndex(param); } diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/service/HttpStub.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/service/HttpStub.java index 6b6cc92..2d4bd88 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/service/HttpStub.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/service/HttpStub.java @@ -63,28 +63,38 @@ * HTTP Stub for DB service API */ public class HttpStub implements Stub { - private final ConnectParam connectParam; - private final OkHttpClient client; - private final Headers.Builder headersBuilder; - private final ObjectMapper mapper = new ObjectMapper(); + private ConnectParam connectParam; + private OkHttpClient client; + private Headers.Builder headersBuilder; + private ObjectMapper mapper = new ObjectMapper(); private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); private static final Logger logger = LoggerFactory.getLogger(HttpStub.class.getName()); - + public HttpStub(){} public HttpStub(ConnectParam connectParam) { - this.connectParam = connectParam; - String authorization = String.format("Bearer account=%s&api_key=%s", - connectParam.getUsername(), connectParam.getKey()); - this.headersBuilder = new Headers.Builder() - .add("Authorization", authorization); - logger.debug("header: {}", authorization); - this.client = new OkHttpClient.Builder() - .connectTimeout(this.connectParam.getConnectTimeout(), TimeUnit.SECONDS) - .readTimeout(connectParam.getTimeout(), TimeUnit.SECONDS) - .connectionPool(new ConnectionPool( - this.connectParam.getMaxIdleConnections(), this.connectParam.getKeepAliveDuration(), TimeUnit.SECONDS)) - .build(); + initHttpStub(connectParam); + } + + protected void initHttpStub(ConnectParam connectParam) { + if (client == null) { + synchronized (this) { + if (client == null) { + this.connectParam = connectParam; + String authorization = String.format("Bearer account=%s&api_key=%s", + connectParam.getUsername(), connectParam.getKey()); + this.headersBuilder = new Headers.Builder() + .add("Authorization", authorization); + logger.debug("header: {}", authorization); + this.client = new OkHttpClient.Builder() + .connectTimeout(this.connectParam.getConnectTimeout(), TimeUnit.SECONDS) + .readTimeout(connectParam.getTimeout(), TimeUnit.SECONDS) + .connectionPool(new ConnectionPool( + this.connectParam.getMaxIdleConnections(), this.connectParam.getKeepAliveDuration(), TimeUnit.SECONDS)) + .build(); + } + } + } } @Override @@ -724,11 +734,13 @@ private JsonNode post(String url, String json, boolean ai) { } private Headers get_headers(boolean ai) { + Headers.Builder headersTmp = new Headers.Builder(); String backend = "vdb"; if (ai){ backend = "ai"; } - this.headersBuilder.add("backend-service", backend); + headersTmp.add("backend-service", backend); + headersTmp.add("Authorization", this.headersBuilder.get("Authorization")); logger.debug("Backend: {}", backend); return headersBuilder.build(); } diff --git a/tcvectordb/src/main/java/com/tencent/tcvectordb/utils/JsonUtils.java b/tcvectordb/src/main/java/com/tencent/tcvectordb/utils/JsonUtils.java index 9badead..623cf59 100644 --- a/tcvectordb/src/main/java/com/tencent/tcvectordb/utils/JsonUtils.java +++ b/tcvectordb/src/main/java/com/tencent/tcvectordb/utils/JsonUtils.java @@ -65,8 +65,9 @@ public static T parseObject(String jsonStr, Class clz) { try { return DESERIALIZE_IGNORE_KEY_MAPPER.readValue(jsonStr, clz); } catch (JsonProcessingException e) { + throw new ParamException(String.format( - "can't parse content=%s", jsonStr)); + "can't parse content=%s", jsonStr), e); } } @@ -80,7 +81,7 @@ public static String toJsonString(T obj) { return SERIALIZE_MAPPER.writeValueAsString(obj); } catch (JsonProcessingException e) { throw new ParamException(String.format( - "can't serialize value=%s, type=%s", obj, obj.getClass().getName())); + "can't serialize value=%s, type=%s", obj, obj.getClass().getName()), e); } } @@ -104,8 +105,9 @@ public static JsonNode parseToJsonNode(String jsonStr) { try { return SERIALIZE_MAPPER.readTree(jsonStr); } catch (JsonProcessingException e) { + throw new ParamException(String.format( - "can't parse content=%s", jsonStr)); + "can't parse content=%s", jsonStr), e); } } @@ -119,9 +121,8 @@ public static T collectionDeserializer(String jsonStr, TypeReference clz) try { return PARAMS_DESERIALIZE_MAPPER.readValue(jsonStr, clz); } catch (JsonProcessingException e) { - System.out.println(e); throw new ParamException(String.format( - "can't parse content=%s", jsonStr)); + "can't parse content=%s", jsonStr), e); } } }