Hi Pavel,

would you like to prepare fix/PR for this ticket?

Sincerely,
Dmitriy Pavlov

чт, 15 мар. 2018 г. в 16:36, Vinokurov Pavel <vinokurov.pa...@gmail.com>:

> Alexey,
>
> Thank you for your explanation.
> I have created the ticket
> https://issues.apache.org/jira/browse/IGNITE-7968
> with attached reproducer.
>
> 2018-03-15 10:23 GMT+03:00 Alexey Goncharuk <alexey.goncha...@gmail.com>:
>
> > Pavel,
> >
> > The exception from an AtomicSequence looks like a bug to me. Ignite
> should
> > retry all operations that do not involve user's logic, this stands for
> > AtomicSequence. I believe such handling already present in AtomicLong, so
> > it should not be difficult to fix.
> >
> > The only case when a user must handle TopologyException is an explicit
> > transaction. In this case, the transaction involves particular user logic
> > that cannot be captured and retried by Ignite, so the exception handling
> > should be covered by the user.
> >
> > The way you handled the topology exception looks correct to me.
> >
> > --AG
> >
> > 2018-03-14 20:47 GMT+03:00 Dmitry Pavlov <dpavlov....@gmail.com>:
> >
> > > Hi Nikolay,
> > >
> > > How do you think which was idea / the best practice to handling
> > exceptions
> > > here?
> > >
> > > Why exception here may have difference?
> > >
> > > Sincerely,
> > > Dmitriy Pavlov
> > >
> > > ---------- Forwarded message ---------
> > > From: Vinokurov Pavel <vinokurov.pa...@gmail.com>
> > > Date: вт, 13 мар. 2018 г. в 5:52
> > > Subject: Atomic sequence and topology exception
> > > To: <dev@ignite.apache.org>
> > >
> > >
> > > Igniters!
> > >
> > > I  have a few questions related to a replicated atomic sequence and an
> > > topology exception.
> > > In my case after one server node has left cluster, on a client node the
> > > execution of the *IgniteAtomicSequence#incrementAndGet()* throws
> > > exception:
> > >
> > > org.apache.ignite.cluster.ClusterTopologyException: Failed to acquire
> > lock
> > > for keys (primary node left grid, retry transaction if possible)
> > > [keys=[UserKeyCacheObjectImpl [part=94, val=GridCacheInternalKeyImpl
> > > [name=seq, grpName=default-ds-group], hasValBytes=true]],
> > > node=a047ec4b-7de6-4503-9691-a5d7e03e267f]
> > >
> > > I handle exception in that way:
> > >
> > > IgniteAtomicSequence seq = ignite.atomicSequence(Const.SEQ, new
> > > AtomicConfiguration().setAtomicSequenceReserveSize(0)
> > > .setCacheMode(CacheMode.REPLICATED),0, Boolean.TRUE);
> > > while(true){
> > >     //do some logic
> > > try {
> > > *seq.incrementAndGet();*
> > > }
> > > catch (ClusterTopologyException cte) {
> > > *cte.retryReadyFuture().get();*
> > > }
> > > }
> > >
> > > At the same time the *IgniteAtomicLong* doesn't throw such exception
> (at
> > > least I can't reproduce it).
> > >
> > > Please help me to clarify flowing questions:
> > > 1. Is it recommended to handle topology exception in the same way? Is
> > there
> > > any public documentation about that?
> > > 2. What kind of distributed operations(cache updates, open data stream,
> > > atomic) are recommended to handle the ClusterTopologyException?
> > >
> > > --
> > >
> > > Regards
> > >
> > > Pavel Vinokurov
> > >
> >
>
>
>
> --
>
> Regards
>
> Pavel Vinokurov
>

Reply via email to