Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Commits on Dec 19, 2012
@jlouis Bump safetyvalve to version 1.0.0.
This is the first version of safetyvalve.
@jlouis Bump README. 85a1691
Commits on Dec 20, 2012
@jlouis Use a stable lager tag for now. 48d9338
@jlouis Update MANIFESTO a0ab36d
@jlouis Bump version. 9287185
Commits on Dec 23, 2012
@jlouis Merge branch 'correct-call'
Commits on Dec 25, 2012
@jlouis Extract dropped packets from FQ-codel. f1a275b
@jlouis Introduce code to run the CoDel queue base.
This eqc test will just run the queue aggressively in order to test that
it really works like it was intended for it to work. This makes sure there
are no ways by which we can force the queue to crash.

In other words, we just proved a termination property.
@jlouis Introduce a TODO list. dc3d70b
@jlouis New Property: empty_q_no_drop. cf96286
@jlouis New rule.
If a queue is empty, then first_above_time is set to 0.
@jlouis Generalize test model more and enable correct dequeueing.
Begin adding more properties in there for the CoDel code.
@jlouis Documentation. cf95321
@jlouis Bump time advancement. 6d7fbcf
@jlouis Generalize over target and interval. e262967
@jlouis Classify observations. 0956e0d
@jlouis Reset frequencies to something a bit more standard. e0e1add
@jlouis Start a bit higher up in time. 0 is a kind of special case. f99960e
@jlouis Add a USING document. 647a73b
@jlouis Fix a documentation bug found by @nox (Anthony Ramine) 40056b9
@jlouis More documentation notes. c441bab
@jlouis Simplify dodequeue by splitting into two functions. d49aa85
@jlouis New CoDel implementation. The old one had trouble. 35ac54e
@jlouis Reflect API changes in the code base. 6ba0b0c
@jlouis Add a new class for when dropping starts. 977942b
@jlouis Document the CoDel classifier. 1b11c71
@jlouis Bump TODO. 10fc9ef
@jlouis Fix EQC test so it runs. f1cb8fd
@jlouis Improve packet code. 25505ea
@jlouis Improve model generation.
Define a better way to SHRINK the model upon encountering an error.
@jlouis Integrate CoDel support. 288f32b
@jlouis Bump version yet again. 1ccdac5
@jlouis Update TODO list. f40cc99
@jlouis Interesting paper to read from Fred Hebert. 378a72a
@jlouis Modularize the queue type. 675d1bb
@jlouis Bump version. dc198a9
@jlouis Document `sv_codel`. b7b26c8
@jlouis Add tracing routines. 282bcba
@jlouis Enable Trace measurements in tests. bf74541
@jlouis Carry out a benchmark. b398de6
Commits on Dec 26, 2012
@jlouis Fix EQC model so it works again. 61704eb
@jlouis Clean up after having run CoDel test cases.
Otherwise, we run out of ETS tables pretty quickly!
Commits on Dec 28, 2012
@jlouis Benchmarks and analysis through web servers. 21df1bb
@jlouis Add optional parameters to CoDel. 70e15bc
@jlouis Bump to version 2.2.0. 2ca5f14
@jlouis Bump TODO. 7d3466e
Commits on Dec 29, 2012
@jlouis Update the document. d8703a6
@jlouis Fix HTTP return value in test case.
It is 200 OK, not 202 OK :)
Commits on Feb 03, 2013
@jlouis Get rid of the cowboy dependency. 401bf8f
Commits on Sep 23, 2013
@jlouis Make CT tests run correctly and update the manifesto. 41a7d48
@jlouis Use lager 2.x.x over 1.x.x 8049dfc
@jlouis Use in this project. 2d1f98c
@jlouis Add missing modules section to .app.src 7ae1c21
@jlouis Add some compilation options to build. 8077315
Commits on Sep 24, 2013
@jlouis Implement `ask/2` and `done/3`. Also - document. 67ebe4e
Commits on Mar 26, 2014
@jlouis Bump lager to a version which works with Release 17. 7a6df4f
@jlouis Bump 46f5bf9
Commits on Mar 27, 2014
@bosky101 bosky101 corrected the example config. was missing `[` and `]` 71271dc
@jlouis Merge pull request #3 from bosky101/docs
fixed small typo in
Commits on Apr 10, 2014
@jlouis Update the rebar configuration for Release 17.0 339c25a
Commits on Dec 25, 2014
@jlouis Welcome safetyvalve to release 17.x 495b681
Commits on Feb 24, 2015
@jlouis Introduce a new version of the queue test code. debe9a5
Commits on Feb 27, 2015
@jlouis Fix an initialization error. e1f4bce
Commits on Feb 28, 2015
@jlouis Introduce the 'svq' test. 992802d
@jlouis Allow the code to run more advanced configurations. 260e8a4
@jlouis Introduce a common postcondition for the system. e66f8ca
@jlouis Update the description. bf5c2d0
Commits on Mar 01, 2015
@jlouis Introduce the replenish command.
Add a rate to the model. Replenish is simple, because we just compute how
many processes are woken up and then proceed to unblock them one-by-one in
the system. This moves the state forward as expected and we obtain the ability
to carry out token replenishment.
@jlouis Factor out the await of getting to run a task. 1086932
Commits on Mar 06, 2015
@jlouis Handle killing work randomly.
Use exit/2 to kill the Pid which is doing work and then update the task runner to handle this correctly.
@jlouis Formatting run. d0525ce
@jlouis Hoist a common prefix out of a case.
I think this is easier to read for the next reader and it is also easier to manipulate
later on, so lets do it this way instead.
@jlouis Documentation run. 2431194
@jlouis QuickCheck-CI driver. 4ea904d
@jlouis Path correction for EQC-CI. 0466205
@jlouis Improve the Chaos Monkey™ kill jobs in the asking state.
This branch is an attempt at identifying Issue #1. We arrange it such that we
can kill jobs which are currently 'asking' for the ability to run. This leads to
severe inconsistency between the model and the underlying implementation.

