@@ -2939,21 +2939,21 @@ public void testDoubleDeliveryPrimary() throws IOException {
2939
2939
Engine .Index retry = appendOnlyPrimary (doc , true , 1 );
2940
2940
if (randomBoolean ()) {
2941
2941
Engine .IndexResult indexResult = engine .index (operation );
2942
- assertFalse (engine . indexWriterHasDeletions () );
2942
+ assertLuceneOperations (engine , 1 , 0 , 0 );
2943
2943
assertEquals (0 , engine .getNumVersionLookups ());
2944
2944
assertNotNull (indexResult .getTranslogLocation ());
2945
2945
Engine .IndexResult retryResult = engine .index (retry );
2946
- assertTrue (engine . indexWriterHasDeletions () );
2946
+ assertLuceneOperations (engine , 1 , 1 , 0 );
2947
2947
assertEquals (0 , engine .getNumVersionLookups ());
2948
2948
assertNotNull (retryResult .getTranslogLocation ());
2949
2949
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) > 0 );
2950
2950
} else {
2951
2951
Engine .IndexResult retryResult = engine .index (retry );
2952
- assertTrue (engine . indexWriterHasDeletions () );
2952
+ assertLuceneOperations (engine , 0 , 1 , 0 );
2953
2953
assertEquals (0 , engine .getNumVersionLookups ());
2954
2954
assertNotNull (retryResult .getTranslogLocation ());
2955
2955
Engine .IndexResult indexResult = engine .index (operation );
2956
- assertTrue (engine . indexWriterHasDeletions () );
2956
+ assertLuceneOperations (engine , 0 , 2 , 0 );
2957
2957
assertEquals (0 , engine .getNumVersionLookups ());
2958
2958
assertNotNull (retryResult .getTranslogLocation ());
2959
2959
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) < 0 );
@@ -3000,23 +3000,23 @@ public void testDoubleDeliveryReplicaAppendingAndDeleteOnly() throws IOException
3000
3000
final boolean belowLckp = operation .seqNo () == 0 && retry .seqNo () == 0 ;
3001
3001
if (randomBoolean ()) {
3002
3002
Engine .IndexResult indexResult = engine .index (operation );
3003
- assertFalse (engine . indexWriterHasDeletions () );
3003
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3004
3004
assertEquals (0 , engine .getNumVersionLookups ());
3005
3005
assertNotNull (indexResult .getTranslogLocation ());
3006
3006
engine .delete (delete );
3007
3007
assertEquals (1 , engine .getNumVersionLookups ());
3008
- assertTrue (engine . indexWriterHasDeletions () );
3008
+ assertLuceneOperations (engine , 1 , 0 , 1 );
3009
3009
Engine .IndexResult retryResult = engine .index (retry );
3010
3010
assertEquals (belowLckp ? 1 : 2 , engine .getNumVersionLookups ());
3011
3011
assertNotNull (retryResult .getTranslogLocation ());
3012
3012
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) > 0 );
3013
3013
} else {
3014
3014
Engine .IndexResult retryResult = engine .index (retry );
3015
- assertFalse (engine . indexWriterHasDeletions () );
3015
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3016
3016
assertEquals (1 , engine .getNumVersionLookups ());
3017
3017
assertNotNull (retryResult .getTranslogLocation ());
3018
3018
engine .delete (delete );
3019
- assertTrue (engine . indexWriterHasDeletions () );
3019
+ assertLuceneOperations (engine , 1 , 0 , 1 );
3020
3020
assertEquals (2 , engine .getNumVersionLookups ());
3021
3021
Engine .IndexResult indexResult = engine .index (operation );
3022
3022
assertEquals (belowLckp ? 2 : 3 , engine .getNumVersionLookups ());
@@ -3041,21 +3041,29 @@ public void testDoubleDeliveryReplicaAppendingOnly() throws IOException {
3041
3041
final boolean belowLckp = operation .seqNo () == 0 && retry .seqNo () == 0 ;
3042
3042
if (randomBoolean ()) {
3043
3043
Engine .IndexResult indexResult = engine .index (operation );
3044
- assertFalse (engine . indexWriterHasDeletions () );
3044
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3045
3045
assertEquals (0 , engine .getNumVersionLookups ());
3046
3046
assertNotNull (indexResult .getTranslogLocation ());
3047
3047
Engine .IndexResult retryResult = engine .index (retry );
3048
- assertEquals (retry .seqNo () > operation .seqNo (), engine .indexWriterHasDeletions ());
3048
+ if (retry .seqNo () > operation .seqNo ()) {
3049
+ assertLuceneOperations (engine , 1 , 1 , 0 );
3050
+ } else {
3051
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3052
+ }
3049
3053
assertEquals (belowLckp ? 0 : 1 , engine .getNumVersionLookups ());
3050
3054
assertNotNull (retryResult .getTranslogLocation ());
3051
3055
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) > 0 );
3052
3056
} else {
3053
3057
Engine .IndexResult retryResult = engine .index (retry );
3054
- assertFalse (engine . indexWriterHasDeletions () );
3058
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3055
3059
assertEquals (1 , engine .getNumVersionLookups ());
3056
3060
assertNotNull (retryResult .getTranslogLocation ());
3057
3061
Engine .IndexResult indexResult = engine .index (operation );
3058
- assertEquals (operation .seqNo () > retry .seqNo (), engine .indexWriterHasDeletions ());
3062
+ if (operation .seqNo () > retry .seqNo ()) {
3063
+ assertLuceneOperations (engine , 1 , 1 , 0 );
3064
+ } else {
3065
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3066
+ }
3059
3067
assertEquals (belowLckp ? 1 : 2 , engine .getNumVersionLookups ());
3060
3068
assertNotNull (retryResult .getTranslogLocation ());
3061
3069
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) < 0 );
@@ -3096,27 +3104,27 @@ public void testDoubleDeliveryReplica() throws IOException {
3096
3104
Engine .Index duplicate = replicaIndexForDoc (doc , 1 , 20 , true );
3097
3105
if (randomBoolean ()) {
3098
3106
Engine .IndexResult indexResult = engine .index (operation );
3099
- assertFalse (engine . indexWriterHasDeletions () );
3107
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3100
3108
assertEquals (1 , engine .getNumVersionLookups ());
3101
3109
assertNotNull (indexResult .getTranslogLocation ());
3102
3110
if (randomBoolean ()) {
3103
3111
engine .refresh ("test" );
3104
3112
}
3105
3113
Engine .IndexResult retryResult = engine .index (duplicate );
3106
- assertFalse (engine . indexWriterHasDeletions () );
3114
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3107
3115
assertEquals (2 , engine .getNumVersionLookups ());
3108
3116
assertNotNull (retryResult .getTranslogLocation ());
3109
3117
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) > 0 );
3110
3118
} else {
3111
3119
Engine .IndexResult retryResult = engine .index (duplicate );
3112
- assertFalse (engine . indexWriterHasDeletions () );
3120
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3113
3121
assertEquals (1 , engine .getNumVersionLookups ());
3114
3122
assertNotNull (retryResult .getTranslogLocation ());
3115
3123
if (randomBoolean ()) {
3116
3124
engine .refresh ("test" );
3117
3125
}
3118
3126
Engine .IndexResult indexResult = engine .index (operation );
3119
- assertFalse (engine . indexWriterHasDeletions () );
3127
+ assertLuceneOperations (engine , 1 , 0 , 0 );
3120
3128
assertEquals (2 , engine .getNumVersionLookups ());
3121
3129
assertNotNull (retryResult .getTranslogLocation ());
3122
3130
assertTrue (retryResult .getTranslogLocation ().compareTo (indexResult .getTranslogLocation ()) < 0 );
@@ -3278,10 +3286,11 @@ public void testRetryConcurrently() throws InterruptedException, IOException {
3278
3286
}
3279
3287
if (primary ) {
3280
3288
// primaries rely on lucene dedup and may index the same document twice
3281
- assertTrue (engine .indexWriterHasDeletions ());
3289
+ assertThat (engine .getNumDocUpdates (), greaterThanOrEqualTo ((long ) numDocs ));
3290
+ assertThat (engine .getNumDocAppends () + engine .getNumDocUpdates (), equalTo (numDocs * 2L ));
3282
3291
} else {
3283
3292
// replicas rely on seq# based dedup and in this setup (same seq#) should never rely on lucene
3284
- assertFalse (engine . indexWriterHasDeletions () );
3293
+ assertLuceneOperations (engine , numDocs , 0 , 0 );
3285
3294
}
3286
3295
}
3287
3296
@@ -3377,8 +3386,7 @@ public void run() {
3377
3386
}
3378
3387
assertEquals (0 , engine .getNumVersionLookups ());
3379
3388
assertEquals (0 , engine .getNumIndexVersionsLookups ());
3380
- assertFalse (engine .indexWriterHasDeletions ());
3381
-
3389
+ assertLuceneOperations (engine , numDocs , 0 , 0 );
3382
3390
}
3383
3391
3384
3392
public static long getNumVersionLookups (InternalEngine engine ) { // for other tests to access this
@@ -4659,4 +4667,13 @@ private static void trimUnsafeCommits(EngineConfig config) throws IOException {
4659
4667
store .trimUnsafeCommits (globalCheckpoint , minRetainedTranslogGen , config .getIndexSettings ().getIndexVersionCreated ());
4660
4668
}
4661
4669
4670
+ void assertLuceneOperations (InternalEngine engine , long expectedAppends , long expectedUpdates , long expectedDeletes ) {
4671
+ String message = "Lucene operations mismatched;" +
4672
+ " appends [actual:" + engine .getNumDocAppends () + ", expected:" + expectedAppends + "]," +
4673
+ " updates [actual:" + engine .getNumDocUpdates () + ", expected:" + expectedUpdates + "]," +
4674
+ " deletes [actual:" + engine .getNumDocDeletes () + ", expected:" + expectedDeletes + "]" ;
4675
+ assertThat (message , engine .getNumDocAppends (), equalTo (expectedAppends ));
4676
+ assertThat (message , engine .getNumDocUpdates (), equalTo (expectedUpdates ));
4677
+ assertThat (message , engine .getNumDocDeletes (), equalTo (expectedDeletes ));
4678
+ }
4662
4679
}
0 commit comments