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 sweat.claim load in Locust #11119

Merged
merged 1 commit into from
Apr 24, 2024
Merged

Add sweat.claim load in Locust #11119

merged 1 commit into from
Apr 24, 2024

Conversation

aborg-dev
Copy link
Contributor

@aborg-dev aborg-dev commented Apr 19, 2024

This PR introduces sweat.claim contract necessary for #11107 and uses it to implement sweat::defer_batch and sweat.claim::get_claimable_balance_for_account calls.

I originally intended to use sweat.claim::claim but it requires the balance to be locked for some time to be claimed, so to avoid changing sweat.claim contract, I've used get_claimable_balance_for_account method instead, which does a similar amount of work and can be called unconditionally.

You can run this with:

nearup run localnet --binary-path ../nearcore/target/release/ --num-nodes 1 --num-shards 1 --override
export KEY=~/.near/localnet/node0/validator_key.json
locust -H 127.0.0.1:3030 \
  -f locustfiles/sweat.py \
  --funding-key=$KEY --headless -u 10

Copy link

codecov bot commented Apr 19, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 71.09%. Comparing base (a9ddf9c) to head (bf949cc).

Additional details and impacted files
@@            Coverage Diff             @@
##           master   #11119      +/-   ##
==========================================
- Coverage   71.10%   71.09%   -0.01%     
==========================================
  Files         773      773              
  Lines      154176   154176              
  Branches   154176   154176              
==========================================
- Hits       109625   109615      -10     
- Misses      40100    40110      +10     
  Partials     4451     4451              
Flag Coverage Δ
backward-compatibility 0.24% <ø> (ø)
db-migration 0.24% <ø> (ø)
genesis-check 1.43% <ø> (ø)
integration-tests 36.89% <ø> (+0.01%) ⬆️
linux 69.52% <ø> (-0.01%) ⬇️
linux-nightly 70.55% <ø> (-0.02%) ⬇️
macos 52.64% <ø> (-1.66%) ⬇️
pytests 1.65% <ø> (ø)
sanity-checks 1.44% <ø> (ø)
unittests 66.74% <ø> (-0.01%) ⬇️
upgradability 0.29% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@aborg-dev aborg-dev changed the title Implement sweat::defer_batch in Locust Add sweat.claim load in Locust Apr 22, 2024
@aborg-dev aborg-dev requested review from mooori and nagisa April 22, 2024 13:44
@aborg-dev aborg-dev marked this pull request as ready for review April 22, 2024 13:44
@aborg-dev aborg-dev requested a review from a team as a code owner April 22, 2024 13:44
Copy link
Contributor

@mooori mooori left a comment

Choose a reason for hiding this comment

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

The cost of executing claim resp. get_claimable_balance_for_account depends on state: it increases with the number of accruals stored for account_id. I'm still wrapping my head around nearcore's Locust setup for Sweat, but it seems like running a given locust command twice can result in different numbers of storage accesses as the accounts which receive accruals are chosen randomly. This could make it hard to assess the performance impact of nearcore changes based on this workload.

If this interpretation is correct, should we make the generation of accruals deterministic? For instance by introducing a parameter to set the number of accruals per account. That could be done in a follow-up PR.

@@ -129,6 +129,7 @@ Currently supported load types:
| Congestion | congestion.py | (`--congestion-wasm $WASM_PATH`) | Creates a single instance of Congestion contract. Users run large and long transactions. |
| Sweat (normal load) | sweat.py | (`--sweat-wasm $WASM_PATH`) | Creates a single instance of the SWEAT contract. A mix of FT transfers and batch minting with batch sizes comparable to mainnet observations in summer 2023. |
| Sweat (storage stress test) | sweat.py | `--tags=storage-stress-test` <br> (`--sweat-wasm $WASM_PATH`) | Creates a single instance of the SWEAT contract. Sends maximally large batches to mint more tokens, thereby touching many storage nodes per receipt. This load will take a while to initialize enough Sweat users on chain. |
| Sweat (claim) | sweat.py | `--tags=claim-test` <br> (`--sweat-wasm $WASM_PATH`) | Creates a single instance of the SWEAT and SWEAT.CLAIM contract. Sends deferred batches to mint more tokens, thereby touching many storage nodes per receipt. Then calls balance checks that iterate through populated state. |
Copy link
Contributor

Choose a reason for hiding this comment

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

Add --sweat-claim-wasm parameter?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added.

@aborg-dev
Copy link
Contributor Author

The cost of executing claim resp. get_claimable_balance_for_account depends on state: it increases with the number of accruals stored for account_id. I'm still wrapping my head around nearcore's Locust setup for Sweat, but it seems like running a given locust command twice can result in different numbers of storage accesses as the accounts which receive accruals are chosen randomly. This could make it hard to assess the performance impact of nearcore changes based on this workload.

