Hi Team,

As a follow up to previous mail around "Using same index definition
for both async and sync indexing" wanted to discuss the next step. We
need to provide a way to pass indexing related state to
IndexEditorProvider (OAK-4642)

Over the period of time I have seen need for extra state like

1. reindexing - Currently the index implementation use some heuristic
    like check before root state being empty to determine if they are
running in reindexing mode
2. indexing mode - sync or async
3. index path of the index (see OAK-4152)
4. CommitInfo (see OAK-4640)

For #1 and #3 we have done some kind of workaround but it would be
better to have a first class support for that.

So we would need to introduce some sort of IndexingContext and have
the api for IndexEditorProvider like below

=========
    @CheckForNull
    Editor getIndexEditor(
            @Nonnull String type, @Nonnull NodeBuilder definition,
            @Nonnull NodeState root,
            @Nonnull IndexingContext context) throws CommitFailedException;
=========

To introduce such a change I see 3 options

* O1 - Introduce a new interface which takes an {{IndexingContext}}
instance which provide access to such datapoints. This would require
some broader change
** Whereever the IndexEditorProvider is invoked it would need to check
if the instance implements new interface. If yes then new method needs
to be used

Overall it introduces noise.

* O2 - Here we can introduce such data points as part of callback
interface. With this we would need to implement such methods in places
where code constructs the callback

* O3 - Make a backward incompatible change and just modify the
existing interface and adapt the various implementation

I am in favour of going for O3 and make this backward compatible change

Thoughts?

Chetan Mehrotra

Reply via email to