From e1f76211f40136dbefe2caaa555b720a858dbaff Mon Sep 17 00:00:00 2001 From: Enrico Del Fante Date: Tue, 13 Dec 2022 22:48:43 +0100 Subject: [PATCH] apply suggestions --- .../storage/server/kvstore/DatabaseTest.java | 14 ++++++------ .../pegasys/teku/storage/server/Database.java | 22 +++++++++++++++++-- .../server/kvstore/KvStoreDatabase.java | 14 ++++++++++-- .../storage/server/noop/NoOpDatabase.java | 8 +++++-- 4 files changed, 45 insertions(+), 13 deletions(-) diff --git a/storage/src/integration-test/java/tech/pegasys/teku/storage/server/kvstore/DatabaseTest.java b/storage/src/integration-test/java/tech/pegasys/teku/storage/server/kvstore/DatabaseTest.java index 6eb66f9a828..156f9f676c7 100644 --- a/storage/src/integration-test/java/tech/pegasys/teku/storage/server/kvstore/DatabaseTest.java +++ b/storage/src/integration-test/java/tech/pegasys/teku/storage/server/kvstore/DatabaseTest.java @@ -249,7 +249,7 @@ public void verifyBlobsLifecycle(final DatabaseContext context) throws IOExcepti assertBlobsStream(blobsSidecar1, blobsSidecar2, blobsSidecar2bis, blobsSidecar3, blobsSidecar4); // let's prune unconfirmed with limit to 1 - database.pruneOldestUnconfirmedBlobsSidecar(UInt64.MAX_VALUE, 1); + assertThat(database.pruneOldestUnconfirmedBlobsSidecar(UInt64.MAX_VALUE, 1)).isTrue(); assertUnconfirmedBlobsStream( blobsSidecarToSlotAndBlockRoot(blobsSidecar2), blobsSidecarToSlotAndBlockRoot(blobsSidecar2bis), @@ -258,7 +258,7 @@ public void verifyBlobsLifecycle(final DatabaseContext context) throws IOExcepti assertBlobsStream(blobsSidecar2, blobsSidecar2bis, blobsSidecar3, blobsSidecar4); // let's prune unconfirmed up to slot 1 (nothing will be pruned) - database.pruneOldestUnconfirmedBlobsSidecar(ONE, 10); + assertThat(database.pruneOldestUnconfirmedBlobsSidecar(ONE, 10)).isFalse(); assertUnconfirmedBlobsStream( blobsSidecarToSlotAndBlockRoot(blobsSidecar2), blobsSidecarToSlotAndBlockRoot(blobsSidecar2bis), @@ -267,17 +267,17 @@ public void verifyBlobsLifecycle(final DatabaseContext context) throws IOExcepti assertBlobsStream(blobsSidecar2, blobsSidecar2bis, blobsSidecar3, blobsSidecar4); // let's prune all unconfirmed - database.pruneOldestUnconfirmedBlobsSidecar(UInt64.valueOf(3), 10); + assertThat(database.pruneOldestUnconfirmedBlobsSidecar(UInt64.valueOf(3), 10)).isFalse(); assertUnconfirmedBlobsStream(); // we have blobsSidecar4 assertBlobsStream(blobsSidecar4); // let's prune all up to a too old slot (nothing will be pruned) - database.pruneOldestBlobsSidecar(UInt64.valueOf(3), 10); + assertThat(database.pruneOldestBlobsSidecar(UInt64.valueOf(3), 10)).isFalse(); assertBlobsStream(blobsSidecar4); // let's prune all up slot 4 - database.pruneOldestBlobsSidecar(UInt64.valueOf(4), 1); + assertThat(database.pruneOldestBlobsSidecar(UInt64.valueOf(4), 1)).isTrue(); // all empty now assertUnconfirmedBlobsStream(); assertBlobsStream(); @@ -306,13 +306,13 @@ void pruneOldestBlobsSidecar_shouldPruneUnconfirmedBlobsToo(final DatabaseContex database.storeUnconfirmedBlobsSidecar(blobsSidecar4); database.storeUnconfirmedBlobsSidecar(blobsSidecar3); - database.pruneOldestBlobsSidecar(UInt64.MAX_VALUE, 2); + assertThat(database.pruneOldestBlobsSidecar(UInt64.MAX_VALUE, 2)).isTrue(); assertUnconfirmedBlobsStream( blobsSidecarToSlotAndBlockRoot(blobsSidecar3), blobsSidecarToSlotAndBlockRoot(blobsSidecar4)); assertBlobsStream(blobsSidecar3, blobsSidecar4); - database.pruneOldestBlobsSidecar(UInt64.MAX_VALUE, 100); + assertThat(database.pruneOldestBlobsSidecar(UInt64.MAX_VALUE, 100)).isFalse(); assertUnconfirmedBlobsStream(); assertBlobsStream(); } diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/Database.java b/storage/src/main/java/tech/pegasys/teku/storage/server/Database.java index 3daedd882da..0943cadc204 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/Database.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/Database.java @@ -63,9 +63,27 @@ public interface Database extends AutoCloseable { void removeBlobsSidecar(SlotAndBlockRoot slotAndBlockRoot); - void pruneOldestBlobsSidecar(UInt64 endSlot, int pruneLimit); + /** + * this prune method will delete BlobsSidecars (including the unconfirmed ones) starting from the + * oldest BlobsSidecars (by slot) up to BlobsSidecars at {@code endSlot} (inclusive). The pruning + * process will be limited to maximum {@code pruneLimit} BlobsSidecars + * + * @param endSlot + * @param pruneLimit + * @return true if number of pruned blobs reached the pruneLimit, false otherwise + */ + boolean pruneOldestBlobsSidecar(UInt64 endSlot, int pruneLimit); - void pruneOldestUnconfirmedBlobsSidecar(UInt64 endSlot, int pruneLimit); + /** + * this prune method will delete unconfirmed BlobsSidecars starting from the oldest BlobsSidecars + * (by slot) up to BlobsSidecars at {@code endSlot} (inclusive). The pruning process will be + * limited to maximum {@code pruneLimit} BlobsSidecars + * + * @param endSlot + * @param pruneLimit + * @return true if number of pruned blobs reached the pruneLimit, false otherwise + */ + boolean pruneOldestUnconfirmedBlobsSidecar(UInt64 endSlot, int pruneLimit); @MustBeClosed Stream streamBlobsSidecar(UInt64 startSlot, UInt64 endSlot); diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/kvstore/KvStoreDatabase.java b/storage/src/main/java/tech/pegasys/teku/storage/server/kvstore/KvStoreDatabase.java index c3c3ef79ebe..6081f362e16 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/kvstore/KvStoreDatabase.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/kvstore/KvStoreDatabase.java @@ -571,9 +571,10 @@ public void removeBlobsSidecar(final SlotAndBlockRoot slotAndBlockRoot) { } @Override - public void pruneOldestBlobsSidecar(final UInt64 endSlot, final int pruneLimit) { + public boolean pruneOldestBlobsSidecar(final UInt64 endSlot, final int pruneLimit) { try (final Stream prunableBlobs = streamBlobsSidecar(UInt64.ZERO, endSlot); final FinalizedUpdaterT updater = finalizedUpdater()) { + final int[] counter = {0}; prunableBlobs .limit(pruneLimit) .forEach( @@ -583,24 +584,33 @@ public void pruneOldestBlobsSidecar(final UInt64 endSlot, final int pruneLimit) blobsSidecar.getBeaconBlockSlot(), blobsSidecar.getBeaconBlockRoot()); updater.removeBlobsSidecar(slotAndBlockRoot); updater.removeUnconfirmedBlobsSidecar(slotAndBlockRoot); + + counter[0]++; }); updater.commit(); + + return counter[0] == pruneLimit; } } @Override - public void pruneOldestUnconfirmedBlobsSidecar(final UInt64 endSlot, final int pruneLimit) { + public boolean pruneOldestUnconfirmedBlobsSidecar(final UInt64 endSlot, final int pruneLimit) { try (final Stream prunableUnconfirmed = streamUnconfirmedBlobsSidecar(UInt64.ZERO, endSlot); final FinalizedUpdaterT updater = finalizedUpdater()) { + final int[] counter = {0}; prunableUnconfirmed .limit(pruneLimit) .forEach( slotAndBlockRoot -> { updater.removeBlobsSidecar(slotAndBlockRoot); updater.removeUnconfirmedBlobsSidecar(slotAndBlockRoot); + + counter[0]++; }); updater.commit(); + + return counter[0] == pruneLimit; } } diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/noop/NoOpDatabase.java b/storage/src/main/java/tech/pegasys/teku/storage/server/noop/NoOpDatabase.java index deb982f82e4..d098616d9ad 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/noop/NoOpDatabase.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/noop/NoOpDatabase.java @@ -292,7 +292,9 @@ public Optional getEarliestBlobsSidecarSlot() { } @Override - public void pruneOldestBlobsSidecar(final UInt64 endSlot, final int pruneLimit) {} + public boolean pruneOldestBlobsSidecar(final UInt64 endSlot, final int pruneLimit) { + return false; + } @Override public Stream streamUnconfirmedBlobsSidecar( @@ -301,7 +303,9 @@ public Stream streamUnconfirmedBlobsSidecar( } @Override - public void pruneOldestUnconfirmedBlobsSidecar(final UInt64 endSlot, final int pruneLimit) {} + public boolean pruneOldestUnconfirmedBlobsSidecar(final UInt64 endSlot, final int pruneLimit) { + return false; + } @Override public void close() {}