Michael Han created ZOOKEEPER-3948:
--------------------------------------

             Summary: Introduce a deterministic runtime behavior injection 
framework for ZooKeeperServer testing
                 Key: ZOOKEEPER-3948
                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-3948
             Project: ZooKeeper
          Issue Type: New Feature
          Components: server, tests
            Reporter: Michael Han
            Assignee: Michael Han


We'd like to understand how applications built on top of ZooKeeper behave under 
various faulty conditions, which is important to build resilient end to end 
solutions and avoid ZooKeeper being single point of failure. We'd also like to 
achieve this in both unit tests (in process) and integration tests (in and out 
of process). Traditional methods of using external fault injection mechanisms 
are non deterministic and requires non trivial set up and hard to integrate 
with unit tests, so here we introduce the ZooKeeperController service which 
solves both.

The basic idea here is to create a controllable ZooKeeperServer which accepts 
various control commands (such as - delay request, drop request, eat request, 
expire session, shutdown, trigger leader election, and so on), and reacting 
based on incoming commands. The controllable server and production server share 
the same underlying machineries (quorum peers, ZooKeeper server, etc) but code 
paths are separate, thus this feature has no production impact.

This controller system is currently composed of following pieces:

* CommandClient: a convenient HTTP client to send control commands to 
controller service.
* CommandListener: an embed HTTP server listening incoming commands and 
dispatch to controller service.
* Controller Service: the service that's responsible to create controllable ZK 
server and the controller.
* ZooKeeperServerController: the controller that changes the behavior of ZK 
server runtime.
* Controllable Cnx / Factory: controllable connection that accept behavior 
change requests.

In future more control commands and controllable components can be added on top 
of this framework.

This can be used in either unit tests / integration tests as an in process 
embedded controllable ZooKeeper server, or as an out of process stand alone 
controllable ZooKeeper process.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to