Selaa lähdekoodia

Ensure compatibility of v1 cloud import interface (#1063)

Signed-off-by: lentitude2tk <xushuang.hu@zilliz.com>
xushuang.hu 7 kuukautta sitten
vanhempi
commit
03d9c2f6a0

+ 16 - 0
src/main/java/io/milvus/bulkwriter/BaseCloudImport.java

@@ -85,4 +85,20 @@ public class BaseCloudImport {
             ExceptionUtils.throwUnExpectedException(String.format("Failed to request url: %s, code: %s, message: %s", url, innerCode, innerMessage));
         }
     }
+
+    protected static String convertToV2ControlBaseURL(String url) {
+        /**
+         * Compatible with the original v1 API format: https://controller.api.{region-name}.cloud.zilliz.com
+         * Unified overseas domain for control center calls to reduce user perception
+         */
+        if (url.endsWith(".com")) {
+            return "https://api.cloud.zilliz.com";
+        }
+
+        /**
+         * Compatible with the original v1 API format: https://controller.api.{region-name}.cloud.zilliz.com.cn
+         * Unified domestic domain for control center calls to reduce user perception
+         */
+        return "https://api.cloud.zilliz.com.cn";
+    }
 }

+ 11 - 25
src/main/java/io/milvus/bulkwriter/CloudImport.java

@@ -23,12 +23,12 @@ import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
 import io.milvus.bulkwriter.response.BulkImportResponse;
 import io.milvus.bulkwriter.response.GetImportProgressResponse;
-import io.milvus.bulkwriter.response.v2.GetImportProgressV2Response;
 import io.milvus.bulkwriter.response.ListImportJobsResponse;
 import io.milvus.bulkwriter.response.RestfulResponse;
