From 1ce2c58081f4cd7c6dd5451338ddcfb19a1880f0 Mon Sep 17 00:00:00 2001 From: Carsten Otto Date: Tue, 17 May 2022 16:13:32 +0200 Subject: [PATCH] add "reset graph cache" endpoint --- .../java/de/cotto/lndmanagej/grpc/GrpcGraph.java | 4 ++++ .../java/de/cotto/lndmanagej/grpc/GrpcGraphTest.java | 6 ++++++ web/build.gradle | 2 ++ .../controller/PickhardtPaymentsControllerIT.java | 5 +++++ .../controller/PickhardtPaymentsController.java | 12 +++++++++++- .../controller/PickhardtPaymentsControllerTest.java | 11 +++++++++++ 6 files changed, 39 insertions(+), 1 deletion(-) diff --git a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcGraph.java b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcGraph.java index 627a25c8..cc1866a1 100644 --- a/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcGraph.java +++ b/grpc-adapter/src/main/java/de/cotto/lndmanagej/grpc/GrpcGraph.java @@ -37,6 +37,10 @@ public class GrpcGraph { return channelEdgeCache.get(""); } + public void resetCache() { + channelEdgeCache.invalidateAll(); + } + private Optional> getChannelEdgesWithoutCache() { ChannelGraph channelGraph = grpcService.describeGraph().orElse(null); if (channelGraph == null) { diff --git a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcGraphTest.java b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcGraphTest.java index 6f668499..237bb461 100644 --- a/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcGraphTest.java +++ b/grpc-adapter/src/test/java/de/cotto/lndmanagej/grpc/GrpcGraphTest.java @@ -25,6 +25,7 @@ import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_2; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_3; import static de.cotto.lndmanagej.model.PubkeyFixtures.PUBKEY_4; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; @@ -143,6 +144,11 @@ class GrpcGraphTest { .containsExactlyInAnyOrder(expectedPolicyForNode1, expectedPolicyForNode2); } + @Test + void resetCache() { + assertThatCode(() -> grpcGraph.resetCache()).doesNotThrowAnyException(); + } + private RoutingPolicy policy(int feeRate, int baseFee, boolean disabled, int timeLockDelta) { return RoutingPolicy.newBuilder() .setFeeRateMilliMsat(feeRate) diff --git a/web/build.gradle b/web/build.gradle index bbb62fa9..d268e19e 100644 --- a/web/build.gradle +++ b/web/build.gradle @@ -6,12 +6,14 @@ dependencies { implementation('org.springframework.boot:spring-boot-starter-web') implementation project(':backend') implementation project(':pickhardt-payments') + implementation project(':grpc-adapter') implementation project(':model') testImplementation testFixtures(project(':model')) testImplementation testFixtures(project(':pickhardt-payments')) integrationTestImplementation 'com.ryantenney.metrics:metrics-spring:3.1.3' integrationTestImplementation('org.springframework.boot:spring-boot-starter-web') integrationTestImplementation project(':backend') + integrationTestImplementation project(':grpc-adapter') integrationTestImplementation testFixtures(project(':model')) integrationTestImplementation testFixtures(project(':pickhardt-payments')) } diff --git a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerIT.java b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerIT.java index d4c6cb69..0ff83c1f 100644 --- a/web/src/integrationTest/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerIT.java +++ b/web/src/integrationTest/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerIT.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.controller.dto.ObjectMapperConfiguration; +import de.cotto.lndmanagej.grpc.GrpcGraph; import de.cotto.lndmanagej.model.ChannelIdResolver; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.HexString; @@ -45,6 +46,10 @@ class PickhardtPaymentsControllerIT { @MockBean private MultiPathPaymentSender multiPathPaymentSender; + @MockBean + @SuppressWarnings("unused") + private GrpcGraph grpcGraph; + @MockBean @SuppressWarnings("unused") private ChannelIdResolver channelIdResolver; diff --git a/web/src/main/java/de/cotto/lndmanagej/controller/PickhardtPaymentsController.java b/web/src/main/java/de/cotto/lndmanagej/controller/PickhardtPaymentsController.java index ec2cae44..94e35585 100644 --- a/web/src/main/java/de/cotto/lndmanagej/controller/PickhardtPaymentsController.java +++ b/web/src/main/java/de/cotto/lndmanagej/controller/PickhardtPaymentsController.java @@ -2,6 +2,7 @@ package de.cotto.lndmanagej.controller; import com.codahale.metrics.annotation.Timed; import de.cotto.lndmanagej.controller.dto.MultiPathPaymentDto; +import de.cotto.lndmanagej.grpc.GrpcGraph; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.Pubkey; import de.cotto.lndmanagej.pickhardtpayments.MultiPathPaymentSender; @@ -24,15 +25,18 @@ public class PickhardtPaymentsController { private final MultiPathPaymentSplitter multiPathPaymentSplitter; private final MultiPathPaymentSender multiPathPaymentSender; private final PaymentStatusStream paymentStatusStream; + private final GrpcGraph grpcGraph; public PickhardtPaymentsController( MultiPathPaymentSplitter multiPathPaymentSplitter, MultiPathPaymentSender multiPathPaymentSender, - PaymentStatusStream paymentStatusStream + PaymentStatusStream paymentStatusStream, + GrpcGraph grpcGraph ) { this.multiPathPaymentSplitter = multiPathPaymentSplitter; this.multiPathPaymentSender = multiPathPaymentSender; this.paymentStatusStream = paymentStatusStream; + this.grpcGraph = grpcGraph; } @Timed @@ -99,4 +103,10 @@ public class PickhardtPaymentsController { ) { return send(source, target, amount, DEFAULT_FEE_RATE_WEIGHT); } + + @Timed + @GetMapping("/reset-graph-cache") + public void resetGraph() { + grpcGraph.resetCache(); + } } diff --git a/web/src/test/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerTest.java b/web/src/test/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerTest.java index 67ba39da..5c03d719 100644 --- a/web/src/test/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerTest.java +++ b/web/src/test/java/de/cotto/lndmanagej/controller/PickhardtPaymentsControllerTest.java @@ -1,6 +1,7 @@ package de.cotto.lndmanagej.controller; import de.cotto.lndmanagej.controller.dto.MultiPathPaymentDto; +import de.cotto.lndmanagej.grpc.GrpcGraph; import de.cotto.lndmanagej.model.Coins; import de.cotto.lndmanagej.model.HexString; import de.cotto.lndmanagej.pickhardtpayments.MultiPathPaymentSender; @@ -23,6 +24,7 @@ import static de.cotto.lndmanagej.pickhardtpayments.model.MultiPathPaymentFixtur import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -42,6 +44,9 @@ class PickhardtPaymentsControllerTest { @Mock private PaymentStatusStream paymentStatusStream; + @Mock + private GrpcGraph grpcGraph; + private final PaymentStatus paymentStatus = new PaymentStatus(HexString.EMPTY); @BeforeEach @@ -106,4 +111,10 @@ class PickhardtPaymentsControllerTest { assertThat(controller.send(PUBKEY, PUBKEY_2, 123, feeRateWeight)) .isEqualTo(MultiPathPaymentDto.fromModel(MULTI_PATH_PAYMENT)); } + + @Test + void resetCache() { + controller.resetGraph(); + verify(grpcGraph).resetCache(); + } }