diff --git a/Documentation/backup.txt b/Documentation/backup.txt index cd247af828..7220c740f0 100644 --- a/Documentation/backup.txt +++ b/Documentation/backup.txt @@ -139,11 +139,12 @@ Use a file system supporting snapshots to keep the period where the gerrit server is read-only or down as short as possible. [#cons-backup-read-only] -=== Turn master read-only for backup +=== Turn primary server read-only for backup -Make the server read-only before taking the backup. This means read-access -is still available during backup, because only write operations have to be -stopped to ensure consistency. This can be implemented using the +Make the primary server handling write operations read-only before taking the +backup. This means read-access is still available from replica servers during +backup, because only write operations have to be stopped to ensure consistency. +This can be implemented using the link:https://gerrit.googlesource.com/plugins/readonly/[_readonly_] plugin. [#cons-backup-replicate] @@ -180,11 +181,12 @@ If you are using Gerrit replica to offload read traffic you can use one of these replica for creating backups. [#cons-backup-offline] -=== Take master offline for backup +=== Take primary server offline for backup -Shutdown the server before taking a backup. This is simple but means downtime -for the users. Also crons and currently running cron jobs (e.g. repacking -repositories) which affect the repositories may need to be shut down. +Shut down the primary server handling write operations before taking a backup. +This is simple but means downtime for the users. Also crons and currently +running cron jobs (e.g. repacking repositories) which affect the repositories +may need to be shut down. [#backup-methods] == Backup methods diff --git a/Documentation/config-accounts.txt b/Documentation/config-accounts.txt index 45aa42a432..d1fb690b19 100644 --- a/Documentation/config-accounts.txt +++ b/Documentation/config-accounts.txt @@ -386,10 +386,10 @@ stored in a local H2 database, but there is an extension point that allows to plug in alternate implementations for storing the reviewed flags. To replace the storage for reviewed flags a plugin needs to implement the link:dev-plugins.html#account-patch-review-store[ -AccountPatchReviewStore] interface. E.g. to support a multi-master -setup where reviewed flags should be replicated between the master -nodes one could implement a store for the reviewed flags that is -based on MySQL with replication. +AccountPatchReviewStore] interface. E.g. to support a cluster setup with +multiple primary servers handling write operations where reviewed flags should +be replicated between the primary nodes one could implement a store for the +reviewed flags that is based on MySQL with replication. [[account-sequence]] == Account Sequence diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt index 6dd01fe7b8..cf255f3cf4 100644 --- a/Documentation/config-gerrit.txt +++ b/Documentation/config-gerrit.txt @@ -826,7 +826,8 @@ changes for up to 1024 projects can be held in the cache. + Default value is 0 (disabled). It is disabled by default due to the fact that change updates are not communicated between Gerrit servers. Hence -this cache should be disabled in an multi-master/multi-replica setup. +this cache should be disabled in a cluster setup using multiple primary +or multiple replica nodes. + The cache should be flushed whenever the database changes table is modified outside of Gerrit. @@ -1569,7 +1570,8 @@ options. + Used on Gerrit replica installations. If set to true the Gerrit JVM is called with the '--replica' switch, enabling replica mode. If no value is -set (or any other value), Gerrit defaults to master mode. +set (or any other value), Gerrit defaults to primary mode enabling write +operations. [[container.slave]]container.slave:: + @@ -4365,7 +4367,7 @@ SSH-compression since git does not compress the ref announcement during handshake. + Compression can be especially useful when Gerrit replicas are being used -for the larger clones and fetches and the master server mostly takes +for the larger clones and fetches and the primary server mostly takes small receive-packs. + By default, `false`. diff --git a/Documentation/config-groups.txt b/Documentation/config-groups.txt index 327cab6733..afabbfce10 100644 --- a/Documentation/config-groups.txt +++ b/Documentation/config-groups.txt @@ -103,7 +103,7 @@ Group] reindex the affected groups manually. == Replication -In a replicated setting (eg. backups and or master/replica -configurations), all refs in the `All-Users` project must be copied -onto all replicas, including `refs/groups/*`, `refs/meta/group-names` -and `refs/sequences/groups`. +In a replicated setting (eg. backups and or primary/replica configurations), all +refs in the `All-Users` project on primary nodes must be copied onto all +replicas, including `refs/groups/*`, `refs/meta/group-names` and +`refs/sequences/groups`. diff --git a/Documentation/config-plugins.txt b/Documentation/config-plugins.txt index edeec5426c..464611de8e 100644 --- a/Documentation/config-plugins.txt +++ b/Documentation/config-plugins.txt @@ -797,8 +797,8 @@ Configuration] This plugin replaces the built-in Gerrit H2 based websession cache with a flatfile based implementation. This implementation is shareable -among multiple Gerrit servers, making it useful for multi-master -Gerrit installations. +among multiple Gerrit servers, making it useful for cluster +Gerrit installations having multiple primary Gerrit nodes. link:https://gerrit-review.googlesource.com/admin/repos/plugins/websession-flatfile[ Project] | diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index a2fcd47599..11e0666e33 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt @@ -2306,7 +2306,8 @@ flags is growing without bound. The store must be able handle this data volume efficiently. Gerrit implements this extension point, but plugins may bind another -implementation, e.g. one that supports multi-master. +implementation, e.g. one that supports cluster setup with multiple +primary Gerrit nodes handling write operations. ---- DynamicItem.bind(binder(), AccountPatchReviewStore.class) diff --git a/Documentation/pgm-daemon.txt b/Documentation/pgm-daemon.txt index 210b1cbd8c..7345d069d2 100644 --- a/Documentation/pgm-daemon.txt +++ b/Documentation/pgm-daemon.txt @@ -81,7 +81,7 @@ external log cleaning service to clean up the prior logs. == KNOWN ISSUES Replica daemon caches can quickly become out of date when modifications -are made on the master. The following configuration is suggested in +are made on the primary node. The following configuration is suggested in a replica to reduce the maxAge for each cache entry, so that changes are recognized in a reasonable period of time: @@ -106,7 +106,7 @@ and if LDAP support was enabled, also include: maxAge = 5 min ---- -Automatic cache coherency between master and replica systems is +Automatic cache coherency between primary and replica systems is planned to be implemented in a future version. GERRIT diff --git a/contrib/hooks/post-receive-move-tmp-refs b/contrib/hooks/post-receive-move-tmp-refs index c99a3e5344..fa0684f5df 100755 --- a/contrib/hooks/post-receive-move-tmp-refs +++ b/contrib/hooks/post-receive-move-tmp-refs @@ -15,10 +15,10 @@ # limitations under the License. # -------------------------------------------------------- # Install this hook script as post-receive hook in replicated repositories -# hosted by a gerrit slave which are updated by push replication from the -# corresponding gerrit master. +# hosted by a gerrit replica which are updated by push replication from the +# corresponding gerrit primary node. # -# In the gerrit master configure the replication plugin to push changes from +# In the gerrit primary node configure the replication plugin to push changes from # refs/changes/ to refs/tmp/changes/ # remote.NAME.push = +refs/changes/*:refs/tmp/changes/* # remote.NAME.push = +refs/heads/*:refs/heads/* @@ -26,26 +26,26 @@ # And if it's a Gerrit mirror: # remote.NAME.push = +refs/meta/*:refs/meta/* # -# In the replicated repository in the gerrit slave configure +# In the replicated repository in the gerrit replica configure # receive.hideRefs = refs/changes/ # in order to not advertise the big number of refs in this namespace when -# the gerrit master's replication plugin is pushing a change +# the gerrit primary's replication plugin is pushing a change # # Whenever a ref under refs/tmp/changes/ is arriving this hook will move it # to refs/changes/. This helps to avoid the large overhead of advertising all -# refs/changes/ refs to the gerrit master when it replicates changes to the -# slave.. +# refs/changes/ refs to the gerrit primary when it replicates changes to the +# replica. # # Make this script executable then link to it in the repository you would like # to use it in. # cd /path/to/your/repository.git # ln -sf /post-receive-move-tmp-refs hooks/post-receive # -# If you want to use this by default for repositories on the Gerrit slave you +# If you want to use this by default for repositories on the Gerrit replica you # can set up a git template directory $TEMPLATE_DIR/hooks/post-receive and # configure init.templateDir in the ~/.gitconfig of the user that receives the # replication on the mirror host. That way when a new repository is created on -# the master and hence on the mirror (if configured that way) it will +# the primary and hence on the mirror (if configured that way) it will # automatically have the "tmp-refs" commit hook installed. # See https://git-scm.com/docs/git-init#_template_directory for details. diff --git a/java/com/google/gerrit/server/ExceptionHook.java b/java/com/google/gerrit/server/ExceptionHook.java index ea76330244..a0d98d2866 100644 --- a/java/com/google/gerrit/server/ExceptionHook.java +++ b/java/com/google/gerrit/server/ExceptionHook.java @@ -19,11 +19,11 @@ import com.google.gerrit.extensions.annotations.ExtensionPoint; /** * Allows implementors to control how certain exceptions should be handled. * - *

This interface is intended to be implemented for multi-master setups to control the behavior - * for handling exceptions that are thrown by a lower layer that handles the consensus and - * synchronization between different server nodes. E.g. if an operation fails because consensus for - * a Git update could not be achieved (e.g. due to slow responding server nodes) this interface can - * be used to retry the request instead of failing it immediately. + *

This interface is intended to be implemented for cluster setups with multiple primary nodes to + * control the behavior for handling exceptions that are thrown by a lower layer that handles the + * consensus and synchronization between different server nodes. E.g. if an operation fails because + * consensus for a Git update could not be achieved (e.g. due to slow responding server nodes) this + * interface can be used to retry the request instead of failing it immediately. */ @ExtensionPoint public interface ExceptionHook { diff --git a/java/com/google/gerrit/server/change/AccountPatchReviewStore.java b/java/com/google/gerrit/server/change/AccountPatchReviewStore.java index d6bb164b64..8da2a90660 100644 --- a/java/com/google/gerrit/server/change/AccountPatchReviewStore.java +++ b/java/com/google/gerrit/server/change/AccountPatchReviewStore.java @@ -30,7 +30,8 @@ import java.util.Optional; * number of reviewed flags is growing without bound. The store must be able handle this data volume * efficiently. * - *

For a multi-master setup the store must replicate the data between the masters. + *

For a cluster setups with multiple primary nodes the store must replicate the data between the + * primary servers. */ public interface AccountPatchReviewStore { diff --git a/java/com/google/gerrit/server/submit/MergeOp.java b/java/com/google/gerrit/server/submit/MergeOp.java index a06027af0f..adb75a402e 100644 --- a/java/com/google/gerrit/server/submit/MergeOp.java +++ b/java/com/google/gerrit/server/submit/MergeOp.java @@ -828,9 +828,9 @@ public class MergeOp implements AutoCloseable { } // The patch set ref is not found but we want to merge the change. We can't safely do that - // if the patch set ref is missing. In a multi-master setup this can indicate a replication - // lag (e.g. the change meta data was already replicated, but the replication of the patch - // set ref is still pending). + // if the patch set ref is missing. In a cluster setups with multiple primary nodes this can + // indicate a replication lag (e.g. the change meta data was already replicated, but the + // replication of the patch set ref is still pending). commitStatus.logProblem( changeId, "Patch set ref " diff --git a/java/com/google/gerrit/sshd/SshDaemon.java b/java/com/google/gerrit/sshd/SshDaemon.java index 7512b3eabe..da090871bf 100644 --- a/java/com/google/gerrit/sshd/SshDaemon.java +++ b/java/com/google/gerrit/sshd/SshDaemon.java @@ -638,10 +638,9 @@ public class SshDaemon extends SshServer implements SshInfo, LifecycleListener { // However, if there are CPU in abundance and the server is reachable through // slow networks, gits with huge amount of refs can benefit from SSH-compression // since git does not compress the ref announcement during the handshake. - // - // Compression can be especially useful when Gerrit slaves are being used - // for the larger clones and fetches and the master server mostly takes small - // receive-packs. + // Compression can be especially useful when Gerrit replica are being used + // for the larger clones and fetches and the primary server handling write + // operations mostly takes small receive-packs. if (enableCompression) { compressionFactories.add(BuiltinCompressions.zlib); diff --git a/javatests/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java b/javatests/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java index 464f3ffe84..29574c4e84 100644 --- a/javatests/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java +++ b/javatests/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java @@ -306,7 +306,7 @@ public class ProjectWatchIT extends AbstractDaemonTest { requestScopeOperations.setApiUser(user.id()); // watch keyword in project as user - watch(watchedProject, "multimaster"); + watch(watchedProject, "multiprimary"); // push a change with keyword -> should trigger email notification requestScopeOperations.setApiUser(admin.id()); @@ -314,7 +314,7 @@ public class ProjectWatchIT extends AbstractDaemonTest { cloneProject(Project.nameKey(watchedProject), admin); PushOneCommit.Result r = pushFactory - .create(admin.newIdent(), watchedRepo, "Document multimaster setup", "a.txt", "a1") + .create(admin.newIdent(), watchedRepo, "Document multiprimary setup", "a.txt", "a1") .to("refs/for/master"); r.assertOkStatus(); @@ -323,7 +323,7 @@ public class ProjectWatchIT extends AbstractDaemonTest { assertThat(messages).hasSize(1); Message m = messages.get(0); assertThat(m.rcpt()).containsExactly(user.getEmailAddress()); - assertThat(m.body()).contains("Change subject: Document multimaster setup\n"); + assertThat(m.body()).contains("Change subject: Document multiprimary setup\n"); assertThat(m.body()).contains("Gerrit-PatchSet: 1\n"); sender.clear(); @@ -418,7 +418,7 @@ public class ProjectWatchIT extends AbstractDaemonTest { requestScopeOperations.setApiUser(user.id()); // watch keyword in project as user - watch(allProjects.get(), "multimaster"); + watch(allProjects.get(), "multiprimary"); // push a change with keyword to any project -> should trigger email // notification @@ -426,7 +426,7 @@ public class ProjectWatchIT extends AbstractDaemonTest { TestRepository anyRepo = cloneProject(Project.nameKey(anyProject), admin); PushOneCommit.Result r = pushFactory - .create(admin.newIdent(), anyRepo, "Document multimaster setup", "a.txt", "a1") + .create(admin.newIdent(), anyRepo, "Document multiprimary setup", "a.txt", "a1") .to("refs/for/master"); r.assertOkStatus(); @@ -435,7 +435,7 @@ public class ProjectWatchIT extends AbstractDaemonTest { assertThat(messages).hasSize(1); Message m = messages.get(0); assertThat(m.rcpt()).containsExactly(user.getEmailAddress()); - assertThat(m.body()).contains("Change subject: Document multimaster setup\n"); + assertThat(m.body()).contains("Change subject: Document multiprimary setup\n"); assertThat(m.body()).contains("Gerrit-PatchSet: 1\n"); sender.clear();