Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add basic latency benchmarks for migrations #2665

Merged
merged 2 commits into from
May 25, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏻


pure ()
where
arbitraryStake :: Maybe Coin
Expand Down