Jay,

> Is using async/await supported for optimistic serializable transactions
(and we’re doing something wrong)
> or are transactional operations currently supposed to be blocking in .NET?

Short answer - yes, please use synchronous cache APIs when working with
transactions.

A transaction is owned by a specific thread. Transactional API calls should
be done from this thread, and `Commit` should be called from this thread.
When doing `await`, we most likely end up on another thread and lose
transaction context.

There were plans to make transactions work across multiple threads, but the
ticket looks abandoned:
https://issues.apache.org/jira/browse/IGNITE-4887

On Fri, Jan 7, 2022 at 2:23 PM <jay.et...@gmx.de> wrote:

> Ok, we completed the testing:
>
>
>
> Lock object cache with Optimistic Serializable transactions seems to be
> the way to go (thanks again Alexei).
>
>
>
> We actually now prefer this approach over “classical” reader writer locks
> for two main reasons:
>
>
>
> 1) The first reason is quite obvious: When you’re using classical reader
> writer locks you’re in pessimistic world. And lock ordering sounds fairly
> easy – but can actually get quite complicated if your data model ever grows
> to be really complex.
>
> In contrast:
>
> Optimistic Serializable means you don’t need to worry about that but
> enables you to concentrate on your business logic. That’s great. Makes life
> simpler.
>
>
>
> 2) The second reason might not be as obvious at first but anyone who has
> allowed their users to directly trigger commands that again trigger
> exclusive locking in your datastore might have experienced that this way
> you can be taken out very, very quickly. So of course you figure that you
> need to do sanity-checks first but doing this non-blocking is not easy when
> you have strong consistency requirements (both replicating data or taking
> reader locks for checking first violates the consistency requirement). Then
> you’re excited to find the option of “upgradeable reader locks” but soon
> after that it turns out that in practical applications there can only be a
> single upgradable lock. So this doesn’t help you a lot. Then you’re back to
> square one since you are basically forced to acquire a write-lock before
> you can do the consistent sanity check which makes it just too easy to
> flood your servers.
>
> In contrast:
>
> Optimistic Serializable enables you to do fully consistent sanity checks
> of user traffic on a massive scale – without ever taking a single lock!
> Gives your servers much more room to breathe until the AI kicks in. This is
> a security-related feature we are starting to absolutely love!
>
>
>
> Thanks again for all the input we received on this!
>
>
>
> One minor issue around the approach remains:
>
> When testing with a .NET embedded thick client (2.11.1) we only got the
> behaviour we needed when strictly sticking to blocking cache method calls.
> As soon as we introduced async/await hell broke loose and we got tons of
> different errors and wired behaviour. Outside transactions async/await
> appears to work nicely. So the question is:
>
>
>
>    - Is using async/await supported for optimistic serializable
>    transactions (and we’re doing something wrong) or are transactional
>    operations currently supposed to be blocking in .NET?
>
>
>
> Thanks for any pointers.
>
>
>
> Jay
>
>
>
>
>
> *From:* Alexei Scherbakov <alexey.scherbak...@gmail.com>
> *Sent:* Thursday, 6 January 2022 12:13
> *To:* user <user@ignite.apache.org>
> *Subject:* Re: RE: Transactional Reader Writer Locks
>
>
>
> Gurmehar,
>
> "I need to understand when we mean LOCK, is this lock is acquired on
> entire Cache or on record we are trying to update .
>
> Please clarify ." - Ignite uses record level locking.
>
>
>
> Jay,
>
> I would avoid entire cache locks due to performance reasons, but if it's
> really necessary, lock object cache seems the best solution.
>
>
>
>
>
>
>
> вт, 28 дек. 2021 г. в 13:39, <jay.et...@gmx.de>:
>
> Hi Thomas,
>
>
>
> thanks for your feedback.
>
>
>
> We originally discarded that option since it was our understanding that
> this would not work as desired in a transactional context.
>
>
>
> Maybe we were wrong. Will look into it again. Thanks!
>
>
>
> Jay
>
>
>
>
>
>
>
> *From:* don.tequ...@gmx.de <don.tequ...@gmx.de>
> *Sent:* Tuesday, 28 December 2021 10:59
> *To:* user@ignite.apache.org
> *Subject:* Re: RE: Transactional Reader Writer Locks
>
>
>
> Instead of creating a cache with lock objects wouldn’t it be easier to use
> a semaphore for each cache where you want to achieve strong reader-Writer
> consistency?
>
>
>
> https://ignite.apache.org/docs/latest/data-structures/semaphore
>
>
>
> Then every time before reading/writing you acquire the semaphore first.
>
>
>
> I guess this semaphore does essentially what you’re doing manually.
>
>
>
> Regards
>
> Thomas.
>
>
>
>
>
>
>
> On 28.12.21 at 10:41, jay.et...@gmx.de wrote:
>
> And if anyone knows a different way to achieve entire-cache-locks in
> Optimistic Serializable transactions: We always appreciate the help.
>
>
>
> Jay
>
>
>
>
>
> *From:* Gurmehar Kalra <gurmehar.ka...@hcl.com>
> *Sent:* Monday, 27 December 2021 07:31
> *To:* user@ignite.apache.org; alexey.scherbak...@gmail.com
> *Subject:* RE: Transactional Reader Writer Locks
>
>
>
> Hi,
>
> I need to understand when we mean LOCK, is this lock is acquired on entire
> Cache or on record we are trying to update .
> Please clarify .
>
>
>
> Regards,
>
> Gurmehar Singh
>
>
>
> *From:* Alexei Scherbakov <alexey.scherbak...@gmail.com>
> *Sent:* 16 December 2021 22:40
> *To:* user <user@ignite.apache.org>
> *Subject:* Re: Transactional Reader Writer Locks
>
>
>
> [CAUTION: This Email is from outside the Organization. Unless you trust
> the sender, Don’t click links or open attachments as it may be a Phishing
> email, which can steal your Information and compromise your Computer.]
>
> Hi.
>
>
>
> You can try OPTIMISTIC SERIALIZABLE isolation, it might have better
> throughput in contending scenarios.
>
> But this is not the same as RW lock, because a tx can be invalidated after
> a commit if a lock conflict is detected.
>
> No RW lock of any kind is planned, AFAIK.
>
>
>
> вт, 7 дек. 2021 г. в 23:22, <jay.et...@gmx.de>:
>
> Dear all,
>
>
>
> we’re running in circles with Ignite for so long now. Can anyone please
> help? All our attempts to custom-build a Reader Writer Lock (/Re-entrant
> Lock) for use inside transactions have failed.
>
>
>
> Background:
>
> - Multi-node setup
>
> - Very high throughput mixed read/write cache access
>
> - Key-Value API using transactional caches
>
> - Strong consistency absolute requirement
>
> - Transactional context required for guarantees and fault-tolerance
>
>
>
> Using Pessimistic Repeatable-Read transactions gives strong consistency
> but kills performance if there’s a large number of operations on the same
> cache entry (and they tend to introduce performance penalties in
> entire-cache operations and difficulties in cross-cache locking as well).
> All other transactional modes somehow violate the strong consistency
> requirement as we see it and were able to test so far.
>
>
>
> In other distributed environments we use reader writer locks to gain both
> strong consistency and high performance with mixed workloads. In Ignite
> however we’re not aware that explicit locks can be used inside
> transactions: The documentation clearly states so (
> https://ignite.apache.org/docs/latest/distributed-locks
> <https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fignite.apache.org%2Fdocs%2Flatest%2Fdistributed-locks&data=04%7C01%7Cgurmehar.kalra%40hcl.com%7Cbb66d82317d148b6221608d9c0b6ee08%7C189de737c93a4f5a8b686f4ca9941912%7C0%7C0%7C637752714176933321%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=1eNvAIsE5mgD6H0CSO6IX%2BSIw2nprWcQ1KX%2B5iZfwcc%3D&reserved=0>)
> and trying to custom-build a reader writer lock for use inside transactions
> we always end up concluding that this may not be achievable if there are
> multiple ways to implicitly acquire but none to release locks.
>
>
>
> Are we out of luck here or
>
> - did we miss something?
>
> - are there workarounds you know of?
>
> - are there plans to implement transactional re-entrant locks in future
> releases?
>
>
>
> Jay
>
>
>
>
>
>
>
>
> --
>
>
> Best regards,
>
> Alexei Scherbakov
>
> ::DISCLAIMER::
> ------------------------------
>
> The contents of this e-mail and any attachment(s) are confidential and
> intended for the named recipient(s) only. E-mail transmission is not
> guaranteed to be secure or error-free as information could be intercepted,
> corrupted, lost, destroyed, arrive late or incomplete, or may contain
> viruses in transmission. The e mail and its contents (with or without
> referred errors) shall therefore not attach any liability on the originator
> or HCL or its affiliates. Views or opinions, if any, presented in this
> email are solely those of the author and may not necessarily reflect the
> views or opinions of HCL or its affiliates. Any form of reproduction,
> dissemination, copying, disclosure, modification, distribution and / or
> publication of this message without the prior written consent of authorized
> representative of HCL is strictly prohibited. If you have received this
> email in error please delete it and notify the sender immediately. Before
> opening any email and/or attachments, please check them for viruses and
> other defects.
> ------------------------------
>
>
>
>
> --
>
>
> Best regards,
>
> Alexei Scherbakov
>

Reply via email to