{"id":15914130,"url":"https://github.com/bbengfort/honu","last_synced_at":"2025-10-13T21:04:07.599Z","repository":{"id":69222738,"uuid":"89018952","full_name":"bbengfort/honu","owner":"bbengfort","description":"Anti-entropy replicated in-memory key/value store.","archived":false,"fork":false,"pushed_at":"2018-03-16T02:30:48.000Z","size":69580,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-03T03:28:45.316Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbengfort.png","metadata":{"files":{"readme":"README.md","changelog":"history.go","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-21T19:55:05.000Z","updated_at":"2020-10-07T10:12:38.000Z","dependencies_parsed_at":"2023-04-20T19:07:22.456Z","dependency_job_id":null,"html_url":"https://github.com/bbengfort/honu","commit_stats":{"total_commits":55,"total_committers":2,"mean_commits":27.5,"dds":"0.018181818181818188","last_synced_commit":"3bfbf6a1959ec60a1e120a287f84996fa333757c"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/bbengfort/honu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Fhonu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Fhonu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Fhonu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Fhonu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbengfort","download_url":"https://codeload.github.com/bbengfort/honu/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbengfort%2Fhonu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017015,"owners_count":26085949,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-06T17:01:18.713Z","updated_at":"2025-10-13T21:04:07.563Z","avatar_url":"https://github.com/bbengfort.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Honu\n\n**Throughput testing for a simple, volatile, in-memory key/value store.**\n\n## Modes\n\nCurrently Honu can implement different modes of operation for a variety of experimental circumstances. The current dimensions are as follows:\n\n**Consistency**\n\n- linearizable: the entire store is locked on writes and read-locked on reads\n- sequential: only the object for the specified keys is locked on accesses\n\n**Replication**\n\n- standalone: no replication, the server exists in isolation\n- anti-entropy: full replication of objects using bilateral anti-entropy\n\n## Getting Started\n\nFirst, fetch the code and install it:\n\n    $ go get github.com/bbengfort/honu/...\n\nYou should now have `honu` on your `$PATH`:\n\n    $ honu --help\n\n### Servers\n\nYou can run a server as follows:\n\n    $ honu serve\n\nWhich by default will run on `:3264`, you can specify a different address with the `-a`, `--addr` flag or the `$HONU_SERVER_ADDR` environment variable.\n\nThe default consistency mode for a server is linearizable, this means that the  entire store is read locked to Get a value and write locked to Put a value. All versions have a single monotonically increasing version number and accesses between objects are totally ordered.\n\n\u003e NOTE: linearizable here is only with respect to the local replica. Forks can still occur if concurrent accesses happen before replication.\n\nIn order to switch to sequential mode (each object is accessed independently with respect to key), specify the `-r`, `--relax` or set the `$HONU_SEQUENTIAL_CONSISTENCY` environment variable to true.\n\n### Clients and Throughput\n\nClients can be run as follows:\n\n    $ honu put -k foo -v bar\n    $ honu get -k foo\n\nBy default, the client will connect to a local server or the one specified by the `$HONU_SERVER_ADDR`; to specify a different address to connect to, use the `-a`, `--addr` flag.\n\nThe throughput experiment can be run for a specified duration as follows:\n\n    $ honu run -d 30s -k foo\n\nThis will test how many writes to the server can occur within 30 seconds.\n\n### Version History\n\nThe server can be quit using `CTRL+C`, it will perform any clean up required and shutdown. If you would like to dump a version log from the server on shutdown, run the server with the `-o`, `--objects` option:\n\n    $ honu server --objects path/to/version.log\n\nThis will write out the view of the replica; that is the version history that the replica has seen to a JSON file locally. Note that the version history is the chain or tree of versions that have been applied to objects, not the actual values!\n\n### Replication\n\nFor replication, servers need to know their peers. This can be specified with a comma delimited list using the `-p`, `--peers` flag, or using the `$HONU_PEERS` environment variable. Replication is the default mode, but will not occur if there are no peers (e.g. an empty string) or if the `-s`, `--standalone` flag is set (alternatively the `$HONU_STANDALONE_MODE` environment variable is set to true).\n\nReplication is currently implemented by bilateral anti-entropy. Specify the anti-entropy delay with the `-d`, `--delay` flag or the `$HONU_ANTI_ENTROPY_DELAY` environment variable. This value must be a parseable duration, the default is `1s`.\n\n## Configuration\n\nYou can create a .env file in the local directory that you're running honu from (or export environment variables) with the following configuration:\n\n```\n# Replica Configuration\nHONU_PROCESS_ID=1\nHONU_SERVER_ADDR=:3264\nHONU_PEERS=\"\"\nHONU_STANDALONE_MODE=false\nHONU_ANTI_ENTROPY_DELAY=1s\nHONU_BANDIT_STRATEGY=uniform\nHONU_SEQUENTIAL_CONSISTENCY=false\nHONU_RANDOM_SEED=42\n\n# Client and Experiment Configuration\nHONU_LOCAL_KEY=foo\nHONU_RUN_DURATION=30s\nHONU_RUN_DISABLED=false\n```\n\nHopefully this will help run experiments without typing in tons of arguments at the command line.\n\n## Experiments and Results\n\nFor more, see [experiments and fixtures](fixtures/README.md), which contains detailed listings of the various results and methods that employ Honu.\n\nTo run the anti-entropy reinforcement learning experiments:\n\n```\n$ cd fixtures/aerl\n```\n\nThis directory contains the `fabfile.py` that runs the various ssh commands against the UMD replica servers. Install fabric with pip:\n\n```\n$ pip2 install fabric\n```\n\nWrite go code to change the behavior of the system, then push it to Github. To update the code on the servers:\n\n```\n$ fab update\n```\n\nMake sure you're in the same working directory as the `fabfile.py`. To clean up previous results:\n\n```\n$ fab cleanup\n```\n\nAnd finally, to run clients with the specified configuration:\n\n```\n$ fab bench\n```\n\nNote that the configuration is found in `config.json` that declares the setup for each of the hosts.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbengfort%2Fhonu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbengfort%2Fhonu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbengfort%2Fhonu/lists"}