11package io .weaviate .client .v1 .async .backup .api ;
22
3+ import java .util .List ;
4+ import java .util .Optional ;
5+ import java .util .concurrent .CompletableFuture ;
6+ import java .util .concurrent .CompletionException ;
7+ import java .util .concurrent .Executor ;
8+ import java .util .concurrent .Future ;
9+
10+ import org .apache .hc .client5 .http .impl .async .CloseableHttpAsyncClient ;
11+ import org .apache .hc .core5 .concurrent .FutureCallback ;
12+ import org .apache .hc .core5 .http .HttpStatus ;
13+
314import com .google .gson .annotations .SerializedName ;
15+
416import io .weaviate .client .Config ;
517import io .weaviate .client .base .AsyncBaseClient ;
618import io .weaviate .client .base .AsyncClientResult ;
1325import io .weaviate .client .v1 .auth .provider .AccessTokenProvider ;
1426import io .weaviate .client .v1 .backup .model .BackupRestoreResponse ;
1527import io .weaviate .client .v1 .backup .model .BackupRestoreStatusResponse ;
28+ import io .weaviate .client .v1 .backup .model .RbacRestoreOption ;
1629import io .weaviate .client .v1 .backup .model .RestoreStatus ;
1730import lombok .Builder ;
1831import lombok .Getter ;
19- import org .apache .hc .client5 .http .impl .async .CloseableHttpAsyncClient ;
20- import org .apache .hc .core5 .concurrent .FutureCallback ;
21- import org .apache .hc .core5 .http .HttpStatus ;
22-
23- import java .util .List ;
24- import java .util .Optional ;
25- import java .util .concurrent .CompletableFuture ;
26- import java .util .concurrent .CompletionException ;
27- import java .util .concurrent .Executor ;
28- import java .util .concurrent .Future ;
2932
3033public class BackupRestorer extends AsyncBaseClient <BackupRestoreResponse >
31- implements AsyncClientResult <BackupRestoreResponse > {
34+ implements AsyncClientResult <BackupRestoreResponse > {
3235
3336 private static final long WAIT_INTERVAL = 1000 ;
3437
@@ -41,14 +44,13 @@ public class BackupRestorer extends AsyncBaseClient<BackupRestoreResponse>
4144 private boolean waitForCompletion ;
4245 private final Executor executor ;
4346
44-
45- public BackupRestorer ( CloseableHttpAsyncClient client , Config config , AccessTokenProvider tokenProvider , BackupRestoreStatusGetter statusGetter , Executor executor ) {
47+ public BackupRestorer ( CloseableHttpAsyncClient client , Config config , AccessTokenProvider tokenProvider ,
48+ BackupRestoreStatusGetter statusGetter , Executor executor ) {
4649 super (client , config , tokenProvider );
4750 this .statusGetter = statusGetter ;
4851 this .executor = executor ;
4952 }
5053
51-
5254 public BackupRestorer withIncludeClassNames (String ... classNames ) {
5355 this .includeClassNames = classNames ;
5456 return this ;
@@ -87,19 +89,20 @@ public Future<Result<BackupRestoreResponse>> run(FutureCallback<Result<BackupRes
8789 return restore (callback );
8890 }
8991
90-
9192 private Future <Result <BackupRestoreResponse >> restore (FutureCallback <Result <BackupRestoreResponse >> callback ) {
9293 BackupRestore payload = BackupRestore .builder ()
93- .config (BackupRestoreConfig .builder ().build ())
94- .include (includeClassNames )
95- .exclude (excludeClassNames )
96- .config (config )
97- .build ();
98- String path = String .format ("/backups/%s/%s/restore" , UrlEncoder .encodePathParam (backend ), UrlEncoder .encodePathParam (backupId ));
94+ .config (BackupRestoreConfig .builder ().build ())
95+ .include (includeClassNames )
96+ .exclude (excludeClassNames )
97+ .config (config )
98+ .build ();
99+ String path = String .format ("/backups/%s/%s/restore" , UrlEncoder .encodePathParam (backend ),
100+ UrlEncoder .encodePathParam (backupId ));
99101 return sendPostRequest (path , payload , BackupRestoreResponse .class , callback );
100102 }
101103
102- private Future <Result <BackupRestoreResponse >> restoreAndWaitForCompletion (FutureCallback <Result <BackupRestoreResponse >> callback ) {
104+ private Future <Result <BackupRestoreResponse >> restoreAndWaitForCompletion (
105+ FutureCallback <Result <BackupRestoreResponse >> callback ) {
103106 CompletableFuture <Result <BackupRestoreResponse >> future = new CompletableFuture <>();
104107 FutureCallback <Result <BackupRestoreResponse >> internalCallback = new FutureCallback <Result <BackupRestoreResponse >>() {
105108 @ Override
@@ -124,64 +127,65 @@ public void cancelled() {
124127 restore (internalCallback );
125128
126129 return future .thenCompose (restoreResult -> {
127- if (restoreResult .hasErrors ()) {
128- return CompletableFuture .completedFuture (restoreResult );
129- }
130- return getStatusRecursively (backend , backupId , restoreResult );
131- })
132- .whenComplete ((restoreResult , throwable ) -> {
133- if (callback != null ) {
134- if (throwable != null ) {
135- callback .failed ((Exception ) throwable );
136- } else {
137- callback .completed (restoreResult );
130+ if (restoreResult .hasErrors ()) {
131+ return CompletableFuture .completedFuture (restoreResult );
132+ }
133+ return getStatusRecursively (backend , backupId , restoreResult );
134+ })
135+ .whenComplete ((restoreResult , throwable ) -> {
136+ if (callback != null ) {
137+ if (throwable != null ) {
138+ callback .failed ((Exception ) throwable );
139+ } else {
140+ callback .completed (restoreResult );
141+ }
138142 }
139- }
140- });
143+ });
141144 }
142145
143146 private CompletableFuture <Result <BackupRestoreStatusResponse >> getStatus (String backend , String backupId ) {
144147 CompletableFuture <Result <BackupRestoreStatusResponse >> future = new CompletableFuture <>();
145148 statusGetter .withBackend (backend ).withBackupId (backupId )
146- .run (new FutureCallback <Result <BackupRestoreStatusResponse >>() {
147- @ Override
148- public void completed (Result <BackupRestoreStatusResponse > createStatusResult ) {
149- future .complete (createStatusResult );
150- }
149+ .run (new FutureCallback <Result <BackupRestoreStatusResponse >>() {
150+ @ Override
151+ public void completed (Result <BackupRestoreStatusResponse > createStatusResult ) {
152+ future .complete (createStatusResult );
153+ }
151154
152- @ Override
153- public void failed (Exception e ) {
154- future .completeExceptionally (e );
155- }
155+ @ Override
156+ public void failed (Exception e ) {
157+ future .completeExceptionally (e );
158+ }
156159
157- @ Override
158- public void cancelled () {
159- }
160- });
160+ @ Override
161+ public void cancelled () {
162+ }
163+ });
161164 return future ;
162165 }
163166
164167 private CompletableFuture <Result <BackupRestoreResponse >> getStatusRecursively (String backend , String backupId ,
165- Result <BackupRestoreResponse > restoreResult ) {
168+ Result <BackupRestoreResponse > restoreResult ) {
166169 return Futures .thenComposeAsync (getStatus (backend , backupId ), restoreStatusResult -> {
167170 boolean isRunning = Optional .of (restoreStatusResult )
168- .filter (r -> !r .hasErrors ())
169- .map (Result ::getResult )
170- .map (BackupRestoreStatusResponse ::getStatus )
171- .filter (status -> {
172- switch (status ) {
173- case RestoreStatus .SUCCESS :
174- case RestoreStatus .FAILED :
175- return false ;
176- default :
177- return true ;
178- }
179- })
180- .isPresent ();
171+ .filter (r -> !r .hasErrors ())
172+ .map (Result ::getResult )
173+ .map (BackupRestoreStatusResponse ::getStatus )
174+ .filter (status -> {
175+ switch (status ) {
176+ case RestoreStatus .SUCCESS :
177+ case RestoreStatus .FAILED :
178+ return false ;
179+ default :
180+ return true ;
181+ }
182+ })
183+ .isPresent ();
181184
182185 if (isRunning ) {
183186 try {
184- return Futures .supplyDelayed (() -> getStatusRecursively (backend , backupId , restoreResult ), WAIT_INTERVAL , executor );
187+ return Futures .supplyDelayed (() -> getStatusRecursively (backend , backupId , restoreResult ), WAIT_INTERVAL ,
188+ executor );
185189 } catch (InterruptedException e ) {
186190 throw new CompletionException (e );
187191 }
@@ -191,7 +195,7 @@ private CompletableFuture<Result<BackupRestoreResponse>> getStatusRecursively(St
191195 }
192196
193197 private Result <BackupRestoreResponse > merge (Result <BackupRestoreStatusResponse > restoreStatusResult ,
194- Result <BackupRestoreResponse > restoreResult ) {
198+ Result <BackupRestoreResponse > restoreResult ) {
195199 BackupRestoreStatusResponse restoreStatusResponse = restoreStatusResult .getResult ();
196200 BackupRestoreResponse restoreResponse = restoreResult .getResult ();
197201
@@ -215,20 +219,22 @@ private Result<BackupRestoreResponse> merge(Result<BackupRestoreStatusResponse>
215219 List <WeaviateErrorMessage > messages = error .getMessages ();
216220
217221 errorResponse = WeaviateErrorResponse .builder ()
218- .code (statusCode )
219- .error (messages )
220- .build ();
222+ .code (statusCode )
223+ .error (messages )
224+ .build ();
221225 }
222226
223227 return new Result <>(statusCode , merged , errorResponse );
224228 }
225229
226-
227230 @ Getter
228231 @ Builder
229232 private static class BackupRestore {
233+ @ SerializedName ("config" )
230234 BackupRestoreConfig config ;
235+ @ SerializedName ("include" )
231236 String [] include ;
237+ @ SerializedName ("exclude" )
232238 String [] exclude ;
233239 }
234240
@@ -241,5 +247,9 @@ public static class BackupRestoreConfig {
241247 String bucket ;
242248 @ SerializedName ("Path" )
243249 String path ;
250+ @ SerializedName ("usersOptions" )
251+ RbacRestoreOption usersRestore ;
252+ @ SerializedName ("rolesOptions" )
253+ RbacRestoreOption rolesRestore ;
244254 }
245255}
0 commit comments