Prevent misleading Invalid id' error in logs Upon git ref updates, pull-replication is fired so that remotes are notified to perform a new fetch operation. Small commits however (for configurable values of "small") can already be sent as part of the payload in order to save one round-trip and be passed directly instead. For this reason, for each updated ref, an attempt is made to extract the commit from the update ref. Upon failure however, a non-useful, error message spamming the logs, as such: ``` org.eclipse.jgit.errors.InvalidObjectIdException: Invalid id ``` Without giving any detail on what ref or what objectId actually caused the exception, this entry is quite useless. This was the case for example, in a multi-site installation, where the ```refs/multi-site/version``` ref was failing to be extracted (since the ref points to a blob rather than a commit). in fact, in a multi-site deployment this ref should be added to the ```replication.excludeRefs``` section. Catch the InvalidObjectIdException and provide contextual information on which ref, exactly, failed. Bug: 14741 Change-Id: Ib0ed6f4606c72738de9296be353c4d88a2f3a88b
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java index cdba012..3ded8eb 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java +++ b/src/main/java/com/googlesource/gerrit/plugins/replication/pull/ReplicationQueue.java
@@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; +import org.eclipse.jgit.errors.InvalidObjectIdException; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.transport.URIish; import org.slf4j.Logger; @@ -189,7 +190,7 @@ if (revisionData.isPresent()) { return ((source) -> callSendObject(source, project, refName, revisionData.get(), state)); } - } catch (IOException | RefUpdateException e) { + } catch (InvalidObjectIdException | IOException | RefUpdateException e) { stateLog.error( String.format( "Exception during reading ref: %s, project:%s, message: %s",
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md index 126cd1b..d4c5abf 100644 --- a/src/main/resources/Documentation/config.md +++ b/src/main/resources/Documentation/config.md
@@ -181,6 +181,9 @@ By default, all other refs are included. + Note that if you are using @PLUGIN@ together with multi-site, you should + explicitly exclude `refs/multi-site/version` from being replicated. + replication.syncRefs : Specify for which refs git fetch calls should be executed synchronously. It can be provided more than once, and supports three formats: regular expressions,