Skip to content

Commit 50262b7

Browse files
feat(managedkafka): increase LRO timeout to 1 hour in client samples (#9684)
* fix: increase timeout duration in Java client * fix: only specify modified retry settings for LRO methods
1 parent 1c923a3 commit 50262b7

File tree

5 files changed

+229
-16
lines changed

5 files changed

+229
-16
lines changed

managedkafka/examples/pom.xml

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<dependency>
3030
<groupId>com.google.cloud</groupId>
3131
<artifactId>libraries-bom</artifactId>
32-
<version>26.40.0</version>
32+
<version>26.50.0</version>
3333
<type>pom</type>
3434
<scope>import</scope>
3535
</dependency>
@@ -40,13 +40,7 @@
4040
<dependency>
4141
<groupId>com.google.cloud</groupId>
4242
<artifactId>google-cloud-managedkafka</artifactId>
43-
<version>0.1.0</version>
4443
</dependency>
45-
<dependency>
46-
<groupId>com.google.api.grpc</groupId>
47-
<artifactId>proto-google-cloud-managedkafka-v1</artifactId>
48-
<version>0.1.0</version>
49-
</dependency>
5044
<dependency>
5145
<groupId>junit</groupId>
5246
<artifactId>junit</artifactId>

managedkafka/examples/src/main/java/examples/CreateCluster.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,25 @@
1717
package examples;
1818

1919
// [START managedkafka_create_cluster]
20+
2021
import com.google.api.gax.longrunning.OperationFuture;
22+
import com.google.api.gax.longrunning.OperationSnapshot;
23+
import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
24+
import com.google.api.gax.retrying.RetrySettings;
25+
import com.google.api.gax.retrying.RetryingFuture;
26+
import com.google.api.gax.retrying.TimedRetryAlgorithm;
2127
import com.google.cloud.managedkafka.v1.AccessConfig;
2228
import com.google.cloud.managedkafka.v1.CapacityConfig;
2329
import com.google.cloud.managedkafka.v1.Cluster;
2430
import com.google.cloud.managedkafka.v1.CreateClusterRequest;
2531
import com.google.cloud.managedkafka.v1.GcpConfig;
2632
import com.google.cloud.managedkafka.v1.LocationName;
2733
import com.google.cloud.managedkafka.v1.ManagedKafkaClient;
34+
import com.google.cloud.managedkafka.v1.ManagedKafkaSettings;
2835
import com.google.cloud.managedkafka.v1.NetworkConfig;
2936
import com.google.cloud.managedkafka.v1.OperationMetadata;
3037
import com.google.cloud.managedkafka.v1.RebalanceConfig;
38+
import java.time.Duration;
3139
import java.util.concurrent.ExecutionException;
3240

3341
public class CreateCluster {
@@ -64,17 +72,47 @@ public static void createCluster(
6472
.setRebalanceConfig(rebalanceConfig)
6573
.build();
6674

67-
try (ManagedKafkaClient managedKafkaClient = ManagedKafkaClient.create()) {
75+
// Create the settings to configure the timeout for polling operations
76+
ManagedKafkaSettings.Builder settingsBuilder = ManagedKafkaSettings.newBuilder();
77+
TimedRetryAlgorithm timedRetryAlgorithm = OperationTimedPollAlgorithm.create(
78+
RetrySettings.newBuilder()
79+
.setTotalTimeoutDuration(Duration.ofHours(1L))
80+
.build());
81+
settingsBuilder.createClusterOperationSettings()
82+
.setPollingAlgorithm(timedRetryAlgorithm);
83+
84+
try (ManagedKafkaClient managedKafkaClient = ManagedKafkaClient.create(
85+
settingsBuilder.build())) {
86+
6887
CreateClusterRequest request =
6988
CreateClusterRequest.newBuilder()
7089
.setParent(LocationName.of(projectId, region).toString())
7190
.setClusterId(clusterId)
7291
.setCluster(cluster)
7392
.build();
93+
7494
// The duration of this operation can vary considerably, typically taking between 10-40
7595
// minutes.
7696
OperationFuture<Cluster, OperationMetadata> future =
7797
managedKafkaClient.createClusterOperationCallable().futureCall(request);
98+
99+
// Get the initial LRO and print details.
100+
OperationSnapshot operation = future.getInitialFuture().get();
101+
System.out.printf("Cluster creation started. Operation name: %s\nDone: %s\nMetadata: %s\n",
102+
operation.getName(),
103+
operation.isDone(),
104+
future.getMetadata().get().toString());
105+
106+
while (!future.isDone()) {
107+
// The pollingFuture gives us the most recent status of the operation
108+
RetryingFuture<OperationSnapshot> pollingFuture = future.getPollingFuture();
109+
OperationSnapshot currentOp = pollingFuture.getAttemptResult().get();
110+
System.out.printf("Polling Operation:\nName: %s\n Done: %s\n",
111+
currentOp.getName(),
112+
currentOp.isDone());
113+
}
114+
115+
// NOTE: future.get() blocks completion until the operation is complete (isDone = True)
78116
Cluster response = future.get();
79117
System.out.printf("Created cluster: %s\n", response.getName());
80118
} catch (ExecutionException e) {

managedkafka/examples/src/main/java/examples/DeleteCluster.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,21 @@
1717
package examples;
1818

1919
// [START managedkafka_delete_cluster]
20+
2021
import com.google.api.gax.longrunning.OperationFuture;
22+
import com.google.api.gax.longrunning.OperationSnapshot;
23+
import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
24+
import com.google.api.gax.retrying.RetrySettings;
25+
import com.google.api.gax.retrying.TimedRetryAlgorithm;
2126
import com.google.api.gax.rpc.ApiException;
2227
import com.google.cloud.managedkafka.v1.ClusterName;
2328
import com.google.cloud.managedkafka.v1.DeleteClusterRequest;
2429
import com.google.cloud.managedkafka.v1.ManagedKafkaClient;
30+
import com.google.cloud.managedkafka.v1.ManagedKafkaSettings;
2531
import com.google.cloud.managedkafka.v1.OperationMetadata;
2632
import com.google.protobuf.Empty;
2733
import java.io.IOException;
34+
import java.time.Duration;
2835

2936
public class DeleteCluster {
3037

@@ -38,13 +45,32 @@ public static void main(String[] args) throws Exception {
3845

3946
public static void deleteCluster(String projectId, String region, String clusterId)
4047
throws Exception {
41-
try (ManagedKafkaClient managedKafkaClient = ManagedKafkaClient.create()) {
48+
49+
// Create the settings to configure the timeout for polling operations
50+
ManagedKafkaSettings.Builder settingsBuilder = ManagedKafkaSettings.newBuilder();
51+
TimedRetryAlgorithm timedRetryAlgorithm = OperationTimedPollAlgorithm.create(
52+
RetrySettings.newBuilder()
53+
.setTotalTimeoutDuration(Duration.ofHours(1L))
54+
.build());
55+
settingsBuilder.deleteClusterOperationSettings()
56+
.setPollingAlgorithm(timedRetryAlgorithm);
57+
58+
try (ManagedKafkaClient managedKafkaClient = ManagedKafkaClient.create(
59+
settingsBuilder.build())) {
4260
DeleteClusterRequest request =
4361
DeleteClusterRequest.newBuilder()
4462
.setName(ClusterName.of(projectId, region, clusterId).toString())
4563
.build();
4664
OperationFuture<Empty, OperationMetadata> future =
4765
managedKafkaClient.deleteClusterOperationCallable().futureCall(request);
66+
67+
// Get the initial LRO and print details. CreateCluster contains sample code for polling logs.
68+
OperationSnapshot operation = future.getInitialFuture().get();
69+
System.out.printf("Cluster deletion started. Operation name: %s\nDone: %s\nMetadata: %s\n",
70+
operation.getName(),
71+
operation.isDone(),
72+
future.getMetadata().get().toString());
73+
4874
future.get();
4975
System.out.println("Deleted cluster");
5076
} catch (IOException | ApiException e) {

managedkafka/examples/src/main/java/examples/UpdateCluster.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,21 @@
1717
package examples;
1818

1919
// [START managedkafka_update_cluster]
20+
2021
import com.google.api.gax.longrunning.OperationFuture;
22+
import com.google.api.gax.longrunning.OperationSnapshot;
23+
import com.google.api.gax.longrunning.OperationTimedPollAlgorithm;
24+
import com.google.api.gax.retrying.RetrySettings;
25+
import com.google.api.gax.retrying.TimedRetryAlgorithm;
2126
import com.google.cloud.managedkafka.v1.CapacityConfig;
2227
import com.google.cloud.managedkafka.v1.Cluster;
2328
import com.google.cloud.managedkafka.v1.ClusterName;
2429
import com.google.cloud.managedkafka.v1.ManagedKafkaClient;
30+
import com.google.cloud.managedkafka.v1.ManagedKafkaSettings;
2531
import com.google.cloud.managedkafka.v1.OperationMetadata;
2632
import com.google.cloud.managedkafka.v1.UpdateClusterRequest;
2733
import com.google.protobuf.FieldMask;
34+
import java.time.Duration;
2835
import java.util.concurrent.ExecutionException;
2936

3037
public class UpdateCluster {
@@ -48,11 +55,29 @@ public static void updateCluster(
4855
.build();
4956
FieldMask updateMask = FieldMask.newBuilder().addPaths("capacity_config.memory_bytes").build();
5057

51-
try (ManagedKafkaClient managedKafkaClient = ManagedKafkaClient.create()) {
58+
// Create the settings to configure the timeout for polling operations
59+
ManagedKafkaSettings.Builder settingsBuilder = ManagedKafkaSettings.newBuilder();
60+
TimedRetryAlgorithm timedRetryAlgorithm = OperationTimedPollAlgorithm.create(
61+
RetrySettings.newBuilder()
62+
.setTotalTimeoutDuration(Duration.ofHours(1L))
63+
.build());
64+
settingsBuilder.updateClusterOperationSettings()
65+
.setPollingAlgorithm(timedRetryAlgorithm);
66+
67+
try (ManagedKafkaClient managedKafkaClient = ManagedKafkaClient.create(
68+
settingsBuilder.build())) {
5269
UpdateClusterRequest request =
5370
UpdateClusterRequest.newBuilder().setUpdateMask(updateMask).setCluster(cluster).build();
5471
OperationFuture<Cluster, OperationMetadata> future =
5572
managedKafkaClient.updateClusterOperationCallable().futureCall(request);
73+
74+
// Get the initial LRO and print details. CreateCluster contains sample code for polling logs.
75+
OperationSnapshot operation = future.getInitialFuture().get();
76+
System.out.printf("Cluster update started. Operation name: %s\nDone: %s\nMetadata: %s\n",
77+
operation.getName(),
78+
operation.isDone(),
79+
future.getMetadata().get().toString());
80+
5681
Cluster response = future.get();
5782
System.out.printf("Updated cluster: %s\n", response.getName());
5883
} catch (ExecutionException e) {

0 commit comments

Comments
 (0)