Dealing with a Magma index that's out of step

Chris Muller asqueaker at gmail.com
Tue Nov 13 16:07:05 UTC 2012


Hi Nick,

> A couple of days ago we had an incident where a runaway process on a
> server cause it to become largely unresponsive. This server also holds
> the Magma repository. It appears that as a result of Magma operating
> through this incident, a commit on a domain object succeeded, but the
> index update failed, so the index continued to reflect the old state of
> the object. (I can't prove this is the cause, but it seems to me
> likely.)

Hm, this should never happen.  Magma writes to the DB atomically,
including index updates.  Strange.

> Hitting Google for advice on fixing the Magma index, I found a thread on
> this list [1] where the given solution to this sort of index problem is
> to remove and re-add the object to the collection. However, when I
> remove the object from the collection, it doesn't get removed from the
> index (presumably because the index entry removal depends upon the state
> of the object being correspondent, which of course in this case, it
> isn't.)

Yes, that appears to be true.  See
MagmaCollectionManager>>#processRemovesIn: for the method that
actually does this.  I wonder if temporarily removing the "didRemove"
guard would have worked for you?  Hm, I'm actually wondering whether
that guard is really necessary..

> On re-adding the object to the collection, it gets indexed with its
> correct state, but this is in *addition* to the old index entry. So that
> didn't fix my problem.

Just a note:  Objects can be added multiple times to a
MagmaCollection, so if it was in there more than once it would be
indexed more than once too.  Doesn't sound like that was the case this
time but, just fyi.

> I did subsequently fix it by reverting the state of the domain object to
> match the index, then progressing the object forward through its normal
> process, successfully updating the index as it went.
>
> So, the questions are:
>  1 - Is there another way of fixing the problem, that I missed?
>  2 - Ought there to be clearly defined interfaces for forcing in & out
>  particular index entries, or forcing entire index rebuilds?

You could do a #removeIndexNamed: followed by #addIndex: to force a
full rebuild.

 - Chris


More information about the Magma mailing list