Skip to content
This repository has been archived by the owner on Jul 14, 2023. It is now read-only.

TableService: batch operations do not end immediately on non-transient errors #41

Open
Janci144 opened this issue Jul 31, 2019 · 1 comment

Comments

@Janci144
Copy link

Which service(blob, file, queue) does this issue concern?

Tabls

Which version of the SDK was used? Please provide the output of pip freeze.

azure-cosmosdb-table==1.0.5

What problem was encountered?

When you try to insert the same items (that already exist) in a batch operation, it is trying to do retryies (even though it's not transient). The reason is that the batch operations REST API is returning a 202 code (ACCEPTED), but the exceptions are packaged inside the response body. The response body exception is not taken into consideration when chosing retry policy, so it's using the 202 code (ACCEPTED) from the batch response, and not the 409 code that is packaged inside the response body

Have you found a mitigation/solution?

For now we do something like this:

table_service = TableService(connection_string=connection_string)

def fff(ctx):
    if ctx.exception.status_code == 409:
        raise ctx.exception
table_service.retry_callback = fff  # this is what terminates the code immediately on conflict rows

logs_table_name = 'my_table'
batch = TableBatch()
entity= Entity()
entity.PartitionKey = "server-3677"
entity.RowKey = "0000000000000000000"
# ... other things
batch.insert_entity(entity)
table_service.commit_batch(logs_table_name, batch, timeout=1)  # this timeout is also ignored
@Janci144
Copy link
Author

Also the timeout is doing nothing because initial_backoff is by default 15 seconds which is too much.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant