34
34
import org .elasticsearch .index .shard .IndexShard ;
35
35
import org .elasticsearch .index .shard .IndexShardTestCase ;
36
36
import org .elasticsearch .index .translog .Translog ;
37
+ import org .elasticsearch .indices .IndicesService ;
37
38
import org .elasticsearch .plugins .Plugin ;
38
39
import org .elasticsearch .test .ESSingleNodeTestCase ;
39
40
import org .elasticsearch .test .InternalSettingsPlugin ;
47
48
import java .util .concurrent .atomic .AtomicReference ;
48
49
49
50
import static org .elasticsearch .test .InternalSettingsPlugin .TRANSLOG_RETENTION_CHECK_INTERVAL_SETTING ;
51
+ import static org .elasticsearch .test .hamcrest .ElasticsearchAssertions .assertAcked ;
50
52
import static org .hamcrest .core .IsEqual .equalTo ;
51
53
52
54
/** Unit test(s) for IndexService */
@@ -109,22 +111,49 @@ protected String getThreadPool() {
109
111
latch2 .get ().countDown ();
110
112
assertEquals (2 , count .get ());
111
113
112
-
113
114
task = new IndexService .BaseAsyncTask (indexService , TimeValue .timeValueMillis (1000000 )) {
114
115
@ Override
115
116
protected void runInternal () {
116
117
117
118
}
118
119
};
119
120
assertTrue (task .mustReschedule ());
121
+
122
+ // now close the index
123
+ final Index index = indexService .index ();
124
+ assertAcked (client ().admin ().indices ().prepareClose (index .getName ()));
125
+ awaitBusy (() -> getInstanceFromNode (IndicesService .class ).hasIndex (index ));
126
+
127
+ final IndexService closedIndexService = getInstanceFromNode (IndicesService .class ).indexServiceSafe (index );
128
+ assertNotSame (indexService , closedIndexService );
129
+ assertFalse (task .mustReschedule ());
130
+ assertFalse (task .isClosed ());
131
+ assertEquals (1000000 , task .getInterval ().millis ());
132
+
133
+ // now reopen the index
134
+ assertAcked (client ().admin ().indices ().prepareOpen (index .getName ()));
135
+ awaitBusy (() -> getInstanceFromNode (IndicesService .class ).hasIndex (index ));
136
+ indexService = getInstanceFromNode (IndicesService .class ).indexServiceSafe (index );
137
+ assertNotSame (closedIndexService , indexService );
138
+
139
+ task = new IndexService .BaseAsyncTask (indexService , TimeValue .timeValueMillis (100000 )) {
140
+ @ Override
141
+ protected void runInternal () {
142
+
143
+ }
144
+ };
145
+ assertTrue (task .mustReschedule ());
146
+ assertFalse (task .isClosed ());
147
+ assertTrue (task .isScheduled ());
148
+
120
149
indexService .close ("simon says" , false );
121
150
assertFalse ("no shards left" , task .mustReschedule ());
122
151
assertTrue (task .isScheduled ());
123
152
task .close ();
124
153
assertFalse (task .isScheduled ());
125
154
}
126
155
127
- public void testRefreshTaskIsUpdated () throws IOException {
156
+ public void testRefreshTaskIsUpdated () throws Exception {
128
157
IndexService indexService = createIndex ("test" , Settings .EMPTY );
129
158
IndexService .AsyncRefreshTask refreshTask = indexService .getRefreshTask ();
130
159
assertEquals (1000 , refreshTask .getInterval ().millis ());
@@ -167,12 +196,35 @@ public void testRefreshTaskIsUpdated() throws IOException {
167
196
assertTrue (refreshTask .isScheduled ());
168
197
assertFalse (refreshTask .isClosed ());
169
198
assertEquals (200 , refreshTask .getInterval ().millis ());
199
+
200
+ // now close the index
201
+ final Index index = indexService .index ();
202
+ assertAcked (client ().admin ().indices ().prepareClose (index .getName ()));
203
+ awaitBusy (() -> getInstanceFromNode (IndicesService .class ).hasIndex (index ));
204
+
205
+ final IndexService closedIndexService = getInstanceFromNode (IndicesService .class ).indexServiceSafe (index );
206
+ assertNotSame (indexService , closedIndexService );
207
+ assertNotSame (refreshTask , closedIndexService .getRefreshTask ());
208
+ assertFalse (closedIndexService .getRefreshTask ().mustReschedule ());
209
+ assertFalse (closedIndexService .getRefreshTask ().isClosed ());
210
+ assertEquals (200 , closedIndexService .getRefreshTask ().getInterval ().millis ());
211
+
212
+ // now reopen the index
213
+ assertAcked (client ().admin ().indices ().prepareOpen (index .getName ()));
214
+ awaitBusy (() -> getInstanceFromNode (IndicesService .class ).hasIndex (index ));
215
+ indexService = getInstanceFromNode (IndicesService .class ).indexServiceSafe (index );
216
+ assertNotSame (closedIndexService , indexService );
217
+ refreshTask = indexService .getRefreshTask ();
218
+ assertTrue (indexService .getRefreshTask ().mustReschedule ());
219
+ assertTrue (refreshTask .isScheduled ());
220
+ assertFalse (refreshTask .isClosed ());
221
+
170
222
indexService .close ("simon says" , false );
171
223
assertFalse (refreshTask .isScheduled ());
172
224
assertTrue (refreshTask .isClosed ());
173
225
}
174
226
175
- public void testFsyncTaskIsRunning () throws IOException {
227
+ public void testFsyncTaskIsRunning () throws Exception {
176
228
Settings settings = Settings .builder ()
177
229
.put (IndexSettings .INDEX_TRANSLOG_DURABILITY_SETTING .getKey (), Translog .Durability .ASYNC ).build ();
178
230
IndexService indexService = createIndex ("test" , settings );
@@ -182,6 +234,28 @@ public void testFsyncTaskIsRunning() throws IOException {
182
234
assertTrue (fsyncTask .mustReschedule ());
183
235
assertTrue (fsyncTask .isScheduled ());
184
236
237
+ // now close the index
238
+ final Index index = indexService .index ();
239
+ assertAcked (client ().admin ().indices ().prepareClose (index .getName ()));
240
+ awaitBusy (() -> getInstanceFromNode (IndicesService .class ).hasIndex (index ));
241
+
242
+ final IndexService closedIndexService = getInstanceFromNode (IndicesService .class ).indexServiceSafe (index );
243
+ assertNotSame (indexService , closedIndexService );
244
+ assertNotSame (fsyncTask , closedIndexService .getFsyncTask ());
245
+ assertFalse (closedIndexService .getFsyncTask ().mustReschedule ());
246
+ assertFalse (closedIndexService .getFsyncTask ().isClosed ());
247
+ assertEquals (5000 , closedIndexService .getFsyncTask ().getInterval ().millis ());
248
+
249
+ // now reopen the index
250
+ assertAcked (client ().admin ().indices ().prepareOpen (index .getName ()));
251
+ awaitBusy (() -> getInstanceFromNode (IndicesService .class ).hasIndex (index ));
252
+ indexService = getInstanceFromNode (IndicesService .class ).indexServiceSafe (index );
253
+ assertNotSame (closedIndexService , indexService );
254
+ fsyncTask = indexService .getFsyncTask ();
255
+ assertTrue (indexService .getRefreshTask ().mustReschedule ());
256
+ assertTrue (fsyncTask .isScheduled ());
257
+ assertFalse (fsyncTask .isClosed ());
258
+
185
259
indexService .close ("simon says" , false );
186
260
assertFalse (fsyncTask .isScheduled ());
187
261
assertTrue (fsyncTask .isClosed ());
0 commit comments