aws-sdk-ruby icon indicating copy to clipboard operation
aws-sdk-ruby copied to clipboard

wait_until(:table_not_exists… shows an error for a non existing table

Open thomaswitt opened this issue 9 months ago • 3 comments

Describe the bug

When I call Aws::DynamoDB::Client.new.wait_until(:table_not_exists, table_name: 'this_does_not_exist')

then I see a client error

[Aws::DynamoDB::Client 400 0.004513 0 retries] describe_table(table_name:"this_does_not_exist") Aws::DynamoDB::Errors::ResourceNotFoundException Cannot do operations on a non-existent table

IMHO this is unexpected behavior. When I tell the client to wait until a table does not exist (e.g. after a delete call) and it doesnt exist, it should just silently proceed.

Regression Issue

  • [ ] Select this option if this issue appears to be a regression.

Expected Behavior

Just return nil, do not show a DynamoDB Client error

Current Behavior

Shows client error.

Reproduction Steps

Aws::DynamoDB::Client.new.wait_until(:table_not_exists, table_name: 'this_does_not_exist')

Possible Solution

No response

Additional Information/Context

No response

Gem name ('aws-sdk', 'aws-sdk-resources' or service gems like 'aws-sdk-s3') and its version

aws-sdk-ruby

Environment details (Version of Ruby, OS environment)

latest, latest macOS

thomaswitt avatar Feb 13 '25 13:02 thomaswitt

Thanks for opening an issue. It currently returns nil as you would expect. The messaging is simply logging for the result of the call that the waiter makes. It looks for ResourceNotFoundException to determine a success state:

[1] pry(Aws)> Aws::DynamoDB::Client.new.wait_until(:table_not_exists, table_name: 'does-not-exist')
[Aws::DynamoDB::Client 400 0.360391 0 retries] describe_table(table_name:"does-not-exist") Aws::DynamoDB::Errors::ResourceNotFoundException Requested resource not found: Table: does-not-exist not found
=> nil

mullermp avatar Feb 13 '25 14:02 mullermp

@mullermp thanks for the answer and your time. I know that it returns the correct result, it just raises an error in my log file analyzer as it is an error (beacuse if you app throws a ResourceNotFoundException you usually want to know about that) . I simply wouldn't show this error for this function, that was my point.

thomaswitt avatar Feb 13 '25 16:02 thomaswitt

You could try configuring the log formatter to not display errors for a client you use as a waiter.

I think generally the SDK should still log all calls, whether from waiters, paginators, high level libraries, etc, because those calls may charge customers and we should be transparent about what service calls are made. We could consider a matcher string for whether the call was made from a waiter that can be filtered out.

mullermp avatar Feb 13 '25 16:02 mullermp