If this interpretation is correct, should we make the generation of accruals deterministic? For instance by introducing a parameter to set the number of accruals per account. That could be done in a follow-up PR.

Yes, I think that is a very good observation. Here I'm just doing plumbing to enable calling these smart contract methods. We need to do another step where we tune the Locust workload to actually exercise the network in interesting ways - what you suggest makes a lot of sense.

This PR introduces sweat.claim contract necessary for #11107 and uses it
to implement sweat::defer_batch and
sweat.claim::get_claimable_balance_for_account calls.

I originally intended to use sweat.claim::claim but it requires the
balance to be locked for some time to be claimed, so to avoid changing
sweat.claim contract, I've used get_claimable_balance_for_account method
instead, which does a similar amount of work and can be called
unconditionally.
@aborg-dev aborg-dev added this pull request to the merge queue Apr 24, 2024
Merged via the queue into master with commit f792d3b Apr 24, 2024
29 checks passed
@aborg-dev aborg-dev deleted the akashin/locust_sweat_claim branch April 24, 2024 10:03
jancionear pushed a commit to jancionear/nearcore that referenced this pull request May 13, 2024
<p>This PR was automatically created by Snyk using the credentials of a
real user.</p><br /><h3>Snyk has created this PR to upgrade
react-router-dom from 6.20.1 to 6.21.1.</h3>

:information_source: Keep your dependencies up-to-date. This makes it
easier to fix existing vulnerabilities and to more quickly identify and
fix newly disclosed vulnerabilities when they affect your project.
<hr/>

- The recommended version is **7 versions** ahead of your current
version.
- The recommended version was released **22 days ago**, on 2023-12-21.


<details>
<summary><b>Release notes</b></summary>
<br/>
  <details>
    <summary>Package name: <b>react-router-dom</b></summary>
    <ul>
      <li>
        <b>6.21.1</b> - 2023-12-21
      </li>
      <li>
        <b>6.21.1-pre.0</b> - 2023-12-21
      </li>
      <li>
        <b>6.21.0</b> - 2023-12-13
      </li>
      <li>
        <b>6.21.0-pre.3</b> - 2023-12-06
      </li>
      <li>
        <b>6.21.0-pre.2</b> - 2023-12-05
      </li>
      <li>
        <b>6.21.0-pre.1</b> - 2023-12-05
      </li>
      <li>
        <b>6.21.0-pre.0</b> - 2023-12-05
      </li>
      <li>
        <b>6.20.1</b> - 2023-12-01
      </li>
    </ul>
from <a
href="https://snyk.io/redirect/github/remix-run/react-router/releases">react-router-dom
GitHub release notes</a>
  </details>
</details>


<details>
  <summary><b>Commit messages</b></summary>
  </br>
  <details>
    <summary>Package name: <b>react-router-dom</b></summary>
    <ul>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/08cda17f450ebe19481be3fc080d243ec5ef509f">08cda17</a>
