dece981249
It used to be that ConfigNotesMigration was the only kind of NotesMigration in a real server, but it was always immutable, while TestNotesMigration was the main kind of migration in acceptance tests, which was mutable. However, now that we support modifying ConfigNotesMigration at runtime as part of the online NoteDb migration process, TestNotesMigration is no longer strictly necessary, and continuing to support it is becoming more trouble than it's worth. One major problem was that only TestNotesMigration was being populated via NoteDbMode, and the NoteDbMode was not reflected in the ConfigNotesMigration at all, so callers that were depending on ConfigNotesMigration directly would not know about the NoteDb migration state from the GERRIT_NOTEDB env var in tests. We could have fixed this (and other) problems directly, but there is a better solution: get rid of the test implementation entirely, and use the same implementation of NotesMigration in tests as in a running server. The class hierarchy now contains only two classes: NotesMigration and MutableNotesMigration. Most callers just care about inspecting the state, so they can inject a NotesMigration. The few callers (migration, tests) that care about mutating the state at runtime can inject/create MutableNotesMigrations instead. As an implementation detail, the actual NotesMigration instance continues to be mutable, containing a reference to the Snapshot, but the base class does not contain any public methods to mutate the state. We then ensure with Guice that there is only one actual NotesMigration instance (the MutableNotesMigration), and callers just may or may not have access to the mutation methods depending on what they chose to inject. Ensuring this gets set up correctly in tests requires a bit of tweaking. * Since the NotesMigration is populated in the @UseLocalDisk case from reading gerrit.config on disk, we need to prepopulate gerrit.config with the right config values at startup time. * Since MutableNotesMigration is not in the testutil package, it can't have its own setFromEnv() method that depends on NoteDbMode. Instead, construct MutableNotesMigrations from the test env by using a static factory method in NoteDbMode. Change-Id: If06db3d025cf3e3c9fe464989d5f38a22ce70b56 |
||
---|---|---|
.. | ||
src/main | ||
BUILD | ||
pom.xml |