+import io.milvus.bulkwriter.response.v2.GetImportProgressV2Response;
+import io.milvus.bulkwriter.response.v2.ListImportJobsV2Response;
 
 import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -39,13 +39,8 @@ public class CloudImport extends BaseCloudImport {
 
     public static BulkImportResponse bulkImport(String url, String apiKey, String objectUrl,
                                                 String accessKey, String secretKey, String clusterId, String collectionName) throws MalformedURLException {
-        String requestURL;
-        String protocol = new URL(url).getProtocol();
-        if (protocol.startsWith("http")) {
-            requestURL = url + "/v2/vectordb/jobs/import/create";
-        } else {
-            requestURL = String.format("https://%s/v2/vectordb/jobs/import/create", url);
-        }
+        url = convertToV2ControlBaseURL(url);
+        String requestURL = url + "/v2/vectordb/jobs/import/create";
 
         Map<String, Object> params = new HashMap<>();
         params.put("objectUrl", objectUrl);
@@ -61,13 +56,8 @@ public class CloudImport extends BaseCloudImport {
     }
 
     public static GetImportProgressResponse getImportProgress(String url, String apiKey, String jobId, String clusterId) throws MalformedURLException {
-        String requestURL;
-        String protocol = new URL(url).getProtocol();
-        if (protocol.startsWith("http")) {
-            requestURL = url + "/v2/vectordb/jobs/import/getProgress";
-        } else {
-            requestURL = String.format("https://%s/v2/vectordb/jobs/import/getProgress", url);
-        }
+        url = convertToV2ControlBaseURL(url);
+        String requestURL = url + "/v2/vectordb/jobs/import/getProgress";
 
         Map<String, Object> params = new HashMap<>();
         params.put("clusterId", clusterId);
@@ -80,13 +70,8 @@ public class CloudImport extends BaseCloudImport {
     }
 
     public static ListImportJobsResponse listImportJobs(String url, String apiKey, String clusterId, int pageSize, int currentPage) throws MalformedURLException {
-        String requestURL;
-        String protocol = new URL(url).getProtocol();
-        if (protocol.startsWith("http")) {
-            requestURL = url + "/v2/vectordb/jobs/import/list";
-        } else {
-            requestURL = String.format("https://%s/v2/vectordb/jobs/import/list", url);
-        }
+        url = convertToV2ControlBaseURL(url);
+        String requestURL = url + "/v2/vectordb/jobs/import/list";
 
         Map<String, Object> params = new HashMap<>();
         params.put("clusterId", clusterId);
@@ -94,8 +79,9 @@ public class CloudImport extends BaseCloudImport {
         params.put("currentPage", currentPage);
 
         String body = postRequest(requestURL, apiKey, params, 60 * 1000);
-        RestfulResponse<ListImportJobsResponse> response = GSON_INSTANCE.fromJson(body, new TypeToken<RestfulResponse<ListImportJobsResponse>>(){}.getType());
+        RestfulResponse<ListImportJobsV2Response> response = GSON_INSTANCE.fromJson(body, new TypeToken<RestfulResponse<ListImportJobsV2Response>>(){}.getType());
         handleResponse(requestURL, response);
-        return response.getData();
+        return response.getData().toListImportJobsResponse();
     }
+
 }

+ 3 - 22
src/main/java/io/milvus/bulkwriter/CloudImportV2.java

@@ -30,20 +30,13 @@ import io.milvus.bulkwriter.response.v2.GetImportProgressV2Response;
 import io.milvus.bulkwriter.response.v2.ListImportJobsV2Response;
 
 import java.net.MalformedURLException;
-import java.net.URL;
 import java.util.Map;
 
 public class CloudImportV2 extends BaseCloudImport {
     private static final Gson GSON_INSTANCE = new Gson();
 
     public static BulkImportV2Response createImportJobs(String url, String apiKey, BulkImportV2Request request) throws MalformedURLException {
-        String requestURL;
-        String protocol = new URL(url).getProtocol();
-        if (protocol.startsWith("http")) {
-            requestURL = url + "/v2/vectordb/jobs/import/create";
-        } else {
-            requestURL = String.format("https://%s/v2/vectordb/jobs/import/create", url);
-        }
+        String requestURL = url + "/v2/vectordb/jobs/import/create";
 
         Map<String, Object> params = GSON_INSTANCE.fromJson(GSON_INSTANCE.toJson(request), new TypeToken<Map<String, Object>>() {}.getType());
         String body = postRequest(requestURL, apiKey, params, 60 * 1000);
@@ -53,13 +46,7 @@ public class CloudImportV2 extends BaseCloudImport {
     }
 
     public static GetImportProgressV2Response getImportJobProgress(String url, String apiKey, GetImportProgressV2Request request) throws MalformedURLException {
-        String requestURL;
-        String protocol = new URL(url).getProtocol();
-        if (protocol.startsWith("http")) {
-            requestURL = url + "/v2/vectordb/jobs/import/getProgress";
-        } else {
-            requestURL = String.format("https://%s/v2/vectordb/jobs/import/getProgress", url);
-        }
+        String requestURL = url + "/v2/vectordb/jobs/import/getProgress";
 
         Map<String, Object> params = GSON_INSTANCE.fromJson(GSON_INSTANCE.toJson(request), new TypeToken<Map<String, Object>>() {}.getType());
         String body = postRequest(requestURL, apiKey, params, 60 * 1000);
@@ -69,13 +56,7 @@ public class CloudImportV2 extends BaseCloudImport {
     }
 
     public static ListImportJobsV2Response listImportJobs(String url, String apiKey, ListImportJobsV2Request request) throws MalformedURLException {
-        String requestURL;
-        String protocol = new URL(url).getProtocol();
-        if (protocol.startsWith("http")) {
-            requestURL = url + "/v2/vectordb/jobs/import/list";
-        } else {
-            requestURL = String.format("https://%s/v2/vectordb/jobs/import/list", url);
-        }
+        String requestURL = url + "/v2/vectordb/jobs/import/list";
 
         Map<String, Object> params = GSON_INSTANCE.fromJson(GSON_INSTANCE.toJson(request), new TypeToken<Map<String, Object>>() {}.getType());
 

+ 4 - 9
src/main/java/io/milvus/bulkwriter/response/ListImportJobsResponse.java

@@ -40,15 +40,10 @@ public class ListImportJobsResponse implements Serializable {
 
     private Integer pageSize;
 
+    private List<Record> tasks;
+
+    @Deprecated
+    // Invalid field, please use tasks.
     private List<Record> records;
 
-    @Data
-    @Builder
-    @AllArgsConstructor
-    @NoArgsConstructor
-    private static class Record {
-        private String collectionName;
-        private String jobId;
-        private String state;
-    }
 }

+ 16 - 0
src/main/java/io/milvus/bulkwriter/response/Record.java

@@ -0,0 +1,16 @@
+package io.milvus.bulkwriter.response;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class Record {
+    private String collectionName;
+    private String jobId;
+    private String state;
+}

+ 31 - 8
src/main/java/io/milvus/bulkwriter/response/v2/ListImportJobsV2Response.java

@@ -19,13 +19,18 @@
 
 package io.milvus.bulkwriter.response.v2;
 
+import com.google.common.collect.ImmutableMap;
+import io.milvus.bulkwriter.response.ListImportJobsResponse;
+import io.milvus.bulkwriter.response.Record;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 @Data
 @Builder
@@ -34,6 +39,7 @@ import java.util.List;
 public class ListImportJobsV2Response implements Serializable {
 
     private static final long serialVersionUID = -8400893490624599225L;
+
     private Integer count;
 
     private Integer currentPage;
@@ -42,13 +48,30 @@ public class ListImportJobsV2Response implements Serializable {
 
     private List<Record> records;
 
-    @Data
-    @Builder
-    @AllArgsConstructor
-    @NoArgsConstructor
-    private static class Record {
-        private String collectionName;
-        private String jobId;
-        private String state;
+    public ListImportJobsResponse toListImportJobsResponse() {
+        Map<String, String> newOldStateMap = ImmutableMap.of(
+                "Pending","ImportPending",
+                "Importing","ImportRunning",
+                "Completed","ImportCompleted",
+                "Failed","ImportFailed",
+                "Cancel","ImportCancel"
+        );
+
+        List<Record> tasks = new ArrayList<>();
+        for (Record record : records) {
+            Record task = Record.builder()
+                    .jobId(record.getJobId())
+                    .collectionName(record.getCollectionName())
+                    .state(newOldStateMap.get(record.getState()))
+                    .build();
+            tasks.add(task);
+        }
+
+        ListImportJobsResponse listImportJobsResponse = new ListImportJobsResponse();
+        listImportJobsResponse.setCount(count);
+        listImportJobsResponse.setCurrentPage(currentPage);
+        listImportJobsResponse.setPageSize(pageSize);
+        listImportJobsResponse.setTasks(tasks);
+        return listImportJobsResponse;
     }
 }