chore: Update version for release (near#11132)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/14df5db772c1ec92fd680b7646c8865d5caf1a84">14df5db</a>
Exit prerelease mode</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/c55f8417e17491e8e4f5626680bc4c9b8d0f9ed9">c55f841</a>
Update release notes</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/e5d73cf2251bf99d3113695a57c34c84e0ac92e5">e5d73cf</a>
chore: Update version for release (pre) (near#11131)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/a7ec1c50756172b92aeff2225cbedca7254c63b7">a7ec1c5</a>
Enter prerelease mode</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/ba99ec567e1899f811973d99ca804dc620a9cfae">ba99ec5</a>
Merge branch &#x27;main&#x27; into release-next</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/8bb3ffdf3225dafd2c8df11a27141b0745fcc647">8bb3ffd</a>
Fix typo in changeset</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/0f04d11d152a2d7d7ebace786bc7c2fd30d55fbc">0f04d11</a>
Fix issues with partial hydration combined with route.lazy (near#11121)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/cc4436c544300a09d9d95c5f733d3b00fd7d426f">cc4436c</a>
Update changelogs for useResolvedSplat example</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/d9b36f6e16a7b437be30faf7fdd8154cff40e9cc">d9b36f6</a>
Update useResolvedPath docs</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/f8c54a89f604185e8462a7768d0172a670beae6d">f8c54a8</a>
chore: format</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/abb23de1345349fc81a5beb6ff6697ea04816078">abb23de</a>
doc edited for unstable_useViewTransitionState (near#11117)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/a4e91e089a730443f638742759e7dd335aea1399">a4e91e0</a>
chore: sort contributors list</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/2ea19faf9b47222a797037a63e61375622ad0fb6">2ea19fa</a>
docs: Add minor grammatical changes to &#x60;errorElement&#x60; docs for
better readability (near#11119)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/87d5d6114420b3f00e156c04564c2c24496b6235">87d5d61</a>
Fix unit test (near#11115)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/19e6398f20779dd34d8b4eca0f3605bf5831a7f0">19e6398</a>
Add v7_relativeSplatPath to createBrowserRouter docs</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/c292bdb9bd1171546b5937c6ff226a6f064c8652">c292bdb</a>
Merge branch &#x27;release-next&#x27; into dev</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/5567158e1f7ab96683bcb4c757e27b1c22ceb68f">5567158</a>
Merge branch &#x27;release-next&#x27;</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/69ba50e06633fd4add234fb47f2d49b0a5ee41f9">69ba50e</a>
chore: Update version for release (near#11114)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/ffd4373737a5bda3ad0fcebfa4895fbd8038a504">ffd4373</a>
Exit prerelease mode</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/54ec39ee35cfde99ee7218e6aa2bd1b7d8afc787">54ec39e</a>
Allow persisted fetchers unmounted during submit to revalidate
(near#11102)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/a76ee41e08f0b2a88557b48656ff2fc318f5c4d0">a76ee41</a>
Dedup relative path logic in resolveTo (near#11097)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/ea0ffeef8a0c353f8ef402b5df2ac7c60a4d0b49">ea0ffee</a>
chore: Update version for release (pre) (near#11095)</li>
<li><a
href="https://snyk.io/redirect/github/remix-run/react-router/commit/fe3c071037b18f447dabb44fb24e4b1bce2a2a15">fe3c071</a>
Slight refactor to partial hydration to leverage state.initialized
properly (near#11094)</li>
    </ul>

<a
href="https://snyk.io/redirect/github/remix-run/react-router/compare/8b1ee67ebc00fc3e778d5e36fe9bca140b576b5c...08cda17f450ebe19481be3fc080d243ec5ef509f">Compare</a>
  </details>
</details>
<hr/>

**Note:** *You are seeing this because you or someone else with access
to this repository has authorized Snyk to open upgrade PRs.*

For more information: <img
src="https://api.segment.io/v1/pixel/track?data=eyJ3cml0ZUtleSI6InJyWmxZcEdHY2RyTHZsb0lYd0dUcVg4WkFRTnNCOUEwIiwiYW5vbnltb3VzSWQiOiIyODZlOTdmZi04MTUxLTRiMWYtODM2Zi0zNzJiMTg4NzZjZWIiLCJldmVudCI6IlBSIHZpZXdlZCIsInByb3BlcnRpZXMiOnsicHJJZCI6IjI4NmU5N2ZmLTgxNTEtNGIxZi04MzZmLTM3MmIxODg3NmNlYiJ9fQ=="
width="0" height="0"/>

🧐 [View latest project
report](https://app.snyk.io/org/ecp88/project/98480bdc-d80b-4fd1-89d7-c4c56a706763?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🛠 [Adjust upgrade PR
settings](https://app.snyk.io/org/ecp88/project/98480bdc-d80b-4fd1-89d7-c4c56a706763/settings/integration?utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr)

🔕 [Ignore this dependency or unsubscribe from future upgrade
PRs](https://app.snyk.io/org/ecp88/project/98480bdc-d80b-4fd1-89d7-c4c56a706763/settings/integration?pkg&#x3D;react-router-dom&amp;utm_source&#x3D;github&amp;utm_medium&#x3D;referral&amp;page&#x3D;upgrade-pr#auto-dep-upgrades)

<!---
(snyk:metadata:{"prId":"286e97ff-8151-4b1f-836f-372b18876ceb","prPublicId":"286e97ff-8151-4b1f-836f-372b18876ceb","dependencies":[{"name":"react-router-dom","from":"6.20.1","to":"6.21.1"}],"packageManager":"npm","type":"auto","projectUrl":"https://app.snyk.io/org/ecp88/project/98480bdc-d80b-4fd1-89d7-c4c56a706763?utm_source=github&utm_medium=referral&page=upgrade-pr","projectPublicId":"98480bdc-d80b-4fd1-89d7-c4c56a706763","env":"prod","prType":"upgrade","vulns":[],"issuesToFix":[],"upgrade":[],"upgradeInfo":{"versionsDiff":7,"publishedDate":"2023-12-21T17:00:03.440Z"},"templateVariants":[],"hasFixes":false,"isMajorUpgrade":false,"isBreakingChange":false,"priorityScoreList":[]})
--->

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants