There's no way to rollback an put/putAll, unless in TX.

On Sun, Sep 10, 2017 at 4:21 PM, Jason Huynh <jhu...@pivotal.io> wrote:

> 1.)  Does anyone know of a way to do a rollback where the put is already
> reflected in the region?  If that is the desired behavior, then perhaps we
> will have to live with the current (leaving the region and indexes in a bad
> state, wan and other callbacks that occur after index maintenance will not
> occur for the one operation but the put has made it into the region) until
> someone can figure out how to roll a put back and revert the update to all
> the indexes.
>
> How should this affect putAll, if at all?
>
> Any callbacks that occur before index update have already been called
> (cache writers?). I am not sure how those should be affected by a
> rollback...
>
> 2.)  So the index behavior changes if they are marked for sync/async.  In
> sync the index would reject the put, but in async they would just be marked
> as invalid.
>
>
>
>
> On Sat, Sep 9, 2017 at 6:48 AM John Blum <jb...@pivotal.io> wrote:
>
> > +1 to both of Anil's points.
> >
> > On Fri, Sep 8, 2017 at 3:04 PM, Anilkumar Gingade <aging...@pivotal.io>
> > wrote:
> >
> > > Indexes are critical for querying; most of the databases doesn't allow
> > > insert/update if there is any failure with index maintenance...
> > >
> > > As Geode OQL supports two ways (sync and async) to maintain the
> indexes,
> > we
> > > need be careful about the error handling in both cases...
> > >
> > > My take is:
> > > 1. For synchronous index maintenance:
> > > If there is any failure in updating any index (security/auth or logical
> > > error) on the region; throw an exception and rollback the cache
> update/op
> > > (index management id done under region.entry lock - we should be able
> to
> > > revert the op). If index or cache is left in bad state, then its a bug
> > that
> > > needs to be addressed.
> > >
> > > Most of the time, If there is any logical error in index, it will be
> > > detected as soon as index is created (on existing data) or when first
> > > update is done to the cache.
> > >
> > > 2. For Asynchronous index maintenance:
> > > As this is async (assuming) user has good understanding of the risk
> > > involved with async, any error with index maintenance, the index should
> > be
> > > invalidated...
> > >
> > >  About the security/auth, the user permission with region read/write
> > needs
> > > to be applied for index updates, there should not be different
> permission
> > > on index.
> > >
> > > -Anil.
> > >
> > >
> > >
> > > On Fri, Sep 8, 2017 at 2:01 PM, Nabarun Nag <n...@pivotal.io> wrote:
> > >
> > > > Hi Mike,
> > > >
> > > > Please do find our answers below:
> > > > *Question:* What if there were multiple indices that were in flight
> and
> > > > only the third
> > > > one errors out, will they all be marked invalid?
> > > >
> > > > *Answer:* Only the third will be marked invalid and only the third
> one
> > > will
> > > > not be used for query execution.
> > > >
> > > > *Question/Statement:* If anything goes wrong with the put it should
> > > > probably still throw back to
> > > > the caller. Silent invalidation of the index is probably not
> desirable.
> > > >
> > > > *Answer: *
> > > > In our current design this the flow of execution of a put operation:
> > > > entry put into region -> update index -> other wan related
> executions /
> > > > callbacks etc.
> > > >
> > > > If an exception happens while updating the index, the cache gets
> into a
> > > bad
> > > > state, and we may end up getting different results depending on the
> > index
> > > > we are using. As the failure happens half way in a put operation, the
> > > > regions / cache are now in a bad state.
> > > > --------------------------
> > > > We are thinking that if index is created  over a method invocation in
> > an
> > > > empty region and then we do puts, but method invocation is not
> allowed
> > as
> > > > per security policies. The puts will now be successful but the index
> > will
> > > > be rendered invalid. Previously the puts will fail with exception and
> > put
> > > > the entire cache in a bad state.
> > > >
> > > >
> > > >
> > > > Regards
> > > > Nabarun
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > On Fri, Sep 8, 2017 at 10:43 AM Michael Stolz <mst...@pivotal.io>
> > wrote:
> > > >
> > > > > Just to help me understand, the index is corrupted in a way beyond
> > just
> > > > the
> > > > > field that errors out?
> > > > > What if there were multiple indices that were in flight and only
> the
> > > > third
> > > > > one errors out, will they all be marked invalid?
> > > > > If anything goes wrong with the put it should probably still throw
> > back
> > > > to
> > > > > the caller. Silent invalidation of the index is probably not
> > desirable.
> > > > >
> > > > > --
> > > > > Mike Stolz
> > > > > Principal Engineer, GemFire Product Manager
> > > > > Mobile: +1-631-835-4771 <(631)%20835-4771> <(631)%20835-4771>
> > > > >
> > > > > On Fri, Sep 8, 2017 at 12:34 PM, Dan Smith <dsm...@pivotal.io>
> > wrote:
> > > > >
> > > > > > +1
> > > > > >
> > > > > > -Dan
> > > > > >
> > > > > > On Thu, Sep 7, 2017 at 9:14 PM, Nabarun Nag <n...@apache.org>
> > wrote:
> > > > > >
> > > > > > > *Proposal:*
> > > > > > > * Index interface will include an API - isValid() which will
> > return
> > > > > true
> > > > > > if
> > > > > > > the index is still valid / uncorrupted, else will return false
> if
> > > it
> > > > > > > corrupted / invalid.
> > > > > > > * gfsh command "list index" will have one more column "Is
> Valid"
> > > > which
> > > > > > will
> > > > > > > state the status as "true" or "false".
> > > > > > > * Invalid indexes will not be used during query executions.
> > > > > > > * In case the index is found to be invalid, the user will be
> able
> > > to
> > > > > > > remove/destroy the index.
> > > > > > > * When a put operation corrupts an index, it will be logged.
> > > > > > >
> > > > > > > *Reasoning:*
> > > > > > > * Currently if a put operation raises an exception while
> updating
> > > the
> > > > > > > index, the put operation fails with an exception to the putter.
> > > > > > > * For example, if an index is created on an object method, and
> > that
> > > > > > method
> > > > > > > causes an exception while updating the index as a part of a put
> > > > > > operation,
> > > > > > > then the put operation fails for that particular entry and the
> > > index
> > > > is
> > > > > > > left in a bad state.
> > > > > > > * This may occur also due to lack of permission to update index
> > but
> > > > > have
> > > > > > > permission to do puts.
> > > > > > > * We are proposing that in the above mentioned scenarios, the
> put
> > > > > > succeeds
> > > > > > > in putting the entry in the region but the index which it was
> > > trying
> > > > to
> > > > > > > update will be marked invalid and will not be used for query
> > > > > executions.
> > > > > > > * This can be justified because the corrupted index will not
> > > > correctly
> > > > > > > represent the region entries.
> > > > > > >
> > > > > > > *Status Quo:*
> > > > > > > * Index creation will still fail if we are trying to create an
> > > index
> > > > > > over a
> > > > > > > region containing an entry/entries  which will cause an
> exception
> > > > while
> > > > > > > loading the entry into the index.
> > > > > > >
> > > > > > > Regards
> > > > > > > Nabarun Nag
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> >
> >
> > --
> > -John
> > john.blum10101 (skype)
> >
>

Reply via email to