Skip to content

Commit dac6dbe

Browse files
HDDS-14387. Recon task to repair scm deletedBlocksTxn summary counters
1 parent 533ef7a commit dac6dbe

File tree

23 files changed

+894
-0
lines changed

23 files changed

+894
-0
lines changed

hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/client/ScmClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.DeletedBlocksTransactionSummary;
3333
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusInfoResponseProto;
3434
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto;
35+
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto;
3536
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
3637
import org.apache.hadoop.hdds.scm.DatanodeAdminError;
3738
import org.apache.hadoop.hdds.scm.container.ContainerID;
@@ -420,6 +421,14 @@ StartContainerBalancerResponseProto startContainerBalancer(
420421
*/
421422
DeletedBlocksTransactionSummary getDeletedBlockSummary() throws IOException;
422423

424+
/** Take a checkpoint and compare actual vs persisted summary (no repair). */
425+
RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto
426+
getDeletedBlockSummaryFromCheckpoint() throws IOException;
427+
428+
/** Take a checkpoint, compute diff, apply to live state. */
429+
RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto
430+
repairDeletedBlockSummaryFromCheckpoint() throws IOException;
431+
423432
/**
424433
* Get usage information of datanode by address or uuid.
425434
*

hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocol/StorageContainerLocationProtocol.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.hadoop.hdds.protocol.proto.HddsProtos.DeletedBlocksTransactionSummary;
3636
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ContainerBalancerStatusInfoResponseProto;
3737
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.DecommissionScmResponseProto;
38+
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto;
3839
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.StartContainerBalancerResponseProto;
3940
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.Type;
4041
import org.apache.hadoop.hdds.scm.DatanodeAdminError;
@@ -379,6 +380,14 @@ List<DeletedBlocksTransactionInfo> getFailedDeletedBlockTxn(int count,
379380
@Nullable
380381
DeletedBlocksTransactionSummary getDeletedBlockSummary() throws IOException;
381382

383+
/** Take a checkpoint and compare actual vs persisted summary (no repair). */
384+
RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto
385+
getDeletedBlockSummaryFromCheckpoint() throws IOException;
386+
387+
/** Take a checkpoint, compute diff, apply to live state. */
388+
RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto
389+
repairDeletedBlockSummaryFromCheckpoint() throws IOException;
390+
382391
/**
383392
* Check if SCM is in safe mode.
384393
*

hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/scm/protocolPB/StorageContainerLocationProtocolClientSideTranslatorPB.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@
8282
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetContainerWithPipelineRequestProto;
8383
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetContainersOnDecomNodeRequestProto;
8484
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetContainersOnDecomNodeResponseProto;
85+
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetDeletedBlocksTxnSummaryFromCheckpointRequestProto;
8586
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetDeletedBlocksTxnSummaryRequestProto;
8687
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetDeletedBlocksTxnSummaryResponseProto;
8788
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.GetExistContainerWithPipelinesInBatchRequestProto;
@@ -103,6 +104,8 @@
103104
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RecommissionNodesRequestProto;
104105
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RecommissionNodesResponseProto;
105106
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ReconcileContainerRequestProto;
107+
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RepairDeletedBlocksTxnSummaryFromCheckpointRequestProto;
108+
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto;
106109
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ReplicationManagerReportRequestProto;
107110
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ReplicationManagerReportResponseProto;
108111
import org.apache.hadoop.hdds.protocol.proto.StorageContainerLocationProtocolProtos.ReplicationManagerStatusRequestProto;
@@ -849,6 +852,28 @@ public DeletedBlocksTransactionSummary getDeletedBlockSummary() throws IOExcepti
849852
return response.hasSummary() ? response.getSummary() : null;
850853
}
851854

855+
@Override
856+
public RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto
857+
getDeletedBlockSummaryFromCheckpoint() throws IOException {
858+
GetDeletedBlocksTxnSummaryFromCheckpointRequestProto request =
859+
GetDeletedBlocksTxnSummaryFromCheckpointRequestProto.newBuilder().build();
860+
ScmContainerLocationResponse resp = submitRequest(
861+
Type.GetDeletedBlocksTransactionSummaryFromCheckpoint,
862+
builder -> builder.setGetDeletedBlocksTxnSummaryFromCheckpointRequest(request));
863+
return resp.getGetDeletedBlocksTxnSummaryFromCheckpointResponse();
864+
}
865+
866+
@Override
867+
public RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto
868+
repairDeletedBlockSummaryFromCheckpoint() throws IOException {
869+
RepairDeletedBlocksTxnSummaryFromCheckpointRequestProto request =
870+
RepairDeletedBlocksTxnSummaryFromCheckpointRequestProto.newBuilder().build();
871+
ScmContainerLocationResponse resp = submitRequest(
872+
Type.RepairDeletedBlocksTransactionSummaryFromCheckpoint,
873+
builder -> builder.setRepairDeletedBlocksTxnSummaryFromCheckpointRequest(request));
874+
return resp.getRepairDeletedBlocksTxnSummaryFromCheckpointResponse();
875+
}
876+
852877
/**
853878
* Check if SCM is in safe mode.
854879
*

hadoop-hdds/interface-admin/src/main/proto/ScmAdminProtocol.proto

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ message ScmContainerLocationRequest {
8888
optional ReconcileContainerRequestProto reconcileContainerRequest = 49;
8989
optional GetDeletedBlocksTxnSummaryRequestProto getDeletedBlocksTxnSummaryRequest = 50;
9090
optional SCMListContainerIDsRequestProto scmListContainerIDsRequest = 51;
91+
optional GetDeletedBlocksTxnSummaryFromCheckpointRequestProto getDeletedBlocksTxnSummaryFromCheckpointRequest = 52;
92+
optional RepairDeletedBlocksTxnSummaryFromCheckpointRequestProto repairDeletedBlocksTxnSummaryFromCheckpointRequest = 53;
9193
}
9294

9395
message ScmContainerLocationResponse {
@@ -147,6 +149,8 @@ message ScmContainerLocationResponse {
147149
optional ReconcileContainerResponseProto reconcileContainerResponse = 49;
148150
optional GetDeletedBlocksTxnSummaryResponseProto getDeletedBlocksTxnSummaryResponse = 50;
149151
optional SCMListContainerIDsResponseProto scmListContainerIDsResponse = 51;
152+
optional RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto getDeletedBlocksTxnSummaryFromCheckpointResponse = 52;
153+
optional RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto repairDeletedBlocksTxnSummaryFromCheckpointResponse = 53;
150154

151155
enum Status {
152156
OK = 1;
@@ -205,6 +209,8 @@ enum Type {
205209
ReconcileContainer = 45;
206210
GetDeletedBlocksTransactionSummary = 46;
207211
ListContainerIDs = 47;
212+
GetDeletedBlocksTransactionSummaryFromCheckpoint = 48;
213+
RepairDeletedBlocksTransactionSummaryFromCheckpoint = 49;
208214
}
209215

210216
/**
@@ -718,3 +724,16 @@ message ReconcileContainerResponseProto {
718724
service StorageContainerLocationProtocolService {
719725
rpc submitRequest (ScmContainerLocationRequest) returns (ScmContainerLocationResponse);
720726
}
727+
728+
message GetDeletedBlocksTxnSummaryFromCheckpointRequestProto {
729+
}
730+
731+
message RepairDeletedBlocksTxnSummaryFromCheckpointRequestProto {
732+
}
733+
734+
message RepairDeletedBlocksTxnSummaryFromCheckpointResponseProto {
735+
optional DeletedBlocksTransactionSummary checkpointActual = 1;
736+
optional DeletedBlocksTransactionSummary checkpointPersisted = 2;
737+
optional DeletedBlocksTransactionSummary liveInMemBefore = 3;
738+
optional DeletedBlocksTransactionSummary liveInMemAfter = 4;
739+
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLog.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,56 @@ void reinitialize(Table<Long, DeletedBlocksTransaction> deletedBlocksTXTable,
128128

129129
@Nullable
130130
DeletedBlocksTransactionSummary getTransactionSummary();
131+
132+
/**
133+
* Takes a RocksDB checkpoint, scans the deletedBlocks table in the
134+
* checkpoint, and compares the actual row counts with the persisted summary
135+
* stored in the same checkpoint.
136+
*
137+
* <p>When {@code repair} is {@code true}, the diff (actual - persisted) is
138+
* applied to the live in-memory counters and the live persisted summary.
139+
*
140+
* @return a {@link CheckpointSummaryResult} carrying both sides of the
141+
* comparison and the live in-memory state before/after repair.
142+
*/
143+
CheckpointSummaryResult getTransactionSummaryFromCheckpoint(boolean repair)
144+
throws IOException;
145+
146+
/**
147+
* Result of a checkpoint-based summary comparison, holding both sides of
148+
* the comparison so the CLI can display them side-by-side.
149+
*/
150+
final class CheckpointSummaryResult {
151+
private final DeletedBlocksTransactionSummary checkpointActual;
152+
private final DeletedBlocksTransactionSummary checkpointPersisted;
153+
private final DeletedBlocksTransactionSummary liveInMemBefore;
154+
private final DeletedBlocksTransactionSummary liveInMemAfter;
155+
156+
public CheckpointSummaryResult(
157+
DeletedBlocksTransactionSummary checkpointActual,
158+
DeletedBlocksTransactionSummary checkpointPersisted,
159+
DeletedBlocksTransactionSummary liveInMemBefore,
160+
DeletedBlocksTransactionSummary liveInMemAfter) {
161+
this.checkpointActual = checkpointActual;
162+
this.checkpointPersisted = checkpointPersisted;
163+
this.liveInMemBefore = liveInMemBefore;
164+
this.liveInMemAfter = liveInMemAfter;
165+
}
166+
167+
public DeletedBlocksTransactionSummary getCheckpointActual() {
168+
return checkpointActual;
169+
}
170+
171+
public DeletedBlocksTransactionSummary getCheckpointPersisted() {
172+
return checkpointPersisted;
173+
}
174+
175+
public DeletedBlocksTransactionSummary getLiveInMemBefore() {
176+
return liveInMemBefore;
177+
}
178+
179+
public DeletedBlocksTransactionSummary getLiveInMemAfter() {
180+
return liveInMemAfter;
181+
}
182+
}
131183
}

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogImpl.java

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.common.annotations.VisibleForTesting;
2626
import com.google.protobuf.ByteString;
2727
import java.io.IOException;
28+
import java.nio.file.Path;
2829
import java.time.Duration;
2930
import java.util.ArrayList;
3031
import java.util.List;
@@ -57,6 +58,9 @@
5758
import org.apache.hadoop.hdds.server.events.EventHandler;
5859
import org.apache.hadoop.hdds.server.events.EventPublisher;
5960
import org.apache.hadoop.hdds.upgrade.HDDSLayoutFeature;
61+
import org.apache.hadoop.hdds.utils.db.DBCheckpoint;
62+
import org.apache.hadoop.hdds.utils.db.DBStore;
63+
import org.apache.hadoop.hdds.utils.db.DBStoreBuilder;
6064
import org.apache.hadoop.hdds.utils.db.Table;
6165
import org.apache.hadoop.ozone.common.DeletedBlock;
6266
import org.apache.hadoop.ozone.container.upgrade.VersionedDatanodeFeatures;
@@ -81,6 +85,7 @@ public class DeletedBlockLogImpl
8185
LoggerFactory.getLogger(DeletedBlockLogImpl.class);
8286