The right solution is really a question of semantics, and we don't a priori know
what the right course of action happens to be.
Commits on Mar 08, 2015
@jlouis Change the internal working representation from a gb_set into ETS.
A couple of reasons why we want an ETS table for tracking information about
who are currently working:

* It is much faster
* It acts well, even if we end up loading the system with many workers
* It allows us to store a process for its whole total lifetime of interaction with our system. This is necessary in the long run for this project.
@jlouis Track currently working tasks separately from the ETS table.
This change refactors the code such that the number of currently working
tasks are handled by a separate counter. In the future, this allows us to store
references of other kinds in the task table, which is sorely needed.
@jlouis Add support for removing elements from the queue. 726a9c1
@jlouis Change reference tracking to work over the lifetime of an interaction.
We now set a monitor for any process we work with. This should allow
us to make the case for the case where we lose a process while it is
queued in the system.
@jlouis Merge branch 'kill-asking-fix' into etsing-worker-table 07e50f2
@jlouis Two simple typos fixed: found by quickcheck.
queued → queueing
QT:delete/3 → QT:remove/3
@jlouis Fix Issue #1
Uses the new ETS tracking table to track and monitor all processes, also while queuing. Correctly remove processes that are killed during queueing. Also update the QuickCheck model with a new kind of process kill.
@jlouis Simplify the ChangeLog
There is no reason to write X → Y when it is always a linear transition.
Commits on Apr 08, 2015
@lrascao lrascao Support dinamically created queues
introduce sv:new/2, new/1 methods that allow dynamic
creation of named or anomymous queues, each with a
separate configuration
Commits on May 14, 2015
@essen essen Make compatible as a dep for
Default target should build the project without requiring to have EQC installed.
@jlouis Merge pull request #7 from essen/patch-1
Make compatible as a dep for
@jlouis Merge pull request #6 from lrascao/feature/support_dynamic_queues
Support dinamically created queues
@jlouis Add a time compatibility layer. 4feaf61
@jlouis Add a helper target for rebar3. c804458
@jlouis Default to use rebar3 as the compilation target. 682e676
@jlouis Fix Issue #5 — Force ETS state tracking.
In the new code, we can survive the death of a queued process, because we
track all processes in the system, also the ones which are currently queued.
However, the code did not account for the case where a process gets monitored
but is immediately rejected because the queue is full. This means that the
invariant of monitor → table entry was broken. The fix is to correctly
monitor/demonitor based on the table state.
@jlouis Adapt the code base to R18+ Time API.
Timestamps now force the use of a unique integer. While far from
perfect, it obeys the old rules of the queues and thus it works the
same way as before. The speed is exactly as slow as before, by relying
on something like erlang:now().

While here, go through all the CoDel code and fix up the code base.
@jlouis Revive the CT test suite, make sure all tests pass. 0de5cbd
@jlouis Spawn a process to run the command for enqueuing while full.
The problem is that if we have a non-blocking call, it is run on the "main" process
of EQC. Thus, the process is never terminated, and as a result, we don't capture
the problem where a spurious 'DOWN' message comes into the SUT. Add a test
case where the call is run on it's own process to plug this hole.
@jlouis Bump the version to 2.5.0. ebb1e1f
Commits on May 15, 2015
@jlouis Adapt the Codel test case. 4e86c81
Commits on Jun 09, 2015
@jlouis Fix lager URI to be https:// over git:// bea8b13