@@ -93,22 +93,22 @@ public class BTreeRow extends AbstractRow
93
93
/**
94
94
* The original data size of this row before purging it, or -1 if it hasn't been purged.
95
95
*/
96
- private final int originalDataSize ;
96
+ private final int dataSizeBeforePurge ;
97
97
98
98
private BTreeRow (Clustering <?> clustering ,
99
99
LivenessInfo primaryKeyLivenessInfo ,
100
100
Deletion deletion ,
101
101
Object [] btree ,
102
102
long minLocalDeletionTime ,
103
- int originalDataSize )
103
+ int dataSizeBeforePurge )
104
104
{
105
105
assert !deletion .isShadowedBy (primaryKeyLivenessInfo );
106
106
this .clustering = clustering ;
107
107
this .primaryKeyLivenessInfo = primaryKeyLivenessInfo ;
108
108
this .deletion = deletion ;
109
109
this .btree = btree ;
110
110
this .minLocalDeletionTime = minLocalDeletionTime ;
111
- this .originalDataSize = originalDataSize ;
111
+ this .dataSizeBeforePurge = dataSizeBeforePurge ;
112
112
}
113
113
114
114
private BTreeRow (Clustering <?> clustering ,
@@ -146,9 +146,9 @@ public static BTreeRow create(Clustering<?> clustering,
146
146
Deletion deletion ,
147
147
Object [] btree ,
148
148
long minDeletionTime ,
149
- int originalDataSize )
149
+ int dataSizeBeforePurge )
150
150
{
151
- return new BTreeRow (clustering , primaryKeyLivenessInfo , deletion , btree , minDeletionTime , originalDataSize );
151
+ return new BTreeRow (clustering , primaryKeyLivenessInfo , deletion , btree , minDeletionTime , dataSizeBeforePurge );
152
152
}
153
153
154
154
public static BTreeRow create (Clustering <?> clustering ,
@@ -522,7 +522,8 @@ public Row purge(DeletionPurger purger, long nowInSec, boolean enforceStrictLive
522
522
if (enforceStrictLiveness && newDeletion .isLive () && newInfo .isEmpty ())
523
523
return null ;
524
524
525
- return transformAndFilter (newInfo , newDeletion , (cd ) -> cd .purge (purger , nowInSec ));
525
+ Function <ColumnData , ColumnData > columnDataPurger = (cd ) -> cd .purge (purger , nowInSec );
526
+ return update (newInfo , newDeletion , BTree .transformAndFilter (btree , columnDataPurger ), true );
526
527
}
527
528
528
529
public Row purgeDataOlderThan (long timestamp , boolean enforceStrictLiveness )
@@ -540,10 +541,10 @@ public Row purgeDataOlderThan(long timestamp, boolean enforceStrictLiveness)
540
541
@ Override
541
542
public Row transformAndFilter (LivenessInfo info , Deletion deletion , Function <ColumnData , ColumnData > function )
542
543
{
543
- return update (info , deletion , BTree .transformAndFilter (btree , function ));
544
+ return update (info , deletion , BTree .transformAndFilter (btree , function ), false );
544
545
}
545
546
546
- private Row update (LivenessInfo info , Deletion deletion , Object [] newTree )
547
+ private Row update (LivenessInfo info , Deletion deletion , Object [] newTree , boolean preserveDataSizeBeforePurge )
547
548
{
548
549
if (btree == newTree && info == this .primaryKeyLivenessInfo && deletion == this .deletion )
549
550
return this ;
@@ -552,7 +553,9 @@ private Row update(LivenessInfo info, Deletion deletion, Object[] newTree)
552
553
return null ;
553
554
554
555
long minDeletionTime = minDeletionTime (newTree , info , deletion .time ());
555
- return BTreeRow .create (clustering , info , deletion , newTree , minDeletionTime , originalDataSize ());
556
+
557
+ int dataSizeBeforePurge = preserveDataSizeBeforePurge ? dataSizeBeforePurge () : -1 ;
558
+ return BTreeRow .create (clustering , info , deletion , newTree , minDeletionTime , dataSizeBeforePurge );
556
559
}
557
560
558
561
@ Override
@@ -563,7 +566,7 @@ public Row transformAndFilter(Function<ColumnData, ColumnData> function)
563
566
564
567
public Row transform (Function <ColumnData , ColumnData > function )
565
568
{
566
- return update (primaryKeyLivenessInfo , deletion , BTree .transform (btree , function ));
569
+ return update (primaryKeyLivenessInfo , deletion , BTree .transform (btree , function ), false );
567
570
}
568
571
569
572
@ Override
@@ -595,9 +598,9 @@ public long unsharedHeapSize()
595
598
}
596
599
597
600
@ Override
598
- public int originalDataSize ()
601
+ public int dataSizeBeforePurge ()
599
602
{
600
- return originalDataSize >= 0 ? originalDataSize : dataSize ();
603
+ return dataSizeBeforePurge >= 0 ? dataSizeBeforePurge : dataSize ();
601
604
}
602
605
603
606
public long unsharedHeapSizeExcludingData ()
0 commit comments