8387
private final ContainerManager containerManager;
88+
private final StorageContainerManager scm;
8489
private final Lock lock;
8590
// The access to DeletedBlocksTXTable is protected by
8691
// DeletedBlockLogStateManager.
@@ -101,6 +106,7 @@ public DeletedBlockLogImpl(ConfigurationSource conf,
101106
SCMHADBTransactionBuffer dbTxBuffer,
102107
ScmBlockDeletingServiceMetrics metrics) throws IOException {
103108
this.containerManager = containerManager;
109+
this.scm = scm;
104110
this.lock = new ReentrantLock();
105111

106112
this.deletedBlockLogStateManager = DeletedBlockLogStateManagerImpl
@@ -484,6 +490,141 @@ public DeletedBlocksTransactionSummary getTransactionSummary() {
484490
return transactionStatusManager.getTransactionSummary();
485491
}
486492

493+
@Override
494+
public CheckpointSummaryResult getTransactionSummaryFromCheckpoint(boolean repair)
495+
throws IOException {
496+
//Take a RocksDB checkpoint (hard-linked snapshot; fast)
497+
DBStore store = scm.getScmMetadataStore().getStore();
498+
DBCheckpoint checkpoint = store.getCheckpoint(false);
499+
try {
500+
//Open the checkpoint read-only
501+
Path checkpointLocation = checkpoint.getCheckpointLocation();
502+
Path checkpointFileName = checkpointLocation.getFileName();
503+
if (checkpointFileName == null) {
504+
throw new IOException(
505+
"Cannot determine checkpoint directory name from path: " + checkpointLocation);
506+
}
507+
DBStore cpStore = DBStoreBuilder
508+
.newBuilder(scm.getConfiguration(),
509+
org.apache.hadoop.hdds.scm.metadata.SCMDBDefinition.get(),
510+
checkpointFileName.toString(),
511+
checkpointLocation.getParent())
512+
.setOpenReadOnly(true)
513+
.build();
514+
try {
515+
//Scan deletedBlocks table in checkpoint
516+
// NOTE: deletingTxIDs is NOT applied here because this is a raw
517+
// snapshot; those rows are physically present in the checkpoint.
518+
long cpTxCount = 0, cpBlockCount = 0;
519+
long cpBlockSize = 0, cpReplicatedSize = 0;
520+
521+
Table<Long, DeletedBlocksTransaction> cpDeletedTable =
522+
org.apache.hadoop.hdds.scm.metadata.SCMDBDefinition.DELETED_BLOCKS.getTable(cpStore);
523+
try (Table.KeyValueIterator<Long, DeletedBlocksTransaction> iter =
524+
cpDeletedTable.iterator()) {
525+
while (iter.hasNext()) {
526+
DeletedBlocksTransaction tx = iter.next().getValue();
527+
if (tx != null && tx.hasTotalBlockSize()) {
528+
cpTxCount++;
529+
cpBlockCount += tx.getLocalIDCount();
530+
cpBlockSize += tx.getTotalBlockSize();
531+
if (tx.hasTotalBlockReplicatedSize()) {
532+
cpReplicatedSize += tx.getTotalBlockReplicatedSize();
533+
}
534+
}
535+
}
536+
}
537+
538+
//Read persisted summary from checkpoint
539+
DeletedBlocksTransactionSummary cpPersisted = null;
540+
Table<String, com.google.protobuf.ByteString> cpConfigTable =
541+
org.apache.hadoop.hdds.scm.metadata.SCMDBDefinition.STATEFUL_SERVICE_CONFIG.getTable(cpStore);
542+
com.google.protobuf.ByteString bytes =
543+
cpConfigTable.get(DeletedBlockLogStateManagerImpl.SERVICE_NAME);
544+
if (bytes != null) {
545+
cpPersisted = DeletedBlocksTransactionSummary.parseFrom(bytes);
546+
}
547+
if (cpPersisted == null) {
548+
cpPersisted = DeletedBlocksTransactionSummary.newBuilder().build();
549+
}
550+
551+
DeletedBlocksTransactionSummary cpActual =
552+
DeletedBlocksTransactionSummary.newBuilder()
553+
.setTotalTransactionCount(cpTxCount)
554+
.setTotalBlockCount(cpBlockCount)
555+
.setTotalBlockSize(cpBlockSize)
556+
.setTotalBlockReplicatedSize(cpReplicatedSize)
557+
.build();
558+
559+
//Capture live in-memory state before any repair
560+
DeletedBlocksTransactionSummary liveInMemBefore;
561+
DeletedBlocksTransactionSummary liveInMemAfter;
562+
lock.lock();
563+
try {
564+
liveInMemBefore = transactionStatusManager.getTransactionSummary();
565+
566+
if (repair) {
567+
// Diff = cpActual - cpPersisted; apply to live-in-memory.
568+
long diffTx = cpTxCount - cpPersisted.getTotalTransactionCount();
569+
long diffBlk = cpBlockCount - cpPersisted.getTotalBlockCount();
570+
long diffSize = cpBlockSize - cpPersisted.getTotalBlockSize();
571+
long diffRepl = cpReplicatedSize - cpPersisted.getTotalBlockReplicatedSize();
572+
573+
boolean hasDiff = diffTx != 0 || diffBlk != 0 || diffSize != 0 || diffRepl != 0;
574+
if (hasDiff) {
575+
long newTx = liveInMemBefore.getTotalTransactionCount() + diffTx;
576+
long newBlk = liveInMemBefore.getTotalBlockCount() + diffBlk;
577+
long newSize = liveInMemBefore.getTotalBlockSize() + diffSize;
578+
long newRepl = liveInMemBefore.getTotalBlockReplicatedSize() + diffRepl;
579+
// Clamp to zero to avoid negative counters from stale checkpoints.
580+
newTx = Math.max(0, newTx);
581+
newBlk = Math.max(0, newBlk);
582+
newSize = Math.max(0, newSize);
583+
newRepl = Math.max(0, newRepl);
584+
585+
LOG.warn("Checkpoint repair: cpActual txns={} blk={} size={} repl={} "
586+
+ "vs cpPersisted txns={} blk={} size={} repl={} "
587+
+ "— applying diff to live inMem (before: txns={} blk={} size={} repl={}).",
588+
cpTxCount, cpBlockCount, cpBlockSize, cpReplicatedSize,
589+
cpPersisted.getTotalTransactionCount(), cpPersisted.getTotalBlockCount(),
590+
cpPersisted.getTotalBlockSize(), cpPersisted.getTotalBlockReplicatedSize(),
591+
liveInMemBefore.getTotalTransactionCount(), liveInMemBefore.getTotalBlockCount(),
592+
liveInMemBefore.getTotalBlockSize(), liveInMemBefore.getTotalBlockReplicatedSize());
593+
594+
doRepair(newTx, newBlk, newSize, newRepl);
595+
} else {
596+
LOG.info("Checkpoint repair: checkpoint is consistent "
597+
+ "(cpActual == cpPersisted), no changes applied to live state.");
598+
}
599+
}
600+
liveInMemAfter = transactionStatusManager.getTransactionSummary();
601+
} finally {
602+
lock.unlock();
603+
}
604+
605+
return new CheckpointSummaryResult(cpActual, cpPersisted,
606+
liveInMemBefore, liveInMemAfter);
607+
} finally {
608+
cpStore.close();
609+
}
610+
} finally {
611+
checkpoint.cleanupCheckpoint();
612+
}
613+
}
614+
615+
private void doRepair(long newTx, long newBlk, long newSize, long newRepl)
616+
throws IOException {
617+
DeletedBlocksTransactionSummary newSummary =
618+
DeletedBlocksTransactionSummary.newBuilder()
619+
.setTotalTransactionCount(newTx)
620+
.setTotalBlockCount(newBlk)
621+
.setTotalBlockSize(newSize)
622+
.setTotalBlockReplicatedSize(newRepl)
623+
.build();
624+
transactionStatusManager.resetToSummary(newSummary);
625+
deletedBlockLogStateManager.updateSummaryInDb(newSummary);
626+
}
627+
487628
@Override
488629
public void onDatanodeDead(DatanodeID dnId) {
489630
getSCMDeletedBlockTransactionStatusManager().onDatanodeDead(dnId);

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManager.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ int resetRetryCountOfTransactionInDB(ArrayList<Long> txIDs)
5858
Table.KeyValueIterator<Long, DeletedBlocksTransaction> getReadOnlyIterator()
5959
throws IOException;
6060

61+
/**
62+
* Persists a corrected summary into the stateful-config table via the Raft
63+
* write batch. Called under the deletion lock during a repair operation.
64+
*/
65+
@Replicate
66+
void updateSummaryInDb(DeletedBlocksTransactionSummary summary) throws IOException;
67+
6168
void onFlush();
6269

6370
void reinitialize(Table<Long, DeletedBlocksTransaction> deletedBlocksTXTable,

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/block/DeletedBlockLogStateManagerImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,11 @@ public int resetRetryCountOfTransactionInDB(ArrayList<Long> txIDs)
210210
return 0;
211211
}
212212

213+
@Override
214+
public void updateSummaryInDb(DeletedBlocksTransactionSummary summary) throws IOException {
215+
transactionBuffer.addToBuffer(statefulConfigTable, SERVICE_NAME, summary.toByteString());
216+
}
217+
213218
@Override
214219
public void onFlush() {
215220
// onFlush() can be invoked only when ratis is enabled.

0 commit comments

Comments
 (0)