-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCustomHeaderExample.java
More file actions
88 lines (80 loc) · 3.76 KB
/
CustomHeaderExample.java
File metadata and controls
88 lines (80 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.example.vault;
import com.skyflow.Skyflow;
import com.skyflow.config.Credentials;
import com.skyflow.config.VaultConfig;
import com.skyflow.enums.CustomHeaderKey;
import com.skyflow.enums.Env;
import com.skyflow.enums.LogLevel;
import com.skyflow.enums.UpsertType;
import com.skyflow.vault.data.InsertOptions;
import com.skyflow.vault.data.InsertRecord;
import com.skyflow.vault.data.InsertRequest;
import com.skyflow.vault.data.InsertResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
public class CustomHeaderExample {
public static void main(String[] args) {
try {
// Step 1: Initialize credentials with the path to your service account key file
// String filePath = "<YOUR_CREDENTIALS_FILE_PATH>";
Credentials credentials = new Credentials();
credentials.setToken("<BEARER_TOKEN>");
// Step 2: Configure the vault with required parameters
VaultConfig vaultConfig = new VaultConfig();
vaultConfig.setVaultId("<VAULT_ID>");
vaultConfig.setClusterId("<CLUSTER_ID>");
vaultConfig.setEnv(Env.DEV);
vaultConfig.setCredentials(credentials);
// Step 3: Create Skyflow client instance with error logging
Skyflow skyflowClient = Skyflow.builder()
.setLogLevel(LogLevel.DEBUG)
.addVaultConfig(vaultConfig)
.build();
ArrayList<InsertRecord> insertRecords = new ArrayList<>();
for (int i = 0; i < 100; i++) {
// Step 4: Prepare first record for insertion
HashMap<String, Object> recordData1 = new HashMap<>();
recordData1.put("<YOUR_COLUMN_NAME_2>", "<YOUR_VALUE_1>");
InsertRecord insertRecord1 = InsertRecord
.builder()
.data(recordData1)
.build();
// Step 6: Combine records into a Insert record list
insertRecords.add(insertRecord1);
}
ArrayList<String> upsertColumns = new ArrayList<>();
upsertColumns.add("<UPSERT_COLUMN_NAME>");
InsertRequest request = InsertRequest.builder()
.table("<TABLE_NAME>")
.upsert(upsertColumns)
.upsertType(UpsertType.REPLACE)
.records(insertRecords)
.build();
InsertOptions options = InsertOptions.builder()
.interceptor((ctx) ->{
ctx.addHeader(CustomHeaderKey.RequestIDHeader, getRequestId()); // pass the request id here
})
.build();
// Step 8: Execute the async bulk insert operation and handle response using callbacks
CompletableFuture<InsertResponse> future = skyflowClient.vault().bulkInsertAsync(request, options);
// Add success and error callbacks
future.thenAccept(response -> {
System.out.println("Async bulk insert resolved with response:\t" + response);
}).exceptionally(throwable -> {
System.err.println("Async bulk insert rejected with error:\t" + throwable.getMessage());
throw new CompletionException(throwable);
});
} catch (Exception e) {
// Step 9: Handle any synchronous errors that occur during setup
System.err.println("Error in Skyflow operations:\t" + e.getMessage());
}
}
public static String getRequestId(){
String id = UUID.randomUUID().toString();
System.out.println("id=>"+ id);
return id;
}
}