If exactly-once delivery is enabled on the subscription, the future returned by the ack/nack + * methods track the state of acknowledgement operation by the server. If the future completes + * successfully, the message is guaranteed NOT to be re-delivered. Otherwise, the future will + * contain an exception with more details about the failure and the message may be re-delivered. + * + *
If exactly-once delivery is NOT enabled on the subscription, the future returns immediately + * with an AckResponse.SUCCESS. Because re-deliveries are possible, you should ensure that your + * processing code is idempotent, as you may receive any given message more than once. + */ +@BetaApi( + "This is a preview feature. For more details, see" + + " https://cloud.google.com/pubsub/docs/exactly-once-delivery.") +public interface AckReplyConsumerWithResponse { + /** + * Acknowledges that the message has been successfully processed. The service will not send the + * message again. + * + *
A future representing the server response is returned
+ */
+ ApiFuture A future representing the server response is returned
+ */
+ ApiFuture A {@link Publisher} provides built-in capabilities to automatically handle batching of
+ * messages, controlling memory utilization, and retrying API calls on transient errors.
+ *
+ * With customizable options that control:
+ *
+ * {@link Publisher} will use the credentials set on the channel, which uses application default
+ * credentials through {@link GoogleCredentials#getApplicationDefault} by default.
+ */
+public class Publisher implements PublisherInterface {
+ private static final Logger logger = Logger.getLogger(Publisher.class.getName());
+ private LoggingUtil loggingUtil = new LoggingUtil();
+
+ private static final String GZIP_COMPRESSION = "gzip";
+
+ private static final String OPEN_TELEMETRY_TRACER_NAME = "com.google.cloud.pubsub.v1";
+
+ private final String topicName;
+ private final int topicNameSize;
+ private final TopicName topicNameObject;
+
+ private final BatchingSettings batchingSettings;
+ private final boolean enableMessageOrdering;
+
+ private final Lock messagesBatchLock;
+
+ private final Map This method blocks in the downcall if using LimitExceededBehavior.Block in the flow control
+ * settings.
+ *
+ * Example of publishing a message.
+ *
+ * Sends remaining outstanding messages and prevents future calls to publish. This method
+ * should be invoked prior to deleting the {@link Publisher} object in order to ensure that no
+ * pending messages are lost.
+ */
+ public void shutdown() {
+ Preconditions.checkState(
+ !shutdown.getAndSet(true), "Cannot shut down a publisher already shut-down.");
+ if (currentAlarmFuture != null && activeAlarm.getAndSet(false)) {
+ currentAlarmFuture.cancel(false);
+ }
+ publishAllOutstanding();
+ messagesWaiter.waitComplete();
+ backgroundResources.shutdown();
+ }
+
+ /**
+ * Wait for all work has completed execution after a {@link #shutdown()} request, or the timeout
+ * occurs, or the current thread is interrupted.
+ *
+ * Call this method to make sure all resources are freed properly.
+ */
+ public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException {
+ return backgroundResources.awaitTermination(duration, unit);
+ }
+
+ /**
+ * Constructs a new {@link Builder} using the given topic.
+ *
+ * Example of creating a {@code Publisher}.
+ *
+ * Example of creating a {@code Publisher}.
+ *
+ * For performance, this client benefits from having multiple underlying connections. See
+ * {@link com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.Builder#setPoolSize(int)}.
+ */
+ public Builder setChannelProvider(TransportChannelProvider channelProvider) {
+ this.channelProvider = Preconditions.checkNotNull(channelProvider);
+ return this;
+ }
+
+ /**
+ * Sets the static header provider. The header provider will be called during client
+ * construction only once. The headers returned by the provider will be cached and supplied as
+ * is for each request issued by the constructed client. Some reserved headers can be overridden
+ * (e.g. Content-Type) or merged with the default value (e.g. User-Agent) by the underlying
+ * transport layer.
+ *
+ * @param headerProvider the header provider
+ * @return the builder
+ */
+ @BetaApi
+ public Builder setHeaderProvider(HeaderProvider headerProvider) {
+ this.headerProvider = Preconditions.checkNotNull(headerProvider);
+ return this;
+ }
+
+ /**
+ * Sets the static header provider for getting internal (library-defined) headers. The header
+ * provider will be called during client construction only once. The headers returned by the
+ * provider will be cached and supplied as is for each request issued by the constructed client.
+ * Some reserved headers can be overridden (e.g. Content-Type) or merged with the default value
+ * (e.g. User-Agent) by the underlying transport layer.
+ *
+ * @param internalHeaderProvider the internal header provider
+ * @return the builder
+ */
+ Builder setInternalHeaderProvider(HeaderProvider internalHeaderProvider) {
+ this.internalHeaderProvider = Preconditions.checkNotNull(internalHeaderProvider);
+ return this;
+ }
+
+ /** {@code CredentialsProvider} to use to create Credentials to authenticate calls. */
+ public Builder setCredentialsProvider(CredentialsProvider credentialsProvider) {
+ this.credentialsProvider = Preconditions.checkNotNull(credentialsProvider);
+ return this;
+ }
+
+ // Batching options
+ public Builder setBatchingSettings(BatchingSettings batchingSettings) {
+ Preconditions.checkNotNull(batchingSettings);
+ Preconditions.checkNotNull(batchingSettings.getElementCountThreshold());
+ Preconditions.checkArgument(batchingSettings.getElementCountThreshold() > 0);
+ Preconditions.checkNotNull(batchingSettings.getRequestByteThreshold());
+ Preconditions.checkArgument(batchingSettings.getRequestByteThreshold() > 0);
+ Preconditions.checkNotNull(batchingSettings.getDelayThreshold());
+ Preconditions.checkArgument(batchingSettings.getDelayThreshold().toMillis() > 0);
+ FlowControlSettings flowControlSettings = batchingSettings.getFlowControlSettings();
+ if (flowControlSettings.getLimitExceededBehavior() != LimitExceededBehavior.Ignore) {
+ Preconditions.checkArgument(flowControlSettings.getMaxOutstandingElementCount() > 0);
+ Preconditions.checkArgument(flowControlSettings.getMaxOutstandingRequestBytes() > 0);
+ }
+ this.batchingSettings = batchingSettings;
+ return this;
+ }
+
+ /** Configures the Publisher's retry parameters. */
+ public Builder setRetrySettings(RetrySettings retrySettings) {
+ Preconditions.checkArgument(
+ retrySettings.getTotalTimeoutDuration().compareTo(MIN_TOTAL_TIMEOUT) >= 0);
+ Preconditions.checkArgument(
+ retrySettings.getInitialRpcTimeoutDuration().compareTo(MIN_RPC_TIMEOUT) >= 0);
+ this.retrySettings = retrySettings;
+ return this;
+ }
+
+ /** Sets the message ordering option. */
+ public Builder setEnableMessageOrdering(boolean enableMessageOrdering) {
+ this.enableMessageOrdering = enableMessageOrdering;
+ return this;
+ }
+
+ /** Gives the ability to set a custom executor to be used by the library. */
+ public Builder setExecutorProvider(ExecutorProvider executorProvider) {
+ this.executorProvider = Preconditions.checkNotNull(executorProvider);
+ return this;
+ }
+
+ /**
+ * Gives the ability to set an {@link ApiFunction} that will transform the {@link PubsubMessage}
+ * before it is sent
+ */
+ @BetaApi
+ public Builder setTransform(ApiFunction Some implementations of this method may block in the downcall until allowed by flow control.
+ *
+ * Example of publishing a message.
+ *
+ * This class provides the ability to make remote calls to the backing service through method
+ * calls that map to API methods. Sample code to get started:
+ *
+ * Note: close() needs to be called on the SchemaServiceClient object to clean up resources such
+ * as threads. In the example above, try-with-resources is used, which automatically calls close().
+ *
+ * CreateSchema Creates a schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. createSchema(CreateSchemaRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. createSchema(ProjectName parent, Schema schema, String schemaId)
+ * createSchema(String parent, Schema schema, String schemaId)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. createSchemaCallable()
+ * GetSchema Gets a schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. getSchema(GetSchemaRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. getSchema(SchemaName name)
+ * getSchema(String name)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. getSchemaCallable()
+ * ListSchemas Lists schemas in a project. Request object method variants only take one parameter, a request object, which must be constructed before the call. listSchemas(ListSchemasRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. listSchemas(ProjectName parent)
+ * listSchemas(String parent)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. listSchemasPagedCallable()
+ * listSchemasCallable()
+ * ListSchemaRevisions Lists all schema revisions for the named schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. listSchemaRevisions(ListSchemaRevisionsRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. listSchemaRevisions(SchemaName name)
+ * listSchemaRevisions(String name)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. listSchemaRevisionsPagedCallable()
+ * listSchemaRevisionsCallable()
+ * CommitSchema Commits a new schema revision to an existing schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. commitSchema(CommitSchemaRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. commitSchema(SchemaName name, Schema schema)
+ * commitSchema(String name, Schema schema)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. commitSchemaCallable()
+ * RollbackSchema Creates a new schema revision that is a copy of the provided revision_id. Request object method variants only take one parameter, a request object, which must be constructed before the call. rollbackSchema(RollbackSchemaRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. rollbackSchema(SchemaName name, String revisionId)
+ * rollbackSchema(String name, String revisionId)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. rollbackSchemaCallable()
+ * DeleteSchemaRevision Deletes a specific schema revision. Request object method variants only take one parameter, a request object, which must be constructed before the call. deleteSchemaRevision(DeleteSchemaRevisionRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. deleteSchemaRevision(SchemaName name, String revisionId)
+ * deleteSchemaRevision(String name, String revisionId)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. deleteSchemaRevisionCallable()
+ * DeleteSchema Deletes a schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. deleteSchema(DeleteSchemaRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. deleteSchema(SchemaName name)
+ * deleteSchema(String name)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. deleteSchemaCallable()
+ * ValidateSchema Validates a schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. validateSchema(ValidateSchemaRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. validateSchema(ProjectName parent, Schema schema)
+ * validateSchema(String parent, Schema schema)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. validateSchemaCallable()
+ * ValidateMessage Validates a message against a schema. Request object method variants only take one parameter, a request object, which must be constructed before the call. validateMessage(ValidateMessageRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. validateMessageCallable()
+ * SetIamPolicy Sets the access control policy on the specified resource. Replacesany existing policy.
+ * Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. Request object method variants only take one parameter, a request object, which must be constructed before the call. setIamPolicy(SetIamPolicyRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. setIamPolicyCallable()
+ * GetIamPolicy Gets the access control policy for a resource. Returns an empty policyif the resource exists and does not have a policy set. Request object method variants only take one parameter, a request object, which must be constructed before the call. getIamPolicy(GetIamPolicyRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. getIamPolicyCallable()
+ * TestIamPermissions Returns permissions that a caller has on the specified resource. If theresource does not exist, this will return an empty set ofpermissions, not a `NOT_FOUND` error.
+ * Note: This operation is designed to be used for buildingpermission-aware UIs and command-line tools, not for authorizationchecking. This operation may "fail open" without warning. Request object method variants only take one parameter, a request object, which must be constructed before the call. testIamPermissions(TestIamPermissionsRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. testIamPermissionsCallable()
+ * See the individual methods for example code.
+ *
+ * Many parameters require resource names to be formatted in a particular way. To assist with
+ * these names, this class includes a format method for each type of name, and additionally a parse
+ * method to extract the individual identifiers contained within names that are returned.
+ *
+ * This class can be customized by passing in a custom instance of SchemaServiceSettings to
+ * create(). For example:
+ *
+ * To customize credentials:
+ *
+ * To customize the endpoint:
+ *
+ * To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over
+ * the wire:
+ *
+ * Please refer to the GitHub repository's samples for more quickstart code snippets.
+ */
+@Generated("by gapic-generator-java")
+public class SchemaServiceClient implements BackgroundResource {
+ private final SchemaServiceSettings settings;
+ private final SchemaServiceStub stub;
+
+ /** Constructs an instance of SchemaServiceClient with default settings. */
+ public static final SchemaServiceClient create() throws IOException {
+ return create(SchemaServiceSettings.newBuilder().build());
+ }
+
+ /**
+ * Constructs an instance of SchemaServiceClient, using the given settings. The channels are
+ * created based on the settings passed in, or defaults for any settings that are not set.
+ */
+ public static final SchemaServiceClient create(SchemaServiceSettings settings)
+ throws IOException {
+ return new SchemaServiceClient(settings);
+ }
+
+ /**
+ * Constructs an instance of SchemaServiceClient, using the given stub for making calls. This is
+ * for advanced usage - prefer using create(SchemaServiceSettings).
+ */
+ public static final SchemaServiceClient create(SchemaServiceStub stub) {
+ return new SchemaServiceClient(stub);
+ }
+
+ /**
+ * Constructs an instance of SchemaServiceClient, using the given settings. This is protected so
+ * that it is easy to make a subclass, but otherwise, the static factory methods should be
+ * preferred.
+ */
+ protected SchemaServiceClient(SchemaServiceSettings settings) throws IOException {
+ this.settings = settings;
+ this.stub = ((SchemaServiceStubSettings) settings.getStubSettings()).createStub();
+ }
+
+ protected SchemaServiceClient(SchemaServiceStub stub) {
+ this.settings = null;
+ this.stub = stub;
+ }
+
+ public final SchemaServiceSettings getSettings() {
+ return settings;
+ }
+
+ public SchemaServiceStub getStub() {
+ return stub;
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a schema.
+ *
+ * Sample code:
+ *
+ * This schema's `name` parameter is ignored. The schema object returned by CreateSchema
+ * will have a `name` made using the given `parent` and `schema_id`.
+ * @param schemaId The ID to use for the schema, which will become the final component of the
+ * schema's resource name.
+ * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for resource name
+ * constraints.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema createSchema(ProjectName parent, Schema schema, String schemaId) {
+ CreateSchemaRequest request =
+ CreateSchemaRequest.newBuilder()
+ .setParent(parent == null ? null : parent.toString())
+ .setSchema(schema)
+ .setSchemaId(schemaId)
+ .build();
+ return createSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a schema.
+ *
+ * Sample code:
+ *
+ * This schema's `name` parameter is ignored. The schema object returned by CreateSchema
+ * will have a `name` made using the given `parent` and `schema_id`.
+ * @param schemaId The ID to use for the schema, which will become the final component of the
+ * schema's resource name.
+ * See https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names for resource name
+ * constraints.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema createSchema(String parent, Schema schema, String schemaId) {
+ CreateSchemaRequest request =
+ CreateSchemaRequest.newBuilder()
+ .setParent(parent)
+ .setSchema(schema)
+ .setSchemaId(schemaId)
+ .build();
+ return createSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a schema.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Example: c7cfa2a8
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema rollbackSchema(SchemaName name, String revisionId) {
+ RollbackSchemaRequest request =
+ RollbackSchemaRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setRevisionId(revisionId)
+ .build();
+ return rollbackSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a new schema revision that is a copy of the provided revision_id.
+ *
+ * Sample code:
+ *
+ * Example: c7cfa2a8
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema rollbackSchema(String name, String revisionId) {
+ RollbackSchemaRequest request =
+ RollbackSchemaRequest.newBuilder().setName(name).setRevisionId(revisionId).build();
+ return rollbackSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a new schema revision that is a copy of the provided revision_id.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Example: `projects/123/schemas/my-schema{@literal @}c7cfa2a8`
+ * @param revisionId Optional. This field is deprecated and should not be used for specifying the
+ * revision ID. The revision ID should be specified via the `name` parameter.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema deleteSchemaRevision(SchemaName name, String revisionId) {
+ DeleteSchemaRevisionRequest request =
+ DeleteSchemaRevisionRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setRevisionId(revisionId)
+ .build();
+ return deleteSchemaRevision(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes a specific schema revision.
+ *
+ * Sample code:
+ *
+ * Example: `projects/123/schemas/my-schema{@literal @}c7cfa2a8`
+ * @param revisionId Optional. This field is deprecated and should not be used for specifying the
+ * revision ID. The revision ID should be specified via the `name` parameter.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema deleteSchemaRevision(String name, String revisionId) {
+ DeleteSchemaRevisionRequest request =
+ DeleteSchemaRevisionRequest.newBuilder().setName(name).setRevisionId(revisionId).build();
+ return deleteSchemaRevision(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes a specific schema revision.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.
+ *
+ * Sample code:
+ *
+ * Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Note: This operation is designed to be used for buildingpermission-aware UIs and
+ * command-line tools, not for authorizationchecking. This operation may "fail open" without
+ * warning.
+ *
+ * Sample code:
+ *
+ * Note: This operation is designed to be used for buildingpermission-aware UIs and
+ * command-line tools, not for authorizationchecking. This operation may "fail open" without
+ * warning.
+ *
+ * Sample code:
+ *
+ * The default instance has everything set to sensible defaults:
+ *
+ * The builder of this class is recursive, so contained classes are themselves builders. When
+ * build() is called, the tree of builders is called to create the complete settings object.
+ *
+ * For example, to set the
+ * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings)
+ * of createSchema:
+ *
+ * Note: This method does not support applying settings to streaming methods.
+ */
+ public Builder applyToAllUnaryMethods(
+ ApiFunction This method does the following in a chain:
+ *
+ * A {@link Subscriber} allows you to provide an implementation of a {@link MessageReceiver
+ * receiver} to which messages are going to be delivered as soon as they are received by the
+ * subscriber. The delivered messages then can be {@link AckReplyConsumer#ack() acked} or {@link
+ * AckReplyConsumer#nack() nacked} at will as they get processed by the receiver. Nacking a messages
+ * implies a later redelivery of such message.
+ *
+ * The subscriber handles the ack management, by automatically extending the ack deadline while
+ * the message is being processed, to then issue the ack or nack of such message when the processing
+ * is done (see {@link Builder#setMaxAckExtensionPeriod(Duration)}). Note: message
+ * redelivery is still possible.
+ *
+ * It also provides customizable options that control:
+ *
+ * {@link Subscriber} will use the credentials set on the channel, which uses application default
+ * credentials through {@link GoogleCredentials#getApplicationDefault} by default.
+ *
+ * {@code Subscriber} is implemented using Guava's
+ * Service and provides the same methods. See Guava documentation for more
+ * details.
+ */
+public class Subscriber extends AbstractApiService implements SubscriberInterface {
+ private static final int THREADS_PER_CHANNEL = 5;
+ private static final int MAX_INBOUND_MESSAGE_SIZE =
+ 20 * 1024 * 1024; // 20MB API maximum message size.
+
+ private static final int MAX_INBOUND_METADATA_SIZE =
+ 4 * 1024 * 1024; // 4MB API maximum metadata size
+
+ @InternalApi
+ static final java.time.Duration DEFAULT_MAX_ACK_EXTENSION_PERIOD =
+ java.time.Duration.ofMinutes(60);
+
+ @InternalApi
+ static final java.time.Duration DEFAULT_MIN_ACK_DEADLINE_EXTENSION_EXACTLY_ONCE_DELIVERY =
+ java.time.Duration.ofMinutes(1);
+
+ @InternalApi
+ static final java.time.Duration DEFAULT_MIN_ACK_DEADLINE_EXTENSION =
+ java.time.Duration.ofMinutes(0);
+
+ @InternalApi
+ static final java.time.Duration DEFAULT_MAX_ACK_DEADLINE_EXTENSION =
+ java.time.Duration.ofSeconds(0);
+
+ @InternalApi
+ static final java.time.Duration MIN_STREAM_ACK_DEADLINE = java.time.Duration.ofSeconds(10);
+
+ @InternalApi
+ static final java.time.Duration MAX_STREAM_ACK_DEADLINE = java.time.Duration.ofSeconds(600);
+
+ @InternalApi
+ static final java.time.Duration STREAM_ACK_DEADLINE_DEFAULT = java.time.Duration.ofSeconds(60);
+
+ @InternalApi
+ static final java.time.Duration STREAM_ACK_DEADLINE_EXACTLY_ONCE_DELIVERY_DEFAULT =
+ java.time.Duration.ofSeconds(60);
+
+ @InternalApi
+ static final java.time.Duration ACK_EXPIRATION_PADDING_DEFAULT = java.time.Duration.ofSeconds(5);
+
+ private static final Logger logger = Logger.getLogger(Subscriber.class.getName());
+
+ private static final String OPEN_TELEMETRY_TRACER_NAME = "com.google.cloud.pubsub.v1";
+
+ private final String subscriptionName;
+ private final FlowControlSettings flowControlSettings;
+ private final boolean useLegacyFlowControl;
+ private final java.time.Duration maxAckExtensionPeriod;
+ private final java.time.Duration maxDurationPerAckExtension;
+ private final boolean maxDurationPerAckExtensionDefaultUsed;
+ private final java.time.Duration minDurationPerAckExtension;
+ private final boolean minDurationPerAckExtensionDefaultUsed;
+ private final long protocolVersion = 1L;
+
+ // The ExecutorProvider used to generate executors for processing messages.
+ private final ExecutorProvider executorProvider;
+ // An instantiation of the SystemExecutorProvider used for processing acks
+ // and other system actions.
+ @Nullable private final ScheduledExecutorService alarmsExecutor;
+
+ private final Distribution ackLatencyDistribution =
+ new Distribution(Math.toIntExact(MAX_STREAM_ACK_DEADLINE.getSeconds()) + 1);
+
+ private SubscriberStub subscriberStub;
+ private final SubscriberStubSettings subStubSettings;
+ private final FlowController flowController;
+ private final int numPullers;
+
+ private final MessageReceiver receiver;
+ private final MessageReceiverWithAckResponse receiverWithAckResponse;
+ private final List Example of receiving a specific number of messages.
+ *
+ * For performance, this client benefits from having multiple channels open at once. Users
+ * are encouraged to provide instances of {@code ChannelProvider} that creates new channels
+ * instead of returning pre-initialized ones.
+ */
+ public Builder setChannelProvider(TransportChannelProvider channelProvider) {
+ this.channelProvider = Preconditions.checkNotNull(channelProvider);
+ return this;
+ }
+
+ /**
+ * Sets the static header provider. The header provider will be called during client
+ * construction only once. The headers returned by the provider will be cached and supplied as
+ * is for each request issued by the constructed client. Some reserved headers can be overridden
+ * (e.g. Content-Type) or merged with the default value (e.g. User-Agent) by the underlying
+ * transport layer.
+ *
+ * @param headerProvider the header provider
+ * @return the builder
+ */
+ @BetaApi
+ public Builder setHeaderProvider(HeaderProvider headerProvider) {
+ this.headerProvider = Preconditions.checkNotNull(headerProvider);
+ return this;
+ }
+
+ /**
+ * Sets the flow control settings.
+ *
+ * In the example below, the {@link Subscriber} will make sure that
+ *
+ * It is recommended to set this value to a reasonable upper bound of the subscriber time to
+ * process any message. This maximum period avoids messages to be locked by a subscriber
+ * in cases when the ack reply is lost.
+ *
+ * A zero duration effectively disables auto deadline extensions.
+ */
+ public Builder setMaxAckExtensionPeriodDuration(java.time.Duration maxAckExtensionPeriod) {
+ Preconditions.checkArgument(maxAckExtensionPeriod.toMillis() >= 0);
+ this.maxAckExtensionPeriod = maxAckExtensionPeriod;
+ return this;
+ }
+
+ /**
+ * This method is obsolete. Use {@link
+ * #setMaxDurationPerAckExtensionDuration(java.time.Duration)} instead.
+ */
+ @ObsoleteApi("Use setMaxDurationPerAckExtensionDuration(java.time.Duration) instead")
+ public Builder setMaxDurationPerAckExtension(
+ org.threeten.bp.Duration maxDurationPerAckExtension) {
+ return setMaxDurationPerAckExtensionDuration(toJavaTimeDuration(maxDurationPerAckExtension));
+ }
+
+ /**
+ * Set the upper bound for a single mod ack extention period.
+ *
+ * The ack deadline will continue to be extended by up to this duration until
+ * MaxAckExtensionPeriod is reached. Setting MaxDurationPerAckExtension bounds the maximum
+ * amount of time before a mesage re-delivery in the event the Subscriber fails to extend the
+ * deadline.
+ *
+ * MaxDurationPerAckExtension configuration can be disabled by specifying a zero duration.
+ */
+ public Builder setMaxDurationPerAckExtensionDuration(
+ java.time.Duration maxDurationPerAckExtension) {
+ // If a non-default min is set, make sure min is less than max
+ Preconditions.checkArgument(
+ maxDurationPerAckExtension.toMillis() >= 0
+ && (this.minDurationPerAckExtensionDefaultUsed
+ || (this.minDurationPerAckExtension.toMillis()
+ < maxDurationPerAckExtension.toMillis())));
+ this.maxDurationPerAckExtension = maxDurationPerAckExtension;
+ this.maxDurationPerAckExtensionDefaultUsed = false;
+ return this;
+ }
+
+ /**
+ * This method is obsolete. Use {@link
+ * #setMinDurationPerAckExtensionDuration(java.time.Duration)} instead.
+ */
+ @ObsoleteApi("Use setMinDurationPerAckExtensionDuration(java.time.Duration) instead")
+ public Builder setMinDurationPerAckExtension(
+ org.threeten.bp.Duration minDurationPerAckExtension) {
+ return setMinDurationPerAckExtensionDuration(toJavaTimeDuration(minDurationPerAckExtension));
+ }
+
+ /**
+ * Set the lower bound for a single mod ack extention period.
+ *
+ * The ack deadline will continue to be extended by up to this duration until
+ * MinAckExtensionPeriod is reached. Setting MinDurationPerAckExtension bounds the minimum
+ * amount of time before a mesage re-delivery in the event the Subscriber fails to extend the
+ * deadline.
+ *
+ * MinDurationPerAckExtension configuration can be disabled by specifying a zero duration.
+ */
+ public Builder setMinDurationPerAckExtensionDuration(
+ java.time.Duration minDurationPerAckExtension) {
+ // If a non-default max is set, make sure min is less than max
+ Preconditions.checkArgument(
+ minDurationPerAckExtension.toMillis() >= 0
+ && (this.maxDurationPerAckExtensionDefaultUsed
+ || (minDurationPerAckExtension.toMillis()
+ < this.maxDurationPerAckExtension.toMillis())));
+
+ this.minDurationPerAckExtension = minDurationPerAckExtension;
+ this.minDurationPerAckExtensionDefaultUsed = false;
+ return this;
+ }
+
+ /**
+ * Gives the ability to set a custom executor. {@link ExecutorProvider#getExecutor()} will be
+ * called {@link Builder#parallelPullCount} times.
+ */
+ public Builder setExecutorProvider(ExecutorProvider executorProvider) {
+ this.executorProvider = Preconditions.checkNotNull(executorProvider);
+ return this;
+ }
+
+ /** {@code CredentialsProvider} to use to create Credentials to authenticate calls. */
+ public Builder setCredentialsProvider(CredentialsProvider credentialsProvider) {
+ this.credentialsProvider = Preconditions.checkNotNull(credentialsProvider);
+ return this;
+ }
+
+ /**
+ * Gives the ability to set a custom executor for managing lease extensions. If none is provided
+ * a shared one will be used by all {@link Subscriber} instances.
+ */
+ public Builder setSystemExecutorProvider(ExecutorProvider executorProvider) {
+ this.systemExecutorProvider = Preconditions.checkNotNull(executorProvider);
+ return this;
+ }
+
+ /**
+ * Sets the number of StreamingPull streams to pull messages from the subscription. Defaults to
+ * one.
+ */
+ public Builder setParallelPullCount(int parallelPullCount) {
+ this.parallelPullCount = parallelPullCount;
+ return this;
+ }
+
+ /** Gives the ability to override the gRPC endpoint. */
+ public Builder setEndpoint(String endpoint) {
+ this.endpoint = endpoint;
+ return this;
+ }
+
+ /** Gives the ability to override the universe domain. */
+ public Builder setUniverseDomain(String universeDomain) {
+ this.universeDomain = universeDomain;
+ return this;
+ }
+
+ /** Gives the ability to set a custom clock. */
+ Builder setClock(ApiClock clock) {
+ this.clock = Optional.of(clock);
+ return this;
+ }
+
+ /**
+ * OpenTelemetry will be enabled if setEnableOpenTelemetry is true and and instance of
+ * OpenTelemetry has been provied. Warning: traces are subject to change. The name and
+ * attributes of a span might change without notice. Only use run traces interactively. Don't
+ * use in automation. Running non-interactive traces can cause problems if the underlying trace
+ * architecture changes without notice.
+ */
+
+ /** Gives the ability to enable Open Telemetry Tracing */
+ public Builder setEnableOpenTelemetryTracing(boolean enableOpenTelemetryTracing) {
+ this.enableOpenTelemetryTracing = enableOpenTelemetryTracing;
+ return this;
+ }
+
+ /** Sets the instance of OpenTelemetry for the Publisher class. */
+ public Builder setOpenTelemetry(OpenTelemetry openTelemetry) {
+ this.openTelemetry = openTelemetry;
+ return this;
+ }
+
+ /**
+ * Sets the shutdown settings for the subscriber. Defaults to {@link
+ * SubscriberShutdownSettings#newBuilder() default settings}.
+ */
+ @BetaApi(
+ "The surface for SubscriberShutdownSettings is not stable yet and may be changed in the"
+ + " future.")
+ public Builder setSubscriberShutdownSettings(
+ SubscriberShutdownSettings subscriberShutdownSettings) {
+ this.subscriberShutdownSettings = Preconditions.checkNotNull(subscriberShutdownSettings);
+ return this;
+ }
+
+ /** Returns the default FlowControlSettings used by the client if settings are not provided. */
+ public static FlowControlSettings getDefaultFlowControlSettings() {
+ return DEFAULT_FLOW_CONTROL_SETTINGS;
+ }
+
+ public Subscriber build() {
+ if (systemExecutorProvider == null) {
+ ThreadFactory threadFactory =
+ new ThreadFactoryBuilder()
+ .setDaemon(true)
+ .setNameFormat("Subscriber-SE-" + SYSTEM_EXECUTOR_COUNTER.incrementAndGet() + "-%d")
+ .build();
+ int threadCount = Math.max(6, 2 * parallelPullCount);
+ final ScheduledExecutorService executor =
+ Executors.newScheduledThreadPool(threadCount, threadFactory);
+ systemExecutorProvider =
+ new ExecutorProvider() {
+ @Override
+ public boolean shouldAutoClose() {
+ return true;
+ }
+
+ @Override
+ public ScheduledExecutorService getExecutor() {
+ return executor;
+ }
+ };
+ }
+ return new Subscriber(this);
+ }
+ }
+}
diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java
new file mode 100644
index 000000000000..e97e9141f47a
--- /dev/null
+++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberInterface.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.pubsub.v1;
+
+import com.google.api.core.ApiService;
+
+/**
+ * The core interface for a Cloud Pub/Sub subscriber, consisting only of
+ * ApiService methods.
+ */
+public interface SubscriberInterface extends ApiService {}
diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java
new file mode 100644
index 000000000000..efd8e10db809
--- /dev/null
+++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberShutdownSettings.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2025 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.pubsub.v1;
+
+import com.google.common.base.Preconditions;
+import java.time.Duration;
+
+/**
+ * Settings for configuring the shutdown behavior of a {@link Subscriber}.
+ *
+ * This class allows customization of how the subscriber handles outstanding messages during
+ * shutdown, including whether to wait for processing to complete or to immediately nack messages,
+ * and an optional timeout for the shutdown process.
+ */
+public final class SubscriberShutdownSettings {
+
+ /** Defines the behavior for handling outstanding messages during subscriber shutdown. */
+ public enum ShutdownMode {
+ /**
+ * The subscriber will wait for all outstanding messages to be processed (acked or nacked by the
+ * user's message receiver) before completing the shutdown.
+ */
+ WAIT_FOR_PROCESSING,
+ /**
+ * The subscriber will immediately nack all outstanding messages and attempt to shut down as
+ * quickly as possible. Messages delivered to the user callback but not yet acked/nacked will
+ * also be nacked.
+ */
+ NACK_IMMEDIATELY
+ }
+
+ private static final Duration DEFAULT_TIMEOUT = Duration.ofSeconds(-1); // Indicates no timeout
+ private static final ShutdownMode DEFAULT_MODE = ShutdownMode.WAIT_FOR_PROCESSING;
+
+ private final ShutdownMode mode;
+ private final Duration timeout;
+
+ private SubscriberShutdownSettings(Builder builder) {
+ this.mode = builder.mode;
+ this.timeout = builder.timeout;
+ }
+
+ /** Returns the configured shutdown mode. */
+ public ShutdownMode getMode() {
+ return mode;
+ }
+
+ /** Returns the configured shutdown timeout. A negative duration indicates no timeout. */
+ public Duration getTimeout() {
+ return timeout;
+ }
+
+ /** Returns a new builder for {@code SubscriberShutdownSettings}. */
+ public static Builder newBuilder() {
+ return new Builder();
+ }
+
+ /** Builder for {@code SubscriberShutdownSettings}. */
+ public static final class Builder {
+ private ShutdownMode mode = DEFAULT_MODE;
+ private Duration timeout = DEFAULT_TIMEOUT;
+
+ private Builder() {}
+
+ /** Sets the shutdown mode. Defaults to {@link ShutdownMode#WAIT_FOR_PROCESSING}. */
+ public Builder setMode(ShutdownMode mode) {
+ this.mode = Preconditions.checkNotNull(mode);
+ return this;
+ }
+
+ /**
+ * Sets the shutdown timeout. Defaults to a negative duration, indicating no timeout.
+ *
+ * A positive duration specifies the maximum time to wait for shutdown to complete. A
+ * duration of zero indicates an immediate, forceful shutdown. A negative duration indicates an
+ * indefinite wait.
+ */
+ public Builder setTimeout(Duration timeout) {
+ this.timeout = Preconditions.checkNotNull(timeout);
+ return this;
+ }
+
+ /** Builds an instance of {@code SubscriberShutdownSettings}. */
+ public SubscriberShutdownSettings build() {
+ return new SubscriberShutdownSettings(this);
+ }
+ }
+}
diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java
new file mode 100644
index 000000000000..992c1d056dd4
--- /dev/null
+++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriberStats.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2016 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.pubsub.v1;
+
+import com.google.auto.value.AutoValue;
+
+/**
+ * A snapshot of the subscriber statistics at the time they were requested from the {@link
+ * Subscriber}.
+ */
+@AutoValue
+abstract class SubscriberStats {
+
+ @AutoValue
+ // TODO: Finish implementation.
+ abstract static class Stats {}
+
+ /** Number of successfully published messages. */
+ abstract long getReceivedMessages();
+
+ /** Number of successfully published messages. */
+ abstract long getAckedMessages();
+
+ /** Number of received messages. */
+ abstract long getTotalReceivedMessages();
+
+ /** Number messages acked. */
+ abstract long getTotalAckedMessages();
+
+ /** End to end latency. */
+ abstract Stats getEndToEndLatency();
+
+ /**
+ * Acknowledgement latency; time in between the message has been received and then acknowledged or
+ * rejected.
+ */
+ abstract Stats getAckLatency();
+
+ /** Number of messages for which we have auto extended its acknowledgement deadline. */
+ abstract long getNumberOfAutoExtendedAckDeadlines();
+
+ static Builder newBuilder() {
+ return new AutoValue_SubscriberStats.Builder();
+ }
+
+ @AutoValue.Builder
+ abstract static class Builder {
+ abstract Builder setReceivedMessages(long value);
+
+ abstract Builder setAckedMessages(long value);
+
+ abstract Builder setTotalReceivedMessages(long value);
+
+ abstract Builder setTotalAckedMessages(long value);
+
+ abstract Builder setEndToEndLatency(Stats value);
+
+ abstract Builder setAckLatency(Stats value);
+
+ abstract Builder setNumberOfAutoExtendedAckDeadlines(long value);
+
+ abstract SubscriberStats build();
+ }
+}
diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminClient.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminClient.java
new file mode 100644
index 000000000000..26a764dab3bf
--- /dev/null
+++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/SubscriptionAdminClient.java
@@ -0,0 +1,4197 @@
+/*
+ * Copyright 2026 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.pubsub.v1;
+
+import com.google.api.core.ApiFuture;
+import com.google.api.core.ApiFutures;
+import com.google.api.gax.core.BackgroundResource;
+import com.google.api.gax.paging.AbstractFixedSizeCollection;
+import com.google.api.gax.paging.AbstractPage;
+import com.google.api.gax.paging.AbstractPagedListResponse;
+import com.google.api.gax.rpc.BidiStreamingCallable;
+import com.google.api.gax.rpc.PageContext;
+import com.google.api.gax.rpc.UnaryCallable;
+import com.google.cloud.pubsub.v1.stub.SubscriberStub;
+import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.iam.v1.GetIamPolicyRequest;
+import com.google.iam.v1.Policy;
+import com.google.iam.v1.SetIamPolicyRequest;
+import com.google.iam.v1.TestIamPermissionsRequest;
+import com.google.iam.v1.TestIamPermissionsResponse;
+import com.google.protobuf.Empty;
+import com.google.protobuf.FieldMask;
+import com.google.pubsub.v1.AcknowledgeRequest;
+import com.google.pubsub.v1.CreateSnapshotRequest;
+import com.google.pubsub.v1.DeleteSnapshotRequest;
+import com.google.pubsub.v1.DeleteSubscriptionRequest;
+import com.google.pubsub.v1.GetSnapshotRequest;
+import com.google.pubsub.v1.GetSubscriptionRequest;
+import com.google.pubsub.v1.ListSnapshotsRequest;
+import com.google.pubsub.v1.ListSnapshotsResponse;
+import com.google.pubsub.v1.ListSubscriptionsRequest;
+import com.google.pubsub.v1.ListSubscriptionsResponse;
+import com.google.pubsub.v1.ModifyAckDeadlineRequest;
+import com.google.pubsub.v1.ModifyPushConfigRequest;
+import com.google.pubsub.v1.ProjectName;
+import com.google.pubsub.v1.ProjectSnapshotName;
+import com.google.pubsub.v1.ProjectSubscriptionName;
+import com.google.pubsub.v1.ProjectTopicName;
+import com.google.pubsub.v1.PullRequest;
+import com.google.pubsub.v1.PullResponse;
+import com.google.pubsub.v1.PushConfig;
+import com.google.pubsub.v1.SeekRequest;
+import com.google.pubsub.v1.SeekResponse;
+import com.google.pubsub.v1.Snapshot;
+import com.google.pubsub.v1.SnapshotName;
+import com.google.pubsub.v1.StreamingPullRequest;
+import com.google.pubsub.v1.StreamingPullResponse;
+import com.google.pubsub.v1.Subscription;
+import com.google.pubsub.v1.SubscriptionName;
+import com.google.pubsub.v1.TopicName;
+import com.google.pubsub.v1.UpdateSnapshotRequest;
+import com.google.pubsub.v1.UpdateSubscriptionRequest;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Generated;
+
+// AUTO-GENERATED DOCUMENTATION AND CLASS.
+/**
+ * Service Description: The service that an application uses to manipulate subscriptions and to
+ * consume messages from a subscription via the `Pull` method or by establishing a bi-directional
+ * stream using the `StreamingPull` method.
+ *
+ * This class provides the ability to make remote calls to the backing service through method
+ * calls that map to API methods. Sample code to get started:
+ *
+ * Note: close() needs to be called on the SubscriptionAdminClient object to clean up resources
+ * such as threads. In the example above, try-with-resources is used, which automatically calls
+ * close().
+ *
+ * CreateSubscription Creates a subscription to a given topic. See the [resource name rules] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns `NOT_FOUND`.
+ * If the name is not provided in the request, the server will assign a random name for this subscription on the same project as the topic, conforming to the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is populated in the returned Subscription object. Note that for REST API requests, you must specify a name in the request. Request object method variants only take one parameter, a request object, which must be constructed before the call. createSubscription(Subscription request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. createSubscription(SubscriptionName name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds)
+ * createSubscription(SubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds)
+ * createSubscription(String name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds)
+ * createSubscription(String name, String topic, PushConfig pushConfig, int ackDeadlineSeconds)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. createSubscriptionCallable()
+ * GetSubscription Gets the configuration details of a subscription. Request object method variants only take one parameter, a request object, which must be constructed before the call. getSubscription(GetSubscriptionRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. getSubscription(SubscriptionName subscription)
+ * getSubscription(String subscription)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. getSubscriptionCallable()
+ * UpdateSubscription Updates an existing subscription by updating the fields specified in the update mask. Note that certain properties of a subscription, such as its topic, are not modifiable. Request object method variants only take one parameter, a request object, which must be constructed before the call. updateSubscription(UpdateSubscriptionRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. updateSubscription(Subscription subscription, FieldMask updateMask)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. updateSubscriptionCallable()
+ * ListSubscriptions Lists matching subscriptions. Request object method variants only take one parameter, a request object, which must be constructed before the call. listSubscriptions(ListSubscriptionsRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. listSubscriptions(ProjectName project)
+ * listSubscriptions(String project)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. listSubscriptionsPagedCallable()
+ * listSubscriptionsCallable()
+ * DeleteSubscription Deletes an existing subscription. All messages retained in the subscription are immediately dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is deleted, a new one may be created with the same name, but the new one has no association with the old subscription or its topic unless the same topic is specified. Request object method variants only take one parameter, a request object, which must be constructed before the call. deleteSubscription(DeleteSubscriptionRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. deleteSubscription(SubscriptionName subscription)
+ * deleteSubscription(String subscription)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. deleteSubscriptionCallable()
+ * ModifyAckDeadline Modifies the ack deadline for a specific message. This method is useful to indicate that more time is needed to process a message by the subscriber, or to make the message available for redelivery if the processing was interrupted. Note that this does not modify the subscription-level `ackDeadlineSeconds` used for subsequent messages. Request object method variants only take one parameter, a request object, which must be constructed before the call. modifyAckDeadline(ModifyAckDeadlineRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. modifyAckDeadline(SubscriptionName subscription, List<String> ackIds, int ackDeadlineSeconds)
+ * modifyAckDeadline(String subscription, List<String> ackIds, int ackDeadlineSeconds)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. modifyAckDeadlineCallable()
+ * Acknowledge Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages from the subscription.
+ * Acknowledging a message whose ack deadline has expired may succeed, but such a message may be redelivered later. Acknowledging a message more than once will not result in an error. Request object method variants only take one parameter, a request object, which must be constructed before the call. acknowledge(AcknowledgeRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. acknowledge(SubscriptionName subscription, List<String> ackIds)
+ * acknowledge(String subscription, List<String> ackIds)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. acknowledgeCallable()
+ * Pull Pulls messages from the server. Request object method variants only take one parameter, a request object, which must be constructed before the call. pull(PullRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. pull(SubscriptionName subscription, int maxMessages)
+ * pull(String subscription, int maxMessages)
+ * pull(SubscriptionName subscription, boolean returnImmediately, int maxMessages)
+ * pull(String subscription, boolean returnImmediately, int maxMessages)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. pullCallable()
+ * StreamingPull Establishes a stream with the server, which sends messages down to the client. The client streams acknowledgments and ack deadline modifications back to the server. The server will close the stream and return the status on any error. The server may close the stream with status `UNAVAILABLE` to reassign server-side resources, in which case, the client should re-establish the stream. Flow control can be achieved by configuring the underlying RPC channel. Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. streamingPullCallable()
+ * ModifyPushConfig Modifies the `PushConfig` for a specified subscription.
+ * This may be used to change a push subscription to a pull one (signified by an empty `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push subscription. Messages will accumulate for delivery continuously through the call regardless of changes to the `PushConfig`. Request object method variants only take one parameter, a request object, which must be constructed before the call. modifyPushConfig(ModifyPushConfigRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. modifyPushConfig(SubscriptionName subscription, PushConfig pushConfig)
+ * modifyPushConfig(String subscription, PushConfig pushConfig)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. modifyPushConfigCallable()
+ * GetSnapshot Gets the configuration details of a snapshot. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. Request object method variants only take one parameter, a request object, which must be constructed before the call. getSnapshot(GetSnapshotRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. getSnapshot(SnapshotName snapshot)
+ * getSnapshot(String snapshot)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. getSnapshotCallable()
+ * ListSnapshots Lists the existing snapshots. Snapshots are used in [Seek]( https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. Request object method variants only take one parameter, a request object, which must be constructed before the call. listSnapshots(ListSnapshotsRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. listSnapshots(ProjectName project)
+ * listSnapshots(String project)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. listSnapshotsPagedCallable()
+ * listSnapshotsCallable()
+ * CreateSnapshot Creates a snapshot from the requested subscription. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. If the snapshot already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the `Snapshot.expire_time` field. If the name is not provided in the request, the server will assign a random name for this snapshot on the same project as the subscription, conforming to the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is populated in the returned Snapshot object. Note that for REST API requests, you must specify a name in the request. Request object method variants only take one parameter, a request object, which must be constructed before the call. createSnapshot(CreateSnapshotRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. createSnapshot(SnapshotName name, SubscriptionName subscription)
+ * createSnapshot(SnapshotName name, String subscription)
+ * createSnapshot(String name, SubscriptionName subscription)
+ * createSnapshot(String name, String subscription)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. createSnapshotCallable()
+ * UpdateSnapshot Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. Request object method variants only take one parameter, a request object, which must be constructed before the call. updateSnapshot(UpdateSnapshotRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. updateSnapshot(Snapshot snapshot, FieldMask updateMask)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. updateSnapshotCallable()
+ * DeleteSnapshot Removes an existing snapshot. Snapshots are used in [Seek] (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new one may be created with the same name, but the new one has no association with the old snapshot or its subscription, unless the same subscription is specified. Request object method variants only take one parameter, a request object, which must be constructed before the call. deleteSnapshot(DeleteSnapshotRequest request)
+ * "Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method. deleteSnapshot(SnapshotName snapshot)
+ * deleteSnapshot(String snapshot)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. deleteSnapshotCallable()
+ * Seek Seeks an existing subscription to a point in time or to a given snapshot, whichever is provided in the request. Snapshots are used in [Seek] (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in an existing subscription to the state captured by a snapshot. Note that both the subscription and the snapshot must be on the same topic. Request object method variants only take one parameter, a request object, which must be constructed before the call. seek(SeekRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. seekCallable()
+ * SetIamPolicy Sets the access control policy on the specified resource. Replacesany existing policy.
+ * Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors. Request object method variants only take one parameter, a request object, which must be constructed before the call. setIamPolicy(SetIamPolicyRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. setIamPolicyCallable()
+ * GetIamPolicy Gets the access control policy for a resource. Returns an empty policyif the resource exists and does not have a policy set. Request object method variants only take one parameter, a request object, which must be constructed before the call. getIamPolicy(GetIamPolicyRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. getIamPolicyCallable()
+ * TestIamPermissions Returns permissions that a caller has on the specified resource. If theresource does not exist, this will return an empty set ofpermissions, not a `NOT_FOUND` error.
+ * Note: This operation is designed to be used for buildingpermission-aware UIs and command-line tools, not for authorizationchecking. This operation may "fail open" without warning. Request object method variants only take one parameter, a request object, which must be constructed before the call. testIamPermissions(TestIamPermissionsRequest request)
+ * Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service. testIamPermissionsCallable()
+ * See the individual methods for example code.
+ *
+ * Many parameters require resource names to be formatted in a particular way. To assist with
+ * these names, this class includes a format method for each type of name, and additionally a parse
+ * method to extract the individual identifiers contained within names that are returned.
+ *
+ * This class can be customized by passing in a custom instance of SubscriptionAdminSettings to
+ * create(). For example:
+ *
+ * To customize credentials:
+ *
+ * To customize the endpoint:
+ *
+ * To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over
+ * the wire:
+ *
+ * Please refer to the GitHub repository's samples for more quickstart code snippets.
+ */
+@Generated("by gapic-generator-java")
+public class SubscriptionAdminClient implements BackgroundResource {
+ private final SubscriptionAdminSettings settings;
+ private final SubscriberStub stub;
+
+ /** Constructs an instance of SubscriptionAdminClient with default settings. */
+ public static final SubscriptionAdminClient create() throws IOException {
+ return create(SubscriptionAdminSettings.newBuilder().build());
+ }
+
+ /**
+ * Constructs an instance of SubscriptionAdminClient, using the given settings. The channels are
+ * created based on the settings passed in, or defaults for any settings that are not set.
+ */
+ public static final SubscriptionAdminClient create(SubscriptionAdminSettings settings)
+ throws IOException {
+ return new SubscriptionAdminClient(settings);
+ }
+
+ /**
+ * Constructs an instance of SubscriptionAdminClient, using the given stub for making calls. This
+ * is for advanced usage - prefer using create(SubscriptionAdminSettings).
+ */
+ public static final SubscriptionAdminClient create(SubscriberStub stub) {
+ return new SubscriptionAdminClient(stub);
+ }
+
+ /**
+ * Constructs an instance of SubscriptionAdminClient, using the given settings. This is protected
+ * so that it is easy to make a subclass, but otherwise, the static factory methods should be
+ * preferred.
+ */
+ protected SubscriptionAdminClient(SubscriptionAdminSettings settings) throws IOException {
+ this.settings = settings;
+ this.stub = ((SubscriberStubSettings) settings.getStubSettings()).createStub();
+ }
+
+ protected SubscriptionAdminClient(SubscriberStub stub) {
+ this.settings = null;
+ this.stub = stub;
+ }
+
+ public final SubscriptionAdminSettings getSettings() {
+ return settings;
+ }
+
+ public SubscriberStub getStub() {
+ return stub;
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription
+ * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription createSubscription(
+ SubscriptionName name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setTopic(topic == null ? null : topic.toString())
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription
+ * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription createSubscription(
+ SubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setTopic(topic)
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription
+ * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription createSubscription(
+ String name, TopicName topic, PushConfig pushConfig, int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name)
+ .setTopic(topic == null ? null : topic.toString())
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription
+ * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription createSubscription(
+ String name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name)
+ .setTopic(topic)
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription
+ * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name
+ * format](https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #createSubscription(SubscriptionName, TopicName, PushConfig, int)}
+ * instead.
+ */
+ @Deprecated
+ public final Subscription createSubscription(
+ ProjectSubscriptionName name,
+ ProjectTopicName topic,
+ PushConfig pushConfig,
+ int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setTopic(topic == null ? null : topic.toString())
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/admin#resource_names). If the subscription already
+ * exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is populated in
+ * the returned Subscription object. Note that for REST API requests, you must specify a name in
+ * the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @deprecated Use {@link #createSubscription(SubscriptionName, String, PushConfig, int)} instead.
+ */
+ @Deprecated
+ public final Subscription createSubscription(
+ ProjectSubscriptionName name, String topic, PushConfig pushConfig, int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setTopic(topic)
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/admin#resource_names). If the subscription already
+ * exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/admin#resource_names). The generated name is populated in
+ * the returned Subscription object. Note that for REST API requests, you must specify a name in
+ * the request.
+ *
+ * Sample code:
+ *
+ * For pull subscriptions, this value is used as the initial value for the ack deadline. To
+ * override this value for a given message, call `ModifyAckDeadline` with the corresponding
+ * `ack_id` if using non-streaming pull or send the `ack_id` in a
+ * `StreamingModifyAckDeadlineRequest` if using streaming pull. The minimum custom deadline
+ * you can specify is 10 seconds. The maximum custom deadline you can specify is 600 seconds
+ * (10 minutes). If this parameter is 0, a default value of 10 seconds is used.
+ * For push delivery, this value is also used to set the request timeout for the call to
+ * the push endpoint.
+ * If the subscriber never acknowledges the message, the Pub/Sub system will eventually
+ * redeliver the message.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #createSubscription(SubscriptionName, TopicName, PushConfig, int)}
+ * instead.
+ */
+ @Deprecated
+ public final Subscription createSubscription(
+ ProjectSubscriptionName name,
+ TopicName topic,
+ PushConfig pushConfig,
+ int ackDeadlineSeconds) {
+ Subscription request =
+ Subscription.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setTopic(topic == null ? null : topic.toString())
+ .setPushConfig(pushConfig)
+ .setAckDeadlineSeconds(ackDeadlineSeconds)
+ .build();
+ return createSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a subscription to a given topic. See the [resource name rules]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). If the subscription
+ * already exists, returns `ALREADY_EXISTS`. If the corresponding topic doesn't exist, returns
+ * `NOT_FOUND`.
+ *
+ * If the name is not provided in the request, the server will assign a random name for this
+ * subscription on the same project as the topic, conforming to the [resource name format]
+ * (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). The generated name is
+ * populated in the returned Subscription object. Note that for REST API requests, you must
+ * specify a name in the request.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Acknowledging a message whose ack deadline has expired may succeed, but such a message may
+ * be redelivered later. Acknowledging a message more than once will not result in an error.
+ *
+ * Sample code:
+ *
+ * Acknowledging a message whose ack deadline has expired may succeed, but such a message may
+ * be redelivered later. Acknowledging a message more than once will not result in an error.
+ *
+ * Sample code:
+ *
+ * Acknowledging a message whose ack deadline has expired may succeed, but such a message may
+ * be redelivered later. Acknowledging a message more than once will not result in an error.
+ *
+ * Sample code:
+ *
+ * Acknowledging a message whose ack deadline has expired may succeed, but such a message may
+ * be redelivered later. Acknowledging a message more than once will not result in an error.
+ *
+ * Sample code:
+ *
+ * Acknowledging a message whose ack deadline has expired may succeed, but such a message may
+ * be redelivered later. Acknowledging a message more than once will not result in an error.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * This may be used to change a push subscription to a pull one (signified by an empty
+ * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push
+ * subscription. Messages will accumulate for delivery continuously through the call regardless of
+ * changes to the `PushConfig`.
+ *
+ * Sample code:
+ *
+ * An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages
+ * from the given subscription and allow messages to be pulled and acknowledged - effectively
+ * pausing the subscription if `Pull` or `StreamingPull` is not called.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void modifyPushConfig(SubscriptionName subscription, PushConfig pushConfig) {
+ ModifyPushConfigRequest request =
+ ModifyPushConfigRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .setPushConfig(pushConfig)
+ .build();
+ modifyPushConfig(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Modifies the `PushConfig` for a specified subscription.
+ *
+ * This may be used to change a push subscription to a pull one (signified by an empty
+ * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push
+ * subscription. Messages will accumulate for delivery continuously through the call regardless of
+ * changes to the `PushConfig`.
+ *
+ * Sample code:
+ *
+ * An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages
+ * from the given subscription and allow messages to be pulled and acknowledged - effectively
+ * pausing the subscription if `Pull` or `StreamingPull` is not called.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void modifyPushConfig(String subscription, PushConfig pushConfig) {
+ ModifyPushConfigRequest request =
+ ModifyPushConfigRequest.newBuilder()
+ .setSubscription(subscription)
+ .setPushConfig(pushConfig)
+ .build();
+ modifyPushConfig(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Modifies the `PushConfig` for a specified subscription.
+ *
+ * This may be used to change a push subscription to a pull one (signified by an empty
+ * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push
+ * subscription. Messages will accumulate for delivery continuously through the call regardless of
+ * changes to the `PushConfig`.
+ *
+ * Sample code:
+ *
+ * This may be used to change a push subscription to a pull one (signified by an empty
+ * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push
+ * subscription. Messages will accumulate for delivery continuously through the call regardless of
+ * changes to the `PushConfig`.
+ *
+ * Sample code:
+ *
+ * An empty `pushConfig` indicates that the Pub/Sub system should stop pushing messages
+ * from the given subscription and allow messages to be pulled and acknowledged - effectively
+ * pausing the subscription if `Pull` or `StreamingPull` is not called.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #modifyPushConfig(SubscriptionName, PushConfig)} instead.
+ */
+ @Deprecated
+ public final void modifyPushConfig(ProjectSubscriptionName subscription, PushConfig pushConfig) {
+ ModifyPushConfigRequest request =
+ ModifyPushConfigRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .setPushConfig(pushConfig)
+ .build();
+ modifyPushConfig(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Modifies the `PushConfig` for a specified subscription.
+ *
+ * This may be used to change a push subscription to a pull one (signified by an empty
+ * `PushConfig`) or vice versa, or change the endpoint URL and other attributes of a push
+ * subscription. Messages will accumulate for delivery continuously through the call regardless of
+ * changes to the `PushConfig`.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.
+ *
+ * Sample code:
+ *
+ * Can return Public Errors: NOT_FOUND, INVALID_ARGUMENT and PERMISSION_DENIED
+ *
+ * Sample code:
+ *
+ * Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`errors.
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * Sample code:
+ *
+ * {@code
+ * // This {@code MessageReceiver} passes all messages to a {@link BlockingQueue}. This method can
+ * // be called concurrently from multiple threads, so it is important that the queue be
+ * // thread-safe.
+ * //
+ * // This example is for illustration. Implementations may directly process messages instead of
+ * // sending them to queues.
+ * MessageReceiver receiver =
+ * new MessageReceiver() {
+ * public void receiveMessage(final PubsubMessage message, final AckReplyConsumer consumer) {
+ * if (blockingQueue.offer(message)) {
+ * consumer.ack();
+ * } else {
+ * consumer.nack();
+ * }
+ * }
+ * };
+ *
+ * }
+ *
+ *
+ */
+ void receiveMessage(final PubsubMessage message, final AckReplyConsumer consumer);
+}
diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java
new file mode 100644
index 000000000000..49792be07207
--- /dev/null
+++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/MessageReceiverWithAckResponse.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.pubsub.v1;
+
+import com.google.pubsub.v1.PubsubMessage;
+
+public interface MessageReceiverWithAckResponse {
+ void receiveMessage(PubsubMessage message, AckReplyConsumerWithResponse consumer);
+}
diff --git a/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java
new file mode 100644
index 000000000000..54c7436af2b6
--- /dev/null
+++ b/java-pubsub/google-cloud-pubsub/src/main/java/com/google/cloud/pubsub/v1/ModackRequestData.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.pubsub.v1;
+
+import java.util.*;
+
+class ModackRequestData {
+ private final int deadlineExtensionSeconds;
+ private List
+ *
+ *
+ * {@code
+ * String message = "my_message";
+ * ByteString data = ByteString.copyFromUtf8(message);
+ * PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
+ * ApiFuture
+ *
+ * @param message the message to publish.
+ * @return the message ID wrapped in a future.
+ */
+ @Override
+ public ApiFuture{@code
+ * String projectName = "my_project";
+ * String topicName = "my_topic";
+ * ProjectTopicName topic = ProjectTopicName.create(projectName, topicName);
+ * Publisher publisher = Publisher.newBuilder(topic).build();
+ * try {
+ * // ...
+ * } finally {
+ * // When finished with the publisher, make sure to shutdown to free up resources.
+ * publisher.shutdown();
+ * publisher.awaitTermination(1, TimeUnit.MINUTES);
+ * }
+ * }
+ */
+ public static Builder newBuilder(TopicName topicName) {
+ return newBuilder(topicName.toString());
+ }
+
+ /**
+ * Constructs a new {@link Builder} using the given topic.
+ *
+ * {@code
+ * String topic = "projects/my_project/topics/my_topic";
+ * Publisher publisher = Publisher.newBuilder(topic).build();
+ * try {
+ * // ...
+ * } finally {
+ * // When finished with the publisher, make sure to shutdown to free up resources.
+ * publisher.shutdown();
+ * publisher.awaitTermination(1, TimeUnit.MINUTES);
+ * }
+ * }
+ */
+ public static Builder newBuilder(String topicName) {
+ return new Builder(topicName);
+ }
+
+ /** A builder of {@link Publisher}s. */
+ public static final class Builder {
+ static final Duration MIN_TOTAL_TIMEOUT = Duration.ofSeconds(10);
+ static final Duration MIN_RPC_TIMEOUT = Duration.ofMillis(10);
+
+ // Meaningful defaults.
+ static final long DEFAULT_ELEMENT_COUNT_THRESHOLD = 100L;
+ static final long DEFAULT_REQUEST_BYTES_THRESHOLD = 1000L; // 1 kB
+ static final Duration DEFAULT_DELAY_THRESHOLD = Duration.ofMillis(1);
+ private static final Duration DEFAULT_INITIAL_RPC_TIMEOUT = Duration.ofSeconds(5);
+ private static final Duration DEFAULT_MAX_RPC_TIMEOUT = Duration.ofSeconds(60);
+ private static final Duration DEFAULT_TOTAL_TIMEOUT = Duration.ofSeconds(600);
+ private static final Duration DEFAULT_INITIAL_RETRY_DELAY = Duration.ofMillis(100);
+ private static final Duration DEFAULT_MAX_RETRY_DELAY = Duration.ofSeconds(60);
+ private static final double DEFAULT_MULTIPLIER = 4;
+ static final BatchingSettings DEFAULT_BATCHING_SETTINGS =
+ BatchingSettings.newBuilder()
+ .setDelayThresholdDuration(DEFAULT_DELAY_THRESHOLD)
+ .setRequestByteThreshold(DEFAULT_REQUEST_BYTES_THRESHOLD)
+ .setElementCountThreshold(DEFAULT_ELEMENT_COUNT_THRESHOLD)
+ .setFlowControlSettings(
+ FlowControlSettings.newBuilder()
+ .setLimitExceededBehavior(FlowController.LimitExceededBehavior.Ignore)
+ .build())
+ .build();
+ static final RetrySettings DEFAULT_RETRY_SETTINGS =
+ RetrySettings.newBuilder()
+ .setTotalTimeoutDuration(DEFAULT_TOTAL_TIMEOUT)
+ .setInitialRetryDelayDuration(DEFAULT_INITIAL_RETRY_DELAY)
+ .setRetryDelayMultiplier(DEFAULT_MULTIPLIER)
+ .setMaxRetryDelayDuration(DEFAULT_MAX_RETRY_DELAY)
+ .setInitialRpcTimeoutDuration(DEFAULT_INITIAL_RPC_TIMEOUT)
+ .setRpcTimeoutMultiplier(DEFAULT_MULTIPLIER)
+ .setMaxRpcTimeoutDuration(DEFAULT_MAX_RPC_TIMEOUT)
+ .build();
+ static final boolean DEFAULT_ENABLE_MESSAGE_ORDERING = false;
+ private static final int THREADS_PER_CPU = 5;
+ static final ExecutorProvider DEFAULT_EXECUTOR_PROVIDER =
+ InstantiatingExecutorProvider.newBuilder()
+ .setExecutorThreadCount(THREADS_PER_CPU * Runtime.getRuntime().availableProcessors())
+ .build();
+ static final boolean DEFAULT_ENABLE_COMPRESSION = false;
+ static final long DEFAULT_COMPRESSION_BYTES_THRESHOLD = 240L;
+
+ String topicName;
+ private String endpoint = null;
+ private String universeDomain = null;
+
+ // Batching options
+ BatchingSettings batchingSettings = DEFAULT_BATCHING_SETTINGS;
+
+ RetrySettings retrySettings = DEFAULT_RETRY_SETTINGS;
+
+ private boolean enableMessageOrdering = DEFAULT_ENABLE_MESSAGE_ORDERING;
+
+ private TransportChannelProvider channelProvider =
+ TopicAdminSettings.defaultGrpcTransportProviderBuilder().setChannelsPerCpu(1).build();
+
+ private HeaderProvider headerProvider = new NoHeaderProvider();
+ private HeaderProvider internalHeaderProvider =
+ TopicAdminSettings.defaultApiClientHeaderProviderBuilder().build();
+ ExecutorProvider executorProvider = DEFAULT_EXECUTOR_PROVIDER;
+ private CredentialsProvider credentialsProvider =
+ TopicAdminSettings.defaultCredentialsProviderBuilder().build();
+
+ private ApiFunction{@code
+ * String message = "my_message";
+ * ByteString data = ByteString.copyFromUtf8(message);
+ * PubsubMessage pubsubMessage = PubsubMessage.newBuilder().setData(data).build();
+ * ApiFuture
+ *
+ * @param message the message to publish.
+ * @return the message ID wrapped in a future.
+ */
+ ApiFuture{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ProjectName parent = ProjectName.of("[PROJECT]");
+ * Schema schema = Schema.newBuilder().build();
+ * String schemaId = "schemaId-697673060";
+ * Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+ * }
+ * }
+ *
+ *
+ *
+ *
+ *
+ *
+ * Method
+ * Description
+ * Method Variants
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings schemaServiceSettings =
+ * SchemaServiceSettings.newBuilder()
+ * .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ * .build();
+ * SchemaServiceClient schemaServiceClient = SchemaServiceClient.create(schemaServiceSettings);
+ * }
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings schemaServiceSettings =
+ * SchemaServiceSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * SchemaServiceClient schemaServiceClient = SchemaServiceClient.create(schemaServiceSettings);
+ * }
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings schemaServiceSettings =
+ * SchemaServiceSettings.newHttpJsonBuilder().build();
+ * SchemaServiceClient schemaServiceClient = SchemaServiceClient.create(schemaServiceSettings);
+ * }
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ProjectName parent = ProjectName.of("[PROJECT]");
+ * Schema schema = Schema.newBuilder().build();
+ * String schemaId = "schemaId-697673060";
+ * Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+ * }
+ * }
+ *
+ * @param parent Required. The name of the project in which to create the schema. Format is
+ * `projects/{project-id}`.
+ * @param schema Required. The schema object to create.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String parent = ProjectName.of("[PROJECT]").toString();
+ * Schema schema = Schema.newBuilder().build();
+ * String schemaId = "schemaId-697673060";
+ * Schema response = schemaServiceClient.createSchema(parent, schema, schemaId);
+ * }
+ * }
+ *
+ * @param parent Required. The name of the project in which to create the schema. Format is
+ * `projects/{project-id}`.
+ * @param schema Required. The schema object to create.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * CreateSchemaRequest request =
+ * CreateSchemaRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setSchema(Schema.newBuilder().build())
+ * .setSchemaId("schemaId-697673060")
+ * .build();
+ * Schema response = schemaServiceClient.createSchema(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema createSchema(CreateSchemaRequest request) {
+ return createSchemaCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * CreateSchemaRequest request =
+ * CreateSchemaRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setSchema(Schema.newBuilder().build())
+ * .setSchemaId("schemaId-697673060")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+ * Schema response = schemaServiceClient.getSchema(name);
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema to get. Format is
+ * `projects/{project}/schemas/{schema}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema getSchema(SchemaName name) {
+ GetSchemaRequest request =
+ GetSchemaRequest.newBuilder().setName(name == null ? null : name.toString()).build();
+ return getSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+ * Schema response = schemaServiceClient.getSchema(name);
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema to get. Format is
+ * `projects/{project}/schemas/{schema}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema getSchema(String name) {
+ GetSchemaRequest request = GetSchemaRequest.newBuilder().setName(name).build();
+ return getSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * GetSchemaRequest request =
+ * GetSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .build();
+ * Schema response = schemaServiceClient.getSchema(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema getSchema(GetSchemaRequest request) {
+ return getSchemaCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * GetSchemaRequest request =
+ * GetSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ProjectName parent = ProjectName.of("[PROJECT]");
+ * for (Schema element : schemaServiceClient.listSchemas(parent).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param parent Required. The name of the project in which to list schemas. Format is
+ * `projects/{project-id}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSchemasPagedResponse listSchemas(ProjectName parent) {
+ ListSchemasRequest request =
+ ListSchemasRequest.newBuilder()
+ .setParent(parent == null ? null : parent.toString())
+ .build();
+ return listSchemas(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists schemas in a project.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String parent = ProjectName.of("[PROJECT]").toString();
+ * for (Schema element : schemaServiceClient.listSchemas(parent).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param parent Required. The name of the project in which to list schemas. Format is
+ * `projects/{project-id}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSchemasPagedResponse listSchemas(String parent) {
+ ListSchemasRequest request = ListSchemasRequest.newBuilder().setParent(parent).build();
+ return listSchemas(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists schemas in a project.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ListSchemasRequest request =
+ * ListSchemasRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * for (Schema element : schemaServiceClient.listSchemas(request).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSchemasPagedResponse listSchemas(ListSchemasRequest request) {
+ return listSchemasPagedCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists schemas in a project.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ListSchemasRequest request =
+ * ListSchemasRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ListSchemasRequest request =
+ * ListSchemasRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * while (true) {
+ * ListSchemasResponse response = schemaServiceClient.listSchemasCallable().call(request);
+ * for (Schema element : response.getSchemasList()) {
+ * // doThingsWith(element);
+ * }
+ * String nextPageToken = response.getNextPageToken();
+ * if (!Strings.isNullOrEmpty(nextPageToken)) {
+ * request = request.toBuilder().setPageToken(nextPageToken).build();
+ * } else {
+ * break;
+ * }
+ * }
+ * }
+ * }
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+ * for (Schema element : schemaServiceClient.listSchemaRevisions(name).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema to list revisions for.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSchemaRevisionsPagedResponse listSchemaRevisions(SchemaName name) {
+ ListSchemaRevisionsRequest request =
+ ListSchemaRevisionsRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .build();
+ return listSchemaRevisions(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists all schema revisions for the named schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+ * for (Schema element : schemaServiceClient.listSchemaRevisions(name).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema to list revisions for.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSchemaRevisionsPagedResponse listSchemaRevisions(String name) {
+ ListSchemaRevisionsRequest request =
+ ListSchemaRevisionsRequest.newBuilder().setName(name).build();
+ return listSchemaRevisions(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists all schema revisions for the named schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ListSchemaRevisionsRequest request =
+ * ListSchemaRevisionsRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * for (Schema element : schemaServiceClient.listSchemaRevisions(request).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSchemaRevisionsPagedResponse listSchemaRevisions(
+ ListSchemaRevisionsRequest request) {
+ return listSchemaRevisionsPagedCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists all schema revisions for the named schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ListSchemaRevisionsRequest request =
+ * ListSchemaRevisionsRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ListSchemaRevisionsRequest request =
+ * ListSchemaRevisionsRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setView(SchemaView.forNumber(0))
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * while (true) {
+ * ListSchemaRevisionsResponse response =
+ * schemaServiceClient.listSchemaRevisionsCallable().call(request);
+ * for (Schema element : response.getSchemasList()) {
+ * // doThingsWith(element);
+ * }
+ * String nextPageToken = response.getNextPageToken();
+ * if (!Strings.isNullOrEmpty(nextPageToken)) {
+ * request = request.toBuilder().setPageToken(nextPageToken).build();
+ * } else {
+ * break;
+ * }
+ * }
+ * }
+ * }
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+ * Schema schema = Schema.newBuilder().build();
+ * Schema response = schemaServiceClient.commitSchema(name, schema);
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema we are revising. Format is
+ * `projects/{project}/schemas/{schema}`.
+ * @param schema Required. The schema revision to commit.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema commitSchema(SchemaName name, Schema schema) {
+ CommitSchemaRequest request =
+ CommitSchemaRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setSchema(schema)
+ .build();
+ return commitSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Commits a new schema revision to an existing schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+ * Schema schema = Schema.newBuilder().build();
+ * Schema response = schemaServiceClient.commitSchema(name, schema);
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema we are revising. Format is
+ * `projects/{project}/schemas/{schema}`.
+ * @param schema Required. The schema revision to commit.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema commitSchema(String name, Schema schema) {
+ CommitSchemaRequest request =
+ CommitSchemaRequest.newBuilder().setName(name).setSchema(schema).build();
+ return commitSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Commits a new schema revision to an existing schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * CommitSchemaRequest request =
+ * CommitSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setSchema(Schema.newBuilder().build())
+ * .build();
+ * Schema response = schemaServiceClient.commitSchema(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema commitSchema(CommitSchemaRequest request) {
+ return commitSchemaCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Commits a new schema revision to an existing schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * CommitSchemaRequest request =
+ * CommitSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setSchema(Schema.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+ * String revisionId = "revisionId-1507445162";
+ * Schema response = schemaServiceClient.rollbackSchema(name, revisionId);
+ * }
+ * }
+ *
+ * @param name Required. The schema being rolled back with revision id.
+ * @param revisionId Required. The revision ID to roll back to. It must be a revision of the same
+ * schema.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+ * String revisionId = "revisionId-1507445162";
+ * Schema response = schemaServiceClient.rollbackSchema(name, revisionId);
+ * }
+ * }
+ *
+ * @param name Required. The schema being rolled back with revision id.
+ * @param revisionId Required. The revision ID to roll back to. It must be a revision of the same
+ * schema.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * RollbackSchemaRequest request =
+ * RollbackSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setRevisionId("revisionId-1507445162")
+ * .build();
+ * Schema response = schemaServiceClient.rollbackSchema(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema rollbackSchema(RollbackSchemaRequest request) {
+ return rollbackSchemaCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a new schema revision that is a copy of the provided revision_id.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * RollbackSchemaRequest request =
+ * RollbackSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setRevisionId("revisionId-1507445162")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+ * String revisionId = "revisionId-1507445162";
+ * Schema response = schemaServiceClient.deleteSchemaRevision(name, revisionId);
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema revision to be deleted, with a revision ID
+ * explicitly included.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+ * String revisionId = "revisionId-1507445162";
+ * Schema response = schemaServiceClient.deleteSchemaRevision(name, revisionId);
+ * }
+ * }
+ *
+ * @param name Required. The name of the schema revision to be deleted, with a revision ID
+ * explicitly included.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * DeleteSchemaRevisionRequest request =
+ * DeleteSchemaRevisionRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setRevisionId("revisionId-1507445162")
+ * .build();
+ * Schema response = schemaServiceClient.deleteSchemaRevision(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Schema deleteSchemaRevision(DeleteSchemaRevisionRequest request) {
+ return deleteSchemaRevisionCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes a specific schema revision.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * DeleteSchemaRevisionRequest request =
+ * DeleteSchemaRevisionRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setRevisionId("revisionId-1507445162")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SchemaName name = SchemaName.of("[PROJECT]", "[SCHEMA]");
+ * schemaServiceClient.deleteSchema(name);
+ * }
+ * }
+ *
+ * @param name Required. Name of the schema to delete. Format is
+ * `projects/{project}/schemas/{schema}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSchema(SchemaName name) {
+ DeleteSchemaRequest request =
+ DeleteSchemaRequest.newBuilder().setName(name == null ? null : name.toString()).build();
+ deleteSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String name = SchemaName.of("[PROJECT]", "[SCHEMA]").toString();
+ * schemaServiceClient.deleteSchema(name);
+ * }
+ * }
+ *
+ * @param name Required. Name of the schema to delete. Format is
+ * `projects/{project}/schemas/{schema}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSchema(String name) {
+ DeleteSchemaRequest request = DeleteSchemaRequest.newBuilder().setName(name).build();
+ deleteSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * DeleteSchemaRequest request =
+ * DeleteSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .build();
+ * schemaServiceClient.deleteSchema(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSchema(DeleteSchemaRequest request) {
+ deleteSchemaCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * DeleteSchemaRequest request =
+ * DeleteSchemaRequest.newBuilder()
+ * .setName(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ProjectName parent = ProjectName.of("[PROJECT]");
+ * Schema schema = Schema.newBuilder().build();
+ * ValidateSchemaResponse response = schemaServiceClient.validateSchema(parent, schema);
+ * }
+ * }
+ *
+ * @param parent Required. The name of the project in which to validate schemas. Format is
+ * `projects/{project-id}`.
+ * @param schema Required. The schema object to validate.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ValidateSchemaResponse validateSchema(ProjectName parent, Schema schema) {
+ ValidateSchemaRequest request =
+ ValidateSchemaRequest.newBuilder()
+ .setParent(parent == null ? null : parent.toString())
+ .setSchema(schema)
+ .build();
+ return validateSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Validates a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * String parent = ProjectName.of("[PROJECT]").toString();
+ * Schema schema = Schema.newBuilder().build();
+ * ValidateSchemaResponse response = schemaServiceClient.validateSchema(parent, schema);
+ * }
+ * }
+ *
+ * @param parent Required. The name of the project in which to validate schemas. Format is
+ * `projects/{project-id}`.
+ * @param schema Required. The schema object to validate.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ValidateSchemaResponse validateSchema(String parent, Schema schema) {
+ ValidateSchemaRequest request =
+ ValidateSchemaRequest.newBuilder().setParent(parent).setSchema(schema).build();
+ return validateSchema(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Validates a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ValidateSchemaRequest request =
+ * ValidateSchemaRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setSchema(Schema.newBuilder().build())
+ * .build();
+ * ValidateSchemaResponse response = schemaServiceClient.validateSchema(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ValidateSchemaResponse validateSchema(ValidateSchemaRequest request) {
+ return validateSchemaCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Validates a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ValidateSchemaRequest request =
+ * ValidateSchemaRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setSchema(Schema.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ValidateMessageRequest request =
+ * ValidateMessageRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setMessage(ByteString.EMPTY)
+ * .setEncoding(Encoding.forNumber(0))
+ * .build();
+ * ValidateMessageResponse response = schemaServiceClient.validateMessage(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ValidateMessageResponse validateMessage(ValidateMessageRequest request) {
+ return validateMessageCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Validates a message against a schema.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * ValidateMessageRequest request =
+ * ValidateMessageRequest.newBuilder()
+ * .setParent(ProjectName.of("[PROJECT]").toString())
+ * .setMessage(ByteString.EMPTY)
+ * .setEncoding(Encoding.forNumber(0))
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SetIamPolicyRequest request =
+ * SetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setPolicy(Policy.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * Policy response = schemaServiceClient.setIamPolicy(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Policy setIamPolicy(SetIamPolicyRequest request) {
+ return setIamPolicyCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Sets the access control policy on the specified resource. Replacesany existing policy.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * SetIamPolicyRequest request =
+ * SetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setPolicy(Policy.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * GetIamPolicyRequest request =
+ * GetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setOptions(GetPolicyOptions.newBuilder().build())
+ * .build();
+ * Policy response = schemaServiceClient.getIamPolicy(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Policy getIamPolicy(GetIamPolicyRequest request) {
+ return getIamPolicyCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the access control policy for a resource. Returns an empty policyif the resource exists
+ * and does not have a policy set.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * GetIamPolicyRequest request =
+ * GetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setOptions(GetPolicyOptions.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * TestIamPermissionsRequest request =
+ * TestIamPermissionsRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .addAllPermissions(new ArrayList
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final TestIamPermissionsResponse testIamPermissions(TestIamPermissionsRequest request) {
+ return testIamPermissionsCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Returns permissions that a caller has on the specified resource. If theresource does not exist,
+ * this will return an empty set ofpermissions, not a `NOT_FOUND` error.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SchemaServiceClient schemaServiceClient = SchemaServiceClient.create()) {
+ * TestIamPermissionsRequest request =
+ * TestIamPermissionsRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .addAllPermissions(new ArrayList
+ */
+ public final UnaryCallable
+ *
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SchemaServiceSettings.Builder schemaServiceSettingsBuilder = SchemaServiceSettings.newBuilder();
+ * schemaServiceSettingsBuilder
+ * .createSchemaSettings()
+ * .setRetrySettings(
+ * schemaServiceSettingsBuilder
+ * .createSchemaSettings()
+ * .getRetrySettings()
+ * .toBuilder()
+ * .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ * .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ * .setMaxAttempts(5)
+ * .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ * .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ * .setRetryDelayMultiplier(1.3)
+ * .setRpcTimeoutMultiplier(1.5)
+ * .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ * .build());
+ * SchemaServiceSettings schemaServiceSettings = schemaServiceSettingsBuilder.build();
+ * }
+ *
+ * Please refer to the [Client Side Retry
+ * Guide](https://docs.cloud.google.com/java/docs/client-retries) for additional support in setting
+ * retries.
+ */
+@Generated("by gapic-generator-java")
+public class SchemaServiceSettings extends ClientSettings
+ *
+ *
+ * @param key The key for the task queue
+ * @param callable The thing to run
+ * @param
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * {@code
+ * Subscriber subscriber = Subscriber.newBuilder(subscription, receiver).build();
+ * subscriber.addListener(new Subscriber.Listener() {
+ * public void failed(Subscriber.State from, Throwable failure) {
+ * // Handle error.
+ * }
+ * }, executor);
+ * subscriber.startAsync();
+ *
+ * // Wait for a stop signal.
+ * // In a server, this might be a signal to stop serving.
+ * // In this example, the signal is just a dummy Future.
+ * //
+ * // By default, Subscriber uses daemon threads (see
+ * // https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html).
+ * // Consequently, once other threads have terminated, Subscriber will not stop the JVM from
+ * // exiting.
+ * // If the Subscriber should simply run forever, either use the setExecutorProvider method in
+ * // Subscriber.Builder
+ * // to use non-daemon threads or run
+ * // for (;;) {
+ * // Thread.sleep(Long.MAX_VALUE);
+ * // }
+ * // at the end of main() to previent the main thread from exiting.
+ * done.get();
+ * subscriber.stopAsync().awaitTerminated();
+ * }
+ */
+ @Override
+ public ApiService startAsync() {
+ // Override only for the docs.
+ return super.startAsync();
+ }
+
+ @Override
+ protected void doStart() {
+ logger.log(Level.FINE, "Starting subscriber group.");
+
+ try {
+ this.subscriberStub = GrpcSubscriberStub.create(subStubSettings);
+ } catch (IOException e) {
+ // doesn't matter what we throw, the Service will just catch it and fail to start.
+ throw new IllegalStateException(e);
+ }
+
+ // When started, connections submit tasks to the executor.
+ // These tasks must finish before the connections can declare themselves running.
+ // If we have a single-thread executor and call startStreamingConnections from the
+ // same executor, it will deadlock: the thread will be stuck waiting for connections
+ // to start but cannot start the connections.
+ // For this reason, we spawn a dedicated thread. Starting subscriber should be rare.
+ new Thread(
+ new Runnable() {
+ @Override
+ public void run() {
+ try {
+ startStreamingConnections();
+ notifyStarted();
+ } catch (Throwable t) {
+ notifyFailed(t);
+ }
+ }
+ })
+ .start();
+ }
+
+ @Override
+ protected void doStop() {
+ new Thread(
+ new Runnable() {
+ @Override
+ public void run() {
+ try {
+ runShutdown();
+ notifyStopped();
+ } catch (Exception e) {
+ notifyFailed(e);
+ }
+ }
+ })
+ .start();
+ }
+
+ private void runShutdown() {
+ java.time.Duration timeout = subscriberShutdownSettings.getTimeout();
+ long deadlineMillis = -1;
+ if (!timeout.isNegative()) {
+ deadlineMillis = clock.millisTime() + timeout.toMillis();
+ }
+
+ stopAllStreamingConnections(deadlineMillis);
+ shutdownBackgroundResources();
+ subscriberStub.shutdownNow();
+ }
+
+ private void startStreamingConnections() {
+ synchronized (streamingSubscriberConnections) {
+ for (int i = 0; i < numPullers; i++) {
+ final ScheduledExecutorService executor = executorProvider.getExecutor();
+ if (executorProvider.shouldAutoClose()) {
+ backgroundResources.add(new ExecutorAsBackgroundResource((executor)));
+ }
+
+ StreamingSubscriberConnection.Builder streamingSubscriberConnectionBuilder;
+
+ if (receiverWithAckResponse != null) {
+ streamingSubscriberConnectionBuilder =
+ StreamingSubscriberConnection.newBuilder(receiverWithAckResponse);
+ } else {
+ streamingSubscriberConnectionBuilder = StreamingSubscriberConnection.newBuilder(receiver);
+ }
+
+ StreamingSubscriberConnection streamingSubscriberConnection =
+ streamingSubscriberConnectionBuilder
+ .setSubscription(subscriptionName)
+ .setAckExpirationPadding(ACK_EXPIRATION_PADDING_DEFAULT)
+ .setMaxAckExtensionPeriod(maxAckExtensionPeriod)
+ .setMinDurationPerAckExtension(minDurationPerAckExtension)
+ .setMinDurationPerAckExtensionDefaultUsed(minDurationPerAckExtensionDefaultUsed)
+ .setMaxDurationPerAckExtension(maxDurationPerAckExtension)
+ .setMaxDurationPerAckExtensionDefaultUsed(maxDurationPerAckExtensionDefaultUsed)
+ .setAckLatencyDistribution(ackLatencyDistribution)
+ .setSubscriberStub(subscriberStub)
+ .setChannelAffinity(i)
+ .setFlowControlSettings(flowControlSettings)
+ .setFlowController(flowController)
+ .setUseLegacyFlowControl(useLegacyFlowControl)
+ .setExecutor(executor)
+ .setSystemExecutor(alarmsExecutor)
+ .setClock(clock)
+ .setEnableOpenTelemetryTracing(enableOpenTelemetryTracing)
+ .setTracer(tracer)
+ .setSubscriberShutdownSettings(subscriberShutdownSettings)
+ .setProtocolVersion(protocolVersion)
+ .build();
+
+ streamingSubscriberConnections.add(streamingSubscriberConnection);
+ }
+ startConnections(
+ streamingSubscriberConnections,
+ new Listener() {
+ @Override
+ public void failed(State from, Throwable failure) {
+ // If a connection failed is because of a fatal error, we should fail the
+ // whole subscriber.
+ runShutdown();
+ try {
+ notifyFailed(failure);
+ } catch (IllegalStateException e) {
+ if (isRunning()) {
+ throw e;
+ }
+ // It could happen that we are shutting down while some channels fail.
+ }
+ }
+ });
+ }
+ }
+
+ private void stopAllStreamingConnections(long deadlineMillis) {
+ stopConnections(streamingSubscriberConnections, deadlineMillis);
+ }
+
+ private void shutdownBackgroundResources() {
+ for (BackgroundResource resource : backgroundResources) {
+ resource.shutdown();
+ }
+ }
+
+ private void startConnections(
+ List extends ApiService> connections, final ApiService.Listener connectionsListener) {
+ for (ApiService subscriber : connections) {
+ subscriber.addListener(connectionsListener, alarmsExecutor);
+ subscriber.startAsync();
+ }
+ for (ApiService subscriber : connections) {
+ subscriber.awaitRunning();
+ }
+ }
+
+ private void stopConnections(List extends ApiService> connections, long deadlineMillis) {
+ ArrayList
+ *
+ *
+ * "Outstanding messages" here means the messages that have already been given to {@link
+ * MessageReceiver} but not yet {@code acked()} or {@code nacked()}.
+ *
+ * {@code
+ * FlowControlSettings flowControlSettings =
+ * FlowControlSettings.newBuilder()
+ * .setMaxOutstandingElementCount(10_000L)
+ * .setMaxOutstandingRequestBytes(1_000_000_000L)
+ * .build();
+ * Subscriber subscriber =
+ * Subscriber.newBuilder(subscriptionName, receiver)
+ * .setFlowControlSettings(flowControlSettings)
+ * .build();
+ * }
+ */
+ public Builder setFlowControlSettings(FlowControlSettings flowControlSettings) {
+ this.flowControlSettings = Preconditions.checkNotNull(flowControlSettings);
+ return this;
+ }
+
+ /**
+ * Disables enforcing flow control settings at the Cloud PubSub server and uses the less
+ * accurate method of only enforcing flow control at the client side.
+ */
+ public Builder setUseLegacyFlowControl(boolean value) {
+ this.useLegacyFlowControl = value;
+ return this;
+ }
+
+ /**
+ * This method is obsolete. Use {@link #setMaxAckExtensionPeriodDuration(java.time.Duration)}
+ * instead.
+ */
+ @ObsoleteApi("Use setMaxAckExtensionPeriodDuration(java.time.Duration) instead")
+ public Builder setMaxAckExtensionPeriod(org.threeten.bp.Duration maxAckExtensionPeriod) {
+ return setMaxAckExtensionPeriodDuration(toJavaTimeDuration(maxAckExtensionPeriod));
+ }
+
+ /**
+ * Set the maximum period a message ack deadline will be extended. Defaults to one hour.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ *
+ *
+ *
+ *
+ *
+ * Method
+ * Description
+ * Method Variants
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings subscriptionAdminSettings =
+ * SubscriptionAdminSettings.newBuilder()
+ * .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ * .build();
+ * SubscriptionAdminClient subscriptionAdminClient =
+ * SubscriptionAdminClient.create(subscriptionAdminSettings);
+ * }
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings subscriptionAdminSettings =
+ * SubscriptionAdminSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * SubscriptionAdminClient subscriptionAdminClient =
+ * SubscriptionAdminClient.create(subscriptionAdminSettings);
+ * }
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * SubscriptionAdminSettings subscriptionAdminSettings =
+ * SubscriptionAdminSettings.newHttpJsonBuilder().build();
+ * SubscriptionAdminClient subscriptionAdminClient =
+ * SubscriptionAdminClient.create(subscriptionAdminSettings);
+ * }
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ * @param name Required. Identifier. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig Optional. If push delivery is used with this subscription, this field is used
+ * to configure it.
+ * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis)
+ * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In
+ * the interval after the message is delivered and before it is acknowledged, it is considered
+ * to be _outstanding_. During that time period, the message will not be redelivered (on a
+ * best-effort basis).
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ * @param name Required. Identifier. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig Optional. If push delivery is used with this subscription, this field is used
+ * to configure it.
+ * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis)
+ * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In
+ * the interval after the message is delivered and before it is acknowledged, it is considered
+ * to be _outstanding_. During that time period, the message will not be redelivered (on a
+ * best-effort basis).
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ * @param name Required. Identifier. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig Optional. If push delivery is used with this subscription, this field is used
+ * to configure it.
+ * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis)
+ * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In
+ * the interval after the message is delivered and before it is acknowledged, it is considered
+ * to be _outstanding_. During that time period, the message will not be redelivered (on a
+ * best-effort basis).
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String name = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ * @param name Required. Identifier. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig Optional. If push delivery is used with this subscription, this field is used
+ * to configure it.
+ * @param ackDeadlineSeconds Optional. The approximate amount of time (on a best-effort basis)
+ * Pub/Sub waits for the subscriber to acknowledge receipt before resending the message. In
+ * the interval after the message is delivered and before it is acknowledged, it is considered
+ * to be _outstanding_. During that time period, the message will not be redelivered (on a
+ * best-effort basis).
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * Subscription request =
+ * Subscription.newBuilder()
+ * .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+ * .setPushConfig(PushConfig.newBuilder().build())
+ * .setBigqueryConfig(BigQueryConfig.newBuilder().build())
+ * .setCloudStorageConfig(CloudStorageConfig.newBuilder().build())
+ * .setBigtableConfig(BigtableConfig.newBuilder().build())
+ * .setAckDeadlineSeconds(2135351438)
+ * .setRetainAckedMessages(true)
+ * .setMessageRetentionDuration(Duration.newBuilder().build())
+ * .putAllLabels(new HashMap
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription createSubscription(Subscription request) {
+ return createSubscriptionCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Creates a subscription to a given topic. See the <a
+ * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name
+ * rules</a>. If the subscription already exists, returns `ALREADY_EXISTS`. If the
+ * corresponding topic doesn't exist, returns `NOT_FOUND`.
+ *
+ *
+ *
+ * @param name Required. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig If push delivery is used with this subscription, this field is used to
+ * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack
+ * messages using API methods.
+ * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits
+ * for the subscriber to acknowledge receipt before resending the message. In the interval
+ * after the message is delivered and before it is acknowledged, it is considered to be
+ * <i>outstanding</i>. During that time period, the message will not be
+ * redelivered (on a best-effort basis).
+ *
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * ProjectTopicName topic = ProjectTopicName.of("[PROJECT]", "[TOPIC]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 0;
+ * Subscription response = subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * String topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString();
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ * @param name Required. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig If push delivery is used with this subscription, this field is used to
+ * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack
+ * messages using API methods.
+ * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits
+ * for the subscriber to acknowledge receipt before resending the message. In the interval
+ * after the message is delivered and before it is acknowledged, it is considered to be
+ * <i>outstanding</i>. During that time period, the message will not be
+ * redelivered (on a best-effort basis).
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName name = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * TopicName topic = TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * int ackDeadlineSeconds = 2135351438;
+ * Subscription response =
+ * subscriptionAdminClient.createSubscription(name, topic, pushConfig, ackDeadlineSeconds);
+ * }
+ * }
+ *
+ * @param name Required. The name of the subscription. It must have the format
+ * `"projects/{project}/subscriptions/{subscription}"`. `{subscription}` must start with a
+ * letter, and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`), underscores
+ * (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent signs (`%`). It must be between 3
+ * and 255 characters in length, and it must not start with `"goog"`.
+ * @param topic Required. The name of the topic from which this subscription is receiving
+ * messages. Format is `projects/{project}/topics/{topic}`. The value of this field will be
+ * `_deleted-topic_` if the topic has been deleted.
+ * @param pushConfig If push delivery is used with this subscription, this field is used to
+ * configure it. An empty `pushConfig` signifies that the subscriber will pull and ack
+ * messages using API methods.
+ * @param ackDeadlineSeconds The approximate amount of time (on a best-effort basis) Pub/Sub waits
+ * for the subscriber to acknowledge receipt before resending the message. In the interval
+ * after the message is delivered and before it is acknowledged, it is considered to be
+ * <i>outstanding</i>. During that time period, the message will not be
+ * redelivered (on a best-effort basis).
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * Subscription request =
+ * Subscription.newBuilder()
+ * .setName(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .setTopic(TopicName.ofProjectTopicName("[PROJECT]", "[TOPIC]").toString())
+ * .setPushConfig(PushConfig.newBuilder().build())
+ * .setBigqueryConfig(BigQueryConfig.newBuilder().build())
+ * .setCloudStorageConfig(CloudStorageConfig.newBuilder().build())
+ * .setBigtableConfig(BigtableConfig.newBuilder().build())
+ * .setAckDeadlineSeconds(2135351438)
+ * .setRetainAckedMessages(true)
+ * .setMessageRetentionDuration(Duration.newBuilder().build())
+ * .putAllLabels(new HashMap
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * Subscription response = subscriptionAdminClient.getSubscription(subscription);
+ * }
+ * }
+ *
+ * @param subscription Required. The name of the subscription to get. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription getSubscription(SubscriptionName subscription) {
+ GetSubscriptionRequest request =
+ GetSubscriptionRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ return getSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a subscription.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * Subscription response = subscriptionAdminClient.getSubscription(subscription);
+ * }
+ * }
+ *
+ * @param subscription Required. The name of the subscription to get. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription getSubscription(String subscription) {
+ GetSubscriptionRequest request =
+ GetSubscriptionRequest.newBuilder().setSubscription(subscription).build();
+ return getSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a subscription.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * GetSubscriptionRequest request =
+ * GetSubscriptionRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .build();
+ * Subscription response = subscriptionAdminClient.getSubscription(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription getSubscription(GetSubscriptionRequest request) {
+ return getSubscriptionCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a subscription.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * Subscription response = subscriptionAdminClient.getSubscription(subscription);
+ * }
+ * }
+ *
+ * @param subscription Required. The name of the subscription to get. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #getSubscription(SubscriptionName)} instead.
+ */
+ @Deprecated
+ public final Subscription getSubscription(ProjectSubscriptionName subscription) {
+ GetSubscriptionRequest request =
+ GetSubscriptionRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ return getSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a subscription.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * GetSubscriptionRequest request =
+ * GetSubscriptionRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * Subscription subscription = Subscription.newBuilder().build();
+ * FieldMask updateMask = FieldMask.newBuilder().build();
+ * Subscription response = subscriptionAdminClient.updateSubscription(subscription, updateMask);
+ * }
+ * }
+ *
+ * @param subscription Required. The updated subscription object.
+ * @param updateMask Required. Indicates which fields in the provided subscription to update. Must
+ * be specified and non-empty.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription updateSubscription(Subscription subscription, FieldMask updateMask) {
+ UpdateSubscriptionRequest request =
+ UpdateSubscriptionRequest.newBuilder()
+ .setSubscription(subscription)
+ .setUpdateMask(updateMask)
+ .build();
+ return updateSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Updates an existing subscription by updating the fields specified in the update mask. Note that
+ * certain properties of a subscription, such as its topic, are not modifiable.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * UpdateSubscriptionRequest request =
+ * UpdateSubscriptionRequest.newBuilder()
+ * .setSubscription(Subscription.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * Subscription response = subscriptionAdminClient.updateSubscription(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Subscription updateSubscription(UpdateSubscriptionRequest request) {
+ return updateSubscriptionCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Updates an existing subscription by updating the fields specified in the update mask. Note that
+ * certain properties of a subscription, such as its topic, are not modifiable.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * UpdateSubscriptionRequest request =
+ * UpdateSubscriptionRequest.newBuilder()
+ * .setSubscription(Subscription.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectName project = ProjectName.of("[PROJECT]");
+ * for (Subscription element : subscriptionAdminClient.listSubscriptions(project).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param project Required. The name of the project in which to list subscriptions. Format is
+ * `projects/{project-id}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSubscriptionsPagedResponse listSubscriptions(ProjectName project) {
+ ListSubscriptionsRequest request =
+ ListSubscriptionsRequest.newBuilder()
+ .setProject(project == null ? null : project.toString())
+ .build();
+ return listSubscriptions(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists matching subscriptions.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String project = ProjectName.of("[PROJECT]").toString();
+ * for (Subscription element : subscriptionAdminClient.listSubscriptions(project).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param project Required. The name of the project in which to list subscriptions. Format is
+ * `projects/{project-id}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSubscriptionsPagedResponse listSubscriptions(String project) {
+ ListSubscriptionsRequest request =
+ ListSubscriptionsRequest.newBuilder().setProject(project).build();
+ return listSubscriptions(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists matching subscriptions.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ListSubscriptionsRequest request =
+ * ListSubscriptionsRequest.newBuilder()
+ * .setProject(ProjectName.of("[PROJECT]").toString())
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * for (Subscription element : subscriptionAdminClient.listSubscriptions(request).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSubscriptionsPagedResponse listSubscriptions(ListSubscriptionsRequest request) {
+ return listSubscriptionsPagedCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists matching subscriptions.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ListSubscriptionsRequest request =
+ * ListSubscriptionsRequest.newBuilder()
+ * .setProject(ProjectName.of("[PROJECT]").toString())
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ListSubscriptionsRequest request =
+ * ListSubscriptionsRequest.newBuilder()
+ * .setProject(ProjectName.of("[PROJECT]").toString())
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * while (true) {
+ * ListSubscriptionsResponse response =
+ * subscriptionAdminClient.listSubscriptionsCallable().call(request);
+ * for (Subscription element : response.getSubscriptionsList()) {
+ * // doThingsWith(element);
+ * }
+ * String nextPageToken = response.getNextPageToken();
+ * if (!Strings.isNullOrEmpty(nextPageToken)) {
+ * request = request.toBuilder().setPageToken(nextPageToken).build();
+ * } else {
+ * break;
+ * }
+ * }
+ * }
+ * }
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * subscriptionAdminClient.deleteSubscription(subscription);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription to delete. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSubscription(SubscriptionName subscription) {
+ DeleteSubscriptionRequest request =
+ DeleteSubscriptionRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ deleteSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes an existing subscription. All messages retained in the subscription are immediately
+ * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is
+ * deleted, a new one may be created with the same name, but the new one has no association with
+ * the old subscription or its topic unless the same topic is specified.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * subscriptionAdminClient.deleteSubscription(subscription);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription to delete. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSubscription(String subscription) {
+ DeleteSubscriptionRequest request =
+ DeleteSubscriptionRequest.newBuilder().setSubscription(subscription).build();
+ deleteSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes an existing subscription. All messages retained in the subscription are immediately
+ * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is
+ * deleted, a new one may be created with the same name, but the new one has no association with
+ * the old subscription or its topic unless the same topic is specified.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * DeleteSubscriptionRequest request =
+ * DeleteSubscriptionRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .build();
+ * subscriptionAdminClient.deleteSubscription(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSubscription(DeleteSubscriptionRequest request) {
+ deleteSubscriptionCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes an existing subscription. All messages retained in the subscription are immediately
+ * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is
+ * deleted, a new one may be created with the same name, but the new one has no association with
+ * the old subscription or its topic unless the same topic is specified.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * subscriptionAdminClient.deleteSubscription(subscription);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription to delete. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #deleteSubscription(SubscriptionName)} instead.
+ */
+ @Deprecated
+ public final void deleteSubscription(ProjectSubscriptionName subscription) {
+ DeleteSubscriptionRequest request =
+ DeleteSubscriptionRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ deleteSubscription(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Deletes an existing subscription. All messages retained in the subscription are immediately
+ * dropped. Calls to `Pull` after deletion will return `NOT_FOUND`. After a subscription is
+ * deleted, a new one may be created with the same name, but the new one has no association with
+ * the old subscription or its topic unless the same topic is specified.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * DeleteSubscriptionRequest request =
+ * DeleteSubscriptionRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * List
+ *
+ * @param subscription Required. The name of the subscription. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param ackIds Required. List of acknowledgment IDs.
+ * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request
+ * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will
+ * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might
+ * immediately make the message available for delivery to another subscriber client. This
+ * typically results in an increase in the rate of message redeliveries (that is, duplicates).
+ * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify in
+ * a single request is 600 seconds (10 minutes).
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void modifyAckDeadline(
+ SubscriptionName subscription, List{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * List
+ *
+ * @param subscription Required. The name of the subscription. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param ackIds Required. List of acknowledgment IDs.
+ * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request
+ * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will
+ * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might
+ * immediately make the message available for delivery to another subscriber client. This
+ * typically results in an increase in the rate of message redeliveries (that is, duplicates).
+ * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify in
+ * a single request is 600 seconds (10 minutes).
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void modifyAckDeadline(
+ String subscription, List{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ModifyAckDeadlineRequest request =
+ * ModifyAckDeadlineRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .addAllAckIds(new ArrayList
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void modifyAckDeadline(ModifyAckDeadlineRequest request) {
+ modifyAckDeadlineCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Modifies the ack deadline for a specific message. This method is useful to indicate that more
+ * time is needed to process a message by the subscriber, or to make the message available for
+ * redelivery if the processing was interrupted. Note that this does not modify the
+ * subscription-level `ackDeadlineSeconds` used for subsequent messages.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * List
+ *
+ * @param subscription Required. The name of the subscription. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param ackIds Required. List of acknowledgment IDs.
+ * @param ackDeadlineSeconds Required. The new ack deadline with respect to the time this request
+ * was sent to the Pub/Sub system. For example, if the value is 10, the new ack deadline will
+ * expire 10 seconds after the `ModifyAckDeadline` call was made. Specifying zero might
+ * immediately make the message available for delivery to another subscriber client. This
+ * typically results in an increase in the rate of message redeliveries (that is, duplicates).
+ * The minimum deadline you can specify is 0 seconds. The maximum deadline you can specify is
+ * 600 seconds (10 minutes).
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #modifyAckDeadline(SubscriptionName, List{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ModifyAckDeadlineRequest request =
+ * ModifyAckDeadlineRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .addAllAckIds(new ArrayList
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * List
+ *
+ * @param subscription Required. The subscription whose message is being acknowledged. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was
+ * returned by the Pub/Sub system in the `Pull` response. Must not be empty.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void acknowledge(SubscriptionName subscription, List{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * List
+ *
+ * @param subscription Required. The subscription whose message is being acknowledged. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was
+ * returned by the Pub/Sub system in the `Pull` response. Must not be empty.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void acknowledge(String subscription, List{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * AcknowledgeRequest request =
+ * AcknowledgeRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .addAllAckIds(new ArrayList
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void acknowledge(AcknowledgeRequest request) {
+ acknowledgeCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Acknowledges the messages associated with the `ack_ids` in the `AcknowledgeRequest`. The
+ * Pub/Sub system can remove the relevant messages from the subscription.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * List
+ *
+ * @param subscription Required. The subscription whose message is being acknowledged. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param ackIds Required. The acknowledgment ID for the messages being acknowledged that was
+ * returned by the Pub/Sub system in the `Pull` response. Must not be empty.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #acknowledge(SubscriptionName, List{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * AcknowledgeRequest request =
+ * AcknowledgeRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .addAllAckIds(new ArrayList
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * int maxMessages = 496131527;
+ * PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription from which messages should be pulled. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param maxMessages Required. The maximum number of messages to return for this request. Must be
+ * a positive integer. The Pub/Sub system may return fewer than the number specified.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final PullResponse pull(SubscriptionName subscription, int maxMessages) {
+ PullRequest request =
+ PullRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .setMaxMessages(maxMessages)
+ .build();
+ return pull(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * int maxMessages = 496131527;
+ * PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription from which messages should be pulled. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param maxMessages Required. The maximum number of messages to return for this request. Must be
+ * a positive integer. The Pub/Sub system may return fewer than the number specified.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final PullResponse pull(String subscription, int maxMessages) {
+ PullRequest request =
+ PullRequest.newBuilder().setSubscription(subscription).setMaxMessages(maxMessages).build();
+ return pull(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * boolean returnImmediately = true;
+ * int maxMessages = 496131527;
+ * PullResponse response =
+ * subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription from which messages should be pulled. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param returnImmediately Optional. If this field set to true, the system will respond
+ * immediately even if it there are no messages available to return in the `Pull` response.
+ * Otherwise, the system may wait (for a bounded amount of time) until at least one message is
+ * available, rather than returning no messages. Warning: setting this field to `true` is
+ * discouraged because it adversely impacts the performance of `Pull` operations. We recommend
+ * that users do not set this field.
+ * @param maxMessages Required. The maximum number of messages to return for this request. Must be
+ * a positive integer. The Pub/Sub system may return fewer than the number specified.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final PullResponse pull(
+ SubscriptionName subscription, boolean returnImmediately, int maxMessages) {
+ PullRequest request =
+ PullRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .setReturnImmediately(returnImmediately)
+ .setMaxMessages(maxMessages)
+ .build();
+ return pull(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * boolean returnImmediately = true;
+ * int maxMessages = 496131527;
+ * PullResponse response =
+ * subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription from which messages should be pulled. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param returnImmediately Optional. If this field set to true, the system will respond
+ * immediately even if it there are no messages available to return in the `Pull` response.
+ * Otherwise, the system may wait (for a bounded amount of time) until at least one message is
+ * available, rather than returning no messages. Warning: setting this field to `true` is
+ * discouraged because it adversely impacts the performance of `Pull` operations. We recommend
+ * that users do not set this field.
+ * @param maxMessages Required. The maximum number of messages to return for this request. Must be
+ * a positive integer. The Pub/Sub system may return fewer than the number specified.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final PullResponse pull(String subscription, boolean returnImmediately, int maxMessages) {
+ PullRequest request =
+ PullRequest.newBuilder()
+ .setSubscription(subscription)
+ .setReturnImmediately(returnImmediately)
+ .setMaxMessages(maxMessages)
+ .build();
+ return pull(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * PullRequest request =
+ * PullRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .setReturnImmediately(true)
+ * .setMaxMessages(496131527)
+ * .build();
+ * PullResponse response = subscriptionAdminClient.pull(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final PullResponse pull(PullRequest request) {
+ return pullCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server. The server may return `UNAVAILABLE` if there are too many
+ * concurrent pull requests pending for the given subscription.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * int maxMessages = 496131527;
+ * PullResponse response = subscriptionAdminClient.pull(subscription, maxMessages);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription from which messages should be pulled. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param maxMessages Required. The maximum number of messages to return for this request. Must be
+ * a positive integer. The Pub/Sub system may return fewer than the number specified.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #pull(SubscriptionName, int)} instead.
+ */
+ @Deprecated
+ public final PullResponse pull(ProjectSubscriptionName subscription, int maxMessages) {
+ PullRequest request =
+ PullRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .setMaxMessages(maxMessages)
+ .build();
+ return pull(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server. The server may return `UNAVAILABLE` if there are too many
+ * concurrent pull requests pending for the given subscription.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * boolean returnImmediately = true;
+ * int maxMessages = 496131527;
+ * PullResponse response =
+ * subscriptionAdminClient.pull(subscription, returnImmediately, maxMessages);
+ * }
+ * }
+ *
+ * @param subscription Required. The subscription from which messages should be pulled. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param returnImmediately Optional. If this field set to true, the system will respond
+ * immediately even if it there are no messages available to return in the `Pull` response.
+ * Otherwise, the system may wait (for a bounded amount of time) until at least one message is
+ * available, rather than returning no messages. Warning: setting this field to `true` is
+ * discouraged because it adversely impacts the performance of `Pull` operations. We recommend
+ * that users do not set this field.
+ * @param maxMessages Required. The maximum number of messages to return for this request. Must be
+ * a positive integer. The Pub/Sub system may return fewer than the number specified.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #pull(SubscriptionName, boolean, int)} instead.
+ */
+ @Deprecated
+ final PullResponse pull(
+ ProjectSubscriptionName subscription, boolean returnImmediately, int maxMessages) {
+ PullRequest request =
+ PullRequest.newBuilder()
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .setReturnImmediately(returnImmediately)
+ .setMaxMessages(maxMessages)
+ .build();
+ return pull(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Pulls messages from the server.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * PullRequest request =
+ * PullRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .setReturnImmediately(true)
+ * .setMaxMessages(496131527)
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * BidiStream
+ */
+ public final BidiStreamingCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);
+ * }
+ * }
+ *
+ * @param subscription Required. The name of the subscription. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param pushConfig Required. The push configuration for future deliveries.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);
+ * }
+ * }
+ *
+ * @param subscription Required. The name of the subscription. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param pushConfig Required. The push configuration for future deliveries.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ModifyPushConfigRequest request =
+ * ModifyPushConfigRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .setPushConfig(PushConfig.newBuilder().build())
+ * .build();
+ * subscriptionAdminClient.modifyPushConfig(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void modifyPushConfig(ModifyPushConfigRequest request) {
+ modifyPushConfigCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Modifies the `PushConfig` for a specified subscription.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * PushConfig pushConfig = PushConfig.newBuilder().build();
+ * subscriptionAdminClient.modifyPushConfig(subscription, pushConfig);
+ * }
+ * }
+ *
+ * @param subscription Required. The name of the subscription. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @param pushConfig Required. The push configuration for future deliveries.
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ModifyPushConfigRequest request =
+ * ModifyPushConfigRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .setPushConfig(PushConfig.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);
+ * }
+ * }
+ *
+ * @param snapshot Required. The name of the snapshot to get. Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot getSnapshot(SnapshotName snapshot) {
+ GetSnapshotRequest request =
+ GetSnapshotRequest.newBuilder()
+ .setSnapshot(snapshot == null ? null : snapshot.toString())
+ .build();
+ return getSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a snapshot. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+ * Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);
+ * }
+ * }
+ *
+ * @param snapshot Required. The name of the snapshot to get. Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot getSnapshot(String snapshot) {
+ GetSnapshotRequest request = GetSnapshotRequest.newBuilder().setSnapshot(snapshot).build();
+ return getSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a snapshot. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * GetSnapshotRequest request =
+ * GetSnapshotRequest.newBuilder()
+ * .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+ * .build();
+ * Snapshot response = subscriptionAdminClient.getSnapshot(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot getSnapshot(GetSnapshotRequest request) {
+ return getSnapshotCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a snapshot. Snapshots are used in <a
+ * href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a> operations, which
+ * allow you to manage message acknowledgments in bulk. That is, you can set the acknowledgment
+ * state of messages in an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSnapshotName snapshot = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * Snapshot response = subscriptionAdminClient.getSnapshot(snapshot);
+ * }
+ * }
+ *
+ * @param snapshot Required. The name of the snapshot to get. Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use Use {@link #getSnapshot(SnapshotName)} instead.
+ */
+ @Deprecated
+ public final Snapshot getSnapshot(ProjectSnapshotName snapshot) {
+ GetSnapshotRequest request =
+ GetSnapshotRequest.newBuilder()
+ .setSnapshot(snapshot == null ? null : snapshot.toString())
+ .build();
+ return getSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Gets the configuration details of a snapshot. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * GetSnapshotRequest request =
+ * GetSnapshotRequest.newBuilder()
+ * .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectName project = ProjectName.of("[PROJECT]");
+ * for (Snapshot element : subscriptionAdminClient.listSnapshots(project).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param project Required. The name of the project in which to list snapshots. Format is
+ * `projects/{project-id}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSnapshotsPagedResponse listSnapshots(ProjectName project) {
+ ListSnapshotsRequest request =
+ ListSnapshotsRequest.newBuilder()
+ .setProject(project == null ? null : project.toString())
+ .build();
+ return listSnapshots(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists the existing snapshots. Snapshots are used in [Seek](
+ * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String project = ProjectName.of("[PROJECT]").toString();
+ * for (Snapshot element : subscriptionAdminClient.listSnapshots(project).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param project Required. The name of the project in which to list snapshots. Format is
+ * `projects/{project-id}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSnapshotsPagedResponse listSnapshots(String project) {
+ ListSnapshotsRequest request = ListSnapshotsRequest.newBuilder().setProject(project).build();
+ return listSnapshots(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists the existing snapshots. Snapshots are used in [Seek](
+ * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ListSnapshotsRequest request =
+ * ListSnapshotsRequest.newBuilder()
+ * .setProject(ProjectName.of("[PROJECT]").toString())
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * for (Snapshot element : subscriptionAdminClient.listSnapshots(request).iterateAll()) {
+ * // doThingsWith(element);
+ * }
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final ListSnapshotsPagedResponse listSnapshots(ListSnapshotsRequest request) {
+ return listSnapshotsPagedCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Lists the existing snapshots. Snapshots are used in [Seek](
+ * https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ListSnapshotsRequest request =
+ * ListSnapshotsRequest.newBuilder()
+ * .setProject(ProjectName.of("[PROJECT]").toString())
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ListSnapshotsRequest request =
+ * ListSnapshotsRequest.newBuilder()
+ * .setProject(ProjectName.of("[PROJECT]").toString())
+ * .setPageSize(883849137)
+ * .setPageToken("pageToken873572522")
+ * .build();
+ * while (true) {
+ * ListSnapshotsResponse response =
+ * subscriptionAdminClient.listSnapshotsCallable().call(request);
+ * for (Snapshot element : response.getSnapshotsList()) {
+ * // doThingsWith(element);
+ * }
+ * String nextPageToken = response.getNextPageToken();
+ * if (!Strings.isNullOrEmpty(nextPageToken)) {
+ * request = request.toBuilder().setPageToken(nextPageToken).build();
+ * } else {
+ * break;
+ * }
+ * }
+ * }
+ * }
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the [resource
+ * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot createSnapshot(SnapshotName name, SubscriptionName subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ * The generated name is populated in the returned Snapshot object. Note that for REST API
+ * requests, you must specify a name in the request.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SnapshotName name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the [resource
+ * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot createSnapshot(SnapshotName name, String subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setSubscription(subscription)
+ .build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ * The generated name is populated in the returned Snapshot object. Note that for REST API
+ * requests, you must specify a name in the request.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+ * SubscriptionName subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the [resource
+ * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot createSnapshot(String name, SubscriptionName subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder()
+ .setName(name)
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ * The generated name is populated in the returned Snapshot object. Note that for REST API
+ * requests, you must specify a name in the request.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String name = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+ * String subscription = SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the [resource
+ * name rules](https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names). Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot createSnapshot(String name, String subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder().setName(name).setSubscription(subscription).build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ * The generated name is populated in the returned Snapshot object. Note that for REST API
+ * requests, you must specify a name in the request.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * CreateSnapshotRequest request =
+ * CreateSnapshotRequest.newBuilder()
+ * .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .putAllLabels(new HashMap
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot createSnapshot(CreateSnapshotRequest request) {
+ return createSnapshotCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The
+ * generated name is populated in the returned Snapshot object. Note that for REST API requests,
+ * you must specify a name in the request.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSnapshotName name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the <a
+ * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name
+ * rules</a>. Format is `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use Use {@link #createSnapshot(SnapshotName, SubscriptionName)} instead.
+ */
+ @Deprecated
+ public final Snapshot createSnapshot(
+ ProjectSnapshotName name, ProjectSubscriptionName subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The
+ * generated name is populated in the returned Snapshot object. Note that for REST API requests,
+ * you must specify a name in the request.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+ * ProjectSubscriptionName subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]");
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the <a
+ * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name
+ * rules</a>. Format is `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use Use {@link #createSnapshot(String, SubscriptionName)} instead.
+ */
+ @Deprecated
+ public final Snapshot createSnapshot(String name, ProjectSubscriptionName subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder()
+ .setName(name)
+ .setSubscription(subscription == null ? null : subscription.toString())
+ .build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/admin#resource_names). The
+ * generated name is populated in the returned Snapshot object. Note that for REST API requests,
+ * you must specify a name in the request.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSnapshotName name = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * String subscription = ProjectSubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString();
+ * Snapshot response = subscriptionAdminClient.createSnapshot(name, subscription);
+ * }
+ * }
+ *
+ * @param name Required. User-provided name for this snapshot. If the name is not provided in the
+ * request, the server will assign a random name for this snapshot on the same project as the
+ * subscription. Note that for REST API requests, you must specify a name. See the <a
+ * href="https://cloud.google.com/pubsub/docs/admin#resource_names"> resource name
+ * rules</a>. Format is `projects/{project}/snapshots/{snap}`.
+ * @param subscription Required. The subscription whose backlog the snapshot retains.
+ * Specifically, the created snapshot is guaranteed to retain: (a) The existing backlog on the
+ * subscription. More precisely, this is defined as the messages in the subscription's backlog
+ * that are unacknowledged upon the successful completion of the `CreateSnapshot` request; as
+ * well as: (b) Any messages published to the subscription's topic following the successful
+ * completion of the CreateSnapshot request. Format is
+ * `projects/{project}/subscriptions/{sub}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use Use {@link #createSnapshot(SnapshotName, String)} instead.
+ */
+ @Deprecated
+ public final Snapshot createSnapshot(ProjectSnapshotName name, String subscription) {
+ CreateSnapshotRequest request =
+ CreateSnapshotRequest.newBuilder()
+ .setName(name == null ? null : name.toString())
+ .setSubscription(subscription)
+ .build();
+ return createSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Creates a snapshot from the requested subscription. Snapshots are used in
+ * [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to
+ * manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot. If the snapshot
+ * already exists, returns `ALREADY_EXISTS`. If the requested subscription doesn't exist, returns
+ * `NOT_FOUND`. If the backlog in the subscription is too old -- and the resulting snapshot would
+ * expire in less than 1 hour -- then `FAILED_PRECONDITION` is returned. See also the
+ * `Snapshot.expire_time` field. If the name is not provided in the request, the server will
+ * assign a random name for this snapshot on the same project as the subscription, conforming to
+ * the [resource name format] (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ * The generated name is populated in the returned Snapshot object. Note that for REST API
+ * requests, you must specify a name in the request.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * CreateSnapshotRequest request =
+ * CreateSnapshotRequest.newBuilder()
+ * .setName(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .putAllLabels(new HashMap
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * Snapshot snapshot = Snapshot.newBuilder().build();
+ * FieldMask updateMask = FieldMask.newBuilder().build();
+ * Snapshot response = subscriptionAdminClient.updateSnapshot(snapshot, updateMask);
+ * }
+ * }
+ *
+ * @param snapshot Required. The updated snapshot object.
+ * @param updateMask Required. Indicates which fields in the provided snapshot to update. Must be
+ * specified and non-empty.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot updateSnapshot(Snapshot snapshot, FieldMask updateMask) {
+ UpdateSnapshotRequest request =
+ UpdateSnapshotRequest.newBuilder().setSnapshot(snapshot).setUpdateMask(updateMask).build();
+ return updateSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are
+ * used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow
+ * you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * UpdateSnapshotRequest request =
+ * UpdateSnapshotRequest.newBuilder()
+ * .setSnapshot(Snapshot.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * Snapshot response = subscriptionAdminClient.updateSnapshot(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Snapshot updateSnapshot(UpdateSnapshotRequest request) {
+ return updateSnapshotCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Updates an existing snapshot by updating the fields specified in the update mask. Snapshots are
+ * used in [Seek](https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow
+ * you to manage message acknowledgments in bulk. That is, you can set the acknowledgment state of
+ * messages in an existing subscription to the state captured by a snapshot.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * UpdateSnapshotRequest request =
+ * UpdateSnapshotRequest.newBuilder()
+ * .setSnapshot(Snapshot.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SnapshotName snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * subscriptionAdminClient.deleteSnapshot(snapshot);
+ * }
+ * }
+ *
+ * @param snapshot Required. The name of the snapshot to delete. Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSnapshot(SnapshotName snapshot) {
+ DeleteSnapshotRequest request =
+ DeleteSnapshotRequest.newBuilder()
+ .setSnapshot(snapshot == null ? null : snapshot.toString())
+ .build();
+ deleteSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Removes an existing snapshot. Snapshots are used in [Seek]
+ * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all
+ * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new
+ * one may be created with the same name, but the new one has no association with the old snapshot
+ * or its subscription, unless the same subscription is specified.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String snapshot = SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString();
+ * subscriptionAdminClient.deleteSnapshot(snapshot);
+ * }
+ * }
+ *
+ * @param snapshot Required. The name of the snapshot to delete. Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSnapshot(String snapshot) {
+ DeleteSnapshotRequest request =
+ DeleteSnapshotRequest.newBuilder().setSnapshot(snapshot).build();
+ deleteSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Removes an existing snapshot. Snapshots are used in [Seek]
+ * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all
+ * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new
+ * one may be created with the same name, but the new one has no association with the old snapshot
+ * or its subscription, unless the same subscription is specified.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * DeleteSnapshotRequest request =
+ * DeleteSnapshotRequest.newBuilder()
+ * .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+ * .build();
+ * subscriptionAdminClient.deleteSnapshot(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final void deleteSnapshot(DeleteSnapshotRequest request) {
+ deleteSnapshotCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Removes an existing snapshot. Snapshots are used in [Seek]
+ * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all
+ * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new
+ * one may be created with the same name, but the new one has no association with the old snapshot
+ * or its subscription, unless the same subscription is specified.
+ *
+ * {@code
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * ProjectSnapshotName snapshot = ProjectSnapshotName.of("[PROJECT]", "[SNAPSHOT]");
+ * subscriptionAdminClient.deleteSnapshot(snapshot);
+ * }
+ * }
+ *
+ * @param snapshot Required. The name of the snapshot to delete. Format is
+ * `projects/{project}/snapshots/{snap}`.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use Use {@link #deleteSnapshot(SnapshotName)} instead.
+ */
+ @Deprecated
+ public final void deleteSnapshot(ProjectSnapshotName snapshot) {
+ DeleteSnapshotRequest request =
+ DeleteSnapshotRequest.newBuilder()
+ .setSnapshot(snapshot == null ? null : snapshot.toString())
+ .build();
+ deleteSnapshot(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Removes an existing snapshot. Snapshots are used in [Seek]
+ * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot. When the snapshot is deleted, all
+ * messages retained in the snapshot are immediately dropped. After a snapshot is deleted, a new
+ * one may be created with the same name, but the new one has no association with the old snapshot
+ * or its subscription, unless the same subscription is specified.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * DeleteSnapshotRequest request =
+ * DeleteSnapshotRequest.newBuilder()
+ * .setSnapshot(SnapshotName.of("[PROJECT]", "[SNAPSHOT]").toString())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SeekRequest request =
+ * SeekRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .build();
+ * SeekResponse response = subscriptionAdminClient.seek(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final SeekResponse seek(SeekRequest request) {
+ return seekCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Seeks an existing subscription to a point in time or to a given snapshot, whichever is provided
+ * in the request. Snapshots are used in [Seek]
+ * (https://cloud.google.com/pubsub/docs/replay-overview) operations, which allow you to manage
+ * message acknowledgments in bulk. That is, you can set the acknowledgment state of messages in
+ * an existing subscription to the state captured by a snapshot. Note that both the subscription
+ * and the snapshot must be on the same topic.
+ *
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SeekRequest request =
+ * SeekRequest.newBuilder()
+ * .setSubscription(SubscriptionName.of("[PROJECT]", "[SUBSCRIPTION]").toString())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SetIamPolicyRequest request =
+ * SetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setPolicy(Policy.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * Policy response = subscriptionAdminClient.setIamPolicy(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Policy setIamPolicy(SetIamPolicyRequest request) {
+ return setIamPolicyCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Sets the access control policy on the specified resource. Replaces any existing policy.
+ *
+ *
+ *
+ * @param resource REQUIRED: The resource for which the policy is being specified. See the
+ * operation documentation for the appropriate value for this field.
+ * @param policy REQUIRED: The complete policy to be applied to the `resource`. The size of the
+ * policy is limited to a few 10s of KB. An empty policy is a valid policy but certain Cloud
+ * Platform services (such as Projects) might reject them.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ * @deprecated Use {@link #setIamPolicy(SetIamPolicyRequest)} instead.
+ */
+ @Deprecated
+ public final Policy setIamPolicy(String resource, Policy policy) {
+ SetIamPolicyRequest request =
+ SetIamPolicyRequest.newBuilder().setResource(resource).setPolicy(policy).build();
+ return setIamPolicy(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD.
+ /**
+ * Sets the access control policy on the specified resource. Replacesany existing policy.
+ *
+ *
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * String formattedResource = ProjectTopicName.format("[PROJECT]", "[TOPIC]");
+ * Policy policy = Policy.newBuilder().build();
+ * Policy response = subscriptionAdminClient.setIamPolicy(formattedResource, policy);
+ * }
+ * {@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * SetIamPolicyRequest request =
+ * SetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setPolicy(Policy.newBuilder().build())
+ * .setUpdateMask(FieldMask.newBuilder().build())
+ * .build();
+ * ApiFuture
+ */
+ public final UnaryCallable{@code
+ * // This snippet has been automatically generated and should be regarded as a code template only.
+ * // It will require modifications to work:
+ * // - It may require correct/in-range values for request initialization.
+ * // - It may require specifying regional endpoints when creating the service client as shown in
+ * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+ * try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
+ * GetIamPolicyRequest request =
+ * GetIamPolicyRequest.newBuilder()
+ * .setResource(SchemaName.of("[PROJECT]", "[SCHEMA]").toString())
+ * .setOptions(GetPolicyOptions.newBuilder().build())
+ * .build();
+ * Policy response = subscriptionAdminClient.getIamPolicy(request);
+ * }
+ * }
+ *
+ * @param request The request object containing all of the parameters for the API call.
+ * @throws com.google.api.gax.rpc.ApiException if the remote call fails
+ */
+ public final Policy getIamPolicy(GetIamPolicyRequest request) {
+ return getIamPolicyCallable().call(request);
+ }
+
+ // AUTO-GENERATED DOCUMENTATION AND METHOD
+ /**
+ * Gets the access control policy for a resource. Returns an empty policy if the resource exists
+ * and does not have a policy set.
+ *
+ *