in github-runner-ami/packer/files/runner-supervisor.py [0:0]
def dynamodb_atomic_decrement(self):
dynamodb = boto3.client('dynamodb')
try:
resp = dynamodb.update_item(
TableName=TABLE_NAME,
Key={'id': {'S': 'queued_jobs'}},
ExpressionAttributeValues={':delta': {'N': '-1'}, ':limit': {'N': '0'}},
UpdateExpression='ADD queued :delta',
# Make sure it never goes below zero!
ConditionExpression='queued > :limit',
ReturnValues='UPDATED_NEW',
)
log.info("Updated DynamoDB queue length: %s", resp['Attributes']['queued']['N'])
except dynamodb.exceptions.ConditionalCheckFailedException:
log.warning("%s.queued was already 0, we won't decrease it any further!", TABLE_NAME)