Sorry to come back on this again. I think I was wrong saying that the tuples should be removed from the elastic index after each call to streamMore(). They have to be kept around until the tuples are really deleted from the underlying table, which is when the transaction commits. Otherwise, the transaction may roll back and the index has no way of undoing the erase operations.

This may be better because you don't need the bulkDeleteToken any more. When the delete undo token is released, just let the normal flow take care of removing it from the index.