diff --git a/CHANGELOG.md b/CHANGELOG.md
index 123bdf4157e..6024b01953b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
### Added
- N/A
+## 1.2.28 - 2018-02-22
+
+### Added
+- Added support for the File Storage Service. An example on how to call this service can be found [here](https://github.com/oracle/oci-java-sdk/blob/master/bmc-examples/src/main/java/FileStorageServiceExample.java)
+- Added support for tagging Bucket resources in the Object Storage Service
+- Added support for specifying a restore period for archived objects in the `restoreObjects` operation of the Object Storage service
+- Added `paginators` to provide an `Iterable` interface over list operations offered by the SDK
+
## 1.2.27 - 2018-02-08
### Fixed
diff --git a/bmc-audit/pom.xml b/bmc-audit/pom.xml
index 6ceca5bb6e2..36fb0f61428 100644
--- a/bmc-audit/pom.xml
+++ b/bmc-audit/pom.xml
@@ -5,7 +5,7 @@
com.oracle.oci.sdk
oci-java-sdk
- 1.2.27
+ 1.2.28
../pom.xml
@@ -18,7 +18,7 @@
com.oracle.oci.sdk
oci-java-sdk-common
- 1.2.27
+ 1.2.28
diff --git a/bmc-audit/src/main/java/com/oracle/bmc/audit/Audit.java b/bmc-audit/src/main/java/com/oracle/bmc/audit/Audit.java
index 79497a3a9a4..5419a6a5fab 100644
--- a/bmc-audit/src/main/java/com/oracle/bmc/audit/Audit.java
+++ b/bmc-audit/src/main/java/com/oracle/bmc/audit/Audit.java
@@ -59,4 +59,13 @@ public interface Audit extends AutoCloseable {
* @throws BmcException when an error occurs.
*/
UpdateConfigurationResponse updateConfiguration(UpdateConfigurationRequest request);
+
+ /**
+ * Gets the pre-configured paginators available for list operations in this service which may return multiple
+ * pages of data. These paginators provide an {@link java.lang.Iterable} interface so that service responses, or
+ * resources/records, can be iterated through without having to manually deal with pagination and page tokens.
+ *
+ * @return The service paginators.
+ */
+ AuditPaginators getPaginators();
}
diff --git a/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditClient.java b/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditClient.java
index e5def968fe8..4d1ed116a5d 100644
--- a/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditClient.java
+++ b/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditClient.java
@@ -16,6 +16,10 @@ public class AuditClient implements Audit {
*/
public static final com.oracle.bmc.Service SERVICE =
com.oracle.bmc.Services.create("AUDIT", "audit");
+ // attempt twice if it's instance principals, immediately failures will try to refresh the token
+ private static final int MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS = 2;
+
+ private final AuditPaginators paginators;
@lombok.Getter(value = lombok.AccessLevel.PACKAGE)
private final com.oracle.bmc.http.internal.RestClient client;
@@ -87,6 +91,8 @@ public AuditClient(
SERVICE, this.authenticationDetailsProvider);
this.client = restClientFactory.create(requestSigner, configuration);
+ this.paginators = new AuditPaginators(this);
+
if (this.authenticationDetailsProvider instanceof com.oracle.bmc.auth.RegionProvider) {
com.oracle.bmc.auth.RegionProvider provider =
(com.oracle.bmc.auth.RegionProvider) this.authenticationDetailsProvider;
@@ -141,25 +147,19 @@ public GetConfigurationResponse getConfiguration(GetConfigurationRequest request
com.google.common.base.Function
transformer = GetConfigurationConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -172,25 +172,19 @@ public ListEventsResponse listEvents(ListEventsRequest request) {
com.google.common.base.Function transformer =
ListEventsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -203,28 +197,38 @@ public UpdateConfigurationResponse updateConfiguration(UpdateConfigurationReques
com.google.common.base.Function
transformer = UpdateConfigurationConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateConfigurationDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateConfigurationDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateConfigurationDetails(), request);
- return transformer.apply(response);
}
}
+
+ private boolean canRetryRequestIfInstancePrincipalsUsed(com.oracle.bmc.model.BmcException e) {
+ if (e.getStatusCode() == 401
+ && this.authenticationDetailsProvider
+ instanceof
+ com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
+ this.authenticationDetailsProvider)
+ .refreshSecurityToken();
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public AuditPaginators getPaginators() {
+ return paginators;
+ }
}
diff --git a/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditPaginators.java b/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditPaginators.java
new file mode 100644
index 00000000000..006e6f5f1ae
--- /dev/null
+++ b/bmc-audit/src/main/java/com/oracle/bmc/audit/AuditPaginators.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.audit;
+
+import com.oracle.bmc.audit.requests.*;
+import com.oracle.bmc.audit.responses.*;
+
+/**
+ * Collection of helper methods that can be used to provide an {@link java.lang.Iterable} interface
+ * to any list operations of Audit where multiple pages of data may be fetched.
+ * Two styles of iteration are supported:
+ *
+ *
+ * - Iterating over the Response objects returned by the list operation. These are referred to as ResponseIterators, and the methods are suffixed with ResponseIterator. For example: listUsersResponseIterator
+ * - Iterating over the resources/records being listed. These are referred to as RecordIterators, and the methods are suffixed with RecordIterator. For example: listUsersRecordIterator
+ *
+ *
+ * These iterables abstract away the need to write code to manually handle pagination via looping and using the page tokens.
+ * They will automatically fetch more data from the service when required.
+ *
+ * As an example, if we were using the ListUsers operation in IdentityService, then the {@link java.lang.Interable} returned by calling a
+ * ResponseIterator method would iterate over the ListUsersResponse objects returned by each ListUsers call, whereas the {@link java.lang.Iterable}
+ * returned by calling a RecordIterator method would iterate over the User records and we don't have to deal with ListUsersResponse objects at all.
+ * In either case, pagination will be automatically handled so we can iterate until there are no more responses or no more resources/records available.
+ */
+@javax.annotation.Generated(value = "OracleSDKGenerator", comments = "API Version: 20160918")
+@lombok.RequiredArgsConstructor
+public class AuditPaginators {
+ private final Audit client;
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listEvents operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listEventsResponseIterator(
+ final ListEventsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListEventsRequest.Builder, ListEventsRequest, ListEventsResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListEventsRequest.Builder get() {
+ return ListEventsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListEventsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListEventsRequest.Builder>,
+ ListEventsRequest>() {
+ @Override
+ public ListEventsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListEventsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListEventsResponse apply(ListEventsRequest request) {
+ return client.listEvents(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.audit.model.AuditEvent} objects
+ * contained in responses from the listEvents operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.audit.model.AuditEvent} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listEventsRecordIterator(
+ final ListEventsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListEventsRequest.Builder, ListEventsRequest, ListEventsResponse,
+ com.oracle.bmc.audit.model.AuditEvent>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListEventsRequest.Builder get() {
+ return ListEventsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListEventsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListEventsRequest.Builder>,
+ ListEventsRequest>() {
+ @Override
+ public ListEventsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListEventsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListEventsResponse apply(ListEventsRequest request) {
+ return client.listEvents(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListEventsResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListEventsResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+}
diff --git a/bmc-bom/pom.xml b/bmc-bom/pom.xml
index 1383575b404..379b05a02e6 100644
--- a/bmc-bom/pom.xml
+++ b/bmc-bom/pom.xml
@@ -1,78 +1,76 @@
-
+
+
4.0.0
-
-
com.oracle.oci.sdk
oci-java-sdk
- 1.2.27
+ 1.2.28
../pom.xml
-
oci-java-sdk-bom
pom
Oracle Cloud Infrastructure SDK - BOM
This project contains the BOM defining the SDK used for Oracle Cloud Infrastructure
https://docs.us-phoenix-1.oraclecloud.com/Content/API/SDKDocs/javasdk.htm
-
-
com.oracle.oci.sdk
oci-java-sdk-common
- 1.2.27
+ 1.2.28
false
-
-
com.oracle.oci.sdk
oci-java-sdk-audit
- 1.2.27
+ 1.2.28
false
com.oracle.oci.sdk
oci-java-sdk-core
- 1.2.27
+ 1.2.28
false
com.oracle.oci.sdk
oci-java-sdk-database
- 1.2.27
+ 1.2.28
false
com.oracle.oci.sdk
oci-java-sdk-dns
- 1.2.27
+ 1.2.28
+ false
+
+
+ com.oracle.oci.sdk
+ oci-java-sdk-filestorage
+ 1.2.28
false
com.oracle.oci.sdk
oci-java-sdk-identity
- 1.2.27
+ 1.2.28
false
com.oracle.oci.sdk
oci-java-sdk-loadbalancer
- 1.2.27
+ 1.2.28
false
com.oracle.oci.sdk
oci-java-sdk-objectstorage
- 1.2.27
+ 1.2.28
false
-
diff --git a/bmc-common/pom.xml b/bmc-common/pom.xml
index a6724436525..c21fda82aad 100644
--- a/bmc-common/pom.xml
+++ b/bmc-common/pom.xml
@@ -5,7 +5,7 @@
com.oracle.oci.sdk
oci-java-sdk
- 1.2.27
+ 1.2.28
../pom.xml
diff --git a/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/AbstractResponseIterator.java b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/AbstractResponseIterator.java
new file mode 100644
index 00000000000..fb8e0d18e40
--- /dev/null
+++ b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/AbstractResponseIterator.java
@@ -0,0 +1,116 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.paginator.internal;
+
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * Contains common functionality for classes which will iterate over the results of paginated
+ * list operations in a service.
+ *
+ * @param the type of a builder which can produce requests for a list operation
+ * @param the type of a request to a list operation. This type must match the type produced
+ * by REQUESTBUILDER
+ * @param the type of the response from a list operation
+ */
+public abstract class AbstractResponseIterator {
+ /**
+ * A builder which can be used to construct requests to the list operation
+ */
+ protected final REQUESTBUILDER requestBuilder;
+
+ /**
+ * A function which can be used to extract the next page token from a response from a list
+ * operation
+ */
+ protected final Function nextPageTokenRetrievalFunction;
+
+ /**
+ * A function which can call a list operation with a request and return the response from
+ * that call
+ */
+ protected final Function pageRetrievalFunction;
+
+ /**
+ * A function which constructs a request to a list operation based on a builder object
+ * and pagination token
+ */
+ protected final Function, REQUEST>
+ requestBuilderFunction;
+
+ /**
+ * The most recent response/result of calling the list operation. If the operation has never
+ * been called, then this will be null
+ */
+ protected RESPONSE currentResponse;
+
+ /**
+ * The page token to use on the next request to the list operation
+ */
+ protected String nextPageToken;
+
+ /**
+ * Constructs a new AbstractResponseIterator.
+ *
+ * @param requestBuilder a builder object which can create requests for a list operation
+ * @param nextPageTokenRetrievalFunction a function which can extract the next page token from a
+ * response produced by a list operation
+ * @param requestBuilderFunction a function which can build a request for a list operation based on
+ * a builder object and a pagination token to use
+ * @param pageRetrievalFunction a function which will call a list operation with a request and return
+ * the response of the call
+ */
+ public AbstractResponseIterator(
+ final REQUESTBUILDER requestBuilder,
+ final Function nextPageTokenRetrievalFunction,
+ final Function, REQUEST> requestBuilderFunction,
+ final Function pageRetrievalFunction) {
+
+ this.requestBuilder = requestBuilder;
+ this.nextPageTokenRetrievalFunction = nextPageTokenRetrievalFunction;
+ this.requestBuilderFunction = requestBuilderFunction;
+ this.pageRetrievalFunction = pageRetrievalFunction;
+ }
+
+ /**
+ * Based on the state of this class, produces the next request that should be used when calling
+ * the list operation so that the next page of results will be returned. This will just create the
+ * request and not make any service calls
+ *
+ * @return the next request that should be used when calling the list operation
+ */
+ protected REQUEST getNextRequest() {
+ final RequestBuilderAndToken requestBuilderAndToken =
+ new RequestBuilderAndToken(requestBuilder, getNextPageToken());
+
+ return requestBuilderFunction.apply(requestBuilderAndToken);
+ }
+
+ /**
+ * Gets the page token that should be used when the list operation is next called.
+ *
+ * @return null if we have not previously made a request to fetch any results. Otherwise,
+ * an Optional containing the next page token to use. If there is no next page token
+ * to use then an empty/absent Optional will be returned
+ */
+ protected Optional getNextPageToken() {
+ if (currentResponse == null) {
+ return null;
+ }
+
+ return Optional.fromNullable(nextPageTokenRetrievalFunction.apply(currentResponse));
+ }
+
+ /**
+ * Updates the state of this class with the next page of results
+ */
+ protected void fetchNextPage() {
+ currentResponse = pageRetrievalFunction.apply(getNextRequest());
+ nextPageToken = nextPageTokenRetrievalFunction.apply(currentResponse);
+ }
+}
diff --git a/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/RequestBuilderAndToken.java b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/RequestBuilderAndToken.java
new file mode 100644
index 00000000000..85465a8e681
--- /dev/null
+++ b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/RequestBuilderAndToken.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.paginator.internal;
+
+import com.google.common.base.Optional;
+
+/**
+ * A container class for a request builder and next page token. These pieces will be used to create
+ * a request to a list operation.
+ *
+ * There are three possible values for the token:
+ *
+ *
+ * - A null reference, in which case we should use the builder as-is to construct a request
+ * - A populated Optional, in which case we should use the value in the Optional as the page token in the builder
+ * - An empty/absent Optional, in which case we should use null as the page token in the builder
+ *
+ *
+ * @param The type of the request builder object
+ */
+public class RequestBuilderAndToken {
+ private T requestBuilder;
+ private Optional token;
+
+ public RequestBuilderAndToken(final T requestBuilder, final Optional token) {
+ this.requestBuilder = requestBuilder;
+ this.token = token;
+ }
+
+ public T getRequestBuilder() {
+ return this.requestBuilder;
+ }
+
+ public Optional getToken() {
+ return token;
+ }
+}
diff --git a/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseIterable.java b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseIterable.java
new file mode 100644
index 00000000000..c927571980a
--- /dev/null
+++ b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseIterable.java
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.paginator.internal;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+
+import java.util.Iterator;
+
+/**
+ * An iterable which can be used to iterate over responses returned from calling a list operation. Since
+ * this deals in responses, the returned response objects will contain a collection of results. This iterable
+ * will handle calling the service to retrieve more results when required.
+ *
+ * @param the type of a builder which can produce requests for a list operation
+ * @param the type of a request to a list operation. This type must match the type produced
+ * by REQUESTBUILDER
+ * @param the type of the response from a list operation
+ */
+public class ResponseIterable implements Iterable {
+ private final Supplier requestBuilderSupplier;
+ private final Function nextPageTokenRetrievalFunction;
+ private final Function pageRetrievalFunction;
+ private final Function, REQUEST> requestBuilderFunction;
+
+ /**
+ * Creates a new iterable.
+ *
+ * @param requestBuilderSupplier a supplier which can called to produce a builder object for requests
+ * @param nextPageTokenRetrievalFunction a function which can extract the next page token from a
+ * response produced by a list operation
+ * @param requestBuilderFunction a function which can build a request for a list operation based on
+ * a builder object and a pagination token to use
+ * @param pageRetrievalFunction a function which will call a list operation with a request and return
+ * the response of the call
+ */
+ public ResponseIterable(
+ final Supplier requestBuilderSupplier,
+ final Function nextPageTokenRetrievalFunction,
+ final Function, REQUEST> requestBuilderFunction,
+ final Function pageRetrievalFunction) {
+
+ this.requestBuilderSupplier = requestBuilderSupplier;
+ this.nextPageTokenRetrievalFunction = nextPageTokenRetrievalFunction;
+ this.requestBuilderFunction = requestBuilderFunction;
+ this.pageRetrievalFunction = pageRetrievalFunction;
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new ResponseIterator(
+ requestBuilderSupplier.get(),
+ nextPageTokenRetrievalFunction,
+ requestBuilderFunction,
+ pageRetrievalFunction);
+ }
+}
diff --git a/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseIterator.java b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseIterator.java
new file mode 100644
index 00000000000..5a4c2c32d99
--- /dev/null
+++ b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseIterator.java
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.paginator.internal;
+
+import com.google.common.base.Function;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+/**
+ * An iterator for iterating over response objects returned from a list operation. Each time we advance
+ * the iterator (via its {@link #next()} method) we will call the list operation of the service for the
+ * next response.
+ *
+ * This iterator does not support removal of elements.
+ *
+ * @param the type of a builder which can produce requests for a list operation
+ * @param the type of a request to a list operation. This type must match the type produced
+ * by REQUESTBUILDER
+ * @param the type of the response from a list operation
+ */
+public class ResponseIterator
+ extends AbstractResponseIterator
+ implements Iterator {
+
+ private boolean anyFetchPerformed;
+
+ /**
+ * Constructs a new ResponseIterator.
+ *
+ * @param requestBuilder a builder object which can create requests for a list operation
+ * @param nextPageTokenRetrievalFunction a function which can extract the next page token from a
+ * response produced by a list operation
+ * @param requestBuilderFunction a function which can build a request for a list operation based on
+ * a builder object and a pagination token to use
+ * @param pageRetrievalFunction a function which will call a list operation with a request and return
+ * the response of the call
+ */
+ public ResponseIterator(
+ final REQUESTBUILDER requestBuilder,
+ final Function nextPageTokenRetrievalFunction,
+ final Function, REQUEST> requestBuilderFunction,
+ final Function pageRetrievalFunction) {
+
+ super(
+ requestBuilder,
+ nextPageTokenRetrievalFunction,
+ requestBuilderFunction,
+ pageRetrievalFunction);
+ }
+
+ @Override
+ public RESPONSE next() {
+ if (currentResponse != null && nextPageToken == null) {
+ throw new NoSuchElementException(
+ "There are no more elements available to this iterator");
+ }
+
+ fetchNextPage();
+ return currentResponse;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return currentResponse == null || nextPageToken != null;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("Removal is not supported");
+ }
+}
diff --git a/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseRecordIterable.java b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseRecordIterable.java
new file mode 100644
index 00000000000..68d0de3c152
--- /dev/null
+++ b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseRecordIterable.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.paginator.internal;
+
+import com.google.common.base.Function;
+import com.google.common.base.Supplier;
+
+import java.util.List;
+import java.util.Iterator;
+
+/**
+ * An iterable which can be used to iterate over the models/resources returned by a list operation. These
+ * are the items which are contained with the response received from a list operation (e.g. by calling
+ * getItems() method on the response object). This iterable
+ * will handle calling the service to retrieve more results when required.
+ *
+ * @param the type of a builder which can produce requests for a list operation
+ * @param the type of a request to a list operation. This type must match the type produced
+ * by REQUESTBUILDER
+ * @param the type of the response from a list operation
+ * @param the type of the model/resource returned inside the response
+ */
+public class ResponseRecordIterable
+ implements Iterable {
+
+ private final Supplier requestBuilderSupplier;
+ private final Function nextPageTokenRetrievalFunction;
+ private final Function pageRetrievalFunction;
+ private final Function, REQUEST> requestBuilderFunction;
+ private final Function> retrieveItemsFromResponseFunction;
+
+ /**
+ * Creates a new iterable.
+ *
+ * @param requestBuilderSupplier a supplier which can called to produce a builder object for requests
+ * @param nextPageTokenRetrievalFunction a function which can extract the next page token from a
+ * response produced by a list operation
+ * @param requestBuilderFunction a function which can build a request for a list operation based on
+ * a builder object and a pagination token to use
+ * @param pageRetrievalFunction a function which will call a list operation with a request and return
+ * the response of the call
+ */
+ public ResponseRecordIterable(
+ final Supplier requestBuilderSupplier,
+ final Function nextPageTokenRetrievalFunction,
+ final Function, REQUEST> requestBuilderFunction,
+ final Function pageRetrievalFunction,
+ final Function> retrieveItemsFromResponseFunction) {
+
+ this.requestBuilderSupplier = requestBuilderSupplier;
+ this.nextPageTokenRetrievalFunction = nextPageTokenRetrievalFunction;
+ this.requestBuilderFunction = requestBuilderFunction;
+ this.pageRetrievalFunction = pageRetrievalFunction;
+ this.retrieveItemsFromResponseFunction = retrieveItemsFromResponseFunction;
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new ResponseRecordIterator(
+ requestBuilderSupplier.get(),
+ nextPageTokenRetrievalFunction,
+ requestBuilderFunction,
+ pageRetrievalFunction,
+ retrieveItemsFromResponseFunction);
+ }
+}
diff --git a/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseRecordIterator.java b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseRecordIterator.java
new file mode 100644
index 00000000000..67346928f3a
--- /dev/null
+++ b/bmc-common/src/main/java/com/oracle/bmc/paginator/internal/ResponseRecordIterator.java
@@ -0,0 +1,130 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.paginator.internal;
+
+import com.google.common.base.Function;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * An iterator for iterating over response objects returned from a list operation. This iterator handles
+ * calling the service for additional data when needed. However, not every advancement of the iterator
+ * (via its {@link #next()} method) will result in a method call. Instead, the logic of this iterator
+ * can be described as:
+ *
+ *
+ * - Fetch a page of results from the service
+ * - {@link #next()} will vend individual model/resource objects from that page until there are no more to vend
+ * - Call the service for the next page of results
+ * - Repeat steps 2 and 3 until there are no more results
+ *
+ *
+ * This iterator does not support removal of elements.
+ *
+ * @param the type of a builder which can produce requests for a list operation
+ * @param the type of a request to a list operation. This type must match the type produced
+ * by REQUESTBUILDER
+ * @param the type of the response from a list operation
+ * @param the type of the model/resource returned inside the response
+ */
+public class ResponseRecordIterator
+ extends AbstractResponseIterator
+ implements Iterator {
+
+ private final Function> retrieveItemsFromResponseFunction;
+
+ private List currentItems;
+ private Iterator currentIterator;
+
+ /** Constructs a new ResponseRecordIterator.
+ *
+ * @param requestBuilder a builder object which can create requests for a list operation
+ * @param nextPageTokenRetrievalFunction a function which can extract the next page token from a
+ * response produced by a list operation
+ * @param requestBuilderFunction a function which can build a request for a list operation based on
+ * a builder object and a pagination token to use
+ * @param pageRetrievalFunction a function which will call a list operation with a request and return
+ * the response of the call
+ * @param retrieveItemsFromResponseFunction a function which can extract the collection of results
+ * from a response produced by a list operation
+ */
+ public ResponseRecordIterator(
+ final REQUESTBUILDER requestBuilder,
+ final Function nextPageTokenRetrievalFunction,
+ final Function, REQUEST> requestBuilderFunction,
+ final Function pageRetrievalFunction,
+ final Function> retrieveItemsFromResponseFunction) {
+
+ super(
+ requestBuilder,
+ nextPageTokenRetrievalFunction,
+ requestBuilderFunction,
+ pageRetrievalFunction);
+ this.retrieveItemsFromResponseFunction = retrieveItemsFromResponseFunction;
+ }
+
+ @Override
+ public ITEMTYPE next() {
+ if (currentResponse == null) {
+ getFirstPage();
+ }
+
+ if (currentIterator.hasNext()) {
+ return currentIterator.next();
+ } else {
+ // If the current iterator doesn't have any items, then hasNext will advance us to the next
+ // page of results (if there are any)
+ if (hasNext()) {
+ return currentIterator.next();
+ } else {
+ throw new NoSuchElementException(
+ "There are no more elements available to this iterator");
+ }
+ }
+ }
+
+ @Override
+ public boolean hasNext() {
+ if (currentResponse == null) {
+ getFirstPage();
+ }
+
+ /*
+ * We have more results if:
+ * - The current iterator can still vend results
+ * - The current iterator cannot vend more results, but there are more results on the next page
+ *
+ * If there is no next page token at this stage, then there are no more results
+ */
+ if (currentIterator.hasNext()) {
+ return true;
+ } else if (nextPageToken == null) {
+ return false;
+ } else {
+ fetchNextPage();
+ currentItems = retrieveItemsFromResponseFunction.apply(currentResponse);
+ currentIterator = currentItems.iterator();
+
+ return currentIterator.hasNext();
+ }
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException("Removal is not supported");
+ }
+
+ private void getFirstPage() {
+ final RequestBuilderAndToken requestBuilderAndToken =
+ new RequestBuilderAndToken(requestBuilder, null);
+
+ currentResponse =
+ pageRetrievalFunction.apply(requestBuilderFunction.apply(requestBuilderAndToken));
+ nextPageToken = nextPageTokenRetrievalFunction.apply(currentResponse);
+ currentItems = retrieveItemsFromResponseFunction.apply(currentResponse);
+ currentIterator = currentItems.iterator();
+ }
+}
diff --git a/bmc-core/pom.xml b/bmc-core/pom.xml
index cc1691b9aa6..460c2475ec7 100644
--- a/bmc-core/pom.xml
+++ b/bmc-core/pom.xml
@@ -5,7 +5,7 @@
com.oracle.oci.sdk
oci-java-sdk
- 1.2.27
+ 1.2.28
../pom.xml
@@ -18,7 +18,7 @@
com.oracle.oci.sdk
oci-java-sdk-common
- 1.2.27
+ 1.2.28
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/Blockstorage.java b/bmc-core/src/main/java/com/oracle/bmc/core/Blockstorage.java
index a8f0bcbb5f4..78639773c66 100644
--- a/bmc-core/src/main/java/com/oracle/bmc/core/Blockstorage.java
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/Blockstorage.java
@@ -248,4 +248,13 @@ ListVolumeBackupPoliciesResponse listVolumeBackupPolicies(
* @return The service waiters.
*/
BlockstorageWaiters getWaiters();
+
+ /**
+ * Gets the pre-configured paginators available for list operations in this service which may return multiple
+ * pages of data. These paginators provide an {@link java.lang.Iterable} interface so that service responses, or
+ * resources/records, can be iterated through without having to manually deal with pagination and page tokens.
+ *
+ * @return The service paginators.
+ */
+ BlockstoragePaginators getPaginators();
}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/BlockstorageClient.java b/bmc-core/src/main/java/com/oracle/bmc/core/BlockstorageClient.java
index 62efeba085f..d620d72a275 100644
--- a/bmc-core/src/main/java/com/oracle/bmc/core/BlockstorageClient.java
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/BlockstorageClient.java
@@ -16,10 +16,11 @@ public class BlockstorageClient implements Blockstorage {
*/
public static final com.oracle.bmc.Service SERVICE =
com.oracle.bmc.Services.create("BLOCKSTORAGE", "iaas");
+ // attempt twice if it's instance principals, immediately failures will try to refresh the token
+ private static final int MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS = 2;
- private final java.util.concurrent.ExecutorService executorService =
- java.util.concurrent.Executors.newFixedThreadPool(50);
private final BlockstorageWaiters waiters;
+ private final BlockstoragePaginators paginators;
@lombok.Getter(value = lombok.AccessLevel.PACKAGE)
private final com.oracle.bmc.http.internal.RestClient client;
@@ -106,6 +107,8 @@ public BlockstorageClient(
this.waiters = new BlockstorageWaiters(executorService, this);
+ this.paginators = new BlockstoragePaginators(this);
+
if (this.authenticationDetailsProvider instanceof com.oracle.bmc.auth.RegionProvider) {
com.oracle.bmc.auth.RegionProvider provider =
(com.oracle.bmc.auth.RegionProvider) this.authenticationDetailsProvider;
@@ -160,28 +163,20 @@ public CreateVolumeResponse createVolume(CreateVolumeRequest request) {
com.google.common.base.Function
transformer = CreateVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateVolumeDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateVolumeDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateVolumeDetails(), request);
- return transformer.apply(response);
}
}
@@ -194,28 +189,20 @@ public CreateVolumeBackupResponse createVolumeBackup(CreateVolumeBackupRequest r
com.google.common.base.Function
transformer = CreateVolumeBackupConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateVolumeBackupDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateVolumeBackupDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateVolumeBackupDetails(), request);
- return transformer.apply(response);
}
}
@@ -230,8 +217,8 @@ public CreateVolumeBackupPolicyAssignmentResponse createVolumeBackupPolicyAssign
javax.ws.rs.core.Response, CreateVolumeBackupPolicyAssignmentResponse>
transformer = CreateVolumeBackupPolicyAssignmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(
@@ -240,25 +227,13 @@ public CreateVolumeBackupPolicyAssignmentResponse createVolumeBackupPolicyAssign
request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(
- ib,
- request.getCreateVolumeBackupPolicyAssignmentDetails(),
- request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(
- ib, request.getCreateVolumeBackupPolicyAssignmentDetails(), request);
- return transformer.apply(response);
}
}
@@ -271,25 +246,19 @@ public DeleteBootVolumeResponse deleteBootVolume(DeleteBootVolumeRequest request
com.google.common.base.Function
transformer = DeleteBootVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -302,25 +271,19 @@ public DeleteVolumeResponse deleteVolume(DeleteVolumeRequest request) {
com.google.common.base.Function
transformer = DeleteVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -333,25 +296,19 @@ public DeleteVolumeBackupResponse deleteVolumeBackup(DeleteVolumeBackupRequest r
com.google.common.base.Function
transformer = DeleteVolumeBackupConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -366,25 +323,19 @@ public DeleteVolumeBackupPolicyAssignmentResponse deleteVolumeBackupPolicyAssign
javax.ws.rs.core.Response, DeleteVolumeBackupPolicyAssignmentResponse>
transformer = DeleteVolumeBackupPolicyAssignmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -397,25 +348,19 @@ public GetBootVolumeResponse getBootVolume(GetBootVolumeRequest request) {
com.google.common.base.Function
transformer = GetBootVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -428,25 +373,19 @@ public GetVolumeResponse getVolume(GetVolumeRequest request) {
com.google.common.base.Function transformer =
GetVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -459,25 +398,19 @@ public GetVolumeBackupResponse getVolumeBackup(GetVolumeBackupRequest request) {
com.google.common.base.Function
transformer = GetVolumeBackupConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -491,25 +424,19 @@ public GetVolumeBackupPolicyResponse getVolumeBackupPolicy(
com.google.common.base.Function
transformer = GetVolumeBackupPolicyConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -524,25 +451,19 @@ public GetVolumeBackupPolicyAssetAssignmentResponse getVolumeBackupPolicyAssetAs
javax.ws.rs.core.Response, GetVolumeBackupPolicyAssetAssignmentResponse>
transformer = GetVolumeBackupPolicyAssetAssignmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -557,25 +478,19 @@ public GetVolumeBackupPolicyAssignmentResponse getVolumeBackupPolicyAssignment(
javax.ws.rs.core.Response, GetVolumeBackupPolicyAssignmentResponse>
transformer = GetVolumeBackupPolicyAssignmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -588,25 +503,19 @@ public ListBootVolumesResponse listBootVolumes(ListBootVolumesRequest request) {
com.google.common.base.Function
transformer = ListBootVolumesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -620,25 +529,19 @@ public ListVolumeBackupPoliciesResponse listVolumeBackupPolicies(
com.google.common.base.Function
transformer = ListVolumeBackupPoliciesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -651,25 +554,19 @@ public ListVolumeBackupsResponse listVolumeBackups(ListVolumeBackupsRequest requ
com.google.common.base.Function
transformer = ListVolumeBackupsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -682,25 +579,19 @@ public ListVolumesResponse listVolumes(ListVolumesRequest request) {
com.google.common.base.Function
transformer = ListVolumesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -713,28 +604,20 @@ public UpdateBootVolumeResponse updateBootVolume(UpdateBootVolumeRequest request
com.google.common.base.Function
transformer = UpdateBootVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateBootVolumeDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateBootVolumeDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateBootVolumeDetails(), request);
- return transformer.apply(response);
}
}
@@ -747,28 +630,20 @@ public UpdateVolumeResponse updateVolume(UpdateVolumeRequest request) {
com.google.common.base.Function
transformer = UpdateVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateVolumeDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateVolumeDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateVolumeDetails(), request);
- return transformer.apply(response);
}
}
@@ -781,33 +656,43 @@ public UpdateVolumeBackupResponse updateVolumeBackup(UpdateVolumeBackupRequest r
com.google.common.base.Function
transformer = UpdateVolumeBackupConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateVolumeBackupDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateVolumeBackupDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateVolumeBackupDetails(), request);
- return transformer.apply(response);
}
}
+ private boolean canRetryRequestIfInstancePrincipalsUsed(com.oracle.bmc.model.BmcException e) {
+ if (e.getStatusCode() == 401
+ && this.authenticationDetailsProvider
+ instanceof
+ com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
+ this.authenticationDetailsProvider)
+ .refreshSecurityToken();
+ return true;
+ }
+ return false;
+ }
+
@Override
public BlockstorageWaiters getWaiters() {
return waiters;
}
+
+ @Override
+ public BlockstoragePaginators getPaginators() {
+ return paginators;
+ }
}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/BlockstoragePaginators.java b/bmc-core/src/main/java/com/oracle/bmc/core/BlockstoragePaginators.java
new file mode 100644
index 00000000000..c1dd51dec75
--- /dev/null
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/BlockstoragePaginators.java
@@ -0,0 +1,606 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.core;
+
+import com.oracle.bmc.core.requests.*;
+import com.oracle.bmc.core.responses.*;
+
+/**
+ * Collection of helper methods that can be used to provide an {@link java.lang.Iterable} interface
+ * to any list operations of Blockstorage where multiple pages of data may be fetched.
+ * Two styles of iteration are supported:
+ *
+ *
+ * - Iterating over the Response objects returned by the list operation. These are referred to as ResponseIterators, and the methods are suffixed with ResponseIterator. For example: listUsersResponseIterator
+ * - Iterating over the resources/records being listed. These are referred to as RecordIterators, and the methods are suffixed with RecordIterator. For example: listUsersRecordIterator
+ *
+ *
+ * These iterables abstract away the need to write code to manually handle pagination via looping and using the page tokens.
+ * They will automatically fetch more data from the service when required.
+ *
+ * As an example, if we were using the ListUsers operation in IdentityService, then the {@link java.lang.Interable} returned by calling a
+ * ResponseIterator method would iterate over the ListUsersResponse objects returned by each ListUsers call, whereas the {@link java.lang.Iterable}
+ * returned by calling a RecordIterator method would iterate over the User records and we don't have to deal with ListUsersResponse objects at all.
+ * In either case, pagination will be automatically handled so we can iterate until there are no more responses or no more resources/records available.
+ */
+@javax.annotation.Generated(value = "OracleSDKGenerator", comments = "API Version: 20160918")
+@lombok.RequiredArgsConstructor
+public class BlockstoragePaginators {
+ private final Blockstorage client;
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the getVolumeBackupPolicyAssetAssignment operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable
+ getVolumeBackupPolicyAssetAssignmentResponseIterator(
+ final GetVolumeBackupPolicyAssetAssignmentRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder,
+ GetVolumeBackupPolicyAssetAssignmentRequest,
+ GetVolumeBackupPolicyAssetAssignmentResponse>(
+ new com.google.common.base.Supplier<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder>() {
+ @Override
+ public GetVolumeBackupPolicyAssetAssignmentRequest.Builder get() {
+ return GetVolumeBackupPolicyAssetAssignmentRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function<
+ GetVolumeBackupPolicyAssetAssignmentResponse, String>() {
+ @Override
+ public String apply(GetVolumeBackupPolicyAssetAssignmentResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder>,
+ GetVolumeBackupPolicyAssetAssignmentRequest>() {
+ @Override
+ public GetVolumeBackupPolicyAssetAssignmentRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ GetVolumeBackupPolicyAssetAssignmentRequest,
+ GetVolumeBackupPolicyAssetAssignmentResponse>() {
+ @Override
+ public GetVolumeBackupPolicyAssetAssignmentResponse apply(
+ GetVolumeBackupPolicyAssetAssignmentRequest request) {
+ return client.getVolumeBackupPolicyAssetAssignment(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.VolumeBackupPolicyAssignment} objects
+ * contained in responses from the getVolumeBackupPolicyAssetAssignment operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.VolumeBackupPolicyAssignment} objects
+ * contained in responses received from the service.
+ */
+ public Iterable
+ getVolumeBackupPolicyAssetAssignmentRecordIterator(
+ final GetVolumeBackupPolicyAssetAssignmentRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder,
+ GetVolumeBackupPolicyAssetAssignmentRequest,
+ GetVolumeBackupPolicyAssetAssignmentResponse,
+ com.oracle.bmc.core.model.VolumeBackupPolicyAssignment>(
+ new com.google.common.base.Supplier<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder>() {
+ @Override
+ public GetVolumeBackupPolicyAssetAssignmentRequest.Builder get() {
+ return GetVolumeBackupPolicyAssetAssignmentRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function<
+ GetVolumeBackupPolicyAssetAssignmentResponse, String>() {
+ @Override
+ public String apply(GetVolumeBackupPolicyAssetAssignmentResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder>,
+ GetVolumeBackupPolicyAssetAssignmentRequest>() {
+ @Override
+ public GetVolumeBackupPolicyAssetAssignmentRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ GetVolumeBackupPolicyAssetAssignmentRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ GetVolumeBackupPolicyAssetAssignmentRequest,
+ GetVolumeBackupPolicyAssetAssignmentResponse>() {
+ @Override
+ public GetVolumeBackupPolicyAssetAssignmentResponse apply(
+ GetVolumeBackupPolicyAssetAssignmentRequest request) {
+ return client.getVolumeBackupPolicyAssetAssignment(request);
+ }
+ },
+ new com.google.common.base.Function<
+ GetVolumeBackupPolicyAssetAssignmentResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List
+ apply(GetVolumeBackupPolicyAssetAssignmentResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listBootVolumes operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listBootVolumesResponseIterator(
+ final ListBootVolumesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListBootVolumesRequest.Builder, ListBootVolumesRequest, ListBootVolumesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListBootVolumesRequest.Builder get() {
+ return ListBootVolumesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListBootVolumesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumesRequest.Builder>,
+ ListBootVolumesRequest>() {
+ @Override
+ public ListBootVolumesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListBootVolumesRequest, ListBootVolumesResponse>() {
+ @Override
+ public ListBootVolumesResponse apply(ListBootVolumesRequest request) {
+ return client.listBootVolumes(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.BootVolume} objects
+ * contained in responses from the listBootVolumes operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.BootVolume} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listBootVolumesRecordIterator(
+ final ListBootVolumesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListBootVolumesRequest.Builder, ListBootVolumesRequest, ListBootVolumesResponse,
+ com.oracle.bmc.core.model.BootVolume>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListBootVolumesRequest.Builder get() {
+ return ListBootVolumesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListBootVolumesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumesRequest.Builder>,
+ ListBootVolumesRequest>() {
+ @Override
+ public ListBootVolumesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListBootVolumesRequest, ListBootVolumesResponse>() {
+ @Override
+ public ListBootVolumesResponse apply(ListBootVolumesRequest request) {
+ return client.listBootVolumes(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListBootVolumesResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListBootVolumesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listVolumeBackupPolicies operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listVolumeBackupPoliciesResponseIterator(
+ final ListVolumeBackupPoliciesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListVolumeBackupPoliciesRequest.Builder, ListVolumeBackupPoliciesRequest,
+ ListVolumeBackupPoliciesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumeBackupPoliciesRequest.Builder get() {
+ return ListVolumeBackupPoliciesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumeBackupPoliciesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupPoliciesRequest.Builder>,
+ ListVolumeBackupPoliciesRequest>() {
+ @Override
+ public ListVolumeBackupPoliciesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupPoliciesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeBackupPoliciesRequest, ListVolumeBackupPoliciesResponse>() {
+ @Override
+ public ListVolumeBackupPoliciesResponse apply(
+ ListVolumeBackupPoliciesRequest request) {
+ return client.listVolumeBackupPolicies(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.VolumeBackupPolicy} objects
+ * contained in responses from the listVolumeBackupPolicies operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.VolumeBackupPolicy} objects
+ * contained in responses received from the service.
+ */
+ public Iterable
+ listVolumeBackupPoliciesRecordIterator(final ListVolumeBackupPoliciesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListVolumeBackupPoliciesRequest.Builder, ListVolumeBackupPoliciesRequest,
+ ListVolumeBackupPoliciesResponse, com.oracle.bmc.core.model.VolumeBackupPolicy>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumeBackupPoliciesRequest.Builder get() {
+ return ListVolumeBackupPoliciesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumeBackupPoliciesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupPoliciesRequest.Builder>,
+ ListVolumeBackupPoliciesRequest>() {
+ @Override
+ public ListVolumeBackupPoliciesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupPoliciesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeBackupPoliciesRequest, ListVolumeBackupPoliciesResponse>() {
+ @Override
+ public ListVolumeBackupPoliciesResponse apply(
+ ListVolumeBackupPoliciesRequest request) {
+ return client.listVolumeBackupPolicies(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeBackupPoliciesResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListVolumeBackupPoliciesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listVolumeBackups operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listVolumeBackupsResponseIterator(
+ final ListVolumeBackupsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListVolumeBackupsRequest.Builder, ListVolumeBackupsRequest,
+ ListVolumeBackupsResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumeBackupsRequest.Builder get() {
+ return ListVolumeBackupsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumeBackupsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupsRequest.Builder>,
+ ListVolumeBackupsRequest>() {
+ @Override
+ public ListVolumeBackupsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeBackupsRequest, ListVolumeBackupsResponse>() {
+ @Override
+ public ListVolumeBackupsResponse apply(ListVolumeBackupsRequest request) {
+ return client.listVolumeBackups(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.VolumeBackup} objects
+ * contained in responses from the listVolumeBackups operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.VolumeBackup} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listVolumeBackupsRecordIterator(
+ final ListVolumeBackupsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListVolumeBackupsRequest.Builder, ListVolumeBackupsRequest,
+ ListVolumeBackupsResponse, com.oracle.bmc.core.model.VolumeBackup>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumeBackupsRequest.Builder get() {
+ return ListVolumeBackupsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumeBackupsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupsRequest.Builder>,
+ ListVolumeBackupsRequest>() {
+ @Override
+ public ListVolumeBackupsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeBackupsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeBackupsRequest, ListVolumeBackupsResponse>() {
+ @Override
+ public ListVolumeBackupsResponse apply(ListVolumeBackupsRequest request) {
+ return client.listVolumeBackups(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeBackupsResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListVolumeBackupsResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listVolumes operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listVolumesResponseIterator(
+ final ListVolumesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListVolumesRequest.Builder, ListVolumesRequest, ListVolumesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumesRequest.Builder get() {
+ return ListVolumesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumesRequest.Builder>,
+ ListVolumesRequest>() {
+ @Override
+ public ListVolumesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListVolumesResponse apply(ListVolumesRequest request) {
+ return client.listVolumes(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.Volume} objects
+ * contained in responses from the listVolumes operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.Volume} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listVolumesRecordIterator(
+ final ListVolumesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListVolumesRequest.Builder, ListVolumesRequest, ListVolumesResponse,
+ com.oracle.bmc.core.model.Volume>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumesRequest.Builder get() {
+ return ListVolumesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumesRequest.Builder>,
+ ListVolumesRequest>() {
+ @Override
+ public ListVolumesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListVolumesResponse apply(ListVolumesRequest request) {
+ return client.listVolumes(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumesResponse, java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListVolumesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/Compute.java b/bmc-core/src/main/java/com/oracle/bmc/core/Compute.java
index 60c33b861b8..507ec71971d 100644
--- a/bmc-core/src/main/java/com/oracle/bmc/core/Compute.java
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/Compute.java
@@ -504,4 +504,13 @@ ListInstanceConsoleConnectionsResponse listInstanceConsoleConnections(
* @return The service waiters.
*/
ComputeWaiters getWaiters();
+
+ /**
+ * Gets the pre-configured paginators available for list operations in this service which may return multiple
+ * pages of data. These paginators provide an {@link java.lang.Iterable} interface so that service responses, or
+ * resources/records, can be iterated through without having to manually deal with pagination and page tokens.
+ *
+ * @return The service paginators.
+ */
+ ComputePaginators getPaginators();
}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/ComputeClient.java b/bmc-core/src/main/java/com/oracle/bmc/core/ComputeClient.java
index 39a31a8a55e..aa30df0f4d4 100644
--- a/bmc-core/src/main/java/com/oracle/bmc/core/ComputeClient.java
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/ComputeClient.java
@@ -16,10 +16,11 @@ public class ComputeClient implements Compute {
*/
public static final com.oracle.bmc.Service SERVICE =
com.oracle.bmc.Services.create("COMPUTE", "iaas");
+ // attempt twice if it's instance principals, immediately failures will try to refresh the token
+ private static final int MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS = 2;
- private final java.util.concurrent.ExecutorService executorService =
- java.util.concurrent.Executors.newFixedThreadPool(50);
private final ComputeWaiters waiters;
+ private final ComputePaginators paginators;
@lombok.Getter(value = lombok.AccessLevel.PACKAGE)
private final com.oracle.bmc.http.internal.RestClient client;
@@ -106,6 +107,8 @@ public ComputeClient(
this.waiters = new ComputeWaiters(executorService, this);
+ this.paginators = new ComputePaginators(this);
+
if (this.authenticationDetailsProvider instanceof com.oracle.bmc.auth.RegionProvider) {
com.oracle.bmc.auth.RegionProvider provider =
(com.oracle.bmc.auth.RegionProvider) this.authenticationDetailsProvider;
@@ -160,28 +163,20 @@ public AttachBootVolumeResponse attachBootVolume(AttachBootVolumeRequest request
com.google.common.base.Function
transformer = AttachBootVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getAttachBootVolumeDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getAttachBootVolumeDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getAttachBootVolumeDetails(), request);
- return transformer.apply(response);
}
}
@@ -194,28 +189,20 @@ public AttachVnicResponse attachVnic(AttachVnicRequest request) {
com.google.common.base.Function transformer =
AttachVnicConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getAttachVnicDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getAttachVnicDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getAttachVnicDetails(), request);
- return transformer.apply(response);
}
}
@@ -228,28 +215,20 @@ public AttachVolumeResponse attachVolume(AttachVolumeRequest request) {
com.google.common.base.Function
transformer = AttachVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getAttachVolumeDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getAttachVolumeDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getAttachVolumeDetails(), request);
- return transformer.apply(response);
}
}
@@ -263,28 +242,20 @@ public CaptureConsoleHistoryResponse captureConsoleHistory(
com.google.common.base.Function
transformer = CaptureConsoleHistoryConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCaptureConsoleHistoryDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCaptureConsoleHistoryDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCaptureConsoleHistoryDetails(), request);
- return transformer.apply(response);
}
}
@@ -297,28 +268,20 @@ public CreateImageResponse createImage(CreateImageRequest request) {
com.google.common.base.Function
transformer = CreateImageConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateImageDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateImageDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateImageDetails(), request);
- return transformer.apply(response);
}
}
@@ -333,32 +296,21 @@ public CreateInstanceConsoleConnectionResponse createInstanceConsoleConnection(
javax.ws.rs.core.Response, CreateInstanceConsoleConnectionResponse>
transformer = CreateInstanceConsoleConnectionConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(
ib, request.getCreateInstanceConsoleConnectionDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(
- ib,
- request.getCreateInstanceConsoleConnectionDetails(),
- request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateInstanceConsoleConnectionDetails(), request);
- return transformer.apply(response);
}
}
@@ -371,25 +323,19 @@ public DeleteConsoleHistoryResponse deleteConsoleHistory(DeleteConsoleHistoryReq
com.google.common.base.Function
transformer = DeleteConsoleHistoryConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -402,25 +348,19 @@ public DeleteImageResponse deleteImage(DeleteImageRequest request) {
com.google.common.base.Function
transformer = DeleteImageConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -435,25 +375,19 @@ public DeleteInstanceConsoleConnectionResponse deleteInstanceConsoleConnection(
javax.ws.rs.core.Response, DeleteInstanceConsoleConnectionResponse>
transformer = DeleteInstanceConsoleConnectionConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -466,25 +400,19 @@ public DetachBootVolumeResponse detachBootVolume(DetachBootVolumeRequest request
com.google.common.base.Function
transformer = DetachBootVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -497,25 +425,19 @@ public DetachVnicResponse detachVnic(DetachVnicRequest request) {
com.google.common.base.Function transformer =
DetachVnicConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -528,25 +450,19 @@ public DetachVolumeResponse detachVolume(DetachVolumeRequest request) {
com.google.common.base.Function
transformer = DetachVolumeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -559,28 +475,20 @@ public ExportImageResponse exportImage(ExportImageRequest request) {
com.google.common.base.Function
transformer = ExportImageConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getExportImageDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getExportImageDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getExportImageDetails(), request);
- return transformer.apply(response);
}
}
@@ -594,25 +502,19 @@ public GetBootVolumeAttachmentResponse getBootVolumeAttachment(
com.google.common.base.Function
transformer = GetBootVolumeAttachmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -625,25 +527,19 @@ public GetConsoleHistoryResponse getConsoleHistory(GetConsoleHistoryRequest requ
com.google.common.base.Function
transformer = GetConsoleHistoryConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -657,25 +553,19 @@ public GetConsoleHistoryContentResponse getConsoleHistoryContent(
com.google.common.base.Function
transformer = GetConsoleHistoryContentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -688,25 +578,19 @@ public GetImageResponse getImage(GetImageRequest request) {
com.google.common.base.Function transformer =
GetImageConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -719,25 +603,19 @@ public GetInstanceResponse getInstance(GetInstanceRequest request) {
com.google.common.base.Function
transformer = GetInstanceConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -752,25 +630,19 @@ public GetInstanceConsoleConnectionResponse getInstanceConsoleConnection(
javax.ws.rs.core.Response, GetInstanceConsoleConnectionResponse>
transformer = GetInstanceConsoleConnectionConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -783,25 +655,19 @@ public GetVnicAttachmentResponse getVnicAttachment(GetVnicAttachmentRequest requ
com.google.common.base.Function
transformer = GetVnicAttachmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -814,25 +680,19 @@ public GetVolumeAttachmentResponse getVolumeAttachment(GetVolumeAttachmentReques
com.google.common.base.Function
transformer = GetVolumeAttachmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -847,25 +707,19 @@ public GetWindowsInstanceInitialCredentialsResponse getWindowsInstanceInitialCre
javax.ws.rs.core.Response, GetWindowsInstanceInitialCredentialsResponse>
transformer = GetWindowsInstanceInitialCredentialsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -878,25 +732,19 @@ public InstanceActionResponse instanceAction(InstanceActionRequest request) {
com.google.common.base.Function
transformer = InstanceActionConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.post(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.post(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.post(ib, request);
- return transformer.apply(response);
}
}
@@ -909,28 +757,20 @@ public LaunchInstanceResponse launchInstance(LaunchInstanceRequest request) {
com.google.common.base.Function
transformer = LaunchInstanceConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getLaunchInstanceDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getLaunchInstanceDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getLaunchInstanceDetails(), request);
- return transformer.apply(response);
}
}
@@ -945,25 +785,19 @@ public ListBootVolumeAttachmentsResponse listBootVolumeAttachments(
javax.ws.rs.core.Response, ListBootVolumeAttachmentsResponse>
transformer = ListBootVolumeAttachmentsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -976,25 +810,19 @@ public ListConsoleHistoriesResponse listConsoleHistories(ListConsoleHistoriesReq
com.google.common.base.Function
transformer = ListConsoleHistoriesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1007,25 +835,19 @@ public ListImagesResponse listImages(ListImagesRequest request) {
com.google.common.base.Function transformer =
ListImagesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1040,25 +862,19 @@ public ListInstanceConsoleConnectionsResponse listInstanceConsoleConnections(
javax.ws.rs.core.Response, ListInstanceConsoleConnectionsResponse>
transformer = ListInstanceConsoleConnectionsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1071,25 +887,19 @@ public ListInstancesResponse listInstances(ListInstancesRequest request) {
com.google.common.base.Function
transformer = ListInstancesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1102,25 +912,19 @@ public ListShapesResponse listShapes(ListShapesRequest request) {
com.google.common.base.Function transformer =
ListShapesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1133,25 +937,19 @@ public ListVnicAttachmentsResponse listVnicAttachments(ListVnicAttachmentsReques
com.google.common.base.Function
transformer = ListVnicAttachmentsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1165,25 +963,19 @@ public ListVolumeAttachmentsResponse listVolumeAttachments(
com.google.common.base.Function
transformer = ListVolumeAttachmentsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.get(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.get(ib, request);
- return transformer.apply(response);
}
}
@@ -1196,25 +988,19 @@ public TerminateInstanceResponse terminateInstance(TerminateInstanceRequest requ
com.google.common.base.Function
transformer = TerminateInstanceConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response = client.delete(ib, request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response = client.delete(ib, request);
- return transformer.apply(response);
}
}
@@ -1227,28 +1013,20 @@ public UpdateConsoleHistoryResponse updateConsoleHistory(UpdateConsoleHistoryReq
com.google.common.base.Function
transformer = UpdateConsoleHistoryConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateConsoleHistoryDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateConsoleHistoryDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateConsoleHistoryDetails(), request);
- return transformer.apply(response);
}
}
@@ -1261,28 +1039,20 @@ public UpdateImageResponse updateImage(UpdateImageRequest request) {
com.google.common.base.Function
transformer = UpdateImageConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateImageDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateImageDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateImageDetails(), request);
- return transformer.apply(response);
}
}
@@ -1295,33 +1065,43 @@ public UpdateInstanceResponse updateInstance(UpdateInstanceRequest request) {
com.google.common.base.Function
transformer = UpdateInstanceConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.put(ib, request.getUpdateInstanceDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateInstanceDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.put(ib, request.getUpdateInstanceDetails(), request);
- return transformer.apply(response);
}
}
+ private boolean canRetryRequestIfInstancePrincipalsUsed(com.oracle.bmc.model.BmcException e) {
+ if (e.getStatusCode() == 401
+ && this.authenticationDetailsProvider
+ instanceof
+ com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
+ this.authenticationDetailsProvider)
+ .refreshSecurityToken();
+ return true;
+ }
+ return false;
+ }
+
@Override
public ComputeWaiters getWaiters() {
return waiters;
}
+
+ @Override
+ public ComputePaginators getPaginators() {
+ return paginators;
+ }
}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/ComputePaginators.java b/bmc-core/src/main/java/com/oracle/bmc/core/ComputePaginators.java
new file mode 100644
index 00000000000..89fee6e0758
--- /dev/null
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/ComputePaginators.java
@@ -0,0 +1,940 @@
+/**
+ * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
+ */
+package com.oracle.bmc.core;
+
+import com.oracle.bmc.core.requests.*;
+import com.oracle.bmc.core.responses.*;
+
+/**
+ * Collection of helper methods that can be used to provide an {@link java.lang.Iterable} interface
+ * to any list operations of Compute where multiple pages of data may be fetched.
+ * Two styles of iteration are supported:
+ *
+ *
+ * - Iterating over the Response objects returned by the list operation. These are referred to as ResponseIterators, and the methods are suffixed with ResponseIterator. For example: listUsersResponseIterator
+ * - Iterating over the resources/records being listed. These are referred to as RecordIterators, and the methods are suffixed with RecordIterator. For example: listUsersRecordIterator
+ *
+ *
+ * These iterables abstract away the need to write code to manually handle pagination via looping and using the page tokens.
+ * They will automatically fetch more data from the service when required.
+ *
+ * As an example, if we were using the ListUsers operation in IdentityService, then the {@link java.lang.Interable} returned by calling a
+ * ResponseIterator method would iterate over the ListUsersResponse objects returned by each ListUsers call, whereas the {@link java.lang.Iterable}
+ * returned by calling a RecordIterator method would iterate over the User records and we don't have to deal with ListUsersResponse objects at all.
+ * In either case, pagination will be automatically handled so we can iterate until there are no more responses or no more resources/records available.
+ */
+@javax.annotation.Generated(value = "OracleSDKGenerator", comments = "API Version: 20160918")
+@lombok.RequiredArgsConstructor
+public class ComputePaginators {
+ private final Compute client;
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listBootVolumeAttachments operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listBootVolumeAttachmentsResponseIterator(
+ final ListBootVolumeAttachmentsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListBootVolumeAttachmentsRequest.Builder, ListBootVolumeAttachmentsRequest,
+ ListBootVolumeAttachmentsResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListBootVolumeAttachmentsRequest.Builder get() {
+ return ListBootVolumeAttachmentsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListBootVolumeAttachmentsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumeAttachmentsRequest.Builder>,
+ ListBootVolumeAttachmentsRequest>() {
+ @Override
+ public ListBootVolumeAttachmentsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumeAttachmentsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListBootVolumeAttachmentsRequest, ListBootVolumeAttachmentsResponse>() {
+ @Override
+ public ListBootVolumeAttachmentsResponse apply(
+ ListBootVolumeAttachmentsRequest request) {
+ return client.listBootVolumeAttachments(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.BootVolumeAttachment} objects
+ * contained in responses from the listBootVolumeAttachments operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.BootVolumeAttachment} objects
+ * contained in responses received from the service.
+ */
+ public Iterable
+ listBootVolumeAttachmentsRecordIterator(
+ final ListBootVolumeAttachmentsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListBootVolumeAttachmentsRequest.Builder, ListBootVolumeAttachmentsRequest,
+ ListBootVolumeAttachmentsResponse, com.oracle.bmc.core.model.BootVolumeAttachment>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListBootVolumeAttachmentsRequest.Builder get() {
+ return ListBootVolumeAttachmentsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListBootVolumeAttachmentsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumeAttachmentsRequest.Builder>,
+ ListBootVolumeAttachmentsRequest>() {
+ @Override
+ public ListBootVolumeAttachmentsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListBootVolumeAttachmentsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListBootVolumeAttachmentsRequest, ListBootVolumeAttachmentsResponse>() {
+ @Override
+ public ListBootVolumeAttachmentsResponse apply(
+ ListBootVolumeAttachmentsRequest request) {
+ return client.listBootVolumeAttachments(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListBootVolumeAttachmentsResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListBootVolumeAttachmentsResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listConsoleHistories operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listConsoleHistoriesResponseIterator(
+ final ListConsoleHistoriesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListConsoleHistoriesRequest.Builder, ListConsoleHistoriesRequest,
+ ListConsoleHistoriesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListConsoleHistoriesRequest.Builder get() {
+ return ListConsoleHistoriesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListConsoleHistoriesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListConsoleHistoriesRequest.Builder>,
+ ListConsoleHistoriesRequest>() {
+ @Override
+ public ListConsoleHistoriesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListConsoleHistoriesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListConsoleHistoriesRequest, ListConsoleHistoriesResponse>() {
+ @Override
+ public ListConsoleHistoriesResponse apply(ListConsoleHistoriesRequest request) {
+ return client.listConsoleHistories(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.ConsoleHistory} objects
+ * contained in responses from the listConsoleHistories operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.ConsoleHistory} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listConsoleHistoriesRecordIterator(
+ final ListConsoleHistoriesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListConsoleHistoriesRequest.Builder, ListConsoleHistoriesRequest,
+ ListConsoleHistoriesResponse, com.oracle.bmc.core.model.ConsoleHistory>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListConsoleHistoriesRequest.Builder get() {
+ return ListConsoleHistoriesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListConsoleHistoriesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListConsoleHistoriesRequest.Builder>,
+ ListConsoleHistoriesRequest>() {
+ @Override
+ public ListConsoleHistoriesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListConsoleHistoriesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListConsoleHistoriesRequest, ListConsoleHistoriesResponse>() {
+ @Override
+ public ListConsoleHistoriesResponse apply(ListConsoleHistoriesRequest request) {
+ return client.listConsoleHistories(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListConsoleHistoriesResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListConsoleHistoriesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listImages operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listImagesResponseIterator(
+ final ListImagesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListImagesRequest.Builder, ListImagesRequest, ListImagesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListImagesRequest.Builder get() {
+ return ListImagesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListImagesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListImagesRequest.Builder>,
+ ListImagesRequest>() {
+ @Override
+ public ListImagesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListImagesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListImagesResponse apply(ListImagesRequest request) {
+ return client.listImages(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.Image} objects
+ * contained in responses from the listImages operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.Image} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listImagesRecordIterator(
+ final ListImagesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListImagesRequest.Builder, ListImagesRequest, ListImagesResponse,
+ com.oracle.bmc.core.model.Image>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListImagesRequest.Builder get() {
+ return ListImagesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListImagesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListImagesRequest.Builder>,
+ ListImagesRequest>() {
+ @Override
+ public ListImagesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListImagesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListImagesResponse apply(ListImagesRequest request) {
+ return client.listImages(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListImagesResponse, java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListImagesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listInstanceConsoleConnections operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable
+ listInstanceConsoleConnectionsResponseIterator(
+ final ListInstanceConsoleConnectionsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListInstanceConsoleConnectionsRequest.Builder,
+ ListInstanceConsoleConnectionsRequest, ListInstanceConsoleConnectionsResponse>(
+ new com.google.common.base.Supplier<
+ ListInstanceConsoleConnectionsRequest.Builder>() {
+ @Override
+ public ListInstanceConsoleConnectionsRequest.Builder get() {
+ return ListInstanceConsoleConnectionsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListInstanceConsoleConnectionsResponse, String>() {
+ @Override
+ public String apply(ListInstanceConsoleConnectionsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstanceConsoleConnectionsRequest.Builder>,
+ ListInstanceConsoleConnectionsRequest>() {
+ @Override
+ public ListInstanceConsoleConnectionsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstanceConsoleConnectionsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListInstanceConsoleConnectionsRequest,
+ ListInstanceConsoleConnectionsResponse>() {
+ @Override
+ public ListInstanceConsoleConnectionsResponse apply(
+ ListInstanceConsoleConnectionsRequest request) {
+ return client.listInstanceConsoleConnections(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.InstanceConsoleConnection} objects
+ * contained in responses from the listInstanceConsoleConnections operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.InstanceConsoleConnection} objects
+ * contained in responses received from the service.
+ */
+ public Iterable
+ listInstanceConsoleConnectionsRecordIterator(
+ final ListInstanceConsoleConnectionsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListInstanceConsoleConnectionsRequest.Builder,
+ ListInstanceConsoleConnectionsRequest, ListInstanceConsoleConnectionsResponse,
+ com.oracle.bmc.core.model.InstanceConsoleConnection>(
+ new com.google.common.base.Supplier<
+ ListInstanceConsoleConnectionsRequest.Builder>() {
+ @Override
+ public ListInstanceConsoleConnectionsRequest.Builder get() {
+ return ListInstanceConsoleConnectionsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListInstanceConsoleConnectionsResponse, String>() {
+ @Override
+ public String apply(ListInstanceConsoleConnectionsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstanceConsoleConnectionsRequest.Builder>,
+ ListInstanceConsoleConnectionsRequest>() {
+ @Override
+ public ListInstanceConsoleConnectionsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstanceConsoleConnectionsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListInstanceConsoleConnectionsRequest,
+ ListInstanceConsoleConnectionsResponse>() {
+ @Override
+ public ListInstanceConsoleConnectionsResponse apply(
+ ListInstanceConsoleConnectionsRequest request) {
+ return client.listInstanceConsoleConnections(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListInstanceConsoleConnectionsResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List
+ apply(ListInstanceConsoleConnectionsResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listInstances operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listInstancesResponseIterator(
+ final ListInstancesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListInstancesRequest.Builder, ListInstancesRequest, ListInstancesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListInstancesRequest.Builder get() {
+ return ListInstancesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListInstancesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstancesRequest.Builder>,
+ ListInstancesRequest>() {
+ @Override
+ public ListInstancesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstancesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListInstancesResponse apply(ListInstancesRequest request) {
+ return client.listInstances(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.Instance} objects
+ * contained in responses from the listInstances operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.Instance} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listInstancesRecordIterator(
+ final ListInstancesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListInstancesRequest.Builder, ListInstancesRequest, ListInstancesResponse,
+ com.oracle.bmc.core.model.Instance>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListInstancesRequest.Builder get() {
+ return ListInstancesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListInstancesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstancesRequest.Builder>,
+ ListInstancesRequest>() {
+ @Override
+ public ListInstancesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListInstancesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListInstancesResponse apply(ListInstancesRequest request) {
+ return client.listInstances(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListInstancesResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListInstancesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listShapes operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listShapesResponseIterator(
+ final ListShapesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListShapesRequest.Builder, ListShapesRequest, ListShapesResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListShapesRequest.Builder get() {
+ return ListShapesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListShapesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListShapesRequest.Builder>,
+ ListShapesRequest>() {
+ @Override
+ public ListShapesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListShapesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListShapesResponse apply(ListShapesRequest request) {
+ return client.listShapes(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.Shape} objects
+ * contained in responses from the listShapes operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.Shape} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listShapesRecordIterator(
+ final ListShapesRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListShapesRequest.Builder, ListShapesRequest, ListShapesResponse,
+ com.oracle.bmc.core.model.Shape>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListShapesRequest.Builder get() {
+ return ListShapesRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListShapesResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListShapesRequest.Builder>,
+ ListShapesRequest>() {
+ @Override
+ public ListShapesRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListShapesRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public ListShapesResponse apply(ListShapesRequest request) {
+ return client.listShapes(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListShapesResponse, java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListShapesResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listVnicAttachments operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listVnicAttachmentsResponseIterator(
+ final ListVnicAttachmentsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListVnicAttachmentsRequest.Builder, ListVnicAttachmentsRequest,
+ ListVnicAttachmentsResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVnicAttachmentsRequest.Builder get() {
+ return ListVnicAttachmentsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVnicAttachmentsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVnicAttachmentsRequest.Builder>,
+ ListVnicAttachmentsRequest>() {
+ @Override
+ public ListVnicAttachmentsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVnicAttachmentsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVnicAttachmentsRequest, ListVnicAttachmentsResponse>() {
+ @Override
+ public ListVnicAttachmentsResponse apply(ListVnicAttachmentsRequest request) {
+ return client.listVnicAttachments(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.VnicAttachment} objects
+ * contained in responses from the listVnicAttachments operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.VnicAttachment} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listVnicAttachmentsRecordIterator(
+ final ListVnicAttachmentsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListVnicAttachmentsRequest.Builder, ListVnicAttachmentsRequest,
+ ListVnicAttachmentsResponse, com.oracle.bmc.core.model.VnicAttachment>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVnicAttachmentsRequest.Builder get() {
+ return ListVnicAttachmentsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVnicAttachmentsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVnicAttachmentsRequest.Builder>,
+ ListVnicAttachmentsRequest>() {
+ @Override
+ public ListVnicAttachmentsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVnicAttachmentsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVnicAttachmentsRequest, ListVnicAttachmentsResponse>() {
+ @Override
+ public ListVnicAttachmentsResponse apply(ListVnicAttachmentsRequest request) {
+ return client.listVnicAttachments(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListVnicAttachmentsResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListVnicAttachmentsResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the responses received from the listVolumeAttachments operation. This iterable
+ * will fetch more data from the server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the responses received from the service.
+ */
+ public Iterable listVolumeAttachmentsResponseIterator(
+ final ListVolumeAttachmentsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseIterable<
+ ListVolumeAttachmentsRequest.Builder, ListVolumeAttachmentsRequest,
+ ListVolumeAttachmentsResponse>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumeAttachmentsRequest.Builder get() {
+ return ListVolumeAttachmentsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumeAttachmentsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeAttachmentsRequest.Builder>,
+ ListVolumeAttachmentsRequest>() {
+ @Override
+ public ListVolumeAttachmentsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeAttachmentsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeAttachmentsRequest, ListVolumeAttachmentsResponse>() {
+ @Override
+ public ListVolumeAttachmentsResponse apply(
+ ListVolumeAttachmentsRequest request) {
+ return client.listVolumeAttachments(request);
+ }
+ });
+ }
+
+ /**
+ * Creates a new iterable which will iterate over the {@link com.oracle.bmc.core.model.VolumeAttachment} objects
+ * contained in responses from the listVolumeAttachments operation. This iterable will fetch more data from the
+ * server as needed.
+ *
+ * @param request a request which can be sent to the service operation
+ * @return an {@link java.lang.Iterable} which can be used to iterate over the {@link com.oracle.bmc.core.model.VolumeAttachment} objects
+ * contained in responses received from the service.
+ */
+ public Iterable listVolumeAttachmentsRecordIterator(
+ final ListVolumeAttachmentsRequest request) {
+ return new com.oracle.bmc.paginator.internal.ResponseRecordIterable<
+ ListVolumeAttachmentsRequest.Builder, ListVolumeAttachmentsRequest,
+ ListVolumeAttachmentsResponse, com.oracle.bmc.core.model.VolumeAttachment>(
+ new com.google.common.base.Supplier() {
+ @Override
+ public ListVolumeAttachmentsRequest.Builder get() {
+ return ListVolumeAttachmentsRequest.builder().copy(request);
+ }
+ },
+ new com.google.common.base.Function() {
+ @Override
+ public String apply(ListVolumeAttachmentsResponse response) {
+ return response.getOpcNextPage();
+ }
+ },
+ new com.google.common.base.Function<
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeAttachmentsRequest.Builder>,
+ ListVolumeAttachmentsRequest>() {
+ @Override
+ public ListVolumeAttachmentsRequest apply(
+ com.oracle.bmc.paginator.internal.RequestBuilderAndToken<
+ ListVolumeAttachmentsRequest.Builder>
+ input) {
+ if (input.getToken() == null) {
+ return input.getRequestBuilder().build();
+ } else {
+ return input.getRequestBuilder()
+ .page(input.getToken().orNull())
+ .build();
+ }
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeAttachmentsRequest, ListVolumeAttachmentsResponse>() {
+ @Override
+ public ListVolumeAttachmentsResponse apply(
+ ListVolumeAttachmentsRequest request) {
+ return client.listVolumeAttachments(request);
+ }
+ },
+ new com.google.common.base.Function<
+ ListVolumeAttachmentsResponse,
+ java.util.List>() {
+ @Override
+ public java.util.List apply(
+ ListVolumeAttachmentsResponse response) {
+ return response.getItems();
+ }
+ });
+ }
+}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetwork.java b/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetwork.java
index 52a245e0437..e53f1b57aaf 100644
--- a/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetwork.java
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetwork.java
@@ -1418,4 +1418,13 @@ UpdateLocalPeeringGatewayResponse updateLocalPeeringGateway(
* @return The service waiters.
*/
VirtualNetworkWaiters getWaiters();
+
+ /**
+ * Gets the pre-configured paginators available for list operations in this service which may return multiple
+ * pages of data. These paginators provide an {@link java.lang.Iterable} interface so that service responses, or
+ * resources/records, can be iterated through without having to manually deal with pagination and page tokens.
+ *
+ * @return The service paginators.
+ */
+ VirtualNetworkPaginators getPaginators();
}
diff --git a/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetworkClient.java b/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetworkClient.java
index fa236a14356..c978b2e34fc 100644
--- a/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetworkClient.java
+++ b/bmc-core/src/main/java/com/oracle/bmc/core/VirtualNetworkClient.java
@@ -16,10 +16,11 @@ public class VirtualNetworkClient implements VirtualNetwork {
*/
public static final com.oracle.bmc.Service SERVICE =
com.oracle.bmc.Services.create("VIRTUALNETWORK", "iaas");
+ // attempt twice if it's instance principals, immediately failures will try to refresh the token
+ private static final int MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS = 2;
- private final java.util.concurrent.ExecutorService executorService =
- java.util.concurrent.Executors.newFixedThreadPool(50);
private final VirtualNetworkWaiters waiters;
+ private final VirtualNetworkPaginators paginators;
@lombok.Getter(value = lombok.AccessLevel.PACKAGE)
private final com.oracle.bmc.http.internal.RestClient client;
@@ -106,6 +107,8 @@ public VirtualNetworkClient(
this.waiters = new VirtualNetworkWaiters(executorService, this);
+ this.paginators = new VirtualNetworkPaginators(this);
+
if (this.authenticationDetailsProvider instanceof com.oracle.bmc.auth.RegionProvider) {
com.oracle.bmc.auth.RegionProvider provider =
(com.oracle.bmc.auth.RegionProvider) this.authenticationDetailsProvider;
@@ -162,8 +165,8 @@ public BulkAddVirtualCircuitPublicPrefixesResponse bulkAddVirtualCircuitPublicPr
javax.ws.rs.core.Response, BulkAddVirtualCircuitPublicPrefixesResponse>
transformer = BulkAddVirtualCircuitPublicPrefixesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(
@@ -172,25 +175,13 @@ public BulkAddVirtualCircuitPublicPrefixesResponse bulkAddVirtualCircuitPublicPr
request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(
- ib,
- request.getBulkAddVirtualCircuitPublicPrefixesDetails(),
- request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(
- ib, request.getBulkAddVirtualCircuitPublicPrefixesDetails(), request);
- return transformer.apply(response);
}
}
@@ -205,8 +196,8 @@ public BulkDeleteVirtualCircuitPublicPrefixesResponse bulkDeleteVirtualCircuitPu
javax.ws.rs.core.Response, BulkDeleteVirtualCircuitPublicPrefixesResponse>
transformer = BulkDeleteVirtualCircuitPublicPrefixesConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(
@@ -215,27 +206,13 @@ public BulkDeleteVirtualCircuitPublicPrefixesResponse bulkDeleteVirtualCircuitPu
request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(
- ib,
- request.getBulkDeleteVirtualCircuitPublicPrefixesDetails(),
- request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(
- ib,
- request.getBulkDeleteVirtualCircuitPublicPrefixesDetails(),
- request);
- return transformer.apply(response);
}
}
@@ -250,29 +227,20 @@ public ConnectLocalPeeringGatewaysResponse connectLocalPeeringGateways(
javax.ws.rs.core.Response, ConnectLocalPeeringGatewaysResponse>
transformer = ConnectLocalPeeringGatewaysConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getConnectLocalPeeringGatewaysDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(
- ib, request.getConnectLocalPeeringGatewaysDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getConnectLocalPeeringGatewaysDetails(), request);
- return transformer.apply(response);
}
}
@@ -285,28 +253,20 @@ public CreateCpeResponse createCpe(CreateCpeRequest request) {
com.google.common.base.Function transformer =
CreateCpeConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateCpeDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateCpeDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateCpeDetails(), request);
- return transformer.apply(response);
}
}
@@ -319,28 +279,20 @@ public CreateCrossConnectResponse createCrossConnect(CreateCrossConnectRequest r
com.google.common.base.Function
transformer = CreateCrossConnectConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateCrossConnectDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateCrossConnectDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateCrossConnectDetails(), request);
- return transformer.apply(response);
}
}
@@ -354,28 +306,20 @@ public CreateCrossConnectGroupResponse createCrossConnectGroup(
com.google.common.base.Function
transformer = CreateCrossConnectGroupConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateCrossConnectGroupDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateCrossConnectGroupDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateCrossConnectGroupDetails(), request);
- return transformer.apply(response);
}
}
@@ -388,28 +332,20 @@ public CreateDhcpOptionsResponse createDhcpOptions(CreateDhcpOptionsRequest requ
com.google.common.base.Function
transformer = CreateDhcpOptionsConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateDhcpDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateDhcpDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateDhcpDetails(), request);
- return transformer.apply(response);
}
}
@@ -422,28 +358,20 @@ public CreateDrgResponse createDrg(CreateDrgRequest request) {
com.google.common.base.Function transformer =
CreateDrgConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateDrgDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateDrgDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateDrgDetails(), request);
- return transformer.apply(response);
}
}
@@ -456,28 +384,20 @@ public CreateDrgAttachmentResponse createDrgAttachment(CreateDrgAttachmentReques
com.google.common.base.Function
transformer = CreateDrgAttachmentConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateDrgAttachmentDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateDrgAttachmentDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateDrgAttachmentDetails(), request);
- return transformer.apply(response);
}
}
@@ -491,28 +411,20 @@ public CreateIPSecConnectionResponse createIPSecConnection(
com.google.common.base.Function
transformer = CreateIPSecConnectionConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateIPSecConnectionDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateIPSecConnectionDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateIPSecConnectionDetails(), request);
- return transformer.apply(response);
}
}
@@ -526,28 +438,20 @@ public CreateInternetGatewayResponse createInternetGateway(
com.google.common.base.Function
transformer = CreateInternetGatewayConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateInternetGatewayDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateInternetGatewayDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateInternetGatewayDetails(), request);
- return transformer.apply(response);
}
}
@@ -562,28 +466,20 @@ public CreateLocalPeeringGatewayResponse createLocalPeeringGateway(
javax.ws.rs.core.Response, CreateLocalPeeringGatewayResponse>
transformer = CreateLocalPeeringGatewayConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateLocalPeeringGatewayDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateLocalPeeringGatewayDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateLocalPeeringGatewayDetails(), request);
- return transformer.apply(response);
}
}
@@ -596,28 +492,20 @@ public CreatePrivateIpResponse createPrivateIp(CreatePrivateIpRequest request) {
com.google.common.base.Function
transformer = CreatePrivateIpConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreatePrivateIpDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreatePrivateIpDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreatePrivateIpDetails(), request);
- return transformer.apply(response);
}
}
@@ -630,28 +518,20 @@ public CreatePublicIpResponse createPublicIp(CreatePublicIpRequest request) {
com.google.common.base.Function
transformer = CreatePublicIpConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreatePublicIpDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreatePublicIpDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreatePublicIpDetails(), request);
- return transformer.apply(response);
}
}
@@ -664,28 +544,20 @@ public CreateRouteTableResponse createRouteTable(CreateRouteTableRequest request
com.google.common.base.Function
transformer = CreateRouteTableConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateRouteTableDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateRouteTableDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateRouteTableDetails(), request);
- return transformer.apply(response);
}
}
@@ -698,28 +570,20 @@ public CreateSecurityListResponse createSecurityList(CreateSecurityListRequest r
com.google.common.base.Function
transformer = CreateSecurityListConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateSecurityListDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateSecurityListDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateSecurityListDetails(), request);
- return transformer.apply(response);
}
}
@@ -732,28 +596,20 @@ public CreateSubnetResponse createSubnet(CreateSubnetRequest request) {
com.google.common.base.Function
transformer = CreateSubnetConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateSubnetDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateSubnetDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateSubnetDetails(), request);
- return transformer.apply(response);
}
}
@@ -766,28 +622,20 @@ public CreateVcnResponse createVcn(CreateVcnRequest request) {
com.google.common.base.Function transformer =
CreateVcnConverter.fromResponse();
- if (this.authenticationDetailsProvider
- instanceof com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider) {
+ int attempts = 0;
+ while (true) {
try {
javax.ws.rs.core.Response response =
client.post(ib, request.getCreateVcnDetails(), request);
return transformer.apply(response);
} catch (com.oracle.bmc.model.BmcException e) {
- if (e.getStatusCode() == 401) {
- ((com.oracle.bmc.auth.InstancePrincipalsAuthenticationDetailsProvider)
- this.authenticationDetailsProvider)
- .refreshSecurityToken();
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateVcnDetails(), request);
- return transformer.apply(response);
+ if (++attempts < MAX_IMMEDIATE_RETRIES_IF_USING_INSTANCE_PRINCIPALS
+ && canRetryRequestIfInstancePrincipalsUsed(e)) {
+ continue;
} else {
throw e;
}
}
- } else {
- javax.ws.rs.core.Response response =
- client.post(ib, request.getCreateVcnDetails(), request);
- return transformer.apply(response);
}
}
@@ -800,28 +648,20 @@ public CreateVirtualCircuitResponse createVirtualCircuit(CreateVirtualCircuitReq
com.google.common.base.Function