quorum
标示,让我们上一个测试能够通过。但是为了看到原始的脏读bug,我们不得不再次编辑源码,设置标示为false
。如果我们能从命令行调整该参数,那就太好了。Jepsen提供了一些默认的命令行选项jepsen.cli,但是我们可以通过:opt-spec
给cli/single-test-cmd
添加我们自己的选项。lein run test -q ...
运行我们的测试,我们将在我们的测试map中看到一个新的:quorum
选项。-q
选项,发现该选项是我们提供的,并且添加:quorum true
键值对到选项map中,该选项map会传给etcd-test
,etcd-test
将会merge(合并)
选项map到测试map中。Viola! 我们有了一个:quorum
键在我们的测试中。invoke
函数执行如下:-q
和不携带 -q
参数执行lein run
,然后看看能否再次观察到脏读bug。:quorum
的值是什么。每次jepsen开始运行时,它会被打印在日志中::quorum
这个键,如果选项标志出现在命令行中,则他们只会出现在选项map中;如果他们排除在命令行之外,则他们也排除在选项map外。当我们想要(:quorum test)
时,test
没有:quorum
选项,我们将会得到nil
。etcd-test
中,通过使用(boolean (:quorum test))
,我们可以强迫nil
为false
。或者我们可以强迫在该选项省略时,为该选项通过添加:default false
指定一个默认值。我们将使用boolean
在etcd-test
。以防有人直接调用它,而不是通过CLI。quorum
到一个变量上。我们添加它到测试的名称
上,这将会让人很容易一看就知道哪个测试使用了quorum读。我们也添加它到:quorum
选项上。因为我们合并opts
之前,我们的:quorum
的布尔版本将优先于opts
中的变量。现在,不使用-q
,我们的测试将会再次发现如下错误。~n!
,这儿的n表示并发数。几个crash的进程会使得检查的时间分布在数秒和数天之间。nil
来表明--ops-per-key
没有缩写。每个标志后面的大写首字母(例如:“HZ” & "NUM")是你要传递的值的任意占位符。他们将会作为使用文档的一部分被打印。我们为这两选项都提供了:default
,如果没有通过命令行指定,它的默认值将会被使用。对rates而言,我们希望允许一个整数,浮点数和分数,因此,我们将使用Clojure内置的read-string
函数来解析上述三类。然后我们将校验它是一个正整数,以阻止人们传递字符串,负数,0等。