Skip to content

Commit

Permalink
Merge #2665
Browse files Browse the repository at this point in the history
2665: Add basic latency benchmarks for migrations r=piotr-iohk a=piotr-iohk

# Issue Number

ADP-680


# Overview

- 2c31861
  Add basic latency benchmarks for migrations


# Comments

[Migration Plan](http://cardano-wallet-benchmarks.herokuapp.com/latency?latency_category=4&latency_benchmark=all&latency_measurement=postMigrationPlan)
[Migration](http://cardano-wallet-benchmarks.herokuapp.com/latency?latency_category=4&latency_benchmark=all&latency_measurement=postMigration)


Co-authored-by: Piotr Stachyra <piotr.stachyra@iohk.io>
  • Loading branch information
iohk-bors[bot] and Piotr Stachyra committed May 25, 2021
2 parents 667037b + c32dafc commit e054c8b
Showing 1 changed file with 25 additions and 6 deletions.
31 changes: 25 additions & 6 deletions lib/shelley/bench/Latency.hs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import Cardano.Wallet.Api.Types
, ApiTxId (..)
, ApiUtxoStatistics
, ApiWallet
, ApiWalletMigrationPlan (..)
, EncodeAddress (..)
, WalletStyle (..)
)
Expand Down Expand Up @@ -203,15 +204,16 @@ walletApiBench capture ctx = do
nFixtureWallet n = do
wal1 : wal2 : _ <- replicateM n (fixtureWallet ctx)
walMA <- fixtureMultiAssetWallet ctx
pure (wal1, wal2, walMA)
maWalletToMigrate <- fixtureMultiAssetWallet ctx
pure (wal1, wal2, walMA, maWalletToMigrate)

-- Creates n fixture wallets and send 1-ada transactions to one of them
-- (m times). The money is sent in batches (see batchSize below) from
-- additionally created source fixture wallet. Then we wait for the money
-- to be accommodated in recipient wallet. After that the source fixture
-- wallet is removed.
nFixtureWalletWithTxs n m = do
(wal1, wal2, walMA) <- nFixtureWallet n
(wal1, wal2, walMA, maWalletToMigrate) <- nFixtureWallet n

let amt = minUTxOValue
let batchSize = 10
Expand All @@ -226,12 +228,12 @@ walletApiBench capture ctx = do
let expInflows' = filter (/=0) expInflows

mapM_ (repeatPostTx wal1 amt batchSize . amtExp) expInflows'
pure (wal1, wal2, walMA)
pure (wal1, wal2, walMA, maWalletToMigrate)

nFixtureWalletWithUTxOs n utxoNumber = do
let utxoExp = replicate utxoNumber minUTxOValue
wal1 <- fixtureWalletWith @n ctx utxoExp
(_, wal2, walMA) <- nFixtureWallet n
(_, wal2, walMA, maWalletToMigrate) <- nFixtureWallet n

eventually "Wallet balance is as expected" $ do
rWal1 <- request @ApiWallet ctx
Expand All @@ -247,7 +249,7 @@ walletApiBench capture ctx = do
(Link.getUTxOsStatistics @'Shelley wal1) Default Empty
expectResponseCode HTTP.status200 rStat
expectWalletUTxO (fromIntegral <$> utxoExp) (snd rStat)
pure (wal1, wal2, walMA)
pure (wal1, wal2, walMA, maWalletToMigrate)

repeatPostTx wDest amtToSend batchSize amtExp = do
wSrc <- fixtureWallet ctx
Expand Down Expand Up @@ -283,7 +285,7 @@ walletApiBench capture ctx = do
expectResponseCode HTTP.status202 r
return r

runScenario scenario = runResourceT $ scenario >>= \(wal1, wal2, walMA) -> liftIO $ do
runScenario scenario = runResourceT $ scenario >>= \(wal1, wal2, walMA, maWalletToMigrate) -> liftIO $ do
t1 <- measureApiLogs capture
(request @[ApiWallet] ctx (Link.listWallets @'Shelley) Default Empty)
fmtResult "listWallets " t1
Expand Down Expand Up @@ -384,6 +386,23 @@ walletApiBench capture ctx = do
(Link.getAsset walMA polId assName) Default Empty
fmtResult "getMultiAsset " t11

-- Create a migration plan:
let endpointPlan = (Link.createMigrationPlan @'Shelley maWalletToMigrate)
t12a <- measureApiLogs capture $ request @(ApiWalletMigrationPlan n)
ctx endpointPlan Default $
Json [json|{addresses: #{addresses}}|]
fmtResult "postMigrationPlan " t12a

-- Perform a migration:
let endpointMigrate = Link.migrateWallet @'Shelley maWalletToMigrate
t12b <- measureApiLogs capture $ request @[ApiTransaction n]
ctx endpointMigrate Default $
Json [json|
{ passphrase: #{fixturePassphrase}
, addresses: #{addresses}
}|]
fmtResult "postMigration " t12b

pure ()
where
arbitraryStake :: Maybe Coin
Expand Down

0 comments on commit e054c8b

Please sign in to comment.