Roman,

I would prefer first option.

The fact user uses MVCC says he needs some more strict guaranties which
cannot meet in other modes.
I would rollback both txs in case we cannot provide such guaranties.

Regards,
Igor

пт, 14 дек. 2018 г. в 15:36, Roman Kondakov <kondako...@mail.ru.invalid>:

> Vladimir,
>
> I was thinking about your proposal to not evict locked and recent (the
> transaction that created the record is still active) entries from the
> cache. Let's imagine next situation: we have almost full memory and two
> transactions:
>
> 1. txA: "SELECT * FOR UPDATE"
>
> 2. txB: "INSERT ...many keys here..."
>
> In this case txA locks all entries in the cache, and therefore we cannot
> evict any of them. If then txB is trying to add a lot of data, it lead
> us to the OOM situation, which user is trying to avoid using cache
> evictions.
>
> I see two ways how to deal with this issue:
>
> 1. Allow OOM in MVCC caches with configured evictions and warn user
> about it in the docs.
>
> 2. Give up with the repeatable read guaranties in case of evictions for
> MVCC caches and warn users about it in the documentation.
>
> Second variant looks better for me because user may not expect OOM when
> he has configured eviction policy for cache.
>
> What do you think?
>
>
> --
> Kind Regards
> Roman Kondakov
>
> On 13.12.2018 22:33, Vladimir Ozerov wrote:
> > It's hard to believe that entries are not locked on backups, because we
> > wrtite data right away. Even if it so, it should be very easy to fix -
> just
> > do not evict and entry if it was created or deleted by currently active
> > transaction.
> >
> > On Thu, Dec 13, 2018 at 10:28 PM Roman Kondakov
> <kondako...@mail.ru.invalid>
> > wrote:
> >
> >> Vladimir,
> >>
> >> we do not lock entries on backups when MVCC is enabled and therefore we
> >> don't avoid entry eviction from backup by locking. So, your first
> >> scenario with primary stop is still relevant.
> >>
> >>
> >> --
> >> Kind Regards
> >> Roman Kondakov
> >>
> >> On 13.12.2018 22:14, Vladimir Ozerov wrote:
> >>> No, I mean that we should think about what kind of guarantees it
> >> possible.
> >>> My proposal was to prevent evictions of locked entries. This way we can
> >> say
> >>> users: "if you want true REPEATABLE_READ when evictions are enabled,
> then
> >>> make sure to lock entries on every access". This effectively means that
> >> all
> >>> SELECT's should be replaced with "SELECT FOR UPDATE".
> >>>
> >>> On Thu, Dec 13, 2018 at 10:09 PM Roman Kondakov
> >> <kondako...@mail.ru.invalid>
> >>> wrote:
> >>>
> >>>> Vladimir,
> >>>>
> >>>> correct me please if i misunderstood your thought. So, if eviction is
> >>>> not about a consistency at all, we may evict keys in any way because
> >>>> broken repeatable read semantics is not the biggest problem here. But
> we
> >>>> should add some notes about it to user documentation. Right?
> >>>>
> >>>>
> >>>> --
> >>>> Kind Regards
> >>>> Roman Kondakov
> >>>>
> >>>> On 13.12.2018 17:45, Vladimir Ozerov wrote:
> >>>>> Roman,
> >>>>>
> >>>>> I would start with the fact that eviction can never be consistent
> >> unless
> >>>> it
> >>>>> utilizes atomic broadcast protocol, which is not the case for Ignite.
> >> In
> >>>>> Ignite entries on node are evicted independently.
> >>>>>
> >>>>> So you may easily get into situation like this:
> >>>>> 1) Start a cache with 1 backup and FULL_SYNC mode
> >>>>> 2) Put a key to primary node
> >>>>> 3) Stop primary
> >>>>> 4) Try reading from new primary and get null because key was evicted
> >>>>> concurrently
> >>>>>
> >>>>> Or:
> >>>>> 1) Start a transaction in PESSIMISTIC/READ_COMMITTED mode
> >>>>> 2) Read a key, get value
> >>>>> 3) Read the same key again, get null
> >>>>>
> >>>>> So in reality the choice is not between consistent and inconsistent
> >>>>> behavior, but rather about degree of inconsistency. Any solution is
> >>>>> possible as long as we can explain it to the user. E.g. "do not
> evict a
> >>>> key
> >>>>> if it is either write-locked".
> >>>>>
> >>>>>
> >>>>> On Thu, Dec 13, 2018 at 5:19 PM Vladimir Ozerov <
> voze...@gridgain.com>
> >>>>> wrote:
> >>>>>
> >>>>>> Andrey,
> >>>>>>
> >>>>>> We will not be able to cache the whole data set locally, as it
> >>>> potentially
> >>>>>> lead to OOME. We will have this only as an option and only for
> non-SQL
> >>>>>> updates. Thus, similar semantics is not possible.
> >>>>>>
> >>>>>> On Thu, Dec 13, 2018 at 4:56 PM Andrey Mashenkov <
> >>>>>> andrey.mashen...@gmail.com> wrote:
> >>>>>>
> >>>>>>> Roman,
> >>>>>>>
> >>>>>>> We have a ticket to improve repeatable_read mode [1] via caching
> >>>> entries
> >>>>>>> locally.
> >>>>>>> This should make mvcc transaction repeatable_read semantic similar
> to
> >>>>>>> non-mvcc Txs
> >>>>>>> and allow us to implement eviction in correct way.
> >>>>>>>
> >>>>>>> Another way is to introduce mvcc shared (read) entry locks and
> evict
> >>>> only
> >>>>>>> entries if no one hold any lock on it,
> >>>>>>> but this looks tricky and error prone as your first one as it may
> >> lead
> >>>> to
> >>>>>>> eviction policy unexpected behavior,
> >>>>>>> e.g some versions can be visible while others - no (evicted).
> >>>>>>>
> >>>>>>> [1] https://issues.apache.org/jira/browse/IGNITE-7371
> >>>>>>>
> >>>>>>> On Thu, Dec 13, 2018 at 4:34 PM Ilya Kasnacheev <
> >>>>>>> ilya.kasnach...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Hello!
> >>>>>>>>
> >>>>>>>> Is it possible to 'touch' entries read by MVCC transactions to
> >> ensure
> >>>>>>> that
> >>>>>>>> they are considered recent and therefore are almost never targeted
> >> by
> >>>>>>>> eviction?
> >>>>>>>>
> >>>>>>>> This is 1) with benefits.
> >>>>>>>>
> >>>>>>>> Regards,
> >>>>>>>> --
> >>>>>>>> Ilya Kasnacheev
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> чт, 13 дек. 2018 г. в 16:22, Roman Kondakov
> >>>> <kondako...@mail.ru.invalid
> >>>>>>>> :
> >>>>>>>>
> >>>>>>>>> Hi igniters,
> >>>>>>>>>
> >>>>>>>>> I need your advice with the following issue. When in-memory cache
> >>>>>>>>> reaches it's memory limit, some data may be purged to avoid OOM
> >>>> error.
> >>>>>>>>> This process is described in [1]. For MVCC caches this eviction
> may
> >>>>>>>>> break repeatable read semantics. For example, if transaction
> reads
> >>>> key
> >>>>>>>>> before eviction, this key is visible for it. But if key is
> evicted
> >>>>>>> some
> >>>>>>>>> time later, this key become invisible to anyone, including our
> >>>>>>>>> transaction, which means broken repeatable read semantics.
> >>>>>>>>>
> >>>>>>>>> Now we see the following solutions of this problem:
> >>>>>>>>>
> >>>>>>>>> 1. Ignore broken repeatable read semantics. If cache is set to
> >> allow
> >>>>>>>>> data eviction, it may lose it's data. This means that there is no
> >>>>>>>>> valuable information stored in cache and occasional repeatable
> read
> >>>>>>>>> violations can be tolerated.
> >>>>>>>>>
> >>>>>>>>> 2. Prohibit eviction of MVCC caches at all. For example, stop
> >> writing
> >>>>>>> to
> >>>>>>>>> caches and throw an appropriate exception in the case when there
> is
> >>>> no
> >>>>>>>>> free space in page memory. Before this exception Ignite should do
> >>>> it's
> >>>>>>>>> best to avoid this situation, for example, evict all non-mvcc
> >> caches
> >>>>>>> and
> >>>>>>>>> run full vacuum to free as much space as possible.
> >>>>>>>>>
> >>>>>>>>> First approach is bad because it leads to cache consistency
> >>>> violation.
> >>>>>>>>> Second approach is bad because it's behavior may be unexpected to
> >>>> user
> >>>>>>>>> if he has set an eviction policy for cache, but instead of
> eviction
> >>>>>>>>> Ignite trying to avoid it as much as possible.
> >>>>>>>>>
> >>>>>>>>> IMO first approach looks better - it is much simpler to implement
> >> and
> >>>>>>>>> met user expectations in all points except possible repeatable
> read
> >>>>>>>>> violations.
> >>>>>>>>>
> >>>>>>>>> What do you think?
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> [1] https://apacheignite.readme.io/docs/evictions
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> Kind Regards
> >>>>>>>>> Roman Kondakov
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>> --
> >>>>>>> Best regards,
> >>>>>>> Andrey V. Mashenkov
> >>>>>>>
>

Reply via email to