Multisend
My attempt to make #6638 yielding. Much of the points here have been discussed there, most importantly to me @rickard-green 's comment. I've added here two tests, for the regular as well as the TLS distribution, but I've implemented yielding only on the easy case for now and resorted to the original non-yielding code on the hard pure C case (for now). I've also recovered the commits from @devsnek, in order to keep the history of attempts transparent for anyone else that wants to learn about how this was tried, but that is easy to squash. I've also removed commits updating preloaded modules, those need to be updated in order to run tests.
Now, I'm relatively confident tests are decent, but C code, I haven't done any serious C programming in way too long so for now I'm only incredibly happy it stopped crashing 😄 as the old adage says, make it work, then make it beautiful... ok, I think it works, but now all opinions are more than welcome on how to make this beautiful 😄
TODO:
- [ ] Implement yielding as in point 2 of Rickard's comment..
- [ ] Documentation
CT Test Results
No tests were run for this PR. This is either because the build failed, or the PR is based on a branch without GH actions tests configured.
Results for commit 642f3b985d63e7e68d3ee9d450ed8a5d667ea9d4
To speed up review, make sure that you have read Contributing to Erlang/OTP and that all checks pass.
See the TESTING and DEVELOPMENT HowTo guides for details about how to run test locally.
Artifacts
- Complete CT logs (Download Logs)
- No HTML docs found
- No Windows Installer found
// Erlang/OTP Github Action Bot
Hi there 👋🏽 I was out for some holidays, but now I'm back and I'll be finding time for this again 🙂
Question, in case somebody knows, I'm having a failure at https://github.com/erlang/otp/blob/81fc1bc0a378b7f612415eb8904700b70afc83ce/erts/emulator/test/distribution_SUITE.erl#L3831, it's returning failed_nc_refc_check in particular. Anybody knows what does that mean? 🤔
Edit, I found it has something to do with this: https://github.com/erlang/otp/blob/81fc1bc0a378b7f612415eb8904700b70afc83ce/erts/emulator/beam/erl_node_container_utils.h, now trying to study this new part of the codebase.
I've pushed the code that I have that passes the multisend operation "most of the times" for the regular TCP distribution 😅 I'm having two issues, one is the failed_nc_refc_check mentioned before, the other is that sometimes the multisend doesn't complete, when the payload is too small. I'm a bit stuck with these two things so pushing the code in case anyone can see some good hints for me on what am I missing, any help is very much welcome, I'll keep researching this in the meantime 🙂
Is it possible to support multisend on the same server before handling the more complex distributed multisend? How can I benchmark multisend and compare it to normal send? My use case is a chat server where the char room pid is sending a chat message to websocket pids of all users.
Any progress on it?