Merge changes from topic 'notedb-diffs'

* changes:
  ChangeRebuilder: Fuse StatusChangeEvent into ChangeMessageEvent
  ChangeBundle: Ignore postSubmit bit on post-submit 0 votes
  RevisionIT: Fix test for post-submit approval after deletion
  ChangeRebuilder: Fix grouping of events containing tags
  Add more info to toString for rebuilding events
  ChangeRebuilderImpl: Handle non-monotonic patch set timestamps
  ChangeUpdate: Sanitize all footers
  ChangeBundle: Handle leading/trailing whitespace in topic/desc
  Handle change subjects containing '\r' in NoteDb
diff --git a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/DropWizardMetricMaker.java b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/DropWizardMetricMaker.java
index 1127728..118ca03 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/DropWizardMetricMaker.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/metrics/dropwizard/DropWizardMetricMaker.java
@@ -322,9 +322,15 @@
 
   private synchronized void define(String name, Description desc) {
     if (descriptions.containsKey(name)) {
-      throw new IllegalStateException(String.format("metric %s already defined", name));
+      ImmutableMap<String, String> annotations = descriptions.get(name);
+      if (!desc.getAnnotations()
+          .get(Description.DESCRIPTION)
+          .equals(annotations.get(Description.DESCRIPTION))) {
+        throw new IllegalStateException(String.format("metric %s already defined", name));
+      }
+    } else {
+      descriptions.put(name, desc.getAnnotations());
     }
-    descriptions.put(name, desc.getAnnotations());
   }
 
   private static final Pattern METRIC_NAME_PATTERN =