use of com.google.longrunning.OperationsClient in project java-automl by googleapis.
the class ListOperationStatusTest method setUp.
@Before
public void setUp() throws IOException, InterruptedException {
bout = new ByteArrayOutputStream();
out = new PrintStream(bout);
originalPrintStream = System.out;
System.setOut(out);
// if the LRO status count more than 300, delete half of operations.
try (AutoMlClient client = AutoMlClient.create()) {
OperationsClient operationsClient = client.getOperationsClient();
LocationName projectLocation = LocationName.of(PROJECT_ID, "us-central1");
ListOperationsRequest listRequest = ListOperationsRequest.newBuilder().setName(projectLocation.toString()).build();
List<String> operationFullPathsToBeDeleted = new ArrayList<>();
for (Operation operation : operationsClient.listOperations(listRequest).iterateAll()) {
// Filter: deleting already done operations.
if (operation.getDone() && !operation.hasError()) {
operationFullPathsToBeDeleted.add(operation.getName());
}
}
if (operationFullPathsToBeDeleted.size() > 300) {
System.out.println("Cleaning up...");
for (String operationFullPath : operationFullPathsToBeDeleted.subList(0, operationFullPathsToBeDeleted.size() / 2)) {
// retry_interval * (random value in range [1 - rand_factor, 1 + rand_factor])
ExponentialBackOff exponentialBackOff = new ExponentialBackOff.Builder().setInitialIntervalMillis(60000).setMaxElapsedTimeMillis(300000).setRandomizationFactor(0.5).setMultiplier(1.1).setMaxIntervalMillis(80000).build();
// delete unused operations.
try {
operationsClient.deleteOperation(operationFullPath);
} catch (ResourceExhaustedException ex) {
// exponential back off and retry.
long backOffInMillis = exponentialBackOff.nextBackOffMillis();
System.out.printf("Backing off for %d milliseconds " + "due to Resource exhaustion.\n", backOffInMillis);
if (backOffInMillis < 0) {
break;
}
System.out.println("Backing off" + backOffInMillis);
TimeUnit.MILLISECONDS.sleep(backOffInMillis);
} catch (Exception ex) {
throw ex;
}
}
} else {
// Clear the list since we wont anything with the list.
operationFullPathsToBeDeleted.clear();
}
}
}
Aggregations