Skip to content

Commit f74b73c

Browse files
feat: ComputeTimeCursor RPC for Pub/Sub Lite (#615)
PiperOrigin-RevId: 370536460 Source-Author: Google APIs <noreply@google.com> Source-Date: Mon Apr 26 14:02:22 2021 -0700 Source-Repo: googleapis/googleapis Source-Sha: ae5fb2884a296832c39867e8e8c81bbc72a32ce8 Source-Link: googleapis/googleapis@ae5fb28
1 parent f5e9cb9 commit f74b73c

File tree

24 files changed

+3973
-203
lines changed

24 files changed

+3973
-203
lines changed

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/v1/TopicStatsServiceClient.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.google.cloud.pubsublite.proto.ComputeHeadCursorResponse;
2424
import com.google.cloud.pubsublite.proto.ComputeMessageStatsRequest;
2525
import com.google.cloud.pubsublite.proto.ComputeMessageStatsResponse;
26+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorRequest;
27+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorResponse;
2628
import com.google.cloud.pubsublite.v1.stub.TopicStatsServiceStub;
2729
import com.google.cloud.pubsublite.v1.stub.TopicStatsServiceStubSettings;
2830
import java.io.IOException;
@@ -259,6 +261,57 @@ public final ComputeHeadCursorResponse computeHeadCursor(ComputeHeadCursorReques
259261
return stub.computeHeadCursorCallable();
260262
}
261263

264+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
265+
/**
266+
* Compute the corresponding cursor for a publish or event time in a topic partition.
267+
*
268+
* <p>Sample code:
269+
*
270+
* <pre>{@code
271+
* try (TopicStatsServiceClient topicStatsServiceClient = TopicStatsServiceClient.create()) {
272+
* ComputeTimeCursorRequest request =
273+
* ComputeTimeCursorRequest.newBuilder()
274+
* .setTopic(TopicName.of("[PROJECT]", "[LOCATION]", "[TOPIC]").toString())
275+
* .setPartition(-1799810326)
276+
* .setTarget(TimeTarget.newBuilder().build())
277+
* .build();
278+
* ComputeTimeCursorResponse response = topicStatsServiceClient.computeTimeCursor(request);
279+
* }
280+
* }</pre>
281+
*
282+
* @param request The request object containing all of the parameters for the API call.
283+
* @throws com.google.api.gax.rpc.ApiException if the remote call fails
284+
*/
285+
public final ComputeTimeCursorResponse computeTimeCursor(ComputeTimeCursorRequest request) {
286+
return computeTimeCursorCallable().call(request);
287+
}
288+
289+
// AUTO-GENERATED DOCUMENTATION AND METHOD.
290+
/**
291+
* Compute the corresponding cursor for a publish or event time in a topic partition.
292+
*
293+
* <p>Sample code:
294+
*
295+
* <pre>{@code
296+
* try (TopicStatsServiceClient topicStatsServiceClient = TopicStatsServiceClient.create()) {
297+
* ComputeTimeCursorRequest request =
298+
* ComputeTimeCursorRequest.newBuilder()
299+
* .setTopic(TopicName.of("[PROJECT]", "[LOCATION]", "[TOPIC]").toString())
300+
* .setPartition(-1799810326)
301+
* .setTarget(TimeTarget.newBuilder().build())
302+
* .build();
303+
* ApiFuture<ComputeTimeCursorResponse> future =
304+
* topicStatsServiceClient.computeTimeCursorCallable().futureCall(request);
305+
* // Do something.
306+
* ComputeTimeCursorResponse response = future.get();
307+
* }
308+
* }</pre>
309+
*/
310+
public final UnaryCallable<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
311+
computeTimeCursorCallable() {
312+
return stub.computeTimeCursorCallable();
313+
}
314+
262315
@Override
263316
public final void close() {
264317
stub.close();

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/v1/TopicStatsServiceSettings.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import com.google.cloud.pubsublite.proto.ComputeHeadCursorResponse;
3131
import com.google.cloud.pubsublite.proto.ComputeMessageStatsRequest;
3232
import com.google.cloud.pubsublite.proto.ComputeMessageStatsResponse;
33+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorRequest;
34+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorResponse;
3335
import com.google.cloud.pubsublite.v1.stub.TopicStatsServiceStubSettings;
3436
import java.io.IOException;
3537
import java.util.List;
@@ -82,6 +84,12 @@ public class TopicStatsServiceSettings extends ClientSettings<TopicStatsServiceS
8284
return ((TopicStatsServiceStubSettings) getStubSettings()).computeHeadCursorSettings();
8385
}
8486

87+
/** Returns the object with the settings used for calls to computeTimeCursor. */
88+
public UnaryCallSettings<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
89+
computeTimeCursorSettings() {
90+
return ((TopicStatsServiceStubSettings) getStubSettings()).computeTimeCursorSettings();
91+
}
92+
8593
public static final TopicStatsServiceSettings create(TopicStatsServiceStubSettings stub)
8694
throws IOException {
8795
return new TopicStatsServiceSettings.Builder(stub.toBuilder()).build();
@@ -192,6 +200,12 @@ public Builder applyToAllUnaryMethods(
192200
return getStubSettingsBuilder().computeHeadCursorSettings();
193201
}
194202

203+
/** Returns the builder for the settings used for calls to computeTimeCursor. */
204+
public UnaryCallSettings.Builder<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
205+
computeTimeCursorSettings() {
206+
return getStubSettingsBuilder().computeTimeCursorSettings();
207+
}
208+
195209
@Override
196210
public TopicStatsServiceSettings build() throws IOException {
197211
return new TopicStatsServiceSettings(this);

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/v1/gapic_metadata.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@
114114
},
115115
"ComputeMessageStats": {
116116
"methods": ["computeMessageStats", "computeMessageStatsCallable"]
117+
},
118+
"ComputeTimeCursor": {
119+
"methods": ["computeTimeCursor", "computeTimeCursorCallable"]
117120
}
118121
}
119122
}

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/v1/stub/GrpcTopicStatsServiceStub.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import com.google.cloud.pubsublite.proto.ComputeHeadCursorResponse;
2828
import com.google.cloud.pubsublite.proto.ComputeMessageStatsRequest;
2929
import com.google.cloud.pubsublite.proto.ComputeMessageStatsResponse;
30+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorRequest;
31+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorResponse;
3032
import com.google.common.collect.ImmutableMap;
3133
import com.google.longrunning.stub.GrpcOperationsStub;
3234
import io.grpc.MethodDescriptor;
@@ -66,10 +68,23 @@ public class GrpcTopicStatsServiceStub extends TopicStatsServiceStub {
6668
ProtoUtils.marshaller(ComputeHeadCursorResponse.getDefaultInstance()))
6769
.build();
6870

