@@ -41,56 +41,79 @@ public void testOldIndicesCheck() {
41
41
int oldIndexCount = randomIntBetween (1 , 100 );
42
42
int newIndexCount = randomIntBetween (1 , 100 );
43
43
44
- List <Index > allIndices = new ArrayList <>();
45
44
Map <String , IndexMetadata > nameToIndexMetadata = new HashMap <>();
46
45
Set <String > expectedIndices = new HashSet <>();
47
46
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 );
50
48
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 ();
57
51
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
+ );
67
65
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 ));
78
67
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
94
117
);
95
118
96
119
Metadata metadata = Metadata .builder ().indices (nameToIndexMetadata ).build ();
@@ -104,7 +127,7 @@ public void testOldIndicesCheck() {
104
127
false ,
105
128
ofEntries (
106
129
entry ("reindex_required" , true ),
107
- entry ("total_backing_indices" , oldIndexCount + newIndexCount ),
130
+ entry ("total_backing_indices" , oldOpenIndexCount + oldClosedIndexCount + newOpenIndexCount + newClosedIndexCount ),
108
131
entry ("indices_requiring_upgrade_count" , expectedIndices .size ()),
109
132
entry ("indices_requiring_upgrade" , expectedIndices )
110
133
)
@@ -115,4 +138,90 @@ public void testOldIndicesCheck() {
115
138
assertThat (issues , equalTo (singletonList (expected )));
116
139
}
117
140
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
+ }
118
227
}
0 commit comments