@@ -150,50 +150,7 @@ public void runIndexTest(
150
150
try (Store store = createStore (shardId , indexSettings , newDirectory ())) {
151
151
final EngineConfig engineConfig = engineConfig (shardId , indexSettings , threadPool , store , logger , xContentRegistry ());
152
152
try (FollowingEngine followingEngine = createEngine (store , engineConfig )) {
153
- final String id = "id" ;
154
- final Field uidField = new Field ("_id" , id , IdFieldMapper .Defaults .FIELD_TYPE );
155
- final String type = "type" ;
156
- final Field versionField = new NumericDocValuesField ("_version" , 0 );
157
- final SeqNoFieldMapper .SequenceIDFields seqID = SeqNoFieldMapper .SequenceIDFields .emptySeqID ();
158
- final ParseContext .Document document = new ParseContext .Document ();
159
- document .add (uidField );
160
- document .add (versionField );
161
- document .add (seqID .seqNo );
162
- document .add (seqID .seqNoDocValue );
163
- document .add (seqID .primaryTerm );
164
- final BytesReference source = new BytesArray (new byte []{1 });
165
- final ParsedDocument parsedDocument = new ParsedDocument (
166
- versionField ,
167
- seqID ,
168
- id ,
169
- type ,
170
- "routing" ,
171
- Collections .singletonList (document ),
172
- source ,
173
- XContentType .JSON ,
174
- null );
175
-
176
- final long version ;
177
- final long autoGeneratedIdTimestamp ;
178
- if (randomBoolean ()) {
179
- version = 1 ;
180
- autoGeneratedIdTimestamp = System .currentTimeMillis ();
181
- } else {
182
- version = randomNonNegativeLong ();
183
- autoGeneratedIdTimestamp = IndexRequest .UNSET_AUTO_GENERATED_TIMESTAMP ;
184
- }
185
- final Engine .Index index = new Engine .Index (
186
- new Term ("_id" , parsedDocument .id ()),
187
- parsedDocument ,
188
- seqNo ,
189
- primaryTerm .get (),
190
- version ,
191
- VersionType .EXTERNAL ,
192
- origin ,
193
- System .currentTimeMillis (),
194
- autoGeneratedIdTimestamp ,
195
- randomBoolean ());
196
-
153
+ final Engine .Index index = createIndexOp ("id" , seqNo , origin );
197
154
consumer .accept (followingEngine , index );
198
155
}
199
156
}
@@ -243,6 +200,26 @@ public void runDeleteTest(
243
200
}
244
201
}
245
202
203
+ public void testDoNotFillSeqNoGaps () throws Exception {
204
+ final Settings settings =
205
+ Settings .builder ()
206
+ .put ("index.number_of_shards" , 1 )
207
+ .put ("index.number_of_replicas" , 0 )
208
+ .put ("index.version.created" , Version .CURRENT )
209
+ .put ("index.xpack.ccr.following_index" , true )
210
+ .build ();
211
+ final IndexMetaData indexMetaData = IndexMetaData .builder (index .getName ()).settings (settings ).build ();
212
+ final IndexSettings indexSettings = new IndexSettings (indexMetaData , settings );
213
+ try (Store store = createStore (shardId , indexSettings , newDirectory ())) {
214
+ final EngineConfig engineConfig = engineConfig (shardId , indexSettings , threadPool , store , logger , xContentRegistry ());
215
+ try (FollowingEngine followingEngine = createEngine (store , engineConfig )) {
216
+ followingEngine .index (createIndexOp ("id" , 128 , Engine .Operation .Origin .PRIMARY ));
217
+ int addedNoops = followingEngine .fillSeqNoGaps (primaryTerm .get ());
218
+ assertThat (addedNoops , equalTo (0 ));
219
+ }
220
+ }
221
+ }
222
+
246
223
private EngineConfig engineConfig (
247
224
final ShardId shardId ,
248
225
final IndexSettings indexSettings ,
@@ -307,4 +284,49 @@ private FollowingEngine createEngine(Store store, EngineConfig config) throws IO
307
284
return followingEngine ;
308
285
}
309
286
287
+ private Engine .Index createIndexOp (String id , long seqNo , Engine .Operation .Origin origin ) {
288
+ final Field uidField = new Field ("_id" , id , IdFieldMapper .Defaults .FIELD_TYPE );
289
+ final String type = "type" ;
290
+ final Field versionField = new NumericDocValuesField ("_version" , 0 );
291
+ final SeqNoFieldMapper .SequenceIDFields seqID = SeqNoFieldMapper .SequenceIDFields .emptySeqID ();
292
+ final ParseContext .Document document = new ParseContext .Document ();
293
+ document .add (uidField );
294
+ document .add (versionField );
295
+ document .add (seqID .seqNo );
296
+ document .add (seqID .seqNoDocValue );
297
+ document .add (seqID .primaryTerm );
298
+ final BytesReference source = new BytesArray (new byte []{1 });
299
+ final ParsedDocument parsedDocument = new ParsedDocument (
300
+ versionField ,
301
+ seqID ,
302
+ id ,
303
+ type ,
304
+ "routing" ,
305
+ Collections .singletonList (document ),
306
+ source ,
307
+ XContentType .JSON ,
308
+ null );
309
+
310
+ final long version ;
311
+ final long autoGeneratedIdTimestamp ;
312
+ if (randomBoolean ()) {
313
+ version = 1 ;
314
+ autoGeneratedIdTimestamp = System .currentTimeMillis ();
315
+ } else {
316
+ version = randomNonNegativeLong ();
317
+ autoGeneratedIdTimestamp = IndexRequest .UNSET_AUTO_GENERATED_TIMESTAMP ;
318
+ }
319
+ return new Engine .Index (
320
+ new Term ("_id" , parsedDocument .id ()),
321
+ parsedDocument ,
322
+ seqNo ,
323
+ primaryTerm .get (),
324
+ version ,
325
+ VersionType .EXTERNAL ,
326
+ origin ,
327
+ System .currentTimeMillis (),
328
+ autoGeneratedIdTimestamp ,
329
+ randomBoolean ());
330
+ }
331
+
310
332
}
0 commit comments