71+
private static final MethodDescriptor<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
72+
computeTimeCursorMethodDescriptor =
73+
MethodDescriptor.<ComputeTimeCursorRequest, ComputeTimeCursorResponse>newBuilder()
74+
.setType(MethodDescriptor.MethodType.UNARY)
75+
.setFullMethodName("google.cloud.pubsublite.v1.TopicStatsService/ComputeTimeCursor")
76+
.setRequestMarshaller(
77+
ProtoUtils.marshaller(ComputeTimeCursorRequest.getDefaultInstance()))
78+
.setResponseMarshaller(
79+
ProtoUtils.marshaller(ComputeTimeCursorResponse.getDefaultInstance()))
80+
.build();
81+
6982
private final UnaryCallable<ComputeMessageStatsRequest, ComputeMessageStatsResponse>
7083
computeMessageStatsCallable;
7184
private final UnaryCallable<ComputeHeadCursorRequest, ComputeHeadCursorResponse>
7285
computeHeadCursorCallable;
86+
private final UnaryCallable<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
87+
computeTimeCursorCallable;
7388

7489
private final BackgroundResource backgroundResources;
7590
private final GrpcOperationsStub operationsStub;
@@ -143,6 +158,20 @@ public Map<String, String> extract(ComputeHeadCursorRequest request) {
143158
}
144159
})
145160
.build();
161+
GrpcCallSettings<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
162+
computeTimeCursorTransportSettings =
163+
GrpcCallSettings.<ComputeTimeCursorRequest, ComputeTimeCursorResponse>newBuilder()
164+
.setMethodDescriptor(computeTimeCursorMethodDescriptor)
165+
.setParamsExtractor(
166+
new RequestParamsExtractor<ComputeTimeCursorRequest>() {
167+
@Override
168+
public Map<String, String> extract(ComputeTimeCursorRequest request) {
169+
ImmutableMap.Builder<String, String> params = ImmutableMap.builder();
170+
params.put("topic", String.valueOf(request.getTopic()));
171+
return params.build();
172+
}
173+
})
174+
.build();
146175

