def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      Display dictionary with information about the new ACK deadline seconds
      for the given subscription and ackId.
    """
        client = subscriptions.SubscriptionsClient()

        subscription_ref = args.CONCEPTS.subscription.Parse()
        ack_ids = flags.ParseAckIdsArgs(args)
        result = client.ModifyAckDeadline(subscription_ref, ack_ids,
                                          args.ack_deadline)

        log.status.Print(
            'Set ackDeadlineSeconds to [{0}] for messages with ackId '
            '[{1}]] for subscription [{2}]'.format(
                args.ack_deadline, ','.join(ack_ids),
                subscription_ref.RelativeName()))

        legacy_output = properties.VALUES.pubsub.legacy_output.GetBool()
        if legacy_output:
            return {
                'subscriptionId': subscription_ref.RelativeName(),
                'ackId': ack_ids,
                'ackDeadlineSeconds': args.ack_deadline
            }
        else:
            return result
示例#2
0
    def Run(self, args):
        """This is what gets called when the user runs this command.

    Args:
      args: an argparse namespace. All the arguments that were provided to this
        command invocation.

    Returns:
      Display dictionary with information about the new ACK deadline seconds
      for the given subscription and ackId.
    """
        client = subscriptions.SubscriptionsClient()

        subscription_ref = args.CONCEPTS.subscription.Parse()
        ack_ids = flags.ParseAckIdsArgs(args)
        result = None
        ack_ids_and_failure_reasons = {}
        try:
            result = client.ModifyAckDeadline(subscription_ref, ack_ids,
                                              args.ack_deadline)
        except api_ex.HttpError as error:
            exc = exceptions.HttpException(error)
            ack_ids_and_failure_reasons = util.ParseExactlyOnceErrorInfo(
                exc.payload.details)
            # If the failure doesn't have more information (specifically for exactly
            # once related failures), re-raise the exception.
            if not ack_ids_and_failure_reasons:
                raise

        failed_ack_ids = [ack['AckId'] for ack in ack_ids_and_failure_reasons]
        successfully_processed_ack_ids = [
            ack_id for ack_id in ack_ids if ack_id not in failed_ack_ids
        ]

        log.status.Print(
            'Set ackDeadlineSeconds to [{0}] for messages with ackId '
            '[{1}]] for subscription [{2}]'.format(
                args.ack_deadline, ','.join(successfully_processed_ack_ids),
                subscription_ref.RelativeName()))
        if failed_ack_ids:
            log.status.Print(
                'Set ackDeadlineSeconds to [{0}] for messages with ackId '
                '[{1}]] failed for subscription [{2}]'.format(
                    args.ack_deadline, ','.join(failed_ack_ids),
                    subscription_ref.RelativeName()))
        if ack_ids_and_failure_reasons:
            return ack_ids_and_failure_reasons

        legacy_output = properties.VALUES.pubsub.legacy_output.GetBool()
        if legacy_output:
            result = {
                'subscriptionId': subscription_ref.RelativeName(),
                'ackId': ack_ids,
                'ackDeadlineSeconds': args.ack_deadline
            }

        return result
示例#3
0
 def Run(self, args):
     ack_ids = flags.ParseAckIdsArgs(args)
     legacy_output = properties.VALUES.pubsub.legacy_output.GetBool()
     result, ack_ids_and_failure_reasons = _Run(args,
                                                ack_ids,
                                                capture_failures=True,
                                                legacy_output=legacy_output)
     if ack_ids_and_failure_reasons:
         return ack_ids_and_failure_reasons
     return result
示例#4
0
 def Run(self, args):
   ack_ids = flags.ParseAckIdsArgs(args)
   legacy_output = properties.VALUES.pubsub.legacy_output.GetBool()
   return _Run(args, ack_ids, legacy_output=legacy_output)