createSnapshot method

Future<Snapshot> createSnapshot({
  1. required Map<String, String> labels,
  2. int retries = 5,
  3. required String snapshot,
  4. required String subscription,
})

Creates a snapshot from the requested subscription. Snapshots are used in Seek 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. The generated name is populated in the returned Snapshot object. Note that for REST API requests, you must specify a name in the request.

The snapshot name can be just the simple name or it can be the fully quantified name in the format: projects/{project}/snapshots/{snap}.

The subscription name can be just the simple name or it can be the fully quantified name in the format: projects/{project}/subscriptions/{subscription}.

Implementation

Future<Snapshot> createSnapshot({
  required Map<String, String> labels,
  int retries = 5,
  required String snapshot,
  required String subscription,
}) async {
  assert(_initialized);
  _logger.fine('[createSnapshot]: start -- [$subscription]');

  try {
    return await _execute(
      executor: () async {
        final result = await _pubsubApi.projects.snapshots.create(
          CreateSnapshotRequest(
            labels: labels,
            subscription: subscription.startsWith('projects/')
                ? subscription
                : 'projects/$_projectId/subscriptions/$subscription',
          ),
          snapshot.startsWith('projects/')
              ? snapshot
              : 'projects/$_projectId/snapshots/$snapshot',
        );

        return result;
      },
      retries: retries,
    );
  } finally {
    _logger.fine('[createSnapshot]: complete -- [$subscription]');
  }
}