147176
this.computeMessageStatsCallable =
148177
callableFactory.createUnaryCallable(
@@ -154,6 +183,11 @@ public Map<String, String> extract(ComputeHeadCursorRequest request) {
154183
computeHeadCursorTransportSettings,
155184
settings.computeHeadCursorSettings(),
156185
clientContext);
186+
this.computeTimeCursorCallable =
187+
callableFactory.createUnaryCallable(
188+
computeTimeCursorTransportSettings,
189+
settings.computeTimeCursorSettings(),
190+
clientContext);
157191

158192
this.backgroundResources =
159193
new BackgroundResourceAggregation(clientContext.getBackgroundResources());
@@ -175,6 +209,12 @@ public GrpcOperationsStub getOperationsStub() {
175209
return computeHeadCursorCallable;
176210
}
177211

212+
@Override
213+
public UnaryCallable<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
214+
computeTimeCursorCallable() {
215+
return computeTimeCursorCallable;
216+
}
217+
178218
@Override
179219
public final void close() {
180220
shutdown();

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/v1/stub/TopicStatsServiceStub.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import com.google.cloud.pubsublite.proto.ComputeHeadCursorResponse;
2323
import com.google.cloud.pubsublite.proto.ComputeMessageStatsRequest;
2424
import com.google.cloud.pubsublite.proto.ComputeMessageStatsResponse;
25+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorRequest;
26+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorResponse;
2527
import javax.annotation.Generated;
2628

2729
// AUTO-GENERATED DOCUMENTATION AND CLASS.
@@ -43,6 +45,11 @@ public abstract class TopicStatsServiceStub implements BackgroundResource {
4345
throw new UnsupportedOperationException("Not implemented: computeHeadCursorCallable()");
4446
}
4547

48+
public UnaryCallable<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
49+
computeTimeCursorCallable() {
50+
throw new UnsupportedOperationException("Not implemented: computeTimeCursorCallable()");
51+
}
52+
4653
@Override
4754
public abstract void close();
4855
}

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/v1/stub/TopicStatsServiceStubSettings.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import com.google.cloud.pubsublite.proto.ComputeHeadCursorResponse;
3636
import com.google.cloud.pubsublite.proto.ComputeMessageStatsRequest;
3737
import com.google.cloud.pubsublite.proto.ComputeMessageStatsResponse;
38+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorRequest;
39+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorResponse;
3840
import com.google.common.collect.ImmutableList;
3941
import com.google.common.collect.ImmutableMap;
4042
import com.google.common.collect.ImmutableSet;
@@ -87,6 +89,8 @@ public class TopicStatsServiceStubSettings extends StubSettings<TopicStatsServic
8789
computeMessageStatsSettings;
8890
private final UnaryCallSettings<ComputeHeadCursorRequest, ComputeHeadCursorResponse>
8991
computeHeadCursorSettings;
92+
private final UnaryCallSettings<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
93+
computeTimeCursorSettings;
9094

9195
/** Returns the object with the settings used for calls to computeMessageStats. */
9296
public UnaryCallSettings<ComputeMessageStatsRequest, ComputeMessageStatsResponse>
@@ -100,6 +104,12 @@ public class TopicStatsServiceStubSettings extends StubSettings<TopicStatsServic
100104
return computeHeadCursorSettings;
101105
}
102106

107+
/** Returns the object with the settings used for calls to computeTimeCursor. */
108+
public UnaryCallSettings<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
109+
computeTimeCursorSettings() {
110+
return computeTimeCursorSettings;
111+
}
112+
103113
@BetaApi("A restructuring of stub classes is planned, so this may break in the future")
104114
public TopicStatsServiceStub createStub() throws IOException {
105115
if (getTransportChannelProvider()
@@ -171,6 +181,7 @@ protected TopicStatsServiceStubSettings(Builder settingsBuilder) throws IOExcept
171181

172182
computeMessageStatsSettings = settingsBuilder.computeMessageStatsSettings().build();
173183
computeHeadCursorSettings = settingsBuilder.computeHeadCursorSettings().build();
184+
computeTimeCursorSettings = settingsBuilder.computeTimeCursorSettings().build();
174185
}
175186

176187
/** Builder for TopicStatsServiceStubSettings. */
@@ -180,6 +191,8 @@ public static class Builder extends StubSettings.Builder<TopicStatsServiceStubSe
180191
computeMessageStatsSettings;
181192
private final UnaryCallSettings.Builder<ComputeHeadCursorRequest, ComputeHeadCursorResponse>
182193
computeHeadCursorSettings;
194+
private final UnaryCallSettings.Builder<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
195+
computeTimeCursorSettings;
183196
private static final ImmutableMap<String, ImmutableSet<StatusCode.Code>>
184197
RETRYABLE_CODE_DEFINITIONS;
185198

@@ -195,7 +208,6 @@ public static class Builder extends StubSettings.Builder<TopicStatsServiceStubSe
195208
StatusCode.Code.ABORTED,
196209
StatusCode.Code.INTERNAL,
197210
StatusCode.Code.UNKNOWN)));
198-
definitions.put("no_retry_codes", ImmutableSet.copyOf(Lists.<StatusCode.Code>newArrayList()));
199211
RETRYABLE_CODE_DEFINITIONS = definitions.build();
200212
}
201213

