try {
while (processingTableUpdate > lastUpdatedFromTable) {
//TODO: this iterates in reverse, so need to find someway to do partial indexes
//if(numIndexed++ > MAX_TO_INDEX_AT_ONCE && !"id".equals(propertyName))
//throw new QueryCantBeHandled("Too many items to index at once");
Persistable lastChangeObject = getVersionByReference(processingTableUpdate);
Persistable previousObject = lastChangeObject;
ObjectVersion versionInfo = (ObjectVersion) lastChangeObject.getVersion();
boolean isDeleted = versionInfo.isDeleted;
// versionInfo.previousTableChange != processingTableUpdate: "previous version points to self";
if (versionInfo.currentVersionReference != processingTableUpdate || versionInfo.previousTableChange >= processingTableUpdate) {
getVersionByReference(processingTableUpdate);
throw new IllegalStateException("should not be here");
}
long nextTableUpdate = versionInfo.previousTableChange;
if (versionInfo.isCurrent || writeListener.containsOverWrittenObject(processingTableUpdate)) {
//System.err.println("bringUpToDate " + lastChangeObject.getId() + " isDelete " + isDeleted + " processing " + processingTableUpdate);
boolean searching = true;
do {
versionInfo = (ObjectVersion) previousObject.getVersion();
if (versionInfo.previousVersionReference <= lastUpdatedFromTable)
searching = false;
previousObject = versionInfo.getPreviousVersion();
//System.err.println("bringUpToDate " + lastChangeObject.getId() + " isDelete " + isDeleted + " processing " + processingTableUpdate + " previous " + previousObject);
// TODO: If we know a point at which the index has definitely not been updated, we don't need to do this removal if versionInfo.previousVersionReference > knownNotHaveBeenIndexed
if (previousObject != null) {
submitIfNeeded(addToObjectsNeedingIndex(new IndexNodeUpdate("id".equals(propertyName) ? convertIdToInternalObject(previousObject
.getId()).subObjectId : previousObject.get(propertyName), false, versionInfo.previousVersionReference, this)));
}
} while (searching);
//System.err.println("numIndexed " + (numIndexed++));
//System.out.println("addin to index " + processingTableUpdate + " " + nextTableUpdate + " " + (this instanceof RootIndexNode ? ((RootIndexNode)this).propertyName : ""));
if(!isDeleted){