Load change in ChangeNotes.Factory

ChangeNotes.Factory now loads the change from the database. This
should become the only place where changes are loaded from the
database, but for this more work is required in follow-up changes.

We need to load the change for the database also when notedb is
enabled. This is because for now we still want to write updates to the
database when notedb is enabled. In order to write update to the
database the change instance must be created by loading it from the
database because otherwise its row version is not set and then all
updates to the database fail with OrmConcurrencyException.

The signature of the ChangeNotes.Factory#create is changed to require
project name and a change ID instead of a change. Project name is not
needed yet, since the change is always loaded by change ID from the
database, but later when reviewdb is gone we will need the project
name to instantiate the change from notedb.

For changes that have been loaded from the secondary index we don't
want to reload them from the database. This is why a new
ChangeNotes.Factory#createFromIndexedChange method is added that still
takes a change as input.

Change-Id: Idc274d6938f989b4d7fa49ee496d7ac84c749455
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-02-02 09:51:36 +01:00
parent 3a90257848
commit c89c21cd6d
19 changed files with 84 additions and 54 deletions

View File

@@ -309,8 +309,9 @@ public class ChangeHookRunner implements ChangeHooks, EventDispatcher,
.build());
}
private ChangeNotes newNotes(ReviewDb db, Change change) {
return notesFactory.create(db, change);
private ChangeNotes newNotes(ReviewDb db, Change change)
throws OrmException {
return notesFactory.create(db, change.getProject(), change.getId());
}
private static Optional<Path> hook(Config config, Path path, String name) {