소스 검색

Add stored binary fields to static backwards compatibility indices tests (#22054)

Add stored binary fields to static backwards compatibility indices tests
Michael McCandless 8 년 전
부모
커밋
613a1a6a18

+ 23 - 0
core/src/test/java/org/elasticsearch/bwcompat/OldIndexBackwardsCompatibilityIT.java

@@ -38,6 +38,7 @@ import org.elasticsearch.action.support.WriteRequest.RefreshPolicy;
 import org.elasticsearch.cluster.metadata.IndexMetaData;
 import org.elasticsearch.cluster.metadata.MetaData;
 import org.elasticsearch.cluster.routing.RecoverySource;
+import org.elasticsearch.common.bytes.BytesArray;
 import org.elasticsearch.common.io.FileSystemUtils;
 import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.unit.TimeValue;
@@ -55,6 +56,8 @@ import org.elasticsearch.indices.recovery.RecoveryState;
 import org.elasticsearch.node.Node;
 import org.elasticsearch.plugins.Plugin;
 import org.elasticsearch.search.SearchHit;
+import org.elasticsearch.search.SearchHitField;
+import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
 import org.elasticsearch.search.aggregations.bucket.terms.Terms;
@@ -242,6 +245,7 @@ public class OldIndexBackwardsCompatibilityIT extends ESIntegTestCase {
         assertUpgradeWorks(client(), indexName, version);
         assertPositionIncrementGapDefaults(indexName, version);
         assertAliasWithBadName(indexName, version);
+        assertStoredBinaryFields(indexName, version);
         unloadIndex(indexName);
     }
 
@@ -461,6 +465,25 @@ public class OldIndexBackwardsCompatibilityIT extends ESIntegTestCase {
         assertFalse(client().admin().indices().prepareAliasesExist(aliasName).get().exists());
     }
 
+    /**
+     * Make sure we can load stored binary fields.
+     */
+    void assertStoredBinaryFields(String indexName, Version version) throws Exception {
+        SearchRequestBuilder builder = client().prepareSearch(indexName);
+        builder.setQuery(QueryBuilders.matchAllQuery());
+        builder.setSize(100);
+        builder.addStoredField("binary");
+        SearchHits hits = builder.get().getHits();
+        assertEquals(100, hits.hits().length);
+        for(SearchHit hit : hits) {
+            SearchHitField field = hit.field("binary");
+            assertNotNull(field);
+            Object value = field.value();
+            assertTrue(value instanceof BytesArray);
+            assertEquals(16, ((BytesArray) value).length());
+        }
+    }
+
     private Path getNodeDir(String indexFile) throws IOException {
         Path unzipDir = createTempDir();
         Path unzipDataDir = unzipDir.resolve("data");

BIN
core/src/test/resources/indices/bwc/index-5.0.0.zip


BIN
core/src/test/resources/indices/bwc/index-5.0.1.zip


BIN
core/src/test/resources/indices/bwc/index-5.0.2.zip


BIN
core/src/test/resources/indices/bwc/index-5.1.1.zip


BIN
core/src/test/resources/indices/bwc/repo-5.0.0.zip


BIN
core/src/test/resources/indices/bwc/repo-5.0.1.zip


BIN
core/src/test/resources/indices/bwc/repo-5.0.2.zip


BIN
core/src/test/resources/indices/bwc/repo-5.1.1.zip


+ 9 - 0
dev-tools/create_bwc_index.py

@@ -15,6 +15,7 @@
 # language governing permissions and limitations under the License.
 
 import argparse
+import base64
 import glob
 import logging
 import os
@@ -73,6 +74,8 @@ def index(es, index_name, type, num_docs, supports_dots_in_field_names, flush=Fa
     if supports_dots_in_field_names:
       body['field.with.dots'] = str(random.randint(0, 100))
 
+    body['binary'] = base64.b64encode(bytearray(random.getrandbits(8) for _ in range(16))).decode('ascii')
+
     es.index(index=index_name, doc_type=type, id=id, body=body)
 
     if rarely():
@@ -334,6 +337,12 @@ def generate_index(client, version, index_name):
         }
     })
 
+  # test back-compat of stored binary fields
+  mappings['doc']['properties']['binary'] = {
+    'type': 'binary',
+    'store': True,
+    }
+
   settings = {
     'number_of_shards': 1,
     'number_of_replicas': 0,