@lambrospetrou When calling transaction (asynchronous version), the DO deadlocks itself via blockCon
@lambrospetrou When calling transaction (asynchronous version), the DO deadlocks itself via blockConcurrencyWhile if the callback include a remote RPC stub that calls itself.
For example a function called “WriteData”, and an worker wants to coordinate two DOs and ensure both write the value at the same time, so both DO exposes a transaction method to allow this to happen. Result is that the DO deadlocks itself when the WriteData RPC stub is invoked inside the transaction.
I understand why this is the result, but I feel like if the caller initiated a transaction, they should also be able to do I/O too (and intuitively it should work this way too). Would you consider this a bug, or do you suggest a better way to approach this?
Best workaround would for the first DO to enter a transaction itself and call second DO to write and also enter a transaction itself, but this could require DO to expose too many functions that is only used for these transaction calls, and certainly more hard to catch bug (if you accidentally call the wrong function for example)
For example a function called “WriteData”, and an worker wants to coordinate two DOs and ensure both write the value at the same time, so both DO exposes a transaction method to allow this to happen. Result is that the DO deadlocks itself when the WriteData RPC stub is invoked inside the transaction.
I understand why this is the result, but I feel like if the caller initiated a transaction, they should also be able to do I/O too (and intuitively it should work this way too). Would you consider this a bug, or do you suggest a better way to approach this?
Best workaround would for the first DO to enter a transaction itself and call second DO to write and also enter a transaction itself, but this could require DO to expose too many functions that is only used for these transaction calls, and certainly more hard to catch bug (if you accidentally call the wrong function for example)
