Support customized logic for FAILPOINTS tasks#72
Open
quark-zju wants to merge 2 commits intotikv:masterfrom
Open
Support customized logic for FAILPOINTS tasks#72quark-zju wants to merge 2 commits intotikv:masterfrom
quark-zju wants to merge 2 commits intotikv:masterfrom
Conversation
For now it makes the environment variable configurable, which might be useful for different applications to use different env var names to avoid conflict. I plan to add more features in the next change. Signed-off-by: Jun Wu <quark@lihdd.net>
Previously, the only way to provide customized (as a Rust function)
failpoint behavior is to use `cfg_callback` API. This change extends
the customization to the FAILPOINTS environment variable. Application
can provide a function to turn a `call(arg)` task in FAILPOINTS to
a "callback". Unlike `cfg_callback`, this integrates with the rest
of FAILPOINTS syntax, for example:
3*call(foo)->2*return->panic
`cfg_callback` does not seem to be able to express `return`.
The use-case that motivates this change is to test race conditions
in multiple processes. I'd like to use 2 primitives:
wait("foo") // wait for "foo".
unblock("foo") // unblock a current or future wait of "foo".
instead of "sleep" to create interesting racy cases deterministically.
Signed-off-by: Jun Wu <quark@lihdd.net>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See also commit messages.
I'd like to add 2 primitives to construct interesting race conditions between processes:
There does not seem to be a generic/portable way to implement them. But with certain assumptions like
$TESTING_TEMPis a directory that can be freely written to for communication, it is possible to implement above feature. This PR adds a way so applications can implement their needs and get the logic exposed via theFAILPOINTSenvironment variable.Side note:
It almost seems that there are 2 different use-cases of
fail:cfg,cfg_callbackwithout using theFAILPOINTSenvironment at all. Different test cases have different failpoint configurationsFAILPOINTSis probably used exclusively, since thecfgapproach would require compiling the executable to O(test case) different ones, which does not make much sense.The "callback" flexibility seems exclusive to library testing. This change closes the gap so application testing can get similar flexibility.