)]}'
{"tooz/coordination.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"38f5c2994a3f03b719b42b9a7eb266a19c54a990","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        least) one member responsible for it. It\u0027s then possible to check which"},{"line_number":270,"context_line":"        object is owned by any member of the group."},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        This method also creates and joins the group, if necessary."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        :param group_id: The group to create a partitioner for."},{"line_number":275,"context_line":"        :param partitions: The number of partitions to create."}],"source_content_type":"text/x-python","patch_set":15,"id":"3a71b18c_cf907051","line":272,"updated":"2016-12-09 17:14:43.000000000","message":"May want to mention that the partitioner is not started when returned, and that the caller has to call start/stop as needed?","commit_id":"6547d6e6209c65cb489b35293e7ac47509e9fd7c"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"a47f11371bb61cefd58d2d51417f14bf702aa0a0","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        :return: A :py:class:`~tooz.partitioner.Partitioner` object."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        \"\"\""},{"line_number":282,"context_line":"        self.join_group_create(group_id, capabilities\u003dstr(weight))"},{"line_number":283,"context_line":"        return partitioner.Partitioner(self, group_id)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def leave_partitioned_group(self, partitioner):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_a80381b7","line":282,"updated":"2016-12-30 00:24:27.000000000","message":"Just something to maybe do to possible help in the future.\n\nInstead of:\n\n  capabilities\u003dstr(weight)\n\nHow about:\n\n  capabilities\u003d{\u0027weight\u0027: weight}\n\nThis should be supported and you won\u0027t hit as many issues if u ever (sometime in the future) want to record anything else.","commit_id":"a5fc44d223a04fda75f718f29183ef0ae484dbb7"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"71f9752218e7eeca76be6198b5107de5bd99bbb2","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        :return: A :py:class:`~tooz.partitioner.Partitioner` object."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        \"\"\""},{"line_number":282,"context_line":"        self.join_group_create(group_id, capabilities\u003dstr(weight))"},{"line_number":283,"context_line":"        return partitioner.Partitioner(self, group_id)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    def leave_partitioned_group(self, partitioner):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_5309cf2b","line":282,"in_reply_to":"ba5201f7_a80381b7","updated":"2017-01-01 18:03:21.000000000","message":"Good idea.","commit_id":"a5fc44d223a04fda75f718f29183ef0ae484dbb7"}],"tooz/partitioner.py":[{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"ab108bd90abc3d49a4bc5528504f0cb23a442772","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        :param ignore_members: Group members to ignore."},{"line_number":56,"context_line":"        :param replicas: Number of replicas for the object."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        return self.ring.get_nodes(self._hash_object(obj),"},{"line_number":59,"context_line":"                                   ignore_nodes\u003dignore_members,"},{"line_number":60,"context_line":"                                   replicas\u003dreplicas)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_37347448","line":58,"updated":"2016-11-29 06:13:55.000000000","message":"How does this work under hash collisions? Does it? Maybe want to mention what a good hashing algorithm should be, sha1 or md5 or something?","commit_id":"c01756d597ce8e7fc5c0f416879d82c509a79fd1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"05dfb0b6d3251107cfebfbab4b836da2c4ef295e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        :param ignore_members: Group members to ignore."},{"line_number":56,"context_line":"        :param replicas: Number of replicas for the object."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        return self.ring.get_nodes(self._hash_object(obj),"},{"line_number":59,"context_line":"                                   ignore_nodes\u003dignore_members,"},{"line_number":60,"context_line":"                                   replicas\u003dreplicas)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a74a57a_49ea2875","line":58,"in_reply_to":"5a74a57a_37347448","updated":"2016-11-29 10:24:47.000000000","message":"Collisions are not a big deal, if all your object have the same hash, only one node will handle all the objects :) that\u0027s not what you want but it\u0027s not a big deal, unless your hash is a just modulo N where N \u003c number_of_nodes ;)","commit_id":"c01756d597ce8e7fc5c0f416879d82c509a79fd1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c3d77a87de9fbe98187b5b5a648bcca7bbc3cbdb","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    DEFAULT_PARTITION_NUMBER \u003d hashring.HashRing.DEFAULT_PARTITION_NUMBER"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, coordinator, group_id,"},{"line_number":30,"context_line":"                 partitions\u003dDEFAULT_PARTITION_NUMBER):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_fbcfbc7c","line":27,"updated":"2016-12-02 23:16:04.000000000","message":"I slightly like hashring.DEFAULT_PARTITION_NUMBER vs accessing a class variable, but meh, just my preference of the day, ha.","commit_id":"e4032257458cea389c85b84c2d4b9bc76ca530c1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"45b5b2c9f611818befa09231c351810591f5ae43","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    DEFAULT_PARTITION_NUMBER \u003d hashring.HashRing.DEFAULT_PARTITION_NUMBER"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, coordinator, group_id,"},{"line_number":30,"context_line":"                 partitions\u003dDEFAULT_PARTITION_NUMBER):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_996bbb1d","line":27,"in_reply_to":"3a71b18c_fbcfbc7c","updated":"2016-12-06 21:04:31.000000000","message":"it makes it easier in Hashring to override it by inheritance, that\u0027s why","commit_id":"e4032257458cea389c85b84c2d4b9bc76ca530c1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c3d77a87de9fbe98187b5b5a648bcca7bbc3cbdb","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, coordinator, group_id,"},{"line_number":30,"context_line":"                 partitions\u003dDEFAULT_PARTITION_NUMBER):"},{"line_number":31,"context_line":"        coordinator.watch_join_group(group_id, self._on_member_join)"},{"line_number":32,"context_line":"        coordinator.watch_leave_group(group_id, self._on_member_leave)"},{"line_number":33,"context_line":"        members \u003d coordinator.get_members(group_id)"},{"line_number":34,"context_line":"        self.ring \u003d hashring.HashRing(members.get(), partitions\u003dpartitions)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_3ba134a4","line":31,"updated":"2016-12-02 23:16:04.000000000","message":"If u put a close, maybe put these in a start?","commit_id":"e4032257458cea389c85b84c2d4b9bc76ca530c1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c3d77a87de9fbe98187b5b5a648bcca7bbc3cbdb","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    def _on_member_join(self, event):"},{"line_number":39,"context_line":"        self.ring.add_node(event.member_id)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _on_member_leave(self, event):"},{"line_number":42,"context_line":"        self.ring.remove_node(event.member_id)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_9ba5e8b6","line":41,"updated":"2016-12-02 23:16:04.000000000","message":"Is the ring protected against concurrent modifications?\n\nIf not this may have issues (since at least for kazoo these would come in on a different thread); and u may hit dict changed while iterating (or similar)...","commit_id":"e4032257458cea389c85b84c2d4b9bc76ca530c1"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"c3d77a87de9fbe98187b5b5a648bcca7bbc3cbdb","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                    ignore_members\u003dignore_members,"},{"line_number":83,"context_line":"                                    replicas\u003dreplicas)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __del__(self):"},{"line_number":86,"context_line":"        self._coord.unwatch_join_group(self.group_id, self._on_member_join)"},{"line_number":87,"context_line":"        self._coord.unwatch_leave_group(self.group_id, self._on_member_leave)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_fb96dc4a","line":85,"updated":"2016-12-02 23:16:04.000000000","message":"How about just a manual close() or something like it so that people don\u0027t always need to depend on the GC.","commit_id":"e4032257458cea389c85b84c2d4b9bc76ca530c1"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"45b5b2c9f611818befa09231c351810591f5ae43","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                    ignore_members\u003dignore_members,"},{"line_number":83,"context_line":"                                    replicas\u003dreplicas)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __del__(self):"},{"line_number":86,"context_line":"        self._coord.unwatch_join_group(self.group_id, self._on_member_join)"},{"line_number":87,"context_line":"        self._coord.unwatch_leave_group(self.group_id, self._on_member_leave)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_d948d3b5","line":85,"in_reply_to":"3a71b18c_fb96dc4a","updated":"2016-12-06 21:04:31.000000000","message":"Well the problem is that the instance is cached in a weakref dict, so if you have 2 consumers of this you can\u0027t know which one is supposed to close.\n\nThe alternative is to have a start/stop and possibly several objects of the same group. That\u0027s likely a better option now that I think about it.\n\nI guess I tried a bad early optimization :p","commit_id":"e4032257458cea389c85b84c2d4b9bc76ca530c1"}]}
