@@ -41,56 +41,79 @@ public void testOldIndicesCheck() {
4141 int oldIndexCount = randomIntBetween (1 , 100 );
4242 int newIndexCount = randomIntBetween (1 , 100 );
4343
44- List <Index > allIndices = new ArrayList <>();
4544 Map <String , IndexMetadata > nameToIndexMetadata = new HashMap <>();
4645 Set <String > expectedIndices = new HashSet <>();
4746
48- for (int i = 0 ; i < oldIndexCount ; i ++) {
49- Settings .Builder settings = settings (IndexVersion .fromId (7170099 ));
47+ DataStream dataStream = createTestDataStream (oldIndexCount , 0 , newIndexCount , 0 , nameToIndexMetadata , expectedIndices );
5048
51- String indexName = "old-data-stream-index-" + i ;
52- if (expectedIndices .isEmpty () == false && randomIntBetween (0 , 2 ) == 0 ) {
53- settings .put (INDEX_STORE_TYPE_SETTING .getKey (), SearchableSnapshotsSettings .SEARCHABLE_SNAPSHOT_STORE_TYPE );
54- } else {
55- expectedIndices .add (indexName );
56- }
49+ Metadata metadata = Metadata .builder ().indices (nameToIndexMetadata ).build ();
50+ ClusterState clusterState = ClusterState .builder (ClusterName .DEFAULT ).metadata (metadata ).build ();
5751
58- Settings .Builder settingsBuilder = settings ;
59- IndexMetadata oldIndexMetadata = IndexMetadata .builder (indexName )
60- .settings (settingsBuilder )
61- .numberOfShards (1 )
62- .numberOfReplicas (0 )
63- .build ();
64- allIndices .add (oldIndexMetadata .getIndex ());
65- nameToIndexMetadata .put (oldIndexMetadata .getIndex ().getName (), oldIndexMetadata );
66- }
52+ DeprecationIssue expected = new DeprecationIssue (
53+ DeprecationIssue .Level .CRITICAL ,
54+ "Old data stream with a compatibility version < 9.0" ,
55+ "https://www.elastic.co/guide/en/elasticsearch/reference/master/breaking-changes-9.0.html" ,
56+ "This data stream has backing indices that were created before Elasticsearch 9.0.0" ,
57+ false ,
58+ ofEntries (
59+ entry ("reindex_required" , true ),
60+ entry ("total_backing_indices" , oldIndexCount + newIndexCount ),
61+ entry ("indices_requiring_upgrade_count" , expectedIndices .size ()),
62+ entry ("indices_requiring_upgrade" , expectedIndices )
63+ )
64+ );
6765
68- for (int i = 0 ; i < newIndexCount ; i ++) {
69- Settings .Builder settingsBuilder = settings (IndexVersion .current ());
70- IndexMetadata newIndexMetadata = IndexMetadata .builder ("new-data-stream-index-" + i )
71- .settings (settingsBuilder )
72- .numberOfShards (1 )
73- .numberOfReplicas (0 )
74- .build ();
75- allIndices .add (newIndexMetadata .getIndex ());
76- nameToIndexMetadata .put (newIndexMetadata .getIndex ().getName (), newIndexMetadata );
77- }
66+ List <DeprecationIssue > issues = DeprecationChecks .filterChecks (DATA_STREAM_CHECKS , c -> c .apply (dataStream , clusterState ));
7867
79- DataStream dataStream = new DataStream (
80- randomAlphaOfLength (10 ),
81- allIndices ,
82- randomNegativeLong (),
83- Map .of (),
84- randomBoolean (),
85- false ,
86- false ,
87- randomBoolean (),
88- randomFrom (IndexMode .values ()),
89- null ,
90- randomFrom (DataStreamOptions .EMPTY , DataStreamOptions .FAILURE_STORE_DISABLED , DataStreamOptions .FAILURE_STORE_ENABLED , null ),
91- List .of (),
92- randomBoolean (),
93- null
68+ assertThat (issues , equalTo (singletonList (expected )));
69+ }
70+
71+ public void testOldIndicesCheckWithOnlyClosedOrNewIndices () {
72+ // This tests what happens when any old indices that we have are closed. We expect no deprecation warning.
73+ int oldClosedIndexCount = randomIntBetween (1 , 100 );
74+ int newOpenIndexCount = randomIntBetween (0 , 100 );
75+ int newClosedIndexCount = randomIntBetween (0 , 100 );
76+
77+ Map <String , IndexMetadata > nameToIndexMetadata = new HashMap <>();
78+ Set <String > expectedIndices = new HashSet <>();
79+
80+ DataStream dataStream = createTestDataStream (
81+ 0 ,
82+ oldClosedIndexCount ,
83+ newOpenIndexCount ,
84+ newClosedIndexCount ,
85+ nameToIndexMetadata ,
86+ expectedIndices
87+ );
88+
89+ Metadata metadata = Metadata .builder ().indices (nameToIndexMetadata ).build ();
90+ ClusterState clusterState = ClusterState .builder (ClusterName .DEFAULT ).metadata (metadata ).build ();
91+
92+ List <DeprecationIssue > issues = DeprecationChecks .filterChecks (DATA_STREAM_CHECKS , c -> c .apply (dataStream , clusterState ));
93+
94+ assertThat (issues .size (), equalTo (0 ));
95+ }
96+
97+ public void testOldIndicesCheckWithClosedAndOpenIndices () {
98+ /*
99+ * This tests what happens when a data stream has old indices, and some are open and some are closed. We expect a deprecation
100+ * warning that includes information about the old ones only.
101+ */
102+ int oldOpenIndexCount = randomIntBetween (1 , 100 );
103+ int oldClosedIndexCount = randomIntBetween (1 , 100 );
104+ int newOpenIndexCount = randomIntBetween (0 , 100 );
105+ int newClosedIndexCount = randomIntBetween (0 , 100 );
106+
107+ Map <String , IndexMetadata > nameToIndexMetadata = new HashMap <>();
108+ Set <String > expectedIndices = new HashSet <>();
109+
110+ DataStream dataStream = createTestDataStream (
111+ oldOpenIndexCount ,
112+ oldClosedIndexCount ,
113+ newOpenIndexCount ,
114+ newClosedIndexCount ,
115+ nameToIndexMetadata ,
116+ expectedIndices
94117 );
95118
96119 Metadata metadata = Metadata .builder ().indices (nameToIndexMetadata ).build ();
@@ -104,7 +127,7 @@ public void testOldIndicesCheck() {
104127 false ,
105128 ofEntries (
106129 entry ("reindex_required" , true ),
107- entry ("total_backing_indices" , oldIndexCount + newIndexCount ),
130+ entry ("total_backing_indices" , oldOpenIndexCount + oldClosedIndexCount + newOpenIndexCount + newClosedIndexCount ),
108131 entry ("indices_requiring_upgrade_count" , expectedIndices .size ()),
109132 entry ("indices_requiring_upgrade" , expectedIndices )
110133 )
@@ -115,4 +138,90 @@ public void testOldIndicesCheck() {
115138 assertThat (issues , equalTo (singletonList (expected )));
116139 }
117140
141+ /*
142+ * This creates a test DataStream with the given counts. The nameToIndexMetadata Map and the expectedIndices Set are mutable collections
143+ * that will be populated by this method.
144+ */
145+ private DataStream createTestDataStream (
146+ int oldOpenIndexCount ,
147+ int oldClosedIndexCount ,
148+ int newOpenIndexCount ,
149+ int newClosedIndexCount ,
150+ Map <String , IndexMetadata > nameToIndexMetadata ,
151+ Set <String > expectedIndices
152+ ) {
153+ List <Index > allIndices = new ArrayList <>();
154+
155+ for (int i = 0 ; i < oldOpenIndexCount ; i ++) {
156+ allIndices .add (createOldIndex (i , false , nameToIndexMetadata , expectedIndices ));
157+ }
158+ for (int i = 0 ; i < oldClosedIndexCount ; i ++) {
159+ allIndices .add (createOldIndex (i , true , nameToIndexMetadata , null ));
160+ }
161+ for (int i = 0 ; i < newOpenIndexCount ; i ++) {
162+ allIndices .add (createNewIndex (i , false , nameToIndexMetadata ));
163+ }
164+ for (int i = 0 ; i < newClosedIndexCount ; i ++) {
165+ allIndices .add (createNewIndex (i , true , nameToIndexMetadata ));
166+ }
167+
168+ DataStream dataStream = new DataStream (
169+ randomAlphaOfLength (10 ),
170+ allIndices ,
171+ randomNegativeLong (),
172+ Map .of (),
173+ randomBoolean (),
174+ false ,
175+ false ,
176+ randomBoolean (),
177+ randomFrom (IndexMode .values ()),
178+ null ,
179+ randomFrom (DataStreamOptions .EMPTY , DataStreamOptions .FAILURE_STORE_DISABLED , DataStreamOptions .FAILURE_STORE_ENABLED , null ),
180+ List .of (),
181+ randomBoolean (),
182+ null
183+ );
184+ return dataStream ;
185+ }
186+
187+ private Index createOldIndex (
188+ int suffix ,
189+ boolean isClosed ,
190+ Map <String , IndexMetadata > nameToIndexMetadata ,
191+ Set <String > expectedIndices
192+ ) {
193+ return createIndex (true , suffix , isClosed , nameToIndexMetadata , expectedIndices );
194+ }
195+
196+ private Index createNewIndex (int suffix , boolean isClosed , Map <String , IndexMetadata > nameToIndexMetadata ) {
197+ return createIndex (false , suffix , isClosed , nameToIndexMetadata , null );
198+ }
199+
200+ private Index createIndex (
201+ boolean isOld ,
202+ int suffix ,
203+ boolean isClosed ,
204+ Map <String , IndexMetadata > nameToIndexMetadata ,
205+ Set <String > expectedIndices
206+ ) {
207+ Settings .Builder settingsBuilder = isOld ? settings (IndexVersion .fromId (7170099 )) : settings (IndexVersion .current ());
208+ String indexName = (isOld ? "old-" : "new-" ) + (isClosed ? "closed-" : "" ) + "data-stream-index-" + suffix ;
209+ if (isOld && isClosed == false ) { // we only expect warnings on open old indices
210+ if (expectedIndices .isEmpty () == false && randomIntBetween (0 , 2 ) == 0 ) {
211+ settingsBuilder .put (INDEX_STORE_TYPE_SETTING .getKey (), SearchableSnapshotsSettings .SEARCHABLE_SNAPSHOT_STORE_TYPE );
212+ } else {
213+ expectedIndices .add (indexName );
214+ }
215+ }
216+ IndexMetadata .Builder indexMetadataBuilder = IndexMetadata .builder (indexName )
217+ .settings (settingsBuilder )
218+ .numberOfShards (1 )
219+ .numberOfReplicas (0 );
220+ if (isClosed ) {
221+ indexMetadataBuilder .state (IndexMetadata .State .CLOSE );
222+ }
223+ IndexMetadata indexMetadata = indexMetadataBuilder .build ();
224+ nameToIndexMetadata .put (indexMetadata .getIndex ().getName (), indexMetadata );
225+ return indexMetadata .getIndex ();
226+ }
118227}
0 commit comments