Hello!

We can defnitely do a heuristic check that passed map is HashMap (therefore
unordered), since HashMap is basically "the" map. If we do a warning in 99%
of problematic cases but fail to detect the remaining 1%, it's still a big
improvement over the current behavior.

Same thing in .Net with their default Dictionary.

I have created a ticket: https://issues.apache.org/jira/browse/IGNITE-11558

Regards,
-- 
Ilya Kasnacheev


пн, 18 мар. 2019 г. в 11:12, Pavel Tupitsyn <ptupit...@apache.org>:

> To avoid deadlocks you have to always take locks in the same order.
> * That order is not always going to be "sorted with default comparer".
> * Not every type has a default comparer
>
> So Ignite can't sort the keys for you, nor can it check if they are sorted.
> And even if it could, it would be making unnecessary assumptions about user
> code.
> And it would be potentially expensive to sort or check order.
>
> Ilya, if you mean `instanceof` check, that does not look like a good API to
> me to require a particular interface implementation.
>
> On Mon, Mar 18, 2019 at 10:25 AM Ilya Kasnacheev <
> ilya.kasnach...@gmail.com>
> wrote:
>
> > Hello!
> >
> > Maybe we could issue a developer warning as soon as we detect putAll()
> with
> > something which has more than one element and which is not a sorted map?
> >
> > Like we do with indexed when they don't fit inline, etc.
> >
> > Regards,
> > --
> > Ilya Kasnacheev
> >
> >
> > пн, 18 мар. 2019 г. в 09:13, Павлухин Иван <vololo...@gmail.com>:
> >
> > > Hi,
> > >
> > > When you are working with TRANSACTIONAL cache you should be aware that
> > > deadlocks might happen. I see the following options to prevent
> > > deadlocks to happen:
> > > 1. Explicitly order all keys involved in any transaction using the
> > > same comparator.
> > > 2. Use OPTIMISTIC transactions.
> > >
> > > Also, in many databases deadlocks can happen as well. So, instead of
> > > preventing deadlocks it is quite common to provide some means of
> > > breaking them. In Ignite it is possible to configure a transaction
> > > timeout. In that case deadlocked transaction will be aborted sooner or
> > > later and another transaction will be able to make a progress.
> > >
> > > > Should it be handle natively in Ignite Core, shouldn't it ?
> > >
> > > Unfortunately there is no general way to prevent deadlocks when using
> > > PutAll with unordered collection. Ignite does not enforce all keys to
> > > be Comparable which means that there could be keys without defined
> > > consistent order. And if we cannot order keys consistently then we can
> > > catch a deadlock.
> > >
> > > пн, 18 мар. 2019 г. в 05:53, Tâm Nguyễn Mạnh <
> nguyenmanhtam...@gmail.com
> > >:
> > > >
> > > > Hi Igniters,
> > > >
> > > > I heard that It could lead to DeadLocked when I pass non sorted
> > > collection
> > > > into putAll method. Is it true ?
> > > >
> > > > From document i see that method requires a
> IEnumerable<KeyValuePair<TK,
> > > > TV>> as input. I think pass a sorted collection into API is just a
> > > > workaround way. Should it be handle natively in Ignite Core,
> shouldn't
> > > it ?
> > > >
> > > > How do you thing ?
> > > >
> > > > --
> > > > Thanks & Best Regards
> > > >
> > > > Tam, Nguyen Manh
> > >
> > >
> > >
> > > --
> > > Best regards,
> > > Ivan Pavlukhin
> > >
> >
>

Reply via email to