Hi Team,

In Oak many a times we perform operations which traverse the tree as
part of some processing. For e.g. commit hooks, side grade, indexing
etc. For small tree this works fine and in case of failure the
processing can be done again from start.

However for large operations like reindexing whole repository for some
index this posses a problem. For example consider a Mongo setup having
100M+ nodes and we need to provision a new index. This would trigger
an IndexUpdate which would go through all the nodes in the repository
(in some depth first manner) and then build up the index. This process
can take long time say 1-2 days for a Mongo based setup.

As with any remote setup such a flow may get interrupted due to some
network issue or outage on Mongo/RDB side. In such a case the whole
traversal is started again from start.

Same would be the case for any sidegrade operation where we convert a
big repository from one form to another.

To improve the resiliency of such operations (OAK-2063) we need a way
to "resume" traversal in a tree from some last known point. For
operations performed on a sorted list such a "resume" is easy but
doing that over a tree traversal looks tricky.

Thoughts on what approach can be taken for enabling this?

May be if we can expect a stable order in traversal at a given
revision then we can keep track of paths t certain depth and then on
retry skip processing of subtrees untill untill we get that path

Chetan Mehrotra

Reply via email to