Merge branch 'stable-3.0' into stable-3.1

* stable-3.0:
  Set version to 2.16.18-SNAPSHOT
  Set version to 2.16.17
  Schema_151: Attempt to add created_on column if it doesn't exist
  Update documentation links of 'numberOfShards' and 'numberOfReplicas'
  Support 'max_result_window' config for Elasticsearch indexes
  Add Zuul config
  Fix a typo in gr-file-list.js: dynmic -> dynamic
  Support displaying dynamic headers in gr-file-list
  Support displaying dynamic content and summary cells in gr-file-list
  Add headers to gr-file-list
  Add Zuul config
  Document dependency from account deactivator to autoUpdateAccountActiveStatus
  Introduce NamedFluentLogger

Change-Id: I4eaf94df9b512fb7b36db4ac4741b32b001e21b5
diff --git a/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java b/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java
index cbe9bc7..35c33cb 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticConfiguration.java
@@ -40,10 +40,13 @@
   static final String KEY_SERVER = "server";
   static final String KEY_NUMBER_OF_SHARDS = "numberOfShards";
   static final String KEY_NUMBER_OF_REPLICAS = "numberOfReplicas";
+  static final String KEY_MAX_RESULT_WINDOW = "maxResultWindow";
+
   static final String DEFAULT_PORT = "9200";
   static final String DEFAULT_USERNAME = "elastic";
   static final int DEFAULT_NUMBER_OF_SHARDS = 0;
   static final int DEFAULT_NUMBER_OF_REPLICAS = 1;
+  static final int DEFAULT_MAX_RESULT_WINDOW = 10000;
 
   private final Config cfg;
   private final List<HttpHost> hosts;
@@ -52,6 +55,7 @@
   final String password;
   final int numberOfShards;
   final int numberOfReplicas;
+  final int maxResultWindow;
   final String prefix;
 
   @Inject
@@ -68,6 +72,8 @@
         cfg.getInt(SECTION_ELASTICSEARCH, null, KEY_NUMBER_OF_SHARDS, DEFAULT_NUMBER_OF_SHARDS);
     this.numberOfReplicas =
         cfg.getInt(SECTION_ELASTICSEARCH, null, KEY_NUMBER_OF_REPLICAS, DEFAULT_NUMBER_OF_REPLICAS);
+    this.maxResultWindow =
+        cfg.getInt(SECTION_ELASTICSEARCH, null, KEY_MAX_RESULT_WINDOW, DEFAULT_MAX_RESULT_WINDOW);
     this.hosts = new ArrayList<>();
     for (String server : cfg.getStringList(SECTION_ELASTICSEARCH, null, KEY_SERVER)) {
       try {
diff --git a/java/com/google/gerrit/elasticsearch/ElasticSetting.java b/java/com/google/gerrit/elasticsearch/ElasticSetting.java
index 14e4623..e016efb 100644
--- a/java/com/google/gerrit/elasticsearch/ElasticSetting.java
+++ b/java/com/google/gerrit/elasticsearch/ElasticSetting.java
@@ -35,6 +35,7 @@
       properties.analysis = fields.build();
       properties.numberOfShards = config.getNumberOfShards(adapter);
       properties.numberOfReplicas = config.numberOfReplicas;
+      properties.maxResultWindow = config.maxResultWindow;
       return properties;
     }
 
@@ -75,6 +76,7 @@
     Map<String, FieldProperties> analysis;
     Integer numberOfShards;
     Integer numberOfReplicas;
+    Integer maxResultWindow;
   }
 
   static class FieldProperties {