From 00d785ecfd2a51d533b1a1e1fc24df3a70d9ca2e Mon Sep 17 00:00:00 2001 From: Fabio Di Fabio Date: Tue, 4 Feb 2025 17:54:32 +0100 Subject: [PATCH] Adapt to latest Besu code Signed-off-by: Fabio Di Fabio --- .../resources/{log4j2.xml => log4j2-test.xml} | 0 .../src/test/resources/logback.xml | 14 ---------- .../MaxBlockCallDataTransactionSelector.java | 21 +++++++------- .../MaxBlockGasTransactionSelector.java | 10 +++---- .../TraceLineLimitTransactionSelector.java | 28 ++++++------------- ...ckCallDataSizeTransactionSelectorTest.java | 15 ++++++---- 6 files changed, 31 insertions(+), 57 deletions(-) rename acceptance-tests/src/test/resources/{log4j2.xml => log4j2-test.xml} (100%) delete mode 100644 acceptance-tests/src/test/resources/logback.xml diff --git a/acceptance-tests/src/test/resources/log4j2.xml b/acceptance-tests/src/test/resources/log4j2-test.xml similarity index 100% rename from acceptance-tests/src/test/resources/log4j2.xml rename to acceptance-tests/src/test/resources/log4j2-test.xml diff --git a/acceptance-tests/src/test/resources/logback.xml b/acceptance-tests/src/test/resources/logback.xml deleted file mode 100644 index 784d4409..00000000 --- a/acceptance-tests/src/test/resources/logback.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSSZZZ} | %t | %-5level | %c{1} | %msg%n - - - - - - - \ No newline at end of file diff --git a/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataTransactionSelector.java b/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataTransactionSelector.java index be32f9cb..338f3b42 100644 --- a/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataTransactionSelector.java +++ b/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataTransactionSelector.java @@ -24,7 +24,6 @@ import org.hyperledger.besu.plugin.data.TransactionSelectionResult; import org.hyperledger.besu.plugin.services.txselection.AbstractStatefulPluginTransactionSelector; import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager; -import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager.DuplicableLongState; import org.hyperledger.besu.plugin.services.txselection.TransactionEvaluationContext; /** @@ -34,16 +33,13 @@ */ @Slf4j public class MaxBlockCallDataTransactionSelector - extends AbstractStatefulPluginTransactionSelector { + extends AbstractStatefulPluginTransactionSelector { private final int maxBlockCallDataSize; - // private final PendingSelectionState pendingCumulativeBlockCallDataSize = - // new PendingSelectionState<>(0); - public MaxBlockCallDataTransactionSelector( final SelectorsStateManager stateManager, final int maxBlockCallDataSize) { - super(stateManager, new DuplicableLongState(0L)); + super(stateManager, 0L, SelectorsStateManager.StateDuplicator::duplicateLong); this.maxBlockCallDataSize = maxBlockCallDataSize; } @@ -62,8 +58,7 @@ public TransactionSelectionResult evaluateTransactionPreProcessing( final Transaction transaction = evaluationContext.getPendingTransaction().getTransaction(); final int transactionCallDataSize = transaction.getPayload().size(); - final var selectorState = getWorkingState(); - final var stateCumulativeBlockCallDataSize = selectorState.get(); + final var stateCumulativeBlockCallDataSize = getWorkingState(); final long newCumulativeBlockCallDataSize = Math.addExact(stateCumulativeBlockCallDataSize, transactionCallDataSize); @@ -85,8 +80,6 @@ public TransactionSelectionResult evaluateTransactionPreProcessing( .addArgument(newCumulativeBlockCallDataSize) .log(); - selectorState.set(newCumulativeBlockCallDataSize); - return SELECTED; } @@ -101,7 +94,13 @@ public TransactionSelectionResult evaluateTransactionPreProcessing( public TransactionSelectionResult evaluateTransactionPostProcessing( final TransactionEvaluationContext evaluationContext, final TransactionProcessingResult processingResult) { - // Evaluation done in pre-processing, no action needed here. + final long newCumulativeBlockCallDataSize = + Math.addExact( + getWorkingState(), + evaluationContext.getPendingTransaction().getTransaction().getPayload().size()); + + setWorkingState(newCumulativeBlockCallDataSize); + return SELECTED; } } diff --git a/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockGasTransactionSelector.java b/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockGasTransactionSelector.java index a916f765..1d1ce5ec 100644 --- a/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockGasTransactionSelector.java +++ b/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockGasTransactionSelector.java @@ -25,7 +25,6 @@ import org.hyperledger.besu.plugin.data.TransactionSelectionResult; import org.hyperledger.besu.plugin.services.txselection.AbstractStatefulPluginTransactionSelector; import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager; -import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager.DuplicableLongState; import org.hyperledger.besu.plugin.services.txselection.TransactionEvaluationContext; /** @@ -36,13 +35,13 @@ */ @Slf4j public class MaxBlockGasTransactionSelector - extends AbstractStatefulPluginTransactionSelector { + extends AbstractStatefulPluginTransactionSelector { private final long maxGasPerBlock; public MaxBlockGasTransactionSelector( final SelectorsStateManager selectorsStateManager, final long maxGasPerBlock) { - super(selectorsStateManager, new DuplicableLongState(0L)); + super(selectorsStateManager, 0L, SelectorsStateManager.StateDuplicator::duplicateLong); this.maxGasPerBlock = maxGasPerBlock; } @@ -76,8 +75,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing( return TX_GAS_EXCEEDS_USER_MAX_BLOCK_GAS; } - final var selectorState = getWorkingState(); - final var stateCumulativeBlockGasUsed = selectorState.get(); + final var stateCumulativeBlockGasUsed = getWorkingState(); final long newCumulativeBlockGasUsed = Math.addExact(stateCumulativeBlockGasUsed, gasUsedByTransaction); @@ -94,7 +92,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing( return TX_TOO_LARGE_FOR_REMAINING_USER_GAS; } - selectorState.set(newCumulativeBlockGasUsed); + setWorkingState(newCumulativeBlockGasUsed); return SELECTED; } diff --git a/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/TraceLineLimitTransactionSelector.java b/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/TraceLineLimitTransactionSelector.java index 16adf7c0..8b0b7076 100644 --- a/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/TraceLineLimitTransactionSelector.java +++ b/sequencer/src/main/java/net/consensys/linea/sequencer/txselection/selectors/TraceLineLimitTransactionSelector.java @@ -45,7 +45,6 @@ import org.hyperledger.besu.plugin.services.tracer.BlockAwareOperationTracer; import org.hyperledger.besu.plugin.services.txselection.AbstractStatefulPluginTransactionSelector; import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager; -import org.hyperledger.besu.plugin.services.txselection.SelectorsStateManager.DuplicableState; import org.hyperledger.besu.plugin.services.txselection.TransactionEvaluationContext; import org.slf4j.Marker; import org.slf4j.MarkerFactory; @@ -57,8 +56,7 @@ */ @Slf4j public class TraceLineLimitTransactionSelector - extends AbstractStatefulPluginTransactionSelector< - TraceLineLimitTransactionSelector.DuplicableLineLimitMap> { + extends AbstractStatefulPluginTransactionSelector> { private static final Marker BLOCK_LINE_COUNT_MARKER = MarkerFactory.getMarker("BLOCK_LINE_COUNT"); @VisibleForTesting protected static Set overLineCountLimitCache = new LinkedHashSet<>(); private final ZkTracer zkTracer; @@ -77,9 +75,8 @@ public TraceLineLimitTransactionSelector( final LineaTracerConfiguration tracerConfiguration) { super( stateManager, - new DuplicableLineLimitMap( - moduleLimits.keySet().stream() - .collect(Collectors.toMap(Function.identity(), unused -> 0)))); + moduleLimits.keySet().stream().collect(Collectors.toMap(Function.identity(), unused -> 0)), + Map::copyOf); if (l1L2BridgeConfiguration.isEmpty()) { log.error("L1L2 bridge settings have not been defined."); System.exit(1); @@ -143,8 +140,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing( final TransactionEvaluationContext evaluationContext, final TransactionProcessingResult processingResult) { - final var selectorState = getWorkingState(); - final var stateLineLimitMap = selectorState.get(); + final var stateLineLimitMap = getWorkingState(); // check that we are not exceeding line number for any module final Map currCumulatedLineCount = zkTracer.getModulesLineCount(); @@ -185,7 +181,7 @@ public TransactionSelectionResult evaluateTransactionPostProcessing( break; } - selectorState.set(currCumulatedLineCount); + setWorkingState(currCumulatedLineCount); return SELECTED; } @@ -242,7 +238,7 @@ public void traceEndBlock(final BlockHeader blockHeader, final BlockBody blockBo .addKeyValue( "traceCounts", () -> - getCommitedState().get().entrySet().stream() + getCommitedState().entrySet().stream() .sorted(Map.Entry.comparingByKey()) .map(e -> '"' + e.getKey() + "\":" + e.getValue()) .collect(Collectors.joining(","))) @@ -250,15 +246,7 @@ public void traceEndBlock(final BlockHeader blockHeader, final BlockBody blockBo } } - static class DuplicableLineLimitMap extends DuplicableState> { - - public DuplicableLineLimitMap(final Map map) { - super(map); - } - - @Override - protected DuplicableState> deepCopy() { - return new DuplicableLineLimitMap(Map.copyOf(get())); - } + private static Map duplicateState(final Map state) { + return Map.copyOf(state); } } diff --git a/sequencer/src/test/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataSizeTransactionSelectorTest.java b/sequencer/src/test/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataSizeTransactionSelectorTest.java index 7b7b7ad9..3db536f4 100644 --- a/sequencer/src/test/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataSizeTransactionSelectorTest.java +++ b/sequencer/src/test/java/net/consensys/linea/sequencer/txselection/selectors/MaxBlockCallDataSizeTransactionSelectorTest.java @@ -92,18 +92,21 @@ public void shouldNotSelectAdditionalTransactionOnceBlockIsFull() { private void verifyTransactionSelection( final PluginTransactionSelector selector, final TestTransactionEvaluationContext evaluationContext, - final TransactionSelectionResult expectedSelectionResult) { - var selectionResult = selector.evaluateTransactionPreProcessing(evaluationContext); - assertThat(selectionResult).isEqualTo(expectedSelectionResult); - notifySelector(selector, evaluationContext, selectionResult); + final TransactionSelectionResult expectedPreProcessedResult) { + final var preProcessedResult = selector.evaluateTransactionPreProcessing(evaluationContext); + assertThat(preProcessedResult).isEqualTo(expectedPreProcessedResult); + final var processingResult = mock(TransactionProcessingResult.class); + selector.evaluateTransactionPostProcessing(evaluationContext, processingResult); + notifySelector(selector, evaluationContext, preProcessedResult, processingResult); } private void notifySelector( final PluginTransactionSelector selector, final TestTransactionEvaluationContext evaluationContext, - final TransactionSelectionResult selectionResult) { + final TransactionSelectionResult selectionResult, + final TransactionProcessingResult processingResult) { if (selectionResult.equals(SELECTED)) { - selector.onTransactionSelected(evaluationContext, mock(TransactionProcessingResult.class)); + selector.onTransactionSelected(evaluationContext, processingResult); } else { selector.onTransactionNotSelected(evaluationContext, selectionResult); }