Skip to content

Add monitor based sync only locker for ReadWrite cache #2944

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Feb 14, 2022

Conversation

bahusoid
Copy link
Member

@bahusoid bahusoid commented Nov 17, 2021

Fixes #2862

Adds ability to use old lock based locking for sync only scenarios. Reason: As described here in full .NET Framework current locking code is 300 times slower.

Throws InvalidOperationException when used in async code.

Usage:

<session-factory>
  <property name="cache.read_write_lock_factory">sync</property>
</session-factory>

Or by code:

Configuration cfg = ...;
cfg.SetProperty(Environment.CacheReadWriteLockFactory, "sync");

It's also possible to provide custom locker. See #2862 (comment)

Copy link
Member

@fredericDelaporte fredericDelaporte left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

May you also insert a documentation entry in the below file after the query cache factory setting?

<row>
<entry>
<literal>cache.query_cache_factory</literal>
</entry>
<entry>
The class name of a custom <literal>IQueryCacheFactory</literal> implementation.
Defaults to the built-in <literal>StandardQueryCacheFactory</literal>.
<para>
<emphasis role="strong">eg.</emphasis>
<literal>classname.of.QueryCacheFactory, assembly</literal>
</para>
</entry>
</row>

                    <row>
                        <entry>
                            <literal>cache.read_write_lock_factory</literal>
                        </entry>
                        <entry>
                            Specify the cache lock factory to use for read-write cache regions.
                            Defaults to the built-in <literal>async</literal> cache lock factory.
                            <para>
                                <emphasis role="strong">eg.</emphasis>
                                <literal>async</literal>, or <literal>sync</literal>, or <literal>classname.of.CacheLockFactory, assembly</literal>
                            </para>
                            <para>
                                <literal>async</literal> uses a single writer multiple readers locking mechanism supporting asynchronous operations.
                            </para>
                            <para>
                                <literal>sync</literal> uses a single access locking mechanism which will throw on asynchronous
                                operations but may have better performances than the <literal>async</literal> provider for applications using
                                the .Net Framework (4.8 and below).
                            </para>
                        </entry>
                    </row>

bahusoid and others added 6 commits November 25, 2021 12:07
Co-authored-by: Frédéric Delaporte <12201973+fredericDelaporte@users.noreply.github.com>
@bahusoid
Copy link
Member Author

May you also insert a documentation entry

Done

@bahusoid bahusoid added this to the 5.3.11 milestone Nov 25, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants