Browse Source

Add comment explaining lazy declared versions

A recent change moved computing declared versions from using reflection
which occurred repeatedly to a lazily-initialized holder so that
declared versions are computed exactly once. This commit adds a comment
explaining the motivation for this change.
Jason Tedor 7 years ago
parent
commit
cd54c96d56
1 changed files with 9 additions and 4 deletions
  1. 9 4
      server/src/main/java/org/elasticsearch/Version.java

+ 9 - 4
server/src/main/java/org/elasticsearch/Version.java

@@ -163,10 +163,6 @@ public class Version implements Comparable<Version> {
                 + org.apache.lucene.util.Version.LATEST + "] is still set to [" + CURRENT.luceneVersion + "]";
     }
 
-    private static class DeclaredVersionsHolder {
-        static final List<Version> DECLARED_VERSIONS = Collections.unmodifiableList(getDeclaredVersions(Version.class));
-    }
-
     public static Version readVersion(StreamInput in) throws IOException {
         return fromId(in.readVInt());
     }
@@ -406,6 +402,15 @@ public class Version implements Comparable<Version> {
         return Integer.compare(this.id, other.id);
     }
 
+    /*
+     * We need the declared versions when computing the minimum compatibility version. As computing the declared versions uses reflection it
+     * is not cheap. Since computing the minimum compatibility version can occur often, we use this holder to compute the declared versions
+     * lazily once.
+     */
+    private static class DeclaredVersionsHolder {
+        static final List<Version> DECLARED_VERSIONS = Collections.unmodifiableList(getDeclaredVersions(Version.class));
+    }
+
     /**
      * Returns the minimum compatible version based on the current
      * version. Ie a node needs to have at least the return version in order