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

ERROR mpool push: failed to push message #12794

Open
5 of 11 tasks
pk-controller opened this issue Dec 17, 2024 · 5 comments
Open
5 of 11 tasks

ERROR mpool push: failed to push message #12794

pk-controller opened this issue Dec 17, 2024 · 5 comments
Labels
kind/bug Kind: Bug

Comments

@pk-controller
Copy link

Checklist

  • This is not a security-related bug/issue. If it is, please follow please follow the security policy.
  • I have searched on the issue tracker and the lotus forum, and there is no existing related issue or discussion.
  • I am running the Latest release, the most recent RC(release canadiate) for the upcoming release or the dev branch(master), or have an issue updating to any of these.
  • I did not make any code changes to lotus.

Lotus component

  • lotus daemon - chain sync
  • lotus fvm/fevm - Lotus FVM and FEVM interactions
  • lotus miner/worker - sealing
  • lotus miner - proving(WindowPoSt/WinningPoSt)
  • lotus JSON-RPC API
  • lotus message management (mpool)
  • Other

Lotus Version

Daemon: 1.31
lotus version 1.31.0

./lotus-shed send-csv --from <FIL source address> <filename>.csv

Repro Steps

  1. ./lotus-shed send-csv --from .csv
  2. It happens whenever running a batch send, batch approval, or batch proposal
  3. after 10 messages or so, this varies
  4. ERROR mpool push: failed to push message: failed to add locked: too many pending message for actor
    ...

Describe the Bug

So whenever we are sending a batch proposal, approval, or batch send. It will execute about 10 messages and then we get the error. We have seen this error now on 3 different computers.

Logging Information

N/A
@pk-controller pk-controller added the kind/bug Kind: Bug label Dec 17, 2024
@github-project-automation github-project-automation bot moved this to 📌 Triage in FilOz Dec 17, 2024
@rvagg
Copy link
Member

rvagg commented Dec 18, 2024

@pk-controller did this used to work but is now not working? I guess you're using a public API, like glif. The "untrusted" mpool push method has a limit of 10 messages at a time, to prevent spam attacks. A "trusted" path has 1000, but that would require not going through the gateway which imposes this limit, but running your own node or getting access to a node directly.

We could change send-csv to do smarter batching, or detect this error and adjust, but it would slow it down.

@jennijuju
Copy link
Member

thanks rod

We could change send-csv to do smarter batching, or detect this error and adjust, but it would slow it down.

I don’t think we would be able to prioritize this as this is not a main use case of lotus.

@pk-controller Id suggest you to consider to run your own node, or reach out to @ArseniiPetrovich from Protofire for node service/api services.

@pk-controller
Copy link
Author

pk-controller commented Dec 18, 2024

@rvagg yes this used to work no issue, for the last 4 years, we would run up to 300-400. it just changed to the 10 maybe a month or two ago. I have always been using a lite node, it may have changed, but not recently. I use the glif lite node:
FULLNODE_API_INFO=wss://wss.node.glif.io/apigw/lotus lotus daemon --lite

@ArseniiPetrovich
Copy link
Contributor

Hm, we haven't changed anything related to this on our end. The only thing is that without access key it is nowadays not possible to send over 100 requests per minute, but this was the case for many months now, if not for a year. Not sure how it was working on the 300-400 scale then at all.

@rvagg
Copy link
Member

rvagg commented Dec 18, 2024

Oh, I recall now. In #12431 I did a couple of things, the main thing was plugging a hole whereby eth_sendTransactionRaw was using an untrusted path so it was possible to spam a gateway with messages and not be limited, but I was also fixing a hole with MpoolPush that was completely ignoring the fact that a push should be "untrusted" in certain circumstances, thereby undoing the whole point of having a trusted/untrusted path split for gateway vs raw access. You can see this fix in chain/messagepool/messagepool.go. I didn't call attention to it in the PR but we had discussed this internally and agreed to ship the fix quietly.

So what you're now bumping in to is the proper, intended limitations of the original code, you just happened to be bypassing it and were being allowed to spam glif with your messages where you probably shouldn't. I think the right way to do this is to use an API key with glif and/or negotiate with @ArseniiPetrovich to get access to a raw managed node or some other kind of un-capped API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Kind: Bug
Projects
Status: 📌 Triage
Development

No branches or pull requests

4 participants