@@ -215,8 +227,6 @@ public static class Builder extends StubSettings.Builder<TopicStatsServiceStubSe
215227
.setTotalTimeout(Duration.ofMillis(600000L))
216228
.build();
217229
definitions.put("retry_policy_0_params", settings);
218-
settings = RetrySettings.newBuilder().setRpcTimeoutMultiplier(1.0).build();
219-
definitions.put("no_retry_params", settings);
220230
RETRY_PARAM_DEFINITIONS = definitions.build();
221231
}
222232

@@ -229,10 +239,11 @@ protected Builder(ClientContext clientContext) {
229239

230240
computeMessageStatsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
231241
computeHeadCursorSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
242+
computeTimeCursorSettings = UnaryCallSettings.newUnaryCallSettingsBuilder();
232243

233244
unaryMethodSettingsBuilders =
234245
ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(
235-
computeMessageStatsSettings, computeHeadCursorSettings);
246+
computeMessageStatsSettings, computeHeadCursorSettings, computeTimeCursorSettings);
236247
initDefaults(this);
237248
}
238249

@@ -241,10 +252,11 @@ protected Builder(TopicStatsServiceStubSettings settings) {
241252

242253
computeMessageStatsSettings = settings.computeMessageStatsSettings.toBuilder();
243254
computeHeadCursorSettings = settings.computeHeadCursorSettings.toBuilder();
255+
computeTimeCursorSettings = settings.computeTimeCursorSettings.toBuilder();
244256

245257
unaryMethodSettingsBuilders =
246258
ImmutableList.<UnaryCallSettings.Builder<?, ?>>of(
247-
computeMessageStatsSettings, computeHeadCursorSettings);
259+
computeMessageStatsSettings, computeHeadCursorSettings, computeTimeCursorSettings);
248260
}
249261

250262
private static Builder createDefault() {
@@ -266,8 +278,13 @@ private static Builder initDefaults(Builder builder) {
266278

267279
builder
268280
.computeHeadCursorSettings()
269-
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_codes"))
270-
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_params"));
281+
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes"))
282+
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params"));
283+
284+
builder
285+
.computeTimeCursorSettings()
286+
.setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes"))
287+
.setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params"));
271288

272289
return builder;
273290
}
@@ -300,6 +317,12 @@ public Builder applyToAllUnaryMethods(
300317
return computeHeadCursorSettings;
301318
}
302319

320+
/** Returns the builder for the settings used for calls to computeTimeCursor. */
321+
public UnaryCallSettings.Builder<ComputeTimeCursorRequest, ComputeTimeCursorResponse>
322+
computeTimeCursorSettings() {
323+
return computeTimeCursorSettings;
324+
}
325+
303326
@Override
304327
public TopicStatsServiceStubSettings build() throws IOException {
305328
return new TopicStatsServiceStubSettings(this);

google-cloud-pubsublite/src/test/java/com/google/cloud/pubsublite/v1/MockTopicStatsServiceImpl.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import com.google.cloud.pubsublite.proto.ComputeHeadCursorResponse;
2222
import com.google.cloud.pubsublite.proto.ComputeMessageStatsRequest;
2323
import com.google.cloud.pubsublite.proto.ComputeMessageStatsResponse;
24+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorRequest;
25+
import com.google.cloud.pubsublite.proto.ComputeTimeCursorResponse;
2426
import com.google.cloud.pubsublite.proto.TopicStatsServiceGrpc.TopicStatsServiceImplBase;
2527
import com.google.protobuf.AbstractMessage;
2628
import io.grpc.stub.StreamObserver;
@@ -105,4 +107,26 @@ public void computeHeadCursor(
105107
Exception.class.getName())));
106108
}
107109
}
110+
111+
@Override
112+
public void computeTimeCursor(
113+
ComputeTimeCursorRequest request,
114+
StreamObserver<ComputeTimeCursorResponse> responseObserver) {
115+
Object response = responses.poll();
116+
if (response instanceof ComputeTimeCursorResponse) {
117+
requests.add(request);
118+
responseObserver.onNext(((ComputeTimeCursorResponse) response));
119+
responseObserver.onCompleted();
120+
} else if (response instanceof Exception) {
121+
responseObserver.onError(((Exception) response));
122+
} else {
123+
responseObserver.onError(
124+
new IllegalArgumentException(
125+
String.format(
126+
"Unrecognized response type %s for method ComputeTimeCursor, expected %s or %s",
127+
response == null ? "null" : response.getClass().getName(),
128+
ComputeTimeCursorResponse.class.getName(),
129+
Exception.class.getName())));
130+
}
131+
}
108132
}

0 commit comments

Comments
 (0)