Skip to content

Commit 0b2b0fd

Browse files
committed
feat: implement first draft of the sync backup API
1 parent 3994900 commit 0b2b0fd

14 files changed

+617
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.List;
4+
5+
import com.google.gson.annotations.SerializedName;
6+
7+
public record Backup(
8+
@SerializedName("id") String id,
9+
@SerializedName("path") String path,
10+
@SerializedName("backend") String backend,
11+
@SerializedName("classes") List<String> includesCollections,
12+
@SerializedName("status") BackupStatus status,
13+
@SerializedName("error") String error) {
14+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
public enum BackupStatus {
6+
@SerializedName("STARTED")
7+
STARTED,
8+
@SerializedName("TRANSFERRING")
9+
TRANSFERRING,
10+
@SerializedName("SUCCESS")
11+
SUCCESS,
12+
@SerializedName("FAILED")
13+
FAILED,
14+
@SerializedName("CANCELED")
15+
CANCELED;
16+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.Collections;
4+
5+
import io.weaviate.client6.v1.internal.rest.Endpoint;
6+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
7+
8+
public record CancelBackupRequest(String backupId, String backend) {
9+
10+
public static Endpoint<CancelBackupRequest, Void> _ENDPOINT = SimpleEndpoint.sideEffect(
11+
request -> "DELETE",
12+
request -> "/backups/" + request.backend + "/" + request.backupId,
13+
request -> Collections.emptyMap());
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
public enum CompressionLevel {
6+
@SerializedName("DefaultCompression")
7+
DEFAULT,
8+
@SerializedName("BestSpeed")
9+
BEST_SPEED,
10+
@SerializedName("BestCompression")
11+
BEST_COMPRESSION;
12+
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.ArrayList;
4+
import java.util.Arrays;
5+
import java.util.Collections;
6+
import java.util.List;
7+
import java.util.function.Function;
8+
9+
import com.google.gson.annotations.SerializedName;
10+
11+
import io.weaviate.client6.v1.internal.ObjectBuilder;
12+
import io.weaviate.client6.v1.internal.json.JSON;
13+
import io.weaviate.client6.v1.internal.rest.Endpoint;
14+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
15+
16+
public record CreateBackupRequest(BackupCreate body, String backend) {
17+
18+
public static Endpoint<CreateBackupRequest, CreateBackupResponse> _ENDPOINT = new SimpleEndpoint<>(
19+
request -> "POST",
20+
request -> "/backups/" + request.backend,
21+
request -> Collections.emptyMap(),
22+
request -> JSON.serialize(request.body),
23+
(statusCode, response) -> new CreateBackupResponse(JSON.deserialize(response, Backup.class)));
24+
25+
public static record BackupCreate(
26+
@SerializedName("id") String id,
27+
@SerializedName("include") List<String> includeCollections,
28+
@SerializedName("exclude") List<String> excludeCollections,
29+
@SerializedName("config") Config config) {
30+
31+
private static record Config(
32+
@SerializedName("CPUPercentage") Integer cpuPercentage,
33+
@SerializedName("ChunkSize") Integer chunkSize,
34+
@SerializedName("CompressionLevel") CompressionLevel compressionLevel,
35+
@SerializedName("Bucket") String bucket,
36+
@SerializedName("Path") String path) {
37+
}
38+
39+
public static BackupCreate of(String backupId) {
40+
return of(backupId, ObjectBuilder.identity());
41+
}
42+
43+
public static BackupCreate of(String backupId, Function<Builder, ObjectBuilder<BackupCreate>> fn) {
44+
return fn.apply(new Builder(backupId)).build();
45+
}
46+
47+
public BackupCreate(Builder builder) {
48+
this(
49+
builder.backupId,
50+
builder.includeCollections,
51+
builder.excludeCollections,
52+
new Config(
53+
builder.cpuPercentage,
54+
builder.chunkSize,
55+
builder.compressionLevel,
56+
builder.bucket,
57+
builder.path));
58+
}
59+
60+
public static class Builder implements ObjectBuilder<BackupCreate> {
61+
private final String backupId;
62+
63+
private Integer cpuPercentage;
64+
private Integer chunkSize;
65+
private CompressionLevel compressionLevel;
66+
private String bucket;
67+
private String path;
68+
private final List<String> includeCollections = new ArrayList<>();
69+
private final List<String> excludeCollections = new ArrayList<>();
70+
71+
public Builder(String backupId) {
72+
this.backupId = backupId;
73+
}
74+
75+
public Builder includeCollections(String... includeCollections) {
76+
return includeCollections(Arrays.asList(includeCollections));
77+
}
78+
79+
public Builder includeCollections(List<String> includeCollections) {
80+
this.includeCollections.addAll(includeCollections);
81+
return this;
82+
}
83+
84+
public Builder excludeCollections(String... excludeCollections) {
85+
return excludeCollections(Arrays.asList(excludeCollections));
86+
}
87+
88+
public Builder excludeCollections(List<String> excludeCollections) {
89+
this.excludeCollections.addAll(excludeCollections);
90+
return this;
91+
}
92+
93+
public Builder cpuPercentage(Integer cpuPercentage) {
94+
this.cpuPercentage = cpuPercentage;
95+
return this;
96+
}
97+
98+
public Builder chunkSize(Integer chunkSize) {
99+
this.chunkSize = chunkSize;
100+
return this;
101+
}
102+
103+
public Builder compressionLevel(CompressionLevel compressionLevel) {
104+
this.compressionLevel = compressionLevel;
105+
return this;
106+
}
107+
108+
public Builder bucket(String bucket) {
109+
this.bucket = bucket;
110+
return this;
111+
}
112+
113+
public Builder path(String path) {
114+
this.path = path;
115+
return this;
116+
}
117+
118+
@Override
119+
public CreateBackupRequest build() {
120+
new BackupCreate(this);
121+
}
122+
}
123+
}
124+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.List;
4+
5+
public final class CreateBackupResponse {
6+
private final Backup backup;
7+
8+
CreateBackupResponse(Backup backup) {
9+
this.backup = backup;
10+
}
11+
12+
public String id() {
13+
return backup.id();
14+
}
15+
16+
public String path() {
17+
return backup.path();
18+
}
19+
20+
public String backend() {
21+
return backup.backend();
22+
}
23+
24+
public List<String> includesCollections() {
25+
return backup.includesCollections();
26+
}
27+
28+
public BackupStatus status() {
29+
return backup.status();
30+
}
31+
32+
public String error() {
33+
return backup.error();
34+
}
35+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.Collections;
4+
import java.util.Optional;
5+
6+
import io.weaviate.client6.v1.internal.rest.Endpoint;
7+
import io.weaviate.client6.v1.internal.rest.OptionalEndpoint;
8+
9+
public record GetCreateStatusRequest(String backupId, String backend) {
10+
public static final Endpoint<GetCreateStatusRequest, Optional<Backup>> _ENDPOINT = OptionalEndpoint.noBodyOptional(
11+
request -> "GET",
12+
request -> "backups/" + request.backend + "/" + request.backupId,
13+
request -> Collections.emptyMap(),
14+
Backup.class);
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.Collections;
4+
import java.util.Optional;
5+
6+
import io.weaviate.client6.v1.internal.rest.Endpoint;
7+
import io.weaviate.client6.v1.internal.rest.OptionalEndpoint;
8+
9+
public record GetRestoreStatusRequest(String backupId, String backend) {
10+
public static final Endpoint<GetRestoreStatusRequest, Optional<Backup>> _ENDPOINT = OptionalEndpoint.noBodyOptional(
11+
request -> "GET",
12+
request -> "backups/" + request.backend + "/" + request.backupId + "/restore",
13+
request -> Collections.emptyMap(),
14+
Backup.class);
15+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import java.util.Collections;
4+
import java.util.List;
5+
6+
import com.google.gson.reflect.TypeToken;
7+
8+
import io.weaviate.client6.v1.internal.json.JSON;
9+
import io.weaviate.client6.v1.internal.rest.Endpoint;
10+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
11+
12+
public record ListBackupsRequest(String backend) {
13+
14+
@SuppressWarnings("unchecked")
15+
public static Endpoint<ListBackupsRequest, List<Backup>> _ENDPOINT = SimpleEndpoint.noBody(
16+
request -> "GET",
17+
request -> "/backups/" + request.backend,
18+
request -> Collections.emptyMap(),
19+
(statusCode, response) -> (List<Backup>) JSON.deserialize(
20+
response, TypeToken.getParameterized(List.class, Backup.class)));
21+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.weaviate.client6.v1.api.backup;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
public enum RbacRestoreOption {
6+
@SerializedName("noRestore")
7+
NONE,
8+
@SerializedName("all")
9+
ALL;
10+
}

0 commit comments

Comments
 (0)