summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaushik Lingarkar <[email protected]>2025-08-14 10:21:49 -0700
committerGerrit Code Review <[email protected]>2025-08-14 10:21:49 -0700
commit363cc19d14a5a115fda9a944e10666e7ad7c4da2 (patch)
treeccc48cf43f6300af514ce6deb47ac3cd94550616
parent88485ecf5b84cf92f2e56a24835a2745b519a7eb (diff)
parent0383fe371a1e83893f4cd83225f81d69fc3f3223 (diff)
Merge "SequenceSetCommand: Enforce strictly increasing sequence" into stable-3.10upstream/stable-3.10
-rw-r--r--java/com/google/gerrit/server/notedb/RepoSequence.java1
-rw-r--r--java/com/google/gerrit/sshd/commands/SequenceSetCommand.java35
-rw-r--r--javatests/com/google/gerrit/server/notedb/RepoSequenceTest.java13
3 files changed, 34 insertions, 15 deletions
diff --git a/java/com/google/gerrit/server/notedb/RepoSequence.java b/java/com/google/gerrit/server/notedb/RepoSequence.java
index 5580cbc7bb..36a508da78 100644
--- a/java/com/google/gerrit/server/notedb/RepoSequence.java
+++ b/java/com/google/gerrit/server/notedb/RepoSequence.java
@@ -372,6 +372,7 @@ public class RepoSequence implements Sequence {
@Override
public void storeNew(int value) {
+ checkIsIncremental(value);
counterLock.lock();
try (RefUpdateContext ctx = RefUpdateContext.open(REPO_SEQ)) {
try (Repository repo = repoManager.openRepository(projectName);
diff --git a/java/com/google/gerrit/sshd/commands/SequenceSetCommand.java b/java/com/google/gerrit/sshd/commands/SequenceSetCommand.java
index 3ec34bc817..6685d78cd1 100644
--- a/java/com/google/gerrit/sshd/commands/SequenceSetCommand.java
+++ b/java/com/google/gerrit/sshd/commands/SequenceSetCommand.java
@@ -17,6 +17,7 @@ package com.google.gerrit.sshd.commands;
import com.google.gerrit.common.data.GlobalCapability;
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.server.Sequences;
+import com.google.gerrit.server.notedb.RepoSequence;
import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
import com.google.inject.Inject;
@@ -36,21 +37,25 @@ final class SequenceSetCommand extends SshCommand {
@Override
public void run() throws Exception {
- switch (name) {
- case "changes":
- sequences.setChangeIdValue(value);
- break;
- case "accounts":
- sequences.setAccountIdValue(value);
- break;
- case "groups":
- sequences.setGroupIdValue(value);
- break;
- default:
- throw die("Unknown sequence name: " + name);
+ try {
+ switch (name) {
+ case "changes":
+ sequences.setChangeIdValue(value);
+ break;
+ case "accounts":
+ sequences.setAccountIdValue(value);
+ break;
+ case "groups":
+ sequences.setGroupIdValue(value);
+ break;
+ default:
+ throw die("Unknown sequence name: " + name);
+ }
+ stdout.print("The value for the " + name + " sequence was set to " + value + ".");
+ stdout.print('\n');
+ stdout.flush();
+ } catch (RepoSequence.NonIncrementingSequenceException e) {
+ throw new UnloggedFailure(e.getMessage());
}
- stdout.print("The value for the " + name + " sequence was set to " + value + ".");
- stdout.print('\n');
- stdout.flush();
}
}
diff --git a/javatests/com/google/gerrit/server/notedb/RepoSequenceTest.java b/javatests/com/google/gerrit/server/notedb/RepoSequenceTest.java
index 7d83408abc..9878347734 100644
--- a/javatests/com/google/gerrit/server/notedb/RepoSequenceTest.java
+++ b/javatests/com/google/gerrit/server/notedb/RepoSequenceTest.java
@@ -372,6 +372,19 @@ public class RepoSequenceTest {
}
@Test
+ public void failOnNonIncrementingSequenceWithStoreNew() throws Exception {
+ RepoSequence s = newSequence("id", 10, 1);
+ assertThat(s.next()).isEqualTo(10);
+ RepoSequence.NonIncrementingSequenceException thrown =
+ assertThrows(RepoSequence.NonIncrementingSequenceException.class, () -> s.storeNew(5));
+ assertThat(thrown)
+ .hasMessageThat()
+ .contains(
+ "For refs/sequences/id, expected new value 5 to be greater than last stored value 11");
+ assertThat(s.current()).isEqualTo(11);
+ }
+
+ @Test
public void failOnNonIncrementingSequence() throws Exception {
RepoSequence s = newSequence("id", 10, 1);
assertThat(s.next()).isEqualTo(10);