{ "info": { "author": "Peter Scopes", "author_email": "peter.scopes@nccgroup.trust", "bugtrack_url": null, "classifiers": [ "Operating System :: OS Independent", "Programming Language :: Python :: 2.7" ], "description": "PyRaftLog\n=========\n``pyraftlog`` is a RAFT consensus algorithm implementation that provides direct access to the consensus log.\n\nConsensus Nodes can be instantiated into defined mode, but can also have its mode changed via an RPC.\nThere are three modes a node can be in:\n\nActive\n A fully-fledged consensus node which will attempt to take leadership of the cluster if a leadership\n timeout is reached.\n\nReluctant\n A consensus node which will reluctantly take leadership of the cluster while there is no eligible\n candidate. As soon as there is an eligible active node a reluctant node will rescind its leadership.\n\nPassive\n A consensus node which that will respond to all vote requests but will never convert itself to a\n candidate. This mode can be useful in testing or development environments but shouldn't be used\n in production.\n\nConsensus Nodes can enable log reduction, this can be useful in certain situations where a complete history\nof actions is not required or would take considerable storage to retain. If ``log_reduction`` is set to\n``True`` in the ``state`` then the cluster will automatically reduce the log to the most recent\n``last_applied`` index that is shared across the cluster. Have log reduction set to ``True`` would make\nit difficult to add additional nodes to the cluster.\n\nMock Server\n-----------\nThere is a mock server that can be run by calling ``pyraftlog-mock``::\n\n usage: pyraftlog-mock [-h] [-t {active,reluctant,passive}] -n NODE -b\n NEIGHBOURS [NEIGHBOURS ...] [-p PORT] [-r]\n [-l {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [-f FILE]\n\n Run a mock localhost pyraftlog server\n\n optional arguments:\n -h, --help show this help message and exit\n -t {active,reluctant,passive}, --type {active,reluctant,passive}\n Type of the node\n -n NODE, --node NODE (host:)?port of this node. e.g. 7001 or node:7001\n -b NEIGHBOURS [NEIGHBOURS ...], --neighbours NEIGHBOURS [NEIGHBOURS ...]\n Port(s) of neighbour\n -p PORT, --port PORT Port for receiving commands\n -r, --log-reduction Set log reduction to True\n -l {DEBUG,INFO,WARNING,ERROR,CRITICAL}, --log-level {DEBUG,INFO,WARNING,ERROR,CRITICAL}\n Logging level\n -f FILE, --file FILE Storage filename\n\nCreate SSL certs (for mock)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThe following set of commands (performed in ``./certs/``) will create a set a CA and device certificate for running the mock cluster on localhost::\n\n # Only do once: generate the root CA key:\n > openssl genrsa -out transport-ca.key 4096\n\n # Generate the root CA certificate:\n ## Country Name (2 letter code) []:GB\n ## State or Province Name (full name) []:.\n ## Locality Name (eg, city) []:.\n ## Organization Name (eg, company) []:.\n ## Organizational Unit Name (eg, section) []:.\n ## Common Name (eg, fully qualified host name) []:PyRaftLog\n ## Email Address []:.\n > openssl req -x509 -new -nodes -key transport-ca.key -sha256 -days 1024 -out transport-ca.pem\n\n # Generate device certificates\n # Only do once: generate device key:\n > openssl genrsa -out transport-consensus.key 4096\n\n # Generate device certificate signing request:\n ## Country Name (2 letter code) []:GB\n ## State or Province Name (full name) []:.\n ## Locality Name (eg, city) []:.\n ## Organization Name (eg, company) []:.\n ## Organizational Unit Name (eg, section) []:.\n ## Common Name (eg, fully qualified host name) []:localhost\n ## Email Address []:.\n > openssl req -new -key transport-consensus.key -out transport-consensus.csr\n\n # Generate a signed device certificate:\n > openssl x509 -req -in transport-consensus.csr -CA transport-ca.pem -CAkey transport-ca.key -CAcreateserial -out transport-consensus.crt -days 500 -sha256\n\n\n\nAlso See\n--------\n- `Raft Github`_\n- `Raft Paper`_\n- `Raft Thesis`_\n- `Raft lecture`_ (Raft user study)\n- `Raft Optimisations`_\n\n.. _Raft Github: https://raft.github.io/\n.. _Raft Paper: https://raft.github.io/raft.pdf\n.. _Raft Thesis: https://ramcloud.stanford.edu/~ongaro/thesis.pdf\n.. _Raft lecture: https://www.youtube.com/watch?v=YbZ3zDzDnrw\n.. _Raft Optimisations: https://www.cl.cam.ac.uk/~ms705/pub/papers/2015-osr-raft.pdf\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "Copyright 2018 NCC", "maintainer": "", "maintainer_email": "", "name": "pyraftlog", "package_url": "https://pypi.org/project/pyraftlog/", "platform": "", "project_url": "https://pypi.org/project/pyraftlog/", "project_urls": null, "release_url": "https://pypi.org/project/pyraftlog/2.0.2/", "requires_dist": [ "msgpack (>=0.6.1)", "redis (>=3.0.0)" ], "requires_python": "", "summary": "Pure Python implementation of the RAFT concencous algorithm", "version": "2.0.2" }, "last_serial": 5356530, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "6e5ed47952ebcdb19f24bf41e7697251", "sha256": "a5380ab52e46bc66823f22581089d5d31fe58153fe5bcdfeaa7955a035a07df6" }, "downloads": -1, "filename": "pyraftlog-1.0.0.tar.gz", "has_sig": false, "md5_digest": "6e5ed47952ebcdb19f24bf41e7697251", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13446, "upload_time": "2018-08-17T09:14:19", "url": "https://files.pythonhosted.org/packages/76/7a/844823b9cae2227b39807a65f28c675662e2a19d29e91bbd293418ab2e90/pyraftlog-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "56a8ff458830b788c62762c908c75537", "sha256": "abf5b2970e234a6ee0a4e8213c97fd2cb5a6449e8af1ae51072240b84525810b" }, "downloads": -1, "filename": "pyraftlog-1.0.1.tar.gz", "has_sig": false, "md5_digest": "56a8ff458830b788c62762c908c75537", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13426, "upload_time": "2018-08-17T14:53:46", "url": "https://files.pythonhosted.org/packages/f7/75/7f98f2d1bd0fb597ac2dce58a392b6884bb7738fa25e1a380d889609cc50/pyraftlog-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "2646b16c7a5439a8da66c24fb7b56f67", "sha256": "f186e9604188e74c4f6aa6be94f9f3b60a40b652a962ddbfca1e348d256f8610" }, "downloads": -1, "filename": "pyraftlog-1.1.0.tar.gz", "has_sig": false, "md5_digest": "2646b16c7a5439a8da66c24fb7b56f67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18344, "upload_time": "2018-09-04T14:26:32", "url": "https://files.pythonhosted.org/packages/a9/09/bc0a5b4eb43dbdaa6b5e9be2cb016616b3fe899fa8c4f5cff0c18433f206/pyraftlog-1.1.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "90a4284adc754b1b002fd9805ca5b4f3", "sha256": "dad6dcc8a2d6071d83dac19cb2fb87dc285498ddde3b3b3b3174f3d13f60f2a0" }, "downloads": -1, "filename": "pyraftlog-2.0.0.tar.gz", "has_sig": false, "md5_digest": "90a4284adc754b1b002fd9805ca5b4f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22222, "upload_time": "2018-11-27T15:20:35", "url": "https://files.pythonhosted.org/packages/fd/4c/125d239e41086bd417ad28553be5d46f433f9caa5f3b6dc8e54b6217ca63/pyraftlog-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "a773b7410658e7a22cffe28428f78842", "sha256": "bf255cf566d3138614e8f38e214432098d403656d575b2f9dc4ed89844b15e64" }, "downloads": -1, "filename": "pyraftlog-2.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "a773b7410658e7a22cffe28428f78842", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 30348, "upload_time": "2019-04-17T13:30:56", "url": "https://files.pythonhosted.org/packages/95/fc/004b962ab818cd0e975811604778b8943c1a4bc40c1eaef5930b9ff4b2d2/pyraftlog-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44fd46340019fe926f9cce68153f4d97", "sha256": "575f76751116325bbd5997a99963edd3f7675c6bcd7ef8f5bd288199414d60e6" }, "downloads": -1, "filename": "pyraftlog-2.0.1.tar.gz", "has_sig": false, "md5_digest": "44fd46340019fe926f9cce68153f4d97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26044, "upload_time": "2019-04-17T13:30:18", "url": "https://files.pythonhosted.org/packages/70/97/8dcb93bf91de59ec9de3cb7d8e41ee77d2d639d183f14e2210d7df0373c0/pyraftlog-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "66358c33a531bfafb6f2f9ae2b3cb210", "sha256": "aaf82e6aaf8d95e127084a97b3d6c3a1b2fe215d74f78a90fdf7795c2b9777fb" }, "downloads": -1, "filename": "pyraftlog-2.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "66358c33a531bfafb6f2f9ae2b3cb210", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 32760, "upload_time": "2019-06-04T09:33:58", "url": "https://files.pythonhosted.org/packages/0b/78/dd1919a7c04c18b740de5940b96bd2b4bf69ee866820304602c63abb03c5/pyraftlog-2.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04a5c9883b151063506addc75f3d271e", "sha256": "3122da186114d7e15df20418bb700301fde802f9dd75457ceaf38e154de4e874" }, "downloads": -1, "filename": "pyraftlog-2.0.2.tar.gz", "has_sig": false, "md5_digest": "04a5c9883b151063506addc75f3d271e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28327, "upload_time": "2019-06-04T09:43:22", "url": "https://files.pythonhosted.org/packages/2b/9a/19e6f42a07738283eb6261b946fe69aa2281ea81868d2bea1ba69934ed49/pyraftlog-2.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "66358c33a531bfafb6f2f9ae2b3cb210", "sha256": "aaf82e6aaf8d95e127084a97b3d6c3a1b2fe215d74f78a90fdf7795c2b9777fb" }, "downloads": -1, "filename": "pyraftlog-2.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "66358c33a531bfafb6f2f9ae2b3cb210", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 32760, "upload_time": "2019-06-04T09:33:58", "url": "https://files.pythonhosted.org/packages/0b/78/dd1919a7c04c18b740de5940b96bd2b4bf69ee866820304602c63abb03c5/pyraftlog-2.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04a5c9883b151063506addc75f3d271e", "sha256": "3122da186114d7e15df20418bb700301fde802f9dd75457ceaf38e154de4e874" }, "downloads": -1, "filename": "pyraftlog-2.0.2.tar.gz", "has_sig": false, "md5_digest": "04a5c9883b151063506addc75f3d271e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28327, "upload_time": "2019-06-04T09:43:22", "url": "https://files.pythonhosted.org/packages/2b/9a/19e6f42a07738283eb6261b946fe69aa2281ea81868d2bea1ba69934ed49/pyraftlog-2.0.2.tar.gz" } ] }