This prevents a nasty race that can happen in a graph with more than one resource. If a resource has someone that it can BackPoke, and then suppose an event comes in. It runs the obj.Event() method (from inside its Watch loop) and then *before* the resulting Process method can run it receives a pause event and pauses. Then the parent resource pauses as well. Finally (it's a race) the Process gets around to running, and decides it needs to BackPoke. At this point since the parent resource is paused, it receives the BackPoke at a time when it can't handle receiving one, and it panics! As a result, we now track the number of running Process possibilities via a WaitGroup which gets incremented from the obj.Event() and we don't finish our pause or exit operations until it has quiesced and our WaitGroup lets us know via Wait(). Lastly in order to prevent repeated replays, we detect when we're quiescing and suspend replaying until post pause. We don't need to save the replay (playback variable) explicitly because its state remains during pause, and on exit it would get re-checked anyways.
mgmt: next generation config management!
Community:
Come join us in the mgmt community!
| Medium | Link | |
|---|---|---|
| IRC | #mgmtconfig on Freenode | |
| @mgmtconfig & #mgmtconfig | ||
| Mailing list | mgmtconfig-list@redhat.com |
Status:
Mgmt is a fairly new project. We're working towards being minimally useful for production environments. We aren't feature complete for what we'd consider a 1.x release yet. With your help you'll be able to influence our design and get us there sooner!
Documentation:
Please read, enjoy and help improve our documentation!
| Documentation | Additional Notes |
|---|---|
| general documentation | for everyone |
| quick start guide | for mgmt developers |
| resource guide | for mgmt developers |
| godoc API reference | for mgmt developers |
| prometheus guide | for everyone |
| puppet guide | for puppet sysadmins |
Questions:
Please ask in the community! If you have a well phrased question that might benefit others, consider asking it by sending a patch to the documentation FAQ section. I'll merge your question, and a patch with the answer!
Roadmap:
Please see: TODO.md for a list of upcoming work and TODO items. Please get involved by working on one of these items or by suggesting something else! Feel free to grab one of the straightforward #mgmtlove issues if you're a first time contributor to the project or if you're unsure about what to hack on!
Bugs:
Please set the DEBUG constant in main.go to true, and post the logs when you report the issue.
Bonus points if you provide a shell or OMV reproducible test case.
Feel free to read my article on debugging golang programs.
Patches:
We'd love to have your patches! Please send them by email, or as a pull request.
On the web:
Happy hacking!
