Closed maxpatiiuk closed 3 years ago
It took me awhile to replicate this one. I think it only occurs when you abort at the end of a validation/upload while it is writing the results to the spdataset record. For large datasets that can take a long time, and the uploader maintains a write lock on the row while it is happening. The abort transaction also tries to acquire a write lock on the row and blocks. If the uploader doesn't finish before the lock timeout of the abort transaction, the abort transaction times out and results in an error.
I'm not sure what to do about it yet.
I should have been more clear, but this happened for me while validation was in the early stages (as seen on the screenshot) The abort requests bounced after ~50 seconds and the exception was thrown for each pending request. After refreshing the page, the validation progress bar appeared again until all rows were validated.
I would add more information if this would happen again.
My explanation above is not quite correct which I should have realized because the uploading transaction holds the lock for the entire process. What normally happens is the abort function sends a command to terminate to the upload worker and the attempts to write to the spdataset row indicating there is no ongoing upload. Since the upload worker holds the lock on that row, the abort transaction blocks and waits for the worker to terminate and release the lock. If for some reason the upload worker doesn't respond to the terminate request and continues to hold the lock, the abort transaction eventually times out and produces the above exception. This is technically the correct behavior and is indicating that the abort action failed.
I am going to add code to catch the exception and return a more appropriate response to the frontend.
Testing with the infamous 18k rows DS.
Abort seems to be broken. The requests are sent, but they are pending for about 50 seconds, before bouncing with a 500 error: