@@ -2471,7 +2471,7 @@ prop_governor_target_known_big_ledger_peers_above (MaxTime maxTime) env =
2471
2471
-- test to assert that this happens in some fraction of test cases.
2472
2472
--
2473
2473
prop_governor_target_established_below :: MaxTime -> GovernorMockEnvironment -> Property
2474
- prop_governor_target_established_below (MaxTime maxTime) env =
2474
+ prop_governor_target_established_below (MaxTime maxTime) env@ GovernorMockEnvironment {inboundPeers} =
2475
2475
let events = Signal. eventsFromListUpToTime maxTime
2476
2476
. selectPeerSelectionTraceEvents
2477
2477
@ Cardano. ExtraState
@@ -2487,6 +2487,27 @@ prop_governor_target_established_below (MaxTime maxTime) env =
2487
2487
(Cardano.ExtraState. empty (consensusMode env) (NumberOfBigLedgerPeers 0 )) Cardano.ExtraPeers. empty
2488
2488
events
2489
2489
2490
+ govLocalRootPeersSig :: Signal (LocalRootPeers PeerTrustable PeerAddr )
2491
+ govLocalRootPeersSig =
2492
+ selectGovState Governor. localRootPeers
2493
+ (Cardano.ExtraState. empty (consensusMode env) (NumberOfBigLedgerPeers 0 )) Cardano.ExtraPeers. empty
2494
+ events
2495
+
2496
+ govUnreachablePeersSig :: Signal (Set PeerAddr )
2497
+ govUnreachablePeersSig =
2498
+ (\ local ->
2499
+ let
2500
+ isUnreachablePeer addr (LocalRootConfig {behindFirewall}) =
2501
+ behindFirewall && not (Set. member addr inboundPeers)
2502
+
2503
+ unreachablePeers =
2504
+ Map. keysSet
2505
+ $ Map. filterWithKey isUnreachablePeer
2506
+ $ LocalRootPeers. toMap local
2507
+ in
2508
+ unreachablePeers
2509
+ ) <$> govLocalRootPeersSig
2510
+
2490
2511
govKnownPeersSig :: Signal (Set PeerAddr )
2491
2512
govKnownPeersSig =
2492
2513
selectGovState (dropBigLedgerPeers $
@@ -2538,19 +2559,21 @@ prop_governor_target_established_below (MaxTime maxTime) env =
2538
2559
2539
2560
-- There are no opportunities if we're at or above target
2540
2561
--
2541
- promotionOpportunity target known established recentFailures
2562
+ promotionOpportunity target known unreachable established recentFailures
2542
2563
| Set. size established >= target
2543
2564
= Set. empty
2544
2565
2545
2566
| otherwise
2546
2567
= known Set. \\ established
2568
+ Set. \\ unreachable
2547
2569
Set. \\ recentFailures
2548
2570
2549
2571
promotionOpportunities :: Signal (Set PeerAddr )
2550
2572
promotionOpportunities =
2551
2573
promotionOpportunity
2552
2574
<$> govTargetsSig
2553
2575
<*> govKnownPeersSig
2576
+ <*> govUnreachablePeersSig
2554
2577
<*> govEstablishedPeersSig
2555
2578
<*> govEstablishedFailuresSig
2556
2579
@@ -3218,7 +3241,7 @@ prop_governor_target_active_big_ledger_peers_above (MaxTime maxTime) env =
3218
3241
-- is not possible to exceed the target.
3219
3242
--
3220
3243
prop_governor_target_established_local :: MaxTime -> GovernorMockEnvironment -> Property
3221
- prop_governor_target_established_local (MaxTime maxTime) env =
3244
+ prop_governor_target_established_local (MaxTime maxTime) env@ GovernorMockEnvironment {inboundPeers} =
3222
3245
let events = Signal. eventsFromListUpToTime maxTime
3223
3246
. selectPeerSelectionTraceEvents
3224
3247
@ Cardano. ExtraState
@@ -3234,6 +3257,21 @@ prop_governor_target_established_local (MaxTime maxTime) env =
3234
3257
(Cardano.ExtraState. empty (consensusMode env) (NumberOfBigLedgerPeers 0 )) Cardano.ExtraPeers. empty
3235
3258
events
3236
3259
3260
+ govUnreachablePeersSig :: Signal (Set PeerAddr )
3261
+ govUnreachablePeersSig =
3262
+ (\ local ->
3263
+ let
3264
+ isUnreachablePeer addr (LocalRootConfig {behindFirewall}) =
3265
+ behindFirewall && not (Set. member addr inboundPeers)
3266
+
3267
+ unreachablePeers =
3268
+ Map. keysSet
3269
+ $ Map. filterWithKey isUnreachablePeer
3270
+ $ LocalRootPeers. toMap local
3271
+ in
3272
+ unreachablePeers
3273
+ ) <$> govLocalRootPeersSig
3274
+
3237
3275
govEstablishedPeersSig :: Signal (Set PeerAddr )
3238
3276
govEstablishedPeersSig =
3239
3277
selectGovState
@@ -3281,18 +3319,20 @@ prop_governor_target_established_local (MaxTime maxTime) env =
3281
3319
3282
3320
promotionOpportunities :: Signal (Set PeerAddr )
3283
3321
promotionOpportunities =
3284
- (\ local established recentFailures inProgressPromoteCold ->
3322
+ (\ local unreachable established recentFailures inProgressPromoteCold ->
3285
3323
Set. unions
3286
3324
[ -- There are no opportunities if we're at or above target
3287
3325
if Set. size groupEstablished >= warmTarget'
3288
3326
then Set. empty
3289
3327
else group Set. \\ established
3328
+ Set. \\ unreachable
3290
3329
Set. \\ recentFailures
3291
3330
Set. \\ inProgressPromoteCold
3292
3331
| (_, WarmValency warmTarget', group) <- LocalRootPeers. toGroupSets local
3293
3332
, let groupEstablished = group `Set.intersection` established
3294
3333
]
3295
3334
) <$> govLocalRootPeersSig
3335
+ <*> govUnreachablePeersSig
3296
3336
<*> govEstablishedPeersSig
3297
3337
<*> govEstablishedFailuresSig
3298
3338
<*> govInProgressPromoteColdSig
@@ -4079,6 +4119,7 @@ prop_issue_3550 = prop_governor_target_established_below defaultMaxTime $
4079
4119
targetNumberOfActivePeers = 3 },
4080
4120
nullPeerSelectionTargets),
4081
4121
NoDelay ) :| [] ),
4122
+ inboundPeers = Set. empty,
4082
4123
pickKnownPeersForPeerShare = Script (PickFirst :| [] ),
4083
4124
pickColdPeersToPromote = Script (PickFirst :| [] ),
4084
4125
pickWarmPeersToPromote = Script (PickFirst :| [] ),
@@ -4114,6 +4155,7 @@ prop_issue_3515 = prop_governor_nolivelock $
4114
4155
localRootPeers = LocalRootPeers. fromGroups [(1 ,1 ,Map. fromList [(PeerAddr 10 , LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable )])],
4115
4156
publicRootPeers = PublicRootPeers. empty Cardano.ExtraPeers. empty,
4116
4157
targets = Script . NonEmpty. fromList $ targets'',
4158
+ inboundPeers = Set. empty,
4117
4159
pickKnownPeersForPeerShare = Script (PickFirst :| [] ),
4118
4160
pickColdPeersToPromote = Script (PickFirst :| [] ),
4119
4161
pickWarmPeersToPromote = Script (PickFirst :| [] ),
@@ -4156,6 +4198,7 @@ prop_issue_3494 = prop_governor_nofail $
4156
4198
localRootPeers = LocalRootPeers. fromGroups [(1 ,1 ,Map. fromList [(PeerAddr 64 , LocalRootConfig DoAdvertisePeer InitiatorAndResponderDiffusionMode False IsNotTrustable )])],
4157
4199
publicRootPeers = PublicRootPeers. empty Cardano.ExtraPeers. empty,
4158
4200
targets = Script . NonEmpty. fromList $ targets'',
4201
+ inboundPeers = Set. empty,
4159
4202
pickKnownPeersForPeerShare = Script (PickFirst :| [] ),
4160
4203
pickColdPeersToPromote = Script (PickFirst :| [] ),
4161
4204
pickWarmPeersToPromote = Script (PickFirst :| [] ),
@@ -4209,6 +4252,7 @@ prop_issue_3233 = prop_governor_nolivelock $
4209
4252
publicRootPeers = Cardano.PublicRootPeers. fromPublicRootPeers
4210
4253
(Map. fromList [(PeerAddr 4 , DoNotAdvertisePeer )]),
4211
4254
targets = Script . NonEmpty. fromList $ targets'',
4255
+ inboundPeers = Set. empty,
4212
4256
pickKnownPeersForPeerShare = Script (PickFirst :| [] ),
4213
4257
pickColdPeersToPromote = Script (PickFirst :| [] ),
4214
4258
pickWarmPeersToPromote = Script (PickFirst :| [] ),
0 commit comments