)]}'
{"tooz/drivers/file.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"188ba186f75019fbd0dbd884c9c7e9a079351a02","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        self._reserved_paths \u003d list(self._reserved_dirs)"},{"line_number":233,"context_line":"        self._reserved_paths.append(self._driver_lock_path)"},{"line_number":234,"context_line":"        self._safe_member_id \u003d self._make_filesystem_safe(member_id)"},{"line_number":235,"context_line":"        self.timeout \u003d int(options.get(\u0027timeout\u0027, [\u002710\u0027])[0])"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @staticmethod"},{"line_number":238,"context_line":"    def _normalize_path(path):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_19c34d5f","line":235,"updated":"2017-04-04 21:42:17.000000000","message":"can probably just run this through utils.collapse like other drivers so you don\u0027t need to deal with list structure","commit_id":"524982a0b8b6a25df702ea9e24ffd370a7d193d7"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"188ba186f75019fbd0dbd884c9c7e9a079351a02","unresolved":false,"context_lines":[{"line_number":323,"context_line":"            details \u003d {"},{"line_number":324,"context_line":"                u\u0027capabilities\u0027: capabilities,"},{"line_number":325,"context_line":"                u\u0027joined_on\u0027: current_time,"},{"line_number":326,"context_line":"                u\u0027heartbeat_on\u0027: current_time,"},{"line_number":327,"context_line":"                u\u0027member_id\u0027: utils.to_binary(self._member_id,"},{"line_number":328,"context_line":"                                              encoding\u003d\"utf-8\")"},{"line_number":329,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_99cf5d55","line":326,"updated":"2017-04-04 21:42:17.000000000","message":"do we actually have to store the heartbeat time? can we not use the last modified time of file? i didn\u0027t verify this but i think it possible, it would be good to try.","commit_id":"524982a0b8b6a25df702ea9e24ffd370a7d193d7"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"188ba186f75019fbd0dbd884c9c7e9a079351a02","unresolved":false,"context_lines":[{"line_number":382,"context_line":"        schema \u003d self._SCHEMAS[schema_key]"},{"line_number":383,"context_line":"        return schema(data)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    def _read_member_id(self, path):"},{"line_number":386,"context_line":"        with open(path, \u0027rb\u0027) as fh:"},{"line_number":387,"context_line":"            details \u003d self._load_and_validate(fh.read(), \u0027member\u0027)"},{"line_number":388,"context_line":"            if details.get(\"encoded\"):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_79aa5971","line":385,"updated":"2017-04-04 21:42:17.000000000","message":"doesn\u0027t seem to be used anymore but maybe it should? specifically, we don\u0027t seem to handle \u0027encoded\u0027 path anymore","commit_id":"524982a0b8b6a25df702ea9e24ffd370a7d193d7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        self._reserved_paths.append(self._driver_lock_path)"},{"line_number":235,"context_line":"        self._safe_member_id \u003d self._make_filesystem_safe(member_id)"},{"line_number":236,"context_line":"        self._options \u003d utils.collapse(options)"},{"line_number":237,"context_line":"        self.timeout \u003d int(self._options.get(\u0027timeout\u0027, 10))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @staticmethod"},{"line_number":240,"context_line":"    def _normalize_path(path):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_350a1826","line":237,"range":{"start_line":237,"start_character":13,"end_line":237,"end_character":20},"updated":"2017-04-05 19:24:05.000000000","message":"Why timeout is public ?","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                raise coordination.MemberAlreadyExist(group_id,"},{"line_number":322,"context_line":"                                                      self._member_id)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            current_time \u003d datetime.datetime.now()"},{"line_number":325,"context_line":"            details \u003d {"},{"line_number":326,"context_line":"                u\u0027capabilities\u0027: capabilities,"},{"line_number":327,"context_line":"                u\u0027joined_on\u0027: current_time,"},{"line_number":328,"context_line":"                u\u0027member_id\u0027: utils.to_binary(self._member_id,"},{"line_number":329,"context_line":"                                              encoding\u003d\"utf-8\")"},{"line_number":330,"context_line":"            }"},{"line_number":331,"context_line":"            details[u\u0027encoded\u0027] \u003d details[u\"member_id\"] !\u003d self._member_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_f555d01e","line":328,"range":{"start_line":324,"start_character":4,"end_line":328,"end_character":11},"updated":"2017-04-05 19:24:05.000000000","message":"useless change.","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                        continue"},{"line_number":411,"context_line":"                    entry_path \u003d os.path.join(group_dir, entry)"},{"line_number":412,"context_line":"                    try:"},{"line_number":413,"context_line":"                        m_time \u003d datetime.datetime.fromtimestamp("},{"line_number":414,"context_line":"                            os.stat(entry_path).st_mtime)"},{"line_number":415,"context_line":"                        current_time \u003d datetime.datetime.now()"},{"line_number":416,"context_line":"                        delta_time \u003d timeutils.delta_seconds("},{"line_number":417,"context_line":"                            m_time, current_time)"},{"line_number":418,"context_line":"                        if delta_time \u003c\u003d self.timeout:"},{"line_number":419,"context_line":"                            member_id \u003d self._read_member_id(entry_path)"},{"line_number":420,"context_line":"                        else:"},{"line_number":421,"context_line":"                            continue"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_15595459","line":418,"range":{"start_line":413,"start_character":0,"end_line":418,"end_character":54},"updated":"2017-04-05 19:24:05.000000000","message":"I don\u0027t think these lines raise EnvironmentError","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        fut \u003d self._executor.submit(_do_get_groups)"},{"line_number":511,"context_line":"        return FileFutureResult(fut)"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def heartbeat(self, group_id\u003dNone):"},{"line_number":514,"context_line":"        if not group_id:"},{"line_number":515,"context_line":"            return self.timeout"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_d82d6347","line":513,"updated":"2017-04-05 19:24:05.000000000","message":"The interface does not take group_id as argument.","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        safe_group_id \u003d self._make_filesystem_safe(group_id)"},{"line_number":518,"context_line":"        group_dir \u003d os.path.join(self._group_dir, safe_group_id)"},{"line_number":519,"context_line":"        safe_member_id \u003d self._make_filesystem_safe(self._member_id)"},{"line_number":520,"context_line":"        member_path \u003d os.path.join(group_dir, \"%s.raw\" % safe_member_id)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        @_lock_me(self._driver_lock)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_18e62b46","line":519,"range":{"start_line":519,"start_character":0,"end_line":519,"end_character":68},"updated":"2017-04-05 19:24:05.000000000","message":"This already exists as \u0027self._safe_member_id\u0027","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"c8f2b4d9ab3d948d3c83567654b5856fece12056","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                        continue"},{"line_number":409,"context_line":"                    entry_path \u003d os.path.join(group_dir, entry)"},{"line_number":410,"context_line":"                    m_time \u003d datetime.datetime.fromtimestamp("},{"line_number":411,"context_line":"                        os.stat(entry_path).st_mtime)"},{"line_number":412,"context_line":"                    current_time \u003d datetime.datetime.now()"},{"line_number":413,"context_line":"                    delta_time \u003d timeutils.delta_seconds(m_time, current_time)"},{"line_number":414,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_5b5c627d","line":411,"range":{"start_line":411,"start_character":24,"end_line":411,"end_character":31},"updated":"2017-04-07 10:27:52.000000000","message":"Sorry about my last comment, I have missed that os.stat raise some EnvironmentError.","commit_id":"f3cdc695dd7612551231f9888454d3a9f80e4e67"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"c8f2b4d9ab3d948d3c83567654b5856fece12056","unresolved":false,"context_lines":[{"line_number":518,"context_line":"            def _do_heartbeat():"},{"line_number":519,"context_line":"                current_time \u003d int(time.time())"},{"line_number":520,"context_line":"                try:"},{"line_number":521,"context_line":"                    os.utime(member_path, (current_time, current_time))"},{"line_number":522,"context_line":"                except EnvironmentError as err:"},{"line_number":523,"context_line":"                    if err.errno !\u003d errno.ENOENT:"},{"line_number":524,"context_line":"                        raise"}],"source_content_type":"text/x-python","patch_set":6,"id":"bff0334d_5b00e267","line":521,"range":{"start_line":521,"start_character":20,"end_line":521,"end_character":39},"updated":"2017-04-07 10:27:52.000000000","message":"os.utime(member_path, None) does the same.","commit_id":"f3cdc695dd7612551231f9888454d3a9f80e4e67"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"15655d1ac47399abeb7e45f37cad41c17e85015b","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            def _do_heartbeat():"},{"line_number":520,"context_line":"                current_time \u003d int(time.time())"},{"line_number":521,"context_line":"                try:"},{"line_number":522,"context_line":"                    os.utime(member_path, (current_time, current_time))"},{"line_number":523,"context_line":"                except EnvironmentError as err:"},{"line_number":524,"context_line":"                    if err.errno !\u003d errno.ENOENT:"},{"line_number":525,"context_line":"                        raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_f3b8bde5","line":522,"range":{"start_line":522,"start_character":42,"end_line":522,"end_character":70},"updated":"2017-04-10 15:35:58.000000000","message":"This can be replaced by:\n\n  os.utime(member_path, None)","commit_id":"0456a3fba13389150af615bcda54c86256bd852f"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"af68dc716834bd3c506ae0a9704f483dff5e045a","unresolved":false,"context_lines":[{"line_number":519,"context_line":"            def _do_heartbeat():"},{"line_number":520,"context_line":"                current_time \u003d int(time.time())"},{"line_number":521,"context_line":"                try:"},{"line_number":522,"context_line":"                    os.utime(member_path, (current_time, current_time))"},{"line_number":523,"context_line":"                except EnvironmentError as err:"},{"line_number":524,"context_line":"                    if err.errno !\u003d errno.ENOENT:"},{"line_number":525,"context_line":"                        raise"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_c1c39c56","line":522,"range":{"start_line":522,"start_character":42,"end_line":522,"end_character":70},"in_reply_to":"bff0334d_f3b8bde5","updated":"2017-04-10 19:48:46.000000000","message":"agreed ^","commit_id":"0456a3fba13389150af615bcda54c86256bd852f"}],"tooz/tests/test_coordination.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"188ba186f75019fbd0dbd884c9c7e9a079351a02","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        if not self._coord.requires_beating:"},{"line_number":307,"context_line":"            raise testcase.TestSkipped(\"Test not applicable (heartbeating\""},{"line_number":308,"context_line":"                                       \" not required)\")"},{"line_number":309,"context_line":"        if self.url.startswith(\"file://\"):"},{"line_number":310,"context_line":"            self._coord.create_group(self.group_id).get()"},{"line_number":311,"context_line":"            self._coord.join_group(self.group_id).get()"},{"line_number":312,"context_line":"            members \u003d self._coord.get_members(self.group_id).get()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfeb2761_19358d8f","line":309,"updated":"2017-04-04 21:42:17.000000000","message":"i don\u0027t really understand why file has a unique clause here? i would think a heartbeat test should be valid for all heartbeat enabled drivers.","commit_id":"524982a0b8b6a25df702ea9e24ffd370a7d193d7"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        if not self._coord.requires_beating:"},{"line_number":307,"context_line":"            raise testcase.TestSkipped(\"Test not applicable (heartbeating\""},{"line_number":308,"context_line":"                                       \" not required)\")"},{"line_number":309,"context_line":"        if self.url.startswith(\"file://\"):"},{"line_number":310,"context_line":"            self._coord.create_group(self.group_id).get()"},{"line_number":311,"context_line":"            self._coord.join_group(self.group_id).get()"},{"line_number":312,"context_line":"            members \u003d self._coord.get_members(self.group_id).get()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_18b86b28","line":309,"updated":"2017-04-05 19:24:05.000000000","message":"Why only file ?","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"}],"tox.ini":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"fd031aa8deefc2b0937f020b2614c1611da7a0a9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    etcd: .[etcd]"},{"line_number":16,"context_line":"    consul: .[consul]"},{"line_number":17,"context_line":"setenv \u003d"},{"line_number":18,"context_line":"    TOOZ_TEST_URLS \u003d file:///tmp?timeout\u003d10 zake:// ipc://"},{"line_number":19,"context_line":"# NOTE(tonyb): This project has chosen to *NOT* consume upper-constraints.txt"},{"line_number":20,"context_line":"commands \u003d"},{"line_number":21,"context_line":"    {toxinidir}/run-tests.sh {toxinidir}/tools/pretty_tox.sh \"{posargs}\""}],"source_content_type":"text/x-properties","patch_set":5,"id":"bff0334d_58aef3e7","line":18,"range":{"start_line":18,"start_character":32,"end_line":18,"end_character":43},"updated":"2017-04-05 19:24:05.000000000","message":"not needed this is the default.","commit_id":"7fb2beadf98b18adcdb066da1ee2bbf0652aa263"}]}
