Failed table transaction returns HTTP 400 instead of HTTP 409
See original GitHub issueWhich service(blob, file, queue, table) does this issue concern?
table
Which version of the Azurite was used?
3.12.0
Where do you get Azurite? (npm, DockerHub, NuGet, Visual Studio Code Extension)
npm
What’s the Node.js version?
v14.15.5
What problem was encountered?
When submitting a batch transaction to Table storage that contains a duplicate entity (i.e. “add” on an entity that already exists), the wrong response is returned causing the SDK to throw an unexpected exception. This works fine on Azure and the legacy emulator.
Unhandled exception. System.IO.InvalidDataException: Invalid header line: HTTP/1.1 400 Bad Request
at Azure.Core.MultipartReader.ReadHeadersAsync(CancellationToken cancellationToken)
at Azure.Core.MultipartReader.ReadNextSectionAsync(CancellationToken cancellationToken)
at Azure.Core.Multipart.GetNextSectionAsync(MultipartReader reader, Boolean async, CancellationToken cancellationToken)
at Azure.Core.Multipart.ParseAsync(Stream batchContent, String batchContentType, Boolean expectBoundariesWithCRLF, Boolean async, CancellationToken cancellationToken)
at Azure.Data.Tables.TableRestClient.SendBatchRequestAsync(HttpMessage message, CancellationToken cancellationToken)
at Azure.Data.Tables.TableClient.SubmitTransactionInternalAsync(IEnumerable`1 transactionalBatch, Guid batchId, Guid changesetId, Boolean async, CancellationToken cancellationToken)
at Azure.Data.Tables.TableClient.SubmitTransactionAsync(IEnumerable`1 transactionActions, CancellationToken cancellationToken)
at ConsoleApp1.Program.Main(String[] args) in C:\Users\joelv\Desktop\ConsoleApp1\ConsoleApp1\Program.cs:line 25
at ConsoleApp1.Program.<Main>(String[] args)
Steps to reproduce the issue?
using System;
using System.Threading.Tasks;
using Azure.Data.Tables;
namespace ConsoleApp1
{
class Program
{
static async Task Main(string[] args)
{
var client = new TableServiceClient("UseDevelopmentStorage=true");
var table = client.GetTableClient("test");
await table.CreateIfNotExistsAsync();
var pk = Guid.NewGuid().ToString();
await table.AddEntityAsync(new TableEntity(pk, "a"));
var actions = new[]
{
new TableTransactionAction(TableTransactionActionType.Add, new TableEntity(pk, "a")),
};
try
{
await table.SubmitTransactionAsync(actions);
}
catch (TableTransactionFailedException ex)
{
Console.WriteLine(ex.ToString());
}
}
}
}
If possible, please provide the debug log using the -d parameter, replacing <pathtodebuglog> with an appropriate path for your OS, or review the instructions for docker containers:
2021-05-22T22:49:49.009Z info: Azurite Blob service is starting on 127.0.0.1:10000
2021-05-22T22:49:49.010Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2021-05-22T22:49:49.010Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2021-05-22T22:49:49.025Z info: BlobGCManager:start() Starting BlobGCManager. Set status to Initializing.
2021-05-22T22:49:49.025Z info: BlobGCManager:start() Trigger mark and sweep loop. Set status to Running.
2021-05-22T22:49:49.025Z info: BlobGCManager:markSweepLoop() Start next mark and sweep.
2021-05-22T22:49:49.025Z info: BlobGCManager:markSweep() Get all extents.
2021-05-22T22:49:49.026Z info: BlobGCManager:start() BlobGCManager successfully started.
2021-05-22T22:49:49.033Z info: BlobGCManager:markSweep() Got 0 extents.
2021-05-22T22:49:49.033Z info: BlobGCManager:markSweep() Get referred extents.
2021-05-22T22:49:49.034Z info: BlobGCManager:markSweep() Got referred extents, unreferenced extents count is 0.
2021-05-22T22:49:49.034Z info: BlobGCManager:markSweepLoop() Mark and sweep finished, taken 9ms.
2021-05-22T22:49:49.034Z info: BlobGCManager:markSweepLoop() Sleep for 600000ms.
2021-05-22T22:49:49.035Z info: Azurite Blob service successfully listens on http://127.0.0.1:10000
2021-05-22T22:49:49.036Z info: Azurite Queue service is starting on 127.0.0.1:10001
2021-05-22T22:49:49.036Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2021-05-22T22:49:49.036Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2021-05-22T22:49:49.069Z info: QueueGCManager:start() Starting QueueGCManager, set status to Initializing
2021-05-22T22:49:49.069Z info: QueueGCManager:start() Trigger mark and sweep loop, set status to Running.
2021-05-22T22:49:49.069Z info: QueueGCManager:markSweepLoop() Start new mark and sweep.
2021-05-22T22:49:49.069Z info: QueueGCManger:markSweep() Get all extents.
2021-05-22T22:49:49.070Z info: QueueGCManager:start() QueueGCManager successfully started.
2021-05-22T22:49:49.070Z info: QueueGCManager:marksweep() Get 0 extents.
2021-05-22T22:49:49.070Z info: QueueGCManager:markSweep() Get referred extents, then remove from allExtents.
2021-05-22T22:49:49.070Z info: QueueGCManager:markSweep() Got referred extents, unreferenced extents count is 0.
2021-05-22T22:49:49.070Z info: QueueGCManager:markSweepLoop() Mark and sweep finished, take 1ms.
2021-05-22T22:49:49.070Z info: QueueGCManager:markSweepLoop() Sleep for 60000
2021-05-22T22:49:49.071Z info: Azurite Queue service successfully listens on http://127.0.0.1:10001
2021-05-22T22:49:49.071Z info: Azurite Table service is starting on 127.0.0.1:10002
2021-05-22T22:49:49.071Z info: AccountDataStore:init() Refresh accounts from environment variable AZURITE_ACCOUNTS with value undefined
2021-05-22T22:49:49.071Z info: AccountDataStore:init() Fallback to default emulator account devstoreaccount1.
2021-05-22T22:49:49.085Z info: Azurite Table service successfully listens on http://127.0.0.1:10002
2021-05-22T22:49:50.604Z 08685052-3e54-454b-8930-f6b4df28f625 info: TableStorageContextMiddleware: RequestMethod=POST RequestURL=http://127.0.0.1/devstoreaccount1/Tables?$format=application%2Fjson%3Bodata%3Dminimalmetadata RequestHeaders:{"host":"127.0.0.1:10002","x-ms-version":"2019-02-02","dataserviceversion":"3.0","accept":"application/json; odata=minimalmetadata","x-ms-client-request-id":"a4ea8c9e-00fc-4fe6-9df0-0d04b51d2c7d","x-ms-return-client-request-id":"true","user-agent":"azsdk-net-Data.Tables/12.0.0-beta.8 (.NET Core 3.1.15; Microsoft Windows 10.0.19042)","x-ms-date":"Sat, 22 May 2021 22:49:50 GMT","authorization":"SharedKeyLite devstoreaccount1:6VdxVnL2DBFVNk3eIvQ+bTqJxW5ONhDLKFoaxi6jUbo=","content-type":"application/json; odata=nometadata","content-length":"20"} ClientIP=127.0.0.1 Protocol=http HTTPVersion=1.1
2021-05-22T22:49:50.605Z 08685052-3e54-454b-8930-f6b4df28f625 debug: tableStorageContextMiddleware: Dispatch pattern string: /Tables
2021-05-22T22:49:50.605Z 08685052-3e54-454b-8930-f6b4df28f625 info: tableStorageContextMiddleware: Account=devstoreaccount1 tableName=undefined
2021-05-22T22:49:50.605Z 08685052-3e54-454b-8930-f6b4df28f625 verbose: DispatchMiddleware: Dispatching request...
2021-05-22T22:49:50.606Z 08685052-3e54-454b-8930-f6b4df28f625 info: DispatchMiddleware: Operation=Table_Create
2021-05-22T22:49:50.606Z 08685052-3e54-454b-8930-f6b4df28f625 verbose: AuthenticationMiddlewareFactory:createAuthenticationMiddleware() Validating authentications.
2021-05-22T22:49:50.606Z 08685052-3e54-454b-8930-f6b4df28f625 info: TableSharedKeyLiteAuthenticator:validate() Start validation against account shared key authentication.
2021-05-22T22:49:50.607Z 08685052-3e54-454b-8930-f6b4df28f625 info: TableSharedKeyLiteAuthenticator:validate() [STRING TO SIGN]:"Sat, 22 May 2021 22:49:50 GMT\n/devstoreaccount1/devstoreaccount1/Tables"
2021-05-22T22:49:50.607Z 08685052-3e54-454b-8930-f6b4df28f625 info: TableSharedKeyLiteAuthenticator:validate() Calculated authentication header based on key1: SharedKeyLite devstoreaccount1:6VdxVnL2DBFVNk3eIvQ+bTqJxW5ONhDLKFoaxi6jUbo=
2021-05-22T22:49:50.607Z 08685052-3e54-454b-8930-f6b4df28f625 info: TableSharedKeyLiteAuthenticator:validate() Signature 1 matched.
2021-05-22T22:49:50.608Z 08685052-3e54-454b-8930-f6b4df28f625 verbose: DeserializerMiddleware: Start deserializing...
2021-05-22T22:49:50.610Z 08685052-3e54-454b-8930-f6b4df28f625 debug: deserialize(): Raw request body string is (removed all empty characters) {"TableName":"test"}
2021-05-22T22:49:50.611Z 08685052-3e54-454b-8930-f6b4df28f625 info: HandlerMiddleware: DeserializedParameters={"options":{"queryOptions":{"format":"application/json;odata=minimalmetadata"},"requestId":"a4ea8c9e-00fc-4fe6-9df0-0d04b51d2c7d","dataServiceVersion":"3.0"},"version":"2019-02-02","tableProperties":{"tableName":"test"},"body":"ReadableStream"}
2021-05-22T22:49:50.612Z 08685052-3e54-454b-8930-f6b4df28f625 verbose: SerializerMiddleware: Start serializing...
2021-05-22T22:49:50.613Z 08685052-3e54-454b-8930-f6b4df28f625 debug: Serializer: Raw response body string is {"odata.metadata":"http://127.0.0.1:10002/devstoreaccount1/$metadata#Tables/@Element","TableName":"test"}
2021-05-22T22:49:50.613Z 08685052-3e54-454b-8930-f6b4df28f625 info: Serializer: Start returning stream body.
2021-05-22T22:49:50.613Z 08685052-3e54-454b-8930-f6b4df28f625 info: EndMiddleware: End response. TotalTimeInMS=9 StatusCode=201 StatusMessage=Created Headers={"server":"Azurite-Table/3.12.0","content-type":"application/json;odata=minimalmetadata","x-ms-client-request-id":"a4ea8c9e-00fc-4fe6-9df0-0d04b51d2c7d","x-ms-request-id":"08685052-3e54-454b-8930-f6b4df28f625","x-ms-version":"2020-06-12","date":"Sat, 22 May 2021 22:49:50 GMT","preference-applied":"return-content"}
2021-05-22T22:49:50.638Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: TableStorageContextMiddleware: RequestMethod=POST RequestURL=http://127.0.0.1/devstoreaccount1/test?$format=application%2Fjson%3Bodata%3Dminimalmetadata RequestHeaders:{"host":"127.0.0.1:10002","x-ms-version":"2019-02-02","dataserviceversion":"3.0","prefer":"return-no-content","accept":"application/json; odata=minimalmetadata","x-ms-client-request-id":"ae4af697-2664-4635-b06e-64820eefface","x-ms-return-client-request-id":"true","user-agent":"azsdk-net-Data.Tables/12.0.0-beta.8 (.NET Core 3.1.15; Microsoft Windows 10.0.19042)","x-ms-date":"Sat, 22 May 2021 22:49:50 GMT","authorization":"SharedKeyLite devstoreaccount1:jiUVQ7VyIq74T0M3pPlqNZ7+cb8wTTamlhqH+jt6rzU=","content-type":"application/json; odata=nometadata","content-length":"68"} ClientIP=127.0.0.1 Protocol=http HTTPVersion=1.1
2021-05-22T22:49:50.638Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f debug: tableStorageContextMiddleware: Dispatch pattern string: /test
2021-05-22T22:49:50.638Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: tableStorageContextMiddleware: Account=devstoreaccount1 tableName=test
2021-05-22T22:49:50.638Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f verbose: DispatchMiddleware: Dispatching request...
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: DispatchMiddleware: Operation=Table_InsertEntity
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f verbose: AuthenticationMiddlewareFactory:createAuthenticationMiddleware() Validating authentications.
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: TableSharedKeyLiteAuthenticator:validate() Start validation against account shared key authentication.
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: TableSharedKeyLiteAuthenticator:validate() [STRING TO SIGN]:"Sat, 22 May 2021 22:49:50 GMT\n/devstoreaccount1/devstoreaccount1/test"
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: TableSharedKeyLiteAuthenticator:validate() Calculated authentication header based on key1: SharedKeyLite devstoreaccount1:jiUVQ7VyIq74T0M3pPlqNZ7+cb8wTTamlhqH+jt6rzU=
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: TableSharedKeyLiteAuthenticator:validate() Signature 1 matched.
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f verbose: DeserializerMiddleware: Start deserializing...
2021-05-22T22:49:50.639Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f debug: deserialize(): Raw request body string is (removed all empty characters) {"PartitionKey":"4c1112d9-01c1-4aea-a157-e9d6fc177428","RowKey":"a"}
2021-05-22T22:49:50.640Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: HandlerMiddleware: DeserializedParameters={"options":{"queryOptions":{"format":"application/json;odata=minimalmetadata"},"requestId":"ae4af697-2664-4635-b06e-64820eefface","dataServiceVersion":"3.0","responsePreference":"return-no-content","tableEntityProperties":{"PartitionKey":"4c1112d9-01c1-4aea-a157-e9d6fc177428","RowKey":"a"}},"version":"2019-02-02","body":"ReadableStream"}
2021-05-22T22:49:50.641Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f verbose: SerializerMiddleware: Start serializing...
2021-05-22T22:49:50.641Z 4afe6a18-edf9-47bd-bd41-8d71dacb1a3f info: EndMiddleware: End response. TotalTimeInMS=3 StatusCode=204 StatusMessage=undefined Headers={"server":"Azurite-Table/3.12.0","content-type":"application/json;odata=minimalmetadata","x-ms-client-request-id":"ae4af697-2664-4635-b06e-64820eefface","x-ms-request-id":"4afe6a18-edf9-47bd-bd41-8d71dacb1a3f","x-ms-version":"2020-06-12","date":"Sat, 22 May 2021 22:49:50 GMT","etag":"W/\"datetime'2021-05-22T22%3A49%3A50.6380000Z'\"","preference-applied":"return-no-content"}
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: TableStorageContextMiddleware: RequestMethod=POST RequestURL=http://127.0.0.1/devstoreaccount1/$batch RequestHeaders:{"host":"127.0.0.1:10002","x-ms-version":"2019-02-02","dataserviceversion":"3.0","x-ms-client-request-id":"f3cb744f-99fb-4941-9a51-e1697ecdd46c","x-ms-return-client-request-id":"true","user-agent":"azsdk-net-Data.Tables/12.0.0-beta.8 (.NET Core 3.1.15; Microsoft Windows 10.0.19042)","x-ms-date":"Sat, 22 May 2021 22:49:50 GMT","authorization":"SharedKeyLite devstoreaccount1:65tcpOKjunBlIjJmIC6hOhCCiqZR45qGMifpymVbEvo=","content-type":"multipart/mixed; boundary=batch_78200a88-ec70-4395-88a8-8f8e2003852d","content-length":"734"} ClientIP=127.0.0.1 Protocol=http HTTPVersion=1.1
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 debug: tableStorageContextMiddleware: Dispatch pattern string: /$batch
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: tableStorageContextMiddleware: Account=devstoreaccount1 tableName=$batch
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 verbose: DispatchMiddleware: Dispatching request...
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: DispatchMiddleware: Operation=Table_Batch
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 verbose: AuthenticationMiddlewareFactory:createAuthenticationMiddleware() Validating authentications.
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: TableSharedKeyLiteAuthenticator:validate() Start validation against account shared key authentication.
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: TableSharedKeyLiteAuthenticator:validate() [STRING TO SIGN]:"Sat, 22 May 2021 22:49:50 GMT\n/devstoreaccount1/devstoreaccount1/$batch"
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: TableSharedKeyLiteAuthenticator:validate() Calculated authentication header based on key1: SharedKeyLite devstoreaccount1:65tcpOKjunBlIjJmIC6hOhCCiqZR45qGMifpymVbEvo=
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: TableSharedKeyLiteAuthenticator:validate() Signature 1 matched.
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 verbose: DeserializerMiddleware: Start deserializing...
2021-05-22T22:49:50.653Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: HandlerMiddleware: DeserializedParameters={"version":"2019-02-02","options":{"requestId":"f3cb744f-99fb-4941-9a51-e1697ecdd46c","dataServiceVersion":"3.0"},"multipartContentType":"multipart/mixed; boundary=batch_78200a88-ec70-4395-88a8-8f8e2003852d","contentLength":734,"body":"ReadableStream"}
2021-05-22T22:49:50.654Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 debug: TableHandler:batch() Raw request string is "--batch_78200a88-ec70-4395-88a8-8f8e2003852d\r\nContent-Type: multipart/mixed; boundary=changeset_1520cd0b-81b7-435d-ab1d-2b8db58f9e40\r\n\r\n--changeset_1520cd0b-81b7-435d-ab1d-2b8db58f9e40\r\nContent-Type: application/http\r\nContent-Transfer-Encoding: binary\r\n\r\nPOST http://127.0.0.1:10002/devstoreaccount1/test?$format=application%2Fjson%3Bodata%3Dminimalmetadata HTTP/1.1\r\nHost: 127.0.0.1\r\nx-ms-version: 2019-02-02\r\nDataServiceVersion: 3.0\r\nPrefer: return-no-content\r\nAccept: application/json;odata=minimalmetadata\r\nContent-Type: application/json;odata=nometadata\r\n\r\n{\"PartitionKey\":\"4c1112d9-01c1-4aea-a157-e9d6fc177428\",\"RowKey\":\"a\"}\r\n--changeset_1520cd0b-81b7-435d-ab1d-2b8db58f9e40--\r\n\r\n--batch_78200a88-ec70-4395-88a8-8f8e2003852d--\r\n"
2021-05-22T22:49:50.656Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 debug: TableHandler:batch() Raw response string is "--batchresponse_78200a88-ec70-4395-88a8-8f8e2003852d\r\nContent-Type: multipart/mixed; boundary=changesetresponse_1520cd0b-81b7-435d-ab1d-2b8db58f9e40\r\n\r\n--changesetresponse_1520cd0b-81b7-435d-ab1d-2b8db58f9e40changesetresponse_1520cd0b-81b7-435d-ab1d-2b8db58f9e40\r\nHTTP/1.1 400 Bad Request\r\nContent-ID: 1\r\nDataServiceVersion: 3.0;\r\nContent-Type: application/json;odata=minimalmetadata;charset=utf-8\r\n\r\n{\"odata.error\":{\"code\":\"EntityAlreadyExist\",\"message\":{\"lang\":\"en-US\",\"value\":\"The specified entity already exists.\\nRequestId:e95685cc-85df-4f65-94a2-dd4a2f2e33a6\\nTime:2021-05-22T22:49:50.656Z\"}}}\r\n\r\n--changesetresponse_1520cd0b-81b7-435d-ab1d-2b8db58f9e40--\r\n--batchresponse_78200a88-ec70-4395-88a8-8f8e2003852d--\r\n"
2021-05-22T22:49:50.656Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 verbose: SerializerMiddleware: Start serializing...
2021-05-22T22:49:50.656Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: Serializer: Start returning stream body.
2021-05-22T22:49:50.657Z e95685cc-85df-4f65-94a2-dd4a2f2e33a6 info: EndMiddleware: End response. TotalTimeInMS=4 StatusCode=202 StatusMessage=Accepted Headers={"server":"Azurite-Table/3.12.0","content-type":"multipart/mixed; boundary=batchresponse_78200a88-ec70-4395-88a8-8f8e2003852d","x-ms-request-id":"e95685cc-85df-4f65-94a2-dd4a2f2e33a6","x-ms-version":"2020-06-12","date":"Sat, 22 May 2021 22:49:50 GMT"}
2021-05-22T22:49:54.171Z info: Azurite Blob service is closing...
2021-05-22T22:49:54.171Z info: Azurite Queue service is closing...
2021-05-22T22:49:54.171Z info: Azurite Table service is closing...
2021-05-22T22:49:54.172Z info: BlobGCManager:close() Start closing BlobGCManager. Set status to Closing.
2021-05-22T22:49:54.172Z info: QueueGCManager:close() Start closing QueueGCManager, set status to Closing.
2021-05-22T22:49:54.172Z info: BlobGCManager:start() Mark and sweep loop is closed.
2021-05-22T22:49:54.172Z info: BlobGCManager:close() BlobGCManager successfully closed. Set status to Closed.
2021-05-22T22:49:54.172Z info: QueueGCManager:start() Mark and sweep loop is closed.
2021-05-22T22:49:54.172Z info: QueueGCManager:close() QueueGCManager successfully closed, set status to Closed.
2021-05-22T22:49:54.172Z info: Azurite Table service successfully closed
2021-05-22T22:49:54.173Z info: Azurite Blob service successfully closed
2021-05-22T22:49:54.173Z info: Azurite Queue service successfully closed
Please be sure to remove any PII or sensitive information before sharing!
The debug log will log raw request headers and bodies, so that we can replay these against Azurite using REST and create tests to validate resolution.
Have you found a mitigation/solution?
Issue Analytics
- State:
- Created 2 years ago
- Comments:6 (3 by maintainers)
Top Results From Across the Web
Failed table transaction with multiple entities with same ...
Failed table transaction with multiple entities with same RowKey returns HTTP 409(EntityAlreadyExists) instead of HTTP 400(InvalidDuplicateRow) #1754.
Read more >How To Fix the “409 Conflict” Error (5 Methods) - Kinsta
If you see a “409 Conflict” error, this is a 400 HTTP status code. In short, the request wasn't completed because of a...
Read more >Status Code 400 (Bad Request) Explained & How to fix it - Ryte
The 400 (Bad Request) status code indicates that the server cannot or will not process the request due to something that is perceived...
Read more >HTTP Status Codes for Azure Cosmos DB | Microsoft Learn
HTTP status and sub-status codes when using Azure Cosmos DB with REST API. ... 400 is also returned when the consistent level for...
Read more >"409 Conflict" causes Runner to not run any jobs, and give up ...
409 Conflict errors are normal and expected in cases where you have multiple runners configured and trying to pick up the same job....
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
@gonzales91: I recommend opening a new issue about this bug you’ve found (if one does not already exist). This will help the Azurite team track the issue separately.
It sounds a bit like https://github.com/Azure/Azurite/issues/1215. Perhaps we generally need some input validation for table transactions: all PKs must be the same, rows keys must be unique, etc.
Regarding this change, I ran into an issue that when we use a TableTransactionAction list with more than one item with the same RowKey during a transaction, we get a status of 409 (EntityAlreadyExists), but using the old emulator and also a real Azure table connection, I got a 400 (InvalidDuplicateRow). So I can assume that is not correct result