)]}'
{"test/unit/obj/test_ssync_sender.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e1c76314793da003d43cbe7b85e113cd5258696f","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"        def add_trace(type, msg):"},{"line_number":1265,"context_line":"            # record a protocol event for later analysis"},{"line_number":1266,"context_line":"            if msg.strip():"},{"line_number":1267,"context_line":"                trace.setdefault(\u0027messages\u0027, []).append((type, msg.strip()))"},{"line_number":1268,"context_line":""},{"line_number":1269,"context_line":"        def make_send_wrapper(send):"},{"line_number":1270,"context_line":"            def wrapped_send(msg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3acd31a7_8950f45f","line":1267,"updated":"2015-05-02 04:33:38.000000000","message":"I don\u0027t understand the need for this maneuvering. In every invocation of make_connect_wrapper() the trace is made fresh. Why drop the initialization then?","commit_id":"0df4090b69b81b9651b74a9bac7e7f2df2fc0310"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"35956e6922bf5ac8215cf54650657400f077b9c6","unresolved":false,"context_lines":[{"line_number":1264,"context_line":"        def add_trace(type, msg):"},{"line_number":1265,"context_line":"            # record a protocol event for later analysis"},{"line_number":1266,"context_line":"            if msg.strip():"},{"line_number":1267,"context_line":"                trace.setdefault(\u0027messages\u0027, []).append((type, msg.strip()))"},{"line_number":1268,"context_line":""},{"line_number":1269,"context_line":"        def make_send_wrapper(send):"},{"line_number":1270,"context_line":"            def wrapped_send(msg):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3acd31a7_1f6dfd30","line":1267,"in_reply_to":"3acd31a7_8950f45f","updated":"2015-05-05 10:43:25.000000000","message":"Done","commit_id":"0df4090b69b81b9651b74a9bac7e7f2df2fc0310"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e1c76314793da003d43cbe7b85e113cd5258696f","unresolved":false,"context_lines":[{"line_number":1756,"context_line":"        node \u003d dict(self.rx_node)"},{"line_number":1757,"context_line":"        node.update({\u0027index\u0027: rx_node_index})"},{"line_number":1758,"context_line":"        sender \u003d ssync_sender.Sender(self.daemon, node, job, suffixes)"},{"line_number":1759,"context_line":"        # fake connection from tx to rx..."},{"line_number":1760,"context_line":"        trace \u003d {}"},{"line_number":1761,"context_line":"        sender.connect \u003d self.make_connect_wrapper(sender, trace)"},{"line_number":1762,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3acd31a7_6978f8f2","line":1759,"updated":"2015-05-02 04:33:38.000000000","message":"left the old comment in place","commit_id":"0df4090b69b81b9651b74a9bac7e7f2df2fc0310"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"35956e6922bf5ac8215cf54650657400f077b9c6","unresolved":false,"context_lines":[{"line_number":1756,"context_line":"        node \u003d dict(self.rx_node)"},{"line_number":1757,"context_line":"        node.update({\u0027index\u0027: rx_node_index})"},{"line_number":1758,"context_line":"        sender \u003d ssync_sender.Sender(self.daemon, node, job, suffixes)"},{"line_number":1759,"context_line":"        # fake connection from tx to rx..."},{"line_number":1760,"context_line":"        trace \u003d {}"},{"line_number":1761,"context_line":"        sender.connect \u003d self.make_connect_wrapper(sender, trace)"},{"line_number":1762,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3acd31a7_9f67cd4c","line":1759,"in_reply_to":"3acd31a7_6978f8f2","updated":"2015-05-05 10:43:25.000000000","message":"Done","commit_id":"0df4090b69b81b9651b74a9bac7e7f2df2fc0310"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"943c4fc05e961c8da4e11c084f4b71a0e33f4860","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"                    # check no rx file,"},{"line_number":1481,"context_line":"                    self.assertRaises(DiskFileNotExist,"},{"line_number":1482,"context_line":"                                      self._open_rx_diskfile,"},{"line_number":1483,"context_line":"                                      o_name, policy, frag_index\u003dfrag_index)"},{"line_number":1484,"context_line":"                # check tx file still intact - ssync does not do any cleanup!"},{"line_number":1485,"context_line":"                self._open_tx_diskfile(o_name, policy, frag_index)"},{"line_number":1486,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1aca2d91_e47d631d","line":1483,"updated":"2015-05-07 13:36:19.000000000","message":"At the *sync* job, the rx diskfile seems not to be asserted here.\n\ni.e. should we assert the diskfile we can open as \n\n self._open_rx_diskfile(o_name, policy, rx_node_index)\n\nCurrently, it seems to assert the rx file only when tx_node_index in (rx_node_index, None) (i.e. revert job or REPL_POLICY)\n\nBut I\u0027m not sure...and perhaps the change I suggested above should be added in another patch because this change set is made for test refactoring.","commit_id":"77cc3a553e1784c94f5593b682b49d4936c22afb"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"afd58e5710d9858ca596d55a417bdae6e15c3929","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"                    # check no rx file,"},{"line_number":1481,"context_line":"                    self.assertRaises(DiskFileNotExist,"},{"line_number":1482,"context_line":"                                      self._open_rx_diskfile,"},{"line_number":1483,"context_line":"                                      o_name, policy, frag_index\u003dfrag_index)"},{"line_number":1484,"context_line":"                # check tx file still intact - ssync does not do any cleanup!"},{"line_number":1485,"context_line":"                self._open_tx_diskfile(o_name, policy, frag_index)"},{"line_number":1486,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a0c5dc1_b837aee2","line":1483,"in_reply_to":"1aca2d91_e47d631d","updated":"2015-05-12 14:15:19.000000000","message":"You are right, there is no checking of the EC \u0027sync\u0027 type rx diskfiles. Will fix.","commit_id":"77cc3a553e1784c94f5593b682b49d4936c22afb"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"943c4fc05e961c8da4e11c084f4b71a0e33f4860","unresolved":false,"context_lines":[{"line_number":1769,"context_line":"        self.assertEqual(7, len(results[\u0027tx_missing\u0027]))"},{"line_number":1770,"context_line":"        self.assertEqual(5, len(results[\u0027rx_missing\u0027]))"},{"line_number":1771,"context_line":"        self.assertEqual(5, len(results[\u0027tx_updates\u0027]))"},{"line_number":1772,"context_line":"        self.assertFalse(results[\u0027rx_updates\u0027])"},{"line_number":1773,"context_line":"        sync_paths \u003d []"},{"line_number":1774,"context_line":"        for subreq in results.get(\u0027tx_updates\u0027):"},{"line_number":1775,"context_line":"            if subreq.get(\u0027method\u0027) \u003d\u003d \u0027PUT\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1aca2d91_47f2d970","line":1772,"updated":"2015-05-07 13:36:19.000000000","message":"Just note to me. The difference between \u0027tx_updates\u0027 and \u0027rx_updates\u0027 made me to misunderstand as sender pushed the updates but receiver did nothing. (actually results[\u0027rx_umpdates\u0027] should be always False during the correct protocol because receiver sends \":UPDATES: END\" immediately after \":UPDATES: START\")\n\nFor now (after understanding correct meaning), I\u0027m realizing this seems better because the results dict shows just transferred messages. Maybe need to consider more. (maybe another place)","commit_id":"77cc3a553e1784c94f5593b682b49d4936c22afb"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ff60b28fc8f6c5358c9534b9ebc736e1bc48c041","unresolved":false,"context_lines":[{"line_number":1475,"context_line":"        :param tx_frag_index: the fragment index of tx diskfiles that should"},{"line_number":1476,"context_line":"                              have been used as a source for sync\u0027ing"},{"line_number":1477,"context_line":"        :param rx_frag_index: the fragment index of expected rx diskfiles"},{"line_number":1478,"context_line":"        \"\"\""},{"line_number":1479,"context_line":"        for o_name, diskfiles in tx_objs.iteritems():"},{"line_number":1480,"context_line":"            for tx_df in diskfiles:"},{"line_number":1481,"context_line":"                if tx_frag_index is None or tx_df._frag_index \u003d\u003d tx_frag_index:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_0da1ba94","line":1478,"updated":"2015-05-13 09:29:12.000000000","message":"Pointing out the params is really good to understand the definitions, much helpful, thanks :)","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ff60b28fc8f6c5358c9534b9ebc736e1bc48c041","unresolved":false,"context_lines":[{"line_number":1478,"context_line":"        \"\"\""},{"line_number":1479,"context_line":"        for o_name, diskfiles in tx_objs.iteritems():"},{"line_number":1480,"context_line":"            for tx_df in diskfiles:"},{"line_number":1481,"context_line":"                if tx_frag_index is None or tx_df._frag_index \u003d\u003d tx_frag_index:"},{"line_number":1482,"context_line":"                    # this diskfile should have been sync\u0027d,"},{"line_number":1483,"context_line":"                    # check rx file is ok"},{"line_number":1484,"context_line":"                    rx_df \u003d self._open_rx_diskfile("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_cf7f1565","line":1481,"updated":"2015-05-13 09:29:12.000000000","message":"(memo) tx_df._frag_index !\u003d tx_frag_index case seems a deleted object.","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fe9d38baf8a032ec2d9e75a85d75937c04e6ef52","unresolved":false,"context_lines":[{"line_number":1478,"context_line":"        \"\"\""},{"line_number":1479,"context_line":"        for o_name, diskfiles in tx_objs.iteritems():"},{"line_number":1480,"context_line":"            for tx_df in diskfiles:"},{"line_number":1481,"context_line":"                if tx_frag_index is None or tx_df._frag_index \u003d\u003d tx_frag_index:"},{"line_number":1482,"context_line":"                    # this diskfile should have been sync\u0027d,"},{"line_number":1483,"context_line":"                    # check rx file is ok"},{"line_number":1484,"context_line":"                    rx_df \u003d self._open_rx_diskfile("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_52ed0aee","line":1481,"in_reply_to":"9a0c5dc1_cf7f1565","updated":"2015-05-13 10:05:21.000000000","message":"tx_df._frag_index !\u003d tx_frag_index --\u003e tx_df is NOT the diskfile intended to be the \u0027source\u0027 for the sync (some of the tests synthesize more than one frag archive in same object dir).","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ff60b28fc8f6c5358c9534b9ebc736e1bc48c041","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"                    # check rx file is ok"},{"line_number":1484,"context_line":"                    rx_df \u003d self._open_rx_diskfile("},{"line_number":1485,"context_line":"                        o_name, policy, rx_frag_index)"},{"line_number":1486,"context_line":"                    match_etag \u003d (tx_frag_index \u003d\u003d rx_frag_index)"},{"line_number":1487,"context_line":"                    self._verify_diskfile_sync("},{"line_number":1488,"context_line":"                        tx_df, rx_df, rx_frag_index, match_etag)"},{"line_number":1489,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_284c6c41","line":1486,"updated":"2015-05-13 09:29:12.000000000","message":"(memo) match_etag is True on REVERT case and False on SYNC case.","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fe9d38baf8a032ec2d9e75a85d75937c04e6ef52","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"                    # check rx file is ok"},{"line_number":1484,"context_line":"                    rx_df \u003d self._open_rx_diskfile("},{"line_number":1485,"context_line":"                        o_name, policy, rx_frag_index)"},{"line_number":1486,"context_line":"                    match_etag \u003d (tx_frag_index \u003d\u003d rx_frag_index)"},{"line_number":1487,"context_line":"                    self._verify_diskfile_sync("},{"line_number":1488,"context_line":"                        tx_df, rx_df, rx_frag_index, match_etag)"},{"line_number":1489,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_72c92e78","line":1486,"in_reply_to":"9a0c5dc1_284c6c41","updated":"2015-05-13 10:05:21.000000000","message":"Yup. and True for replication case (None \u003d\u003d None) which is equivalent to a revert","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"ff60b28fc8f6c5358c9534b9ebc736e1bc48c041","unresolved":false,"context_lines":[{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"        # verify on disk files..."},{"line_number":1596,"context_line":"        self._verify_ondisk_files("},{"line_number":1597,"context_line":"            tx_objs, policy, rx_node_index, rx_node_index)"},{"line_number":1598,"context_line":"        self._verify_tombstones(tx_tombstones, policy)"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"    def test_fragment_sync(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_880a38d1","line":1597,"updated":"2015-05-13 09:29:12.000000000","message":"Though I finally understood the *REVERT* case uses the index to the target (i.e. rx_node_index) as a tx_frag_index but... it seems to make a misleading a bit something like as \"why is rx_node_index setting, twice???\"\n\nMaybe setting \"frag_index\" here instead of rx_node_index is reasonable?\n\ni.e.\n self._verify_ondisk_files(tx_objs, policy, frag_index, rx_node_index)","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fe9d38baf8a032ec2d9e75a85d75937c04e6ef52","unresolved":false,"context_lines":[{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":"        # verify on disk files..."},{"line_number":1596,"context_line":"        self._verify_ondisk_files("},{"line_number":1597,"context_line":"            tx_objs, policy, rx_node_index, rx_node_index)"},{"line_number":1598,"context_line":"        self._verify_tombstones(tx_tombstones, policy)"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"    def test_fragment_sync(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a0c5dc1_92f4a287","line":1597,"in_reply_to":"9a0c5dc1_880a38d1","updated":"2015-05-13 10:05:21.000000000","message":"Done","commit_id":"3c6d5c3597698d275812a510035a1403a41f6247"}]}
