Merge "Document and test that plugins can throw RuntimeExceptions from ETag computation"
This commit is contained in:
@@ -50,6 +50,11 @@ public interface ChangeETagComputation {
|
|||||||
* <p><strong>Note:</strong> Change ETags are computed very frequently and the computation must be
|
* <p><strong>Note:</strong> Change ETags are computed very frequently and the computation must be
|
||||||
* cheap. Take good care to not perform any expensive computations when implementing this.
|
* cheap. Take good care to not perform any expensive computations when implementing this.
|
||||||
*
|
*
|
||||||
|
* <p>If an error is encountered during the ETag computation the plugin can indicate this by
|
||||||
|
* throwing any RuntimeException. In this case no value will be included in the change ETag
|
||||||
|
* computation. This means if the error is transient, the ETag will differ when the computation
|
||||||
|
* succeeds on a follow-up run.
|
||||||
|
*
|
||||||
* @param projectName the name of the project that contains the change
|
* @param projectName the name of the project that contains the change
|
||||||
* @param changeId ID of the change for which the ETag should be computed
|
* @param changeId ID of the change for which the ETag should be computed
|
||||||
* @return the ETag
|
* @return the ETag
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ import com.google.gerrit.common.data.GlobalCapability;
|
|||||||
import com.google.gerrit.common.data.LabelFunction;
|
import com.google.gerrit.common.data.LabelFunction;
|
||||||
import com.google.gerrit.common.data.LabelType;
|
import com.google.gerrit.common.data.LabelType;
|
||||||
import com.google.gerrit.common.data.Permission;
|
import com.google.gerrit.common.data.Permission;
|
||||||
|
import com.google.gerrit.exceptions.StorageException;
|
||||||
import com.google.gerrit.extensions.annotations.Exports;
|
import com.google.gerrit.extensions.annotations.Exports;
|
||||||
import com.google.gerrit.extensions.api.changes.AddReviewerInput;
|
import com.google.gerrit.extensions.api.changes.AddReviewerInput;
|
||||||
import com.google.gerrit.extensions.api.changes.AddReviewerResult;
|
import com.google.gerrit.extensions.api.changes.AddReviewerResult;
|
||||||
@@ -2182,6 +2183,24 @@ public class ChangeIT extends AbstractDaemonTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void throwingExceptionFromETagComputationDoesNotBreakGerrit() throws Exception {
|
||||||
|
PushOneCommit.Result r = createChange();
|
||||||
|
String oldETag = parseResource(r).getETag();
|
||||||
|
|
||||||
|
RegistrationHandle registrationHandle =
|
||||||
|
changeETagComputations.add(
|
||||||
|
"gerrit",
|
||||||
|
(p, id) -> {
|
||||||
|
throw new StorageException("exception during test");
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
assertThat(parseResource(r).getETag()).isEqualTo(oldETag);
|
||||||
|
} finally {
|
||||||
|
registrationHandle.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void emailNotificationForFileLevelComment() throws Exception {
|
public void emailNotificationForFileLevelComment() throws Exception {
|
||||||
String changeId = createChange().getChangeId();
|
String changeId = createChange().getChangeId();
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import com.google.gerrit.acceptance.AbstractDaemonTest;
|
|||||||
import com.google.gerrit.acceptance.PushOneCommit;
|
import com.google.gerrit.acceptance.PushOneCommit;
|
||||||
import com.google.gerrit.acceptance.TestProjectInput;
|
import com.google.gerrit.acceptance.TestProjectInput;
|
||||||
import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
|
import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
|
||||||
|
import com.google.gerrit.exceptions.StorageException;
|
||||||
import com.google.gerrit.extensions.api.changes.ActionVisitor;
|
import com.google.gerrit.extensions.api.changes.ActionVisitor;
|
||||||
import com.google.gerrit.extensions.api.changes.ReviewInput;
|
import com.google.gerrit.extensions.api.changes.ReviewInput;
|
||||||
import com.google.gerrit.extensions.client.ListChangesOption;
|
import com.google.gerrit.extensions.client.ListChangesOption;
|
||||||
@@ -235,6 +236,24 @@ public class ActionsIT extends AbstractDaemonTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void throwingExceptionFromETagComputationDoesNotBreakGerrit() throws Exception {
|
||||||
|
String change = createChange().getChangeId();
|
||||||
|
String oldETag = getETag(change);
|
||||||
|
|
||||||
|
RegistrationHandle registrationHandle =
|
||||||
|
changeETagComputations.add(
|
||||||
|
"gerrit",
|
||||||
|
(p, id) -> {
|
||||||
|
throw new StorageException("exception during test");
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
assertThat(getETag(change)).isEqualTo(oldETag);
|
||||||
|
} finally {
|
||||||
|
registrationHandle.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void revisionActionsTwoChangesInTopic_conflicting() throws Exception {
|
public void revisionActionsTwoChangesInTopic_conflicting() throws Exception {
|
||||||
String changeId = createChangeWithTopic().getChangeId();
|
String changeId = createChangeWithTopic().getChangeId();
|
||||||
|
|||||||
Reference in New Issue
Block a user