Hi

IndexReader.listCommits returns a Collection, which not only does not define
and guarantee any ordering between the commits, but also makes it very hard
to know what is the latest commit. And we have some inconsistency, IMO, in
how we return the commits today, in the different API:

IndexDeletionPolicy receives a List<IndexCommit> and not Collection.
Furthermore, it relies on the commits being ordered oldest -> latest, and
it's somewhat documented.

listCommits, to my surprise, returns the latest commit as the first element
of the Collection, and the rest of the commits are unsorted. Having seen IDP
relying on the commits to be sorted, I thought that listCommits sorts them
too, but was surprised to find out that the latest one appears first.

The implementation already returns an ArrayList, and I wonder why do we need
the Collection abstraction? Why not returning a List, or even a LinkedList,
or an array - anything that entails ordering between them. And preferably
something which will allow me to access first/last really quickly, and
direct access can be a bonus for all I care.
And we should also document the ordering they are returned, and better make
it consistent w/ IDP's assumptions. It's a static method, so no one can
break by extending it. And committing to some ordering should be problematic
- we already do that with IDPs.

The only problem is that we cannot change the signature of the method, so
I'm ok w/ either break back-compat and document, or deprecate and create a
getCommits (or a better name).

While we're at it, it'd be great if we can consolidate ReaderCommit and
CommitPoint. The latter implements Comparable and supports deletion of
IndexCommits, while the former doesn't do both. Is there any reason why it
cannot support delete()?

What do you think?

Shai

Reply via email to