)]}'
{"tooz/coordination.py":[{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"8081e974d78e425bb4e3cc5c66294ea49d3e3b03","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"da85f559_aa333eaa","line":38,"updated":"2015-11-10 20:57:33.000000000","message":"Please let\u0027s be more specific for supported consistency models. The \"C\" is not a binary :)\n\nFor example, these modes https://aphyr.com/posts/313-strong-consistency-models","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"d745fa22e3faa7a64b04963375cfebef67ebe0bc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_fb52cadc","line":38,"in_reply_to":"ba8a016a_33816b4b","updated":"2015-11-17 07:21:40.000000000","message":"Agreed to the first 2 statements, the last one I\u0027ll have to think more about :)","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"5a33fe3587b4ac35ef6f687cd86a27a6936c473b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_b9437c12","line":38,"in_reply_to":"ba8a016a_33816b4b","updated":"2015-11-18 23:26:35.000000000","message":"No idea, the NWR doesn\u0027t seem so easily explainable (although I think I get it) so I\u0027m more in favor of your other constants, will update to use those.\n\nPulling in a model like NWR and expecting people to understand it doesn\u0027t seem like it will happen IMHO...","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"f846b3ea3d6e669190621e048e986653f1ffbc3a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_33816b4b","line":38,"in_reply_to":"ba8a016a_452c88ab","updated":"2015-11-16 21:53:46.000000000","message":"@Joshua, after reading [0], I believe we could better go from the \"server side\" NWR model, but plus H (max number of a read lock holders) and plus S (sticky sessions, which is nothing more than A/P or A/A mode perhaps)\n\n[0] http://www.allthingsdistributed.com/2008/12/eventually_consistent.html\n\nThis also resembles a token passing protocol described in the \"Paradigms for process interaction in distributed programs\" (Andrews, 1991) [1]\n\n[1] http://liacs.leidenuniv.nl/~bonsanguemm/SAPapers/And91.pdf\n\nunder which only a single token (R\u003d1) is required for a reading lock but all W\u003d(1\u003c\u003dX\u003c\u003dN) tokens must be obtained prior to a write lock acquisition.\n\nAnd few example subcases:\n\nW\u003dmin(1\u003c\u003dX\u003c\u003dN, floor(N/2+1)) \u0026\u0026 W+R\u003eN \u0026\u0026 H\u003d1 \u0026\u0026 S\u003d1 (A/P) - strong consistensy model with quorum, e.g. redis redlock [2]\n\n[2] http://redis.io/topics/distlock\n\n8.1: W\u003d(1\u003c\u003dX\u003cfloor(N/2+1)) \u0026\u0026 W+R\u003eN \u0026\u0026 H\u003d1 \u0026\u0026 S\u003d1 (A/P) - strong consistent without split brain handling\n\nSo, should we stick to that NWR\u0026HS model?..","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"0ceae095c8c85690105f0d68e4199c66e236d9ef","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"da85f559_f6945f37","line":38,"in_reply_to":"da85f559_aa333eaa","updated":"2015-11-12 18:49:56.000000000","message":"So what would u recommend this enum be? I was trying to go with something that wouldn\u0027t create 5+ new enumerations, and that would just confusee people more...","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"6589e8ce20e68c365f86ba04e6afda30ef2963b8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba8a016a_452c88ab","line":38,"in_reply_to":"da85f559_bd3518f8","updated":"2015-11-16 11:38:16.000000000","message":"If we want it binary, use like SERIALIZABLE_UNDER_PARTITIONS \u003d true or false\nor LINEARIZABLE_UNDER_PARTITIONS \u003d true or false. So we could still keep it simple assuming different degrees of consistency models, hence locks safety as well... Makes sense?","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"07ec9c926d06ebe615f569d48875301454b520ce","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"da85f559_e41c6d6c","line":38,"in_reply_to":"da85f559_d7027472","updated":"2015-11-13 18:10:45.000000000","message":"So same question ;)\n\nWhat would u recommend this enum be?\n\nI\u0027m not trying to be mean, just trying to figure out what u think the values should be so that we can include those values here...","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"93fee3c8f1bd9174950b6a2716953c8eb28a5c60","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"da85f559_bd3518f8","line":38,"in_reply_to":"da85f559_e41c6d6c","updated":"2015-11-13 20:00:43.000000000","message":"LINEARIZABLE (each operation must take place before its completion time, and any operation invoked subsequently must take place after the invocation–and by extension, after the original operation itself)\n\nSEQUENTIAL (operations can take effect before invocation, or after completion–but retain the constraint that operations from any given process must take place in that process\u0027 order)\n\nCAUSAL (don’t have to enforce the order of every operation from a process. Perhaps, only causally related operations must occur in order)\n\nSERIALIZABLE (the history of operations is equivalent to one that took place in some single atomic order but with unknown invocation and completion times -  it places no bounds on time or order)\n\n\nso, any set of those ^^\n\nI believe we don\u0027t need anything with lower consistency than serializable.","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"32a35701bfea31ccd2850b29ca3dc56cd65db901","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    #: Whether the driver primitives work in a distributed manner."},{"line_number":36,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    CONSISTENT_UNDER_PARTITIONS \u003d \u0027CONSISTENT_UNDER_PARTITIONS\u0027"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    Whether the driver uses some published consensus algorithm (such"},{"line_number":41,"context_line":"    as raft, or paxos, or zab) to ensure consistency (typically"}],"source_content_type":"text/x-python","patch_set":8,"id":"da85f559_d7027472","line":38,"in_reply_to":"da85f559_f6945f37","updated":"2015-11-12 20:17:12.000000000","message":"As any driver would likely based on paxos or raft and would provide its own distributed consensus for \"replicas\", I see no options but to stick with standard metrics of how well replicas serialize requests...\n\nThis would as well give us a non-direct measure of locks safety.\nMakes sense?\n\nThat is why I believe the link above still applies here. So let\u0027s just pick two or three serializability levels we want to make sure drivers would guarantee?","commit_id":"8f7351d341de5f191e6fe726794ed9993a229d4f"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"73dd10e6e3be2ae24c157174d74fa88ed2428576","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_f009792d","line":49,"updated":"2015-11-25 12:48:30.000000000","message":"It seems we should add two more UNDER-like dimensions for every of the consistency claims.\n\nThe one is *_SINGLE_CLIENT_ONLY. Sometimes the claims differs for a single client and across many. See https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#ch_zkGuarantees for example.\n\nThe second one is *_WITH_STICKY_SESSIONS_ONLY.\nFor example, transactions isolation claims of galera cluster work well for only \"single write point\", hence the sticky sessions could only guarantee the given claim.\n\nThese should give developers the clear view of design patterns to use for a particular backend. It is vital to have them clearly specified, IMO","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"587a78bff007f02a54bc6a71d7664edcede3500a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"7a740942_928727b4","line":49,"in_reply_to":"9a8ffd7b_0b4923b7","updated":"2015-12-09 09:08:29.000000000","message":"That was only an example to show how difficult is sometimes to understand the \"single client\" vs \"cross-client\" cases. And my point is that each consistency model should be clearly contracted regarding single/cross client mode support","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"1c5171bf05c6ae74a71c8355ec567043ed033511","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_d31b1f1b","line":49,"in_reply_to":"9a8ffd7b_94860664","updated":"2015-12-01 14:53:09.000000000","message":"after reading zookeeper mail lists, I decided the cross-clients misunderstanding may be a *major* issue for developers. I believe it is a critical thing to understand for all sides and clearly define related claims. Although I agree with you on the 2nd part, for the sticky sessions based classification.","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"a0e3740984c7422ce648b1eeeb3903239be61156","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_ffcfcf53","line":49,"in_reply_to":"9a8ffd7b_98bfe2fb","updated":"2015-12-02 11:28:29.000000000","message":"I just used this http://search-hadoop.com/zookeeper?q\u003dcross-client and -to me as a side watcher- it was UX like neither app devs nor zookeeper devs sometimes may not clearly see this cross-client use cases in practical tasks:, like this http://search-hadoop.com/m/JhBoa1o22R22j4dDi\u0026subj\u003dRe+out+of+order+callbacks+of+events+in+ZK .\n\nDo we want same repeat for the DLM backends then not clearly differentiated how clients may see its own state?\n\nAlso, I\u0027m not sure you quoted the consistency guarantees explained in the zookeeper docs correct. I understood cross-clients as any client connected to any node, majority partition or not.","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"fe4a03896152fc32c0d0174f695a20aec50d7db6","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_98bfe2fb","line":49,"in_reply_to":"9a8ffd7b_d31b1f1b","updated":"2015-12-01 18:55:18.000000000","message":"I\u0027m unsure how much of a major issue it is, basically zookeeper master accepts a write when it has recieved ack of that write from a majority of its components, if a client is connected to a entity not in that majority it will see the old value until that write has propagated to its server (which is why the sync command can force this to happen). So yes, u may be reading slightly stale data, but during writing u should (typically) always pass the sequence/version number of nodes (on write)  so that you can know when u need to re-read to get the latest sequence/version number.\n\nFor example:\n\n    \u003e\u003e\u003e from kazoo import client\n    \u003e\u003e\u003e c \u003d client.KazooClient()\n    \u003e\u003e\u003e c.start()\n    \u003e\u003e\u003e c.set(\"/b\", b\"e\", version\u003d0)\n    Traceback (most recent call last):\n      File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n      File \"/homes/harlowja/dev/os/taskflow/.venv/lib/python3.4/site-packages/kazoo/client.py\", line 1219, in set\n        return self.set_async(path, value, version).get()\n      File \"/homes/harlowja/dev/os/taskflow/.venv/lib/python3.4/site-packages/kazoo/handlers/utils.py\", line 78, in get\n        raise self._exception\n    kazoo.exceptions.BadVersionError: ((), {})","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"14bdc1689c51f773f6fdd5a0d6cb9c03aa26ca0a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_94860664","line":49,"in_reply_to":"9a8ffd7b_f009792d","updated":"2015-12-01 01:06:19.000000000","message":"Hmmm, let\u0027s do that after this change, this imho is already been sitting around for to long, and those I do wonder about making things more complicated than need be. We probably shouldn\u0027t advocate for to many capabilities (more than are already here) because we could probably have thousands of more varieties, when would there be enough enums in this class ;)","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c34ca9355a758b7c28629047781075c859247ba9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"      itself."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":50,"context_line":"    \"\"\""},{"line_number":51,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":52,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":11,"id":"9a8ffd7b_0b4923b7","line":49,"in_reply_to":"9a8ffd7b_ffcfcf53","updated":"2015-12-02 16:46:26.000000000","message":"The links u talked about are for watch triggering, which is known to be delayed in the first place, and the \u0027out+of+order+callbacks+of+events+in+ZK\u0027 one seems like a upstream zookeeper bug/issue if it really is one, I\u0027m not sure what tooz can do about that if it really is an issue (someone should talk with the upstream zookeeper devs?).\n\nSo in general what do u want put in this file to denote any of this? I\u0027d like to keep this file in a manageable and understandable state, without having 30+ variations that very few people will understand in the first place (outside of us)... So how can we figure out how to do that in a way that works?","commit_id":"77d63c7e8ce318068fca0cd47ff3d68a9f3efbc8"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"1269ba8f904b39170906c9ef3ec3e2308d5d669c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_e5a343b0","line":54,"updated":"2015-12-09 09:22:19.000000000","message":"So, basically, the point is to add {LINEARIZABLE,SEQUENTIAL,CAUSAL,SERIALIZABLE}_ACROSS_CLIENTS. Which would indicate that one claims it has Simultaneously Conistent Cross-Client Views.\nOtherwise (if False) it has only Single Client Conistent Views","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"da3a8feafdbc425206af6a8b7ad84cc2f94eeb2c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_ea9e7262","line":54,"in_reply_to":"7a740942_19aa5086","updated":"2015-12-10 09:09:19.000000000","message":"SAME_ ?\nExample: LINEARIZABLE, SAME_UNDER_PARTITIONS, SAME_ACROSS_CLIENTS\n\nOr CROSS_CLIENTS, PARTITIONS_TOLERANT, LINEARIZABLE","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"36e1aafa7b5c270218fb2574a9e4934b462a4809","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_b8545dca","line":54,"in_reply_to":"7a740942_651c1a6b","updated":"2015-12-09 21:43:25.000000000","message":"You are right, that\u0027d be better. And _UNDER_PARTITIONS should be deduplicated the same way, but renamed to the CONSISTENT_UNDER_PARTITIONS perhaps (assuming the same consistency model as declared by another flags)","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"c07738fa3a5e245bae2dfd97d8595a3f431f837a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_aeb91a17","line":54,"in_reply_to":"7a740942_6acd70b6","updated":"2015-12-11 09:33:40.000000000","message":"Looks good","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"0a29c0f0f7646513bae271daf0ab7a72b02877ff","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_19aa5086","line":54,"in_reply_to":"7a740942_78b915ec","updated":"2015-12-10 00:31:39.000000000","message":"Hmmm, \u0027valid\u0027 unsure how to clearly describe that one to folks. Any better word? Thoughts?","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"b4c2f46ae987f3218f762c87c23ee99316aa5726","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_78b915ec","line":54,"in_reply_to":"7a740942_b8545dca","updated":"2015-12-09 21:46:37.000000000","message":"Or may be VALID_UNDER_PARTITIONS, VALID_ACROSS_CLIENTS? :)","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"1469d73259e5ead063a5bad40b4b0985e02187fc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_651c1a6b","line":54,"in_reply_to":"7a740942_e5a343b0","updated":"2015-12-09 16:27:16.000000000","message":"Seems like that can be done and makes sense to me, should we name those better though? Why not name it SIMULTANEOUS_CROSS_CLIENT_VIEWS and if a driver has that ability it lists SIMULTANEOUS_CROSS_CLIENT_VIEWS in its abilities, otherwise it doesnt? Why have 4 of those, won\u0027t one suffice?","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"244bede25ae8e841f7680dee32f31b31fb50abff","unresolved":false,"context_lines":[{"line_number":51,"context_line":"      itself."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    LINEARIZABLE_UNDER_PARTITIONS \u003d \u0027LINEARIZABLE_UNDER_PARTITIONS\u0027"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Extension of LINEARIZABLE that ensures constraints are"},{"line_number":57,"context_line":"    retained under partitions."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_6acd70b6","line":54,"in_reply_to":"7a740942_ea9e7262","updated":"2015-12-10 23:39:56.000000000","message":"How about the following:\n\nSAME_VIEW_UNDER_PARTITIONS\n\nSAME_VIEW_ACROSS_CLIENTS\n\nSeem ok?","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9646dd2490e9a839d143634c67c211e143e22dcb","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class ConsistencyModel(enum.Enum):"},{"line_number":33,"context_line":"    \"\"\"Attempts to describe the consistency model a driver supports.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":"    Whether the driver primitives work in a distributed manner."},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_780ed835","line":35,"updated":"2015-12-17 13:18:07.000000000","message":"This is not fine grained enough. There is several layer of distribution: processes, host, network.\n\nIPC is distributed on the same process and host, but not on a network. Thread lock are only across one process. And ZK is all of that obviously.","commit_id":"7cf59b5d26fdb7756fe215208ca558f66d860d7c"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"09d26f1a25f1b4c6c8faf4573bbe777173eafd4d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"class ConsistencyModel(enum.Enum):"},{"line_number":33,"context_line":"    \"\"\"Attempts to describe the consistency model a driver supports.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    DISTRIBUTED \u003d \u0027DISTRIBUTED\u0027"},{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":"    Whether the driver primitives work in a distributed manner."},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a7e1126_f38d097c","line":35,"in_reply_to":"3a7e1126_780ed835","updated":"2015-12-17 13:26:56.000000000","message":"Good point. Perhaps we should use instead DISTRIBUTED_ACROSS_THREADS,_PROCESSES (these two are IPC),_HOSTS (over LAN/WAN as well)","commit_id":"7cf59b5d26fdb7756fe215208ca558f66d860d7c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"6d1438a56a52fb95fe5260efdbce1665ee2f5c46","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Attempts to describe the characteristic that a driver supports.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    DISTRIBUTED_ACROSS_THREADS \u003d \u0027DISTRIBUTED_ACROSS_THREADS\u0027"},{"line_number":36,"context_line":"    \"\"\"A coordinators components when used by multiple **threads** work"},{"line_number":37,"context_line":"       the same as if those components were only used by a single thread.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    DISTRIBUTED_ACROSS_PROCESSES \u003d \u0027DISTRIBUTED_ACROSS_PROCESSES\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_29a68f10","line":36,"updated":"2015-12-18 09:17:27.000000000","message":"coordinator singular, no?","commit_id":"088e96294d7ea5b1bab5a94553ad9bdfa048e7ee"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"edcd0a684f3c8a170a24ce3a4f8076b93b7b1eb2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Attempts to describe the characteristic that a driver supports.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    DISTRIBUTED_ACROSS_THREADS \u003d \u0027DISTRIBUTED_ACROSS_THREADS\u0027"},{"line_number":36,"context_line":"    \"\"\"A coordinators components when used by multiple **threads** work"},{"line_number":37,"context_line":"       the same as if those components were only used by a single thread.\"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    DISTRIBUTED_ACROSS_PROCESSES \u003d \u0027DISTRIBUTED_ACROSS_PROCESSES\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_5de920e5","line":36,"in_reply_to":"3a7e1126_29a68f10","updated":"2015-12-20 01:30:07.000000000","message":"Done","commit_id":"088e96294d7ea5b1bab5a94553ad9bdfa048e7ee"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"173887055f2f71ac0a2ac1a4671b80eff55248cd","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    LINEARIZABLE \u003d \u0027LINEARIZABLE\u0027"},{"line_number":48,"context_line":"    \"\"\""},{"line_number":49,"context_line":"    Whether the drivers backend contraints are the following:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    * Ensures each operation must take place before its"},{"line_number":52,"context_line":"      completion time."}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_b3a52505","line":49,"range":{"start_line":49,"start_character":42,"end_line":49,"end_character":43},"updated":"2015-12-17 19:36:36.000000000","message":"constraints","commit_id":"088e96294d7ea5b1bab5a94553ad9bdfa048e7ee"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"edcd0a684f3c8a170a24ce3a4f8076b93b7b1eb2","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    LINEARIZABLE \u003d \u0027LINEARIZABLE\u0027"},{"line_number":48,"context_line":"    \"\"\""},{"line_number":49,"context_line":"    Whether the drivers backend contraints are the following:"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    * Ensures each operation must take place before its"},{"line_number":52,"context_line":"      completion time."}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_7de65c16","line":49,"range":{"start_line":49,"start_character":42,"end_line":49,"end_character":43},"in_reply_to":"3a7e1126_b3a52505","updated":"2015-12-20 01:30:07.000000000","message":"Done","commit_id":"088e96294d7ea5b1bab5a94553ad9bdfa048e7ee"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"173887055f2f71ac0a2ac1a4671b80eff55248cd","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    SEQUENTIAL \u003d \u0027SEQUENTIAL\u0027"},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":"    Whether the drivers backend contraints are the following:"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    * Operations can take effect before or after completion – but all"},{"line_number":63,"context_line":"      operations retain the constraint that operations from any given process"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_7327bd12","line":60,"range":{"start_line":60,"start_character":24,"end_line":60,"end_character":31},"updated":"2015-12-17 19:36:36.000000000","message":"As a docstring this should start\n\n \"\"\"Whether the drivers backend constraints are the following:\n\n ..\n\n(note the \"\"\" alignment).\n\nProse wise I think a more direct form of these assertions would be better:\n\n \"\"\"The driver has the following properties:\n\n * Operations can take effect before or after completion - \n   but all operations...\n ...\n \"\"\"","commit_id":"088e96294d7ea5b1bab5a94553ad9bdfa048e7ee"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"edcd0a684f3c8a170a24ce3a4f8076b93b7b1eb2","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    SEQUENTIAL \u003d \u0027SEQUENTIAL\u0027"},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":"    Whether the drivers backend contraints are the following:"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    * Operations can take effect before or after completion – but all"},{"line_number":63,"context_line":"      operations retain the constraint that operations from any given process"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a7e1126_1def18ea","line":60,"range":{"start_line":60,"start_character":24,"end_line":60,"end_character":31},"in_reply_to":"3a7e1126_7327bd12","updated":"2015-12-20 01:30:07.000000000","message":"Will use your prose, thanks.","commit_id":"088e96294d7ea5b1bab5a94553ad9bdfa048e7ee"}],"tooz/drivers/zookeeper.py":[{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"b574042046dcc821405047c4d8a56ecf8073b777","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    \"\"\""},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    MODEL \u003d (coordination.ConsistencyModel.DISTRIBUTED,"},{"line_number":397,"context_line":"             coordination.ConsistencyModel.LINEARIZABLE_UNDER_PARTITIONS)"},{"line_number":398,"context_line":"    \"\"\""},{"line_number":399,"context_line":"    Tuple of :py:class:`~tooz.coordination.ConsistencyModel` introspectable"},{"line_number":400,"context_line":"    enum member(s) that can be used to interogate how this driver works."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_25e62b44","line":397,"updated":"2015-12-09 09:17:59.000000000","message":"It is Sequential, not linearizable. Please read https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"a5ace3ccb57fc0cfc595e45cf24e14b86ea2ba4c","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    \"\"\""},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    MODEL \u003d (coordination.ConsistencyModel.DISTRIBUTED,"},{"line_number":397,"context_line":"             coordination.ConsistencyModel.LINEARIZABLE_UNDER_PARTITIONS)"},{"line_number":398,"context_line":"    \"\"\""},{"line_number":399,"context_line":"    Tuple of :py:class:`~tooz.coordination.ConsistencyModel` introspectable"},{"line_number":400,"context_line":"    enum member(s) that can be used to interogate how this driver works."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_a5977b38","line":397,"in_reply_to":"7a740942_25e62b44","updated":"2015-12-09 09:24:25.000000000","message":"Additionally, bearing in mine my previous comment, you shall not put here SEQUENTIAL_ACROSS_CLIENTS, if *_ACROSS_CLIENTS were implemented in coordination.py","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"da3a8feafdbc425206af6a8b7ad84cc2f94eeb2c","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    \"\"\""},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    MODEL \u003d (coordination.ConsistencyModel.DISTRIBUTED,"},{"line_number":397,"context_line":"             coordination.ConsistencyModel.LINEARIZABLE_UNDER_PARTITIONS)"},{"line_number":398,"context_line":"    \"\"\""},{"line_number":399,"context_line":"    Tuple of :py:class:`~tooz.coordination.ConsistencyModel` introspectable"},{"line_number":400,"context_line":"    enum member(s) that can be used to interogate how this driver works."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_ca7db6e8","line":397,"in_reply_to":"7a740942_25e62b44","updated":"2015-12-10 09:09:19.000000000","message":"and this^^","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"379dff220b324d91f4b5d6ae7bac4cea7c99203b","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    \"\"\""},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    MODEL \u003d (coordination.ConsistencyModel.DISTRIBUTED,"},{"line_number":397,"context_line":"             coordination.ConsistencyModel.LINEARIZABLE_UNDER_PARTITIONS)"},{"line_number":398,"context_line":"    \"\"\""},{"line_number":399,"context_line":"    Tuple of :py:class:`~tooz.coordination.ConsistencyModel` introspectable"},{"line_number":400,"context_line":"    enum member(s) that can be used to interogate how this driver works."}],"source_content_type":"text/x-python","patch_set":15,"id":"7a740942_aa6118aa","line":397,"in_reply_to":"7a740942_ca7db6e8","updated":"2015-12-10 23:41:07.000000000","message":"Sure.","commit_id":"039acea5bfbec5767af60e7707a53e059345b83e"}]}
