@@ -150,50 +150,7 @@ public void runIndexTest(
150150 try (Store store = createStore (shardId , indexSettings , newDirectory ())) {
151151 final EngineConfig engineConfig = engineConfig (shardId , indexSettings , threadPool , store , logger , xContentRegistry ());
152152 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 );
197154 consumer .accept (followingEngine , index );
198155 }
199156 }
@@ -243,6 +200,26 @@ public void runDeleteTest(
243200 }
244201 }
245202
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+
246223 private EngineConfig engineConfig (
247224 final ShardId shardId ,
248225 final IndexSettings indexSettings ,
@@ -307,4 +284,49 @@ private FollowingEngine createEngine(Store store, EngineConfig config) throws IO
307284 return followingEngine ;
308285 }
309286
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+
310332}
0 commit comments