Skip to content

Commit 7d13ff1

Browse files
committed
Add --skip-triangle-inequality-check flag to ols
1 parent 17038f3 commit 7d13ff1

File tree

1 file changed

+30
-13
lines changed

1 file changed

+30
-13
lines changed

simulation/src/Main.hs

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ vizOptionsToViz VizCommandWithOptions{..} = case vizSubCommand of
317317
VizPraosP2P1{..} -> do
318318
let rng0 = Random.mkStdGen seed
319319
let (rng1, rng2) = Random.split rng0
320-
p2pNetwork <- execTopologyOptions rng1 topologyOptions
320+
p2pNetwork <- execTopologyOptions def rng1 topologyOptions
321321
cfg <- execConfigOptions configOptions
322322
pure $ VizPraosP2P.example1 rng2 cfg p2pNetwork
323323
VizPraosP2P2 -> pure VizPraosP2P.example2
@@ -328,7 +328,7 @@ vizOptionsToViz VizCommandWithOptions{..} = case vizSubCommand of
328328
VizShortLeiosP2P1{..} -> do
329329
let rng0 = Random.mkStdGen seed
330330
let (rng1, rng2) = Random.split rng0
331-
p2pNetwork <- execTopologyOptions rng1 topologyOptions
331+
p2pNetwork <- execTopologyOptions def rng1 topologyOptions
332332
cfg <- execConfigOptions configOptions
333333
pure $ VizShortLeiosP2P.example2 rng2 cfg p2pNetwork
334334

@@ -361,6 +361,7 @@ data SimOptions = SimOptions
361361
{ simCommand :: SimCommand
362362
, simOutputSeconds :: Time
363363
, simOutputFile :: FilePath
364+
, simCheckTriangles :: WhetherToCheckTriangleInequality
364365
}
365366

366367
runSimOptions :: SimOptions -> IO ()
@@ -369,14 +370,14 @@ runSimOptions SimOptions{..} = case simCommand of
369370
let rng0 = Random.mkStdGen seed
370371
let (rng1, rng2) = Random.split rng0
371372
config <- execConfigOptions configOptions
372-
p2pNetwork <- execTopologyOptions rng1 topologyOptions
373+
p2pNetwork <- execTopologyOptions def rng1 topologyOptions
373374
-- let bandwidth = 10 * 125_000_000 :: Bytes -- 10 Gbps TODO: set in config
374375
VizPraosP2P.example1000Diffusion rng2 config p2pNetwork simOutputSeconds simOutputFile
375376
SimShortLeios{..} -> do
376377
let rng0 = Random.mkStdGen seed
377378
let (rng1, rng2) = Random.split rng0
378379
config <- execConfigOptions configOptions
379-
p2pNetwork <- execTopologyOptions rng1 topologyOptions
380+
p2pNetwork <- execTopologyOptions def rng1 topologyOptions
380381
let outputCfg =
381382
DataShortLeiosP2P.SimOutputConfig
382383
{ logFile = do
@@ -413,6 +414,10 @@ parserSimOptions =
413414
<> metavar "FILE"
414415
<> help "Output simulation data to file."
415416
)
417+
<*> (fmap (WhetherToCheckTriangleInequality . not) . switch)
418+
( long "skip-triangle-inequality-check"
419+
<> help "Do not check the topology's latencies for the triangle inequality."
420+
)
416421

417422
data SimCommand
418423
= SimPraosDiffusion
@@ -552,7 +557,7 @@ runCliOptions = \case
552557
-- Generate a random topology using the topology characteristics
553558
CliGenerateTopology{..} -> do
554559
let rng = Random.mkStdGen seed
555-
p2pNetwork@P2PNetwork{..} <- execTopologyGenerationOptions rng topologyGenerationOptions
560+
p2pNetwork@P2PNetwork{..} <- execTopologyGenerationOptions def rng topologyGenerationOptions
556561
let totalStake = fromIntegral $ 100 * Map.size p2pNodes
557562
writeTopology outputTopologyFile $ p2pNetworkToSomeTopology totalStake p2pNetwork
558563
CliReportData{..} -> do
@@ -622,20 +627,21 @@ parserReportData =
622627
-- Parsing Topography Options
623628
--------------------------------------------------------------------------------
624629

625-
execTopologyOptions :: Random.RandomGen g => g -> TopologyOptions -> IO P2PNetwork
626-
execTopologyOptions rng = \case
630+
execTopologyOptions :: Random.RandomGen g => WhetherToCheckTriangleInequality -> g -> TopologyOptions -> IO P2PNetwork
631+
execTopologyOptions skipTriangleInequalityCheck rng = \case
627632
TopologyFile simpleTopologyFile -> do
628633
-- TODO: infer world size from latencies
629634
let world = World (1200, 1000) Rectangle
630-
validateP2PNetwork =<< readP2PTopographyFromSomeTopology defaultParams world simpleTopologyFile
631-
TopologyGenerationOptions topologyGenerationOptions -> execTopologyGenerationOptions rng topologyGenerationOptions
635+
applyValidateP2PNetwork skipTriangleInequalityCheck =<< readP2PTopographyFromSomeTopology defaultParams world simpleTopologyFile
636+
TopologyGenerationOptions topologyGenerationOptions -> execTopologyGenerationOptions skipTriangleInequalityCheck rng topologyGenerationOptions
637+
where
632638

633-
execTopologyGenerationOptions :: Random.RandomGen g => g -> TopologyGenerationOptions -> IO P2PNetwork
634-
execTopologyGenerationOptions rng =
635-
validateP2PNetwork <=< \case
639+
execTopologyGenerationOptions :: Random.RandomGen g => WhetherToCheckTriangleInequality -> g -> TopologyGenerationOptions -> IO P2PNetwork
640+
execTopologyGenerationOptions skipTriangleInequalityCheck rng =
641+
applyValidateP2PNetwork skipTriangleInequalityCheck <=< \case
636642
TopologyGenerationStrategyFile topologyGenerationStrategyFile ->
637643
eitherDecodeFileStrict' topologyGenerationStrategyFile >>= \case
638-
Right topologyGenerationStrategy -> execTopologyGenerationOptions rng (TopologyGenerationStrategy topologyGenerationStrategy)
644+
Right topologyGenerationStrategy -> execTopologyGenerationOptions skipTriangleInequalityCheck rng (TopologyGenerationStrategy topologyGenerationStrategy)
639645
Left errorMessage -> fail $ "Could not decode P2PTopographyCharacteristics from '" <> topologyGenerationStrategyFile <> "':\n" <> errorMessage
640646
TopologyGenerationStrategy topologyGenerationStrategy -> generateTopology rng topologyGenerationStrategy
641647

@@ -646,6 +652,17 @@ data TopologyOptions
646652
instance Default TopologyOptions where
647653
def = TopologyGenerationOptions def
648654

655+
-- | The check scales very poorly and is not critical, so it's sometimes very
656+
-- useful to skip
657+
newtype WhetherToCheckTriangleInequality = WhetherToCheckTriangleInequality Bool
658+
659+
instance Default WhetherToCheckTriangleInequality where
660+
def = WhetherToCheckTriangleInequality True
661+
662+
applyValidateP2PNetwork :: WhetherToCheckTriangleInequality -> P2PNetwork -> IO P2PNetwork
663+
applyValidateP2PNetwork (WhetherToCheckTriangleInequality flag) =
664+
if flag then validateP2PNetwork else pure
665+
649666
parserTopologyOptions :: Parser TopologyOptions
650667
parserTopologyOptions =
651668
asum

0 commit comments

Comments
 (0)