)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1bcc8eb309923c3fe65bd04348594cc8daf2f920","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ab1f9389_f36c8134","updated":"2022-02-14 22:19:50.000000000","message":"I\u0027m going to leave this for now in-case anyone wants to look at it - but feel free to respin","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2d97beb5e38cbf73185ae186ad26090bb6748042","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3e199ea3_9345679c","updated":"2022-02-16 11:07:19.000000000","message":"we might want to catch some of the other instances of empty db files left on disk (early returns). \n\nIf I read the replicator code correctly, it is normal for the replicator to leave empty handoff partition dirs until its next cycle when it removes them. However, the sharder habitually creates handoff dbs in \u0027deep\u0027 handoff locations, which appear anomalous w.r.t. \u0027normal\u0027 operation. So the goal here is to reduce empty \u0027deep\u0027 handoff partition dirs.","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c39be5a8285770ea9e83c66e6025852065bcfb7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"68b2c6e5_92eb7f8e","updated":"2022-02-17 18:48:03.000000000","message":"i like this","commit_id":"12a4e607ebc4a8b2592395cb862fe2aaa84e1dfe"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"23b38b18da7a8ac644a31e860d618e07a6b36483","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"f8eeaf83_2c489fdd","updated":"2022-02-23 00:11:17.000000000","message":"Alternate idea: do it down in delete_db() so the account/container replicators clean up faster, too -- https://review.opendev.org/c/openstack/swift/+/830535","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a40ba3c959b1d3a512bd9e269cd8eb99c7a0af65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"dbea440c_91d81cbe","updated":"2022-03-08 22:22:13.000000000","message":"Now that https://review.opendev.org/c/openstack/swift/+/830535 has merged, is that change still required?","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"266e366eb7e8da3115fca4e1ae628da6ad5fa7f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"67be4fa9_c2944b90","updated":"2022-02-18 10:14:47.000000000","message":"cleaned up the try/except/else","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8ae5a72650b24b15f0aa533fd19aac30ca8f20c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"104ca024_1aab1a9d","updated":"2022-02-23 15:38:27.000000000","message":"i like https://review.opendev.org/c/openstack/swift/+/830535 a lot - there may not be much here to salvage if we go that route","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"}],"swift/container/sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1bcc8eb309923c3fe65bd04348594cc8daf2f920","unresolved":true,"context_lines":[{"line_number":1321,"context_line":"        success, responses \u003d self._replicate_object("},{"line_number":1322,"context_line":"            part, dest_broker.db_file, node_id)"},{"line_number":1323,"context_line":"        quorum \u003d quorum_size(self.ring.replica_count)"},{"line_number":1324,"context_line":""},{"line_number":1325,"context_line":"        if not success and responses.count(True) \u003c quorum:"},{"line_number":1326,"context_line":"            self.logger.warning("},{"line_number":1327,"context_line":"                \u0027Failed to sufficiently replicate misplaced objects: %s in %s \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"77cb06ca_c7697358","line":1324,"updated":"2022-02-14 22:19:50.000000000","message":"well this isn\u0027t needed","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e562a3edacc71dbff6c828bb382c1871e89c2afe","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"        success, responses \u003d self._replicate_object("},{"line_number":1322,"context_line":"            part, dest_broker.db_file, node_id)"},{"line_number":1323,"context_line":"        quorum \u003d quorum_size(self.ring.replica_count)"},{"line_number":1324,"context_line":""},{"line_number":1325,"context_line":"        if not success and responses.count(True) \u003c quorum:"},{"line_number":1326,"context_line":"            self.logger.warning("},{"line_number":1327,"context_line":"                \u0027Failed to sufficiently replicate misplaced objects: %s in %s \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ef40a4b8_38513921","line":1324,"in_reply_to":"77cb06ca_c7697358","updated":"2022-02-17 15:16:24.000000000","message":"Done","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2d97beb5e38cbf73185ae186ad26090bb6748042","unresolved":true,"context_lines":[{"line_number":1628,"context_line":"            # it can\u0027t be defaulted."},{"line_number":1629,"context_line":"            self.logger.warning(\u0027Failed to get own_shard_range for %s\u0027,"},{"line_number":1630,"context_line":"                                quote(broker.path))"},{"line_number":1631,"context_line":"            return CLEAVE_FAILED"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"        # only cleave from the retiring db - misplaced objects handler will"},{"line_number":1634,"context_line":"        # deal with any objects in the fresh db"}],"source_content_type":"text/x-python","patch_set":1,"id":"7342cfef_74a5e206","line":1631,"updated":"2022-02-16 11:07:19.000000000","message":"if we return here then we leave an empty broker db file which presumably gets cleaned up the next time the container replicator passes over it, although IIUC the next replicator pass would replicate and then remove the db file and suffix dir, and the replicator pass after that would remove the partition dir (assuming it is empty)","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"85efc61a773f8f687a80d05edfb947a16a192fac","unresolved":false,"context_lines":[{"line_number":1628,"context_line":"            # it can\u0027t be defaulted."},{"line_number":1629,"context_line":"            self.logger.warning(\u0027Failed to get own_shard_range for %s\u0027,"},{"line_number":1630,"context_line":"                                quote(broker.path))"},{"line_number":1631,"context_line":"            return CLEAVE_FAILED"},{"line_number":1632,"context_line":""},{"line_number":1633,"context_line":"        # only cleave from the retiring db - misplaced objects handler will"},{"line_number":1634,"context_line":"        # deal with any objects in the fresh db"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba062537_231053c1","line":1631,"in_reply_to":"7342cfef_74a5e206","updated":"2022-02-18 10:11:58.000000000","message":"Done","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2d97beb5e38cbf73185ae186ad26090bb6748042","unresolved":true,"context_lines":[{"line_number":1662,"context_line":"                    cleaving_context.store(broker)"},{"line_number":1663,"context_line":"                    # Because nothing was here we wont count it in the shard"},{"line_number":1664,"context_line":"                    # batch count."},{"line_number":1665,"context_line":"                    return CLEAVE_EMPTY"},{"line_number":1666,"context_line":"                # Else, it wasn\u0027t newly created by us, and"},{"line_number":1667,"context_line":"                # we don\u0027t know what\u0027s in it or why. Let it get"},{"line_number":1668,"context_line":"                # replicated and counted in the batch count."}],"source_content_type":"text/x-python","patch_set":1,"id":"d7fa228a_54e5355d","line":1665,"updated":"2022-02-16 11:07:19.000000000","message":"here we still leave part/suffix dir lying around","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"85efc61a773f8f687a80d05edfb947a16a192fac","unresolved":false,"context_lines":[{"line_number":1662,"context_line":"                    cleaving_context.store(broker)"},{"line_number":1663,"context_line":"                    # Because nothing was here we wont count it in the shard"},{"line_number":1664,"context_line":"                    # batch count."},{"line_number":1665,"context_line":"                    return CLEAVE_EMPTY"},{"line_number":1666,"context_line":"                # Else, it wasn\u0027t newly created by us, and"},{"line_number":1667,"context_line":"                # we don\u0027t know what\u0027s in it or why. Let it get"},{"line_number":1668,"context_line":"                # replicated and counted in the batch count."}],"source_content_type":"text/x-python","patch_set":1,"id":"fe3e3da6_88eac6b3","line":1665,"in_reply_to":"d7fa228a_54e5355d","updated":"2022-02-18 10:11:58.000000000","message":"Done","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2d97beb5e38cbf73185ae186ad26090bb6748042","unresolved":true,"context_lines":[{"line_number":1730,"context_line":"                \u0027%s successes, %s required.\u0027, shard_range, quote(broker.path),"},{"line_number":1731,"context_line":"                replication_successes, replication_quorum)"},{"line_number":1732,"context_line":"            self._increment_stat(\u0027cleaved\u0027, \u0027failure\u0027, statsd\u003dTrue)"},{"line_number":1733,"context_line":"            return CLEAVE_FAILED"},{"line_number":1734,"context_line":""},{"line_number":1735,"context_line":"        handoff_path \u003d shard_broker.db_file.rsplit(\u0027/\u0027, 3)[0]"},{"line_number":1736,"context_line":"        self.logger.debug(\u0027cleaning up handoff path: %s\u0027, handoff_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"f96baf89_1f0c455d","line":1733,"updated":"2022-02-16 11:07:19.000000000","message":"here we probably want to leave the shard db file in place","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"85efc61a773f8f687a80d05edfb947a16a192fac","unresolved":false,"context_lines":[{"line_number":1730,"context_line":"                \u0027%s successes, %s required.\u0027, shard_range, quote(broker.path),"},{"line_number":1731,"context_line":"                replication_successes, replication_quorum)"},{"line_number":1732,"context_line":"            self._increment_stat(\u0027cleaved\u0027, \u0027failure\u0027, statsd\u003dTrue)"},{"line_number":1733,"context_line":"            return CLEAVE_FAILED"},{"line_number":1734,"context_line":""},{"line_number":1735,"context_line":"        handoff_path \u003d shard_broker.db_file.rsplit(\u0027/\u0027, 3)[0]"},{"line_number":1736,"context_line":"        self.logger.debug(\u0027cleaning up handoff path: %s\u0027, handoff_path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bd3b3aba_a3cb23e2","line":1733,"in_reply_to":"f96baf89_1f0c455d","updated":"2022-02-18 10:11:58.000000000","message":"Ack","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1bcc8eb309923c3fe65bd04348594cc8daf2f920","unresolved":true,"context_lines":[{"line_number":1733,"context_line":"            return CLEAVE_FAILED"},{"line_number":1734,"context_line":""},{"line_number":1735,"context_line":"        handoff_path \u003d shard_broker.db_file.rsplit(\u0027/\u0027, 3)[0]"},{"line_number":1736,"context_line":"        self.logger.debug(\u0027cleaning up handoff path: %s\u0027, handoff_path)"},{"line_number":1737,"context_line":"        try:"},{"line_number":1738,"context_line":"            os.rmdir(handoff_path)"},{"line_number":1739,"context_line":"        except (OSError, IOError) as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"000dc10c_d37b82aa","line":1736,"updated":"2022-02-14 22:19:50.000000000","message":"this debug line might should go","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e562a3edacc71dbff6c828bb382c1871e89c2afe","unresolved":true,"context_lines":[{"line_number":1733,"context_line":"            return CLEAVE_FAILED"},{"line_number":1734,"context_line":""},{"line_number":1735,"context_line":"        handoff_path \u003d shard_broker.db_file.rsplit(\u0027/\u0027, 3)[0]"},{"line_number":1736,"context_line":"        self.logger.debug(\u0027cleaning up handoff path: %s\u0027, handoff_path)"},{"line_number":1737,"context_line":"        try:"},{"line_number":1738,"context_line":"            os.rmdir(handoff_path)"},{"line_number":1739,"context_line":"        except (OSError, IOError) as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"13a82ae7_48fd1048","line":1736,"in_reply_to":"000dc10c_d37b82aa","updated":"2022-02-17 15:16:24.000000000","message":"strictly, it\u0027s not necessarily a handoff, although it would only be cleaned up if it were an empty handoff","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c39be5a8285770ea9e83c66e6025852065bcfb7e","unresolved":true,"context_lines":[{"line_number":1749,"context_line":"                              shard_partition_path)"},{"line_number":1750,"context_line":"            try:"},{"line_number":1751,"context_line":"                os.rmdir(shard_partition_path)"},{"line_number":1752,"context_line":"            except (OSError, IOError) as e:"},{"line_number":1753,"context_line":"                if e.errno not in (errno.ENOENT, errno.ENOTEMPTY):"},{"line_number":1754,"context_line":"                    raise"},{"line_number":1755,"context_line":"            return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"798f9129_5ad6a467","line":1752,"updated":"2022-02-17 18:48:03.000000000","message":"since we\u0027re doing this unconditionally on failure/success I think the rmdir has a good chance of hitting this exception","commit_id":"12a4e607ebc4a8b2592395cb862fe2aaa84e1dfe"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"85efc61a773f8f687a80d05edfb947a16a192fac","unresolved":true,"context_lines":[{"line_number":1749,"context_line":"                              shard_partition_path)"},{"line_number":1750,"context_line":"            try:"},{"line_number":1751,"context_line":"                os.rmdir(shard_partition_path)"},{"line_number":1752,"context_line":"            except (OSError, IOError) as e:"},{"line_number":1753,"context_line":"                if e.errno not in (errno.ENOENT, errno.ENOTEMPTY):"},{"line_number":1754,"context_line":"                    raise"},{"line_number":1755,"context_line":"            return result"}],"source_content_type":"text/x-python","patch_set":2,"id":"c9365248_94132329","line":1752,"in_reply_to":"798f9129_5ad6a467","updated":"2022-02-18 10:11:58.000000000","message":"good point. Currently CLEAVE_FAILED implies the db is still in place so no point trying to rmdir, so we could make this conditional. But, that would mean that CLEAVE_FAILED forever implied \u0027db intact\u0027, which is less explicit than I\u0027d like.","commit_id":"12a4e607ebc4a8b2592395cb862fe2aaa84e1dfe"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8ae5a72650b24b15f0aa533fd19aac30ca8f20c3","unresolved":true,"context_lines":[{"line_number":1691,"context_line":"        self.logger.info("},{"line_number":1692,"context_line":"            \u0027Replicating new shard container %s (%s) for %s\u0027,"},{"line_number":1693,"context_line":"            quote(shard_broker.path), shard_broker.db_file,"},{"line_number":1694,"context_line":"            own_shard_range)"},{"line_number":1695,"context_line":""},{"line_number":1696,"context_line":"        success, responses \u003d self._replicate_object("},{"line_number":1697,"context_line":"            shard_part, shard_broker.db_file, node_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"daf3e898_a530b81a","line":1694,"updated":"2022-02-23 15:38:27.000000000","message":"this is still useful","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f9a6b11237fb38c06641a26962ff5da3d1e1312b","unresolved":false,"context_lines":[{"line_number":1691,"context_line":"        self.logger.info("},{"line_number":1692,"context_line":"            \u0027Replicating new shard container %s (%s) for %s\u0027,"},{"line_number":1693,"context_line":"            quote(shard_broker.path), shard_broker.db_file,"},{"line_number":1694,"context_line":"            own_shard_range)"},{"line_number":1695,"context_line":""},{"line_number":1696,"context_line":"        success, responses \u003d self._replicate_object("},{"line_number":1697,"context_line":"            shard_part, shard_broker.db_file, node_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"83453e3c_c82721fe","line":1694,"in_reply_to":"daf3e898_a530b81a","updated":"2023-06-26 20:41:09.000000000","message":"Got it (and more!) in https://review.opendev.org/c/openstack/swift/+/875220","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"266e366eb7e8da3115fca4e1ae628da6ad5fa7f1","unresolved":true,"context_lines":[{"line_number":1747,"context_line":"            shard_partition_path \u003d shard_broker.db_file.rsplit(\u0027/\u0027, 3)[0]"},{"line_number":1748,"context_line":"            self.logger.debug(\u0027cleaning up shard partition: %s\u0027,"},{"line_number":1749,"context_line":"                              shard_partition_path)"},{"line_number":1750,"context_line":"            try:"},{"line_number":1751,"context_line":"                os.rmdir(shard_partition_path)"},{"line_number":1752,"context_line":"            except (OSError, IOError) as e:"},{"line_number":1753,"context_line":"                if e.errno not in (errno.ENOENT, errno.ENOTEMPTY):"}],"source_content_type":"text/x-python","patch_set":3,"id":"58ccfac6_1f1edda2","line":1750,"updated":"2022-02-18 10:14:47.000000000","message":"we do have a helper utils.remove_directory that does exactly this...but it is not used universally 😕","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8ae5a72650b24b15f0aa533fd19aac30ca8f20c3","unresolved":true,"context_lines":[{"line_number":1752,"context_line":"            except (OSError, IOError) as e:"},{"line_number":1753,"context_line":"                if e.errno not in (errno.ENOENT, errno.ENOTEMPTY):"},{"line_number":1754,"context_line":"                    raise"},{"line_number":1755,"context_line":"        return result"},{"line_number":1756,"context_line":""},{"line_number":1757,"context_line":"    def _cleave(self, broker):"},{"line_number":1758,"context_line":"        # Returns True if misplaced objects have been moved and the entire"}],"source_content_type":"text/x-python","patch_set":3,"id":"59ff8dd9_375989df","line":1755,"updated":"2022-02-23 15:38:27.000000000","message":"most of this part of the diff is not needed if we squash the rmdir into db_replicator like https://review.opendev.org/c/openstack/swift/+/830535","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1bcc8eb309923c3fe65bd04348594cc8daf2f920","unresolved":true,"context_lines":[{"line_number":1547,"context_line":""},{"line_number":1548,"context_line":"        def fake_replicate_object(part, db_path, node_id):"},{"line_number":1549,"context_line":"            suffix_path \u003d db_path.rsplit(\u0027/\u0027, 2)[0]"},{"line_number":1550,"context_line":"            shutil.rmtree(suffix_path, ignore_errors\u003dTrue)"},{"line_number":1551,"context_line":"            # sanity"},{"line_number":1552,"context_line":"            found_parts.add(part)"},{"line_number":1553,"context_line":"            self.assertTrue(os.path.isdir(os.path.join("}],"source_content_type":"text/x-python","patch_set":1,"id":"cac5b38c_f255edd3","line":1550,"updated":"2022-02-14 22:19:50.000000000","message":"this is a little heavy handed, strangely I didn\u0027t notice any problem playing with different rings when one of the shards happened to land on part 0 same as the root - I guess landing in the same part and suffix is less likely.","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"1bcc8eb309923c3fe65bd04348594cc8daf2f920","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"        self.assertEqual(len(found_parts), 2)"},{"line_number":1573,"context_line":"        # ... but the extra dir(s) always gets cleaned up"},{"line_number":1574,"context_line":"        self.assertEqual([\u00270\u0027], os.listdir(os.path.join("},{"line_number":1575,"context_line":"            self.tempdir, \u0027sda\u0027, \u0027containers\u0027)))"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def test_cleave_root_listing_limit_one(self):"},{"line_number":1578,"context_line":"        # force yield_objects to update its marker and call to the broker\u0027s"}],"source_content_type":"text/x-python","patch_set":1,"id":"e4726b13_2234642b","line":1575,"updated":"2022-02-14 22:19:50.000000000","message":"this is pretty obvious i think:\n\n\tFAIL: test_cleave_cleans_up (test.unit.container.test_sharder.TestSharder)\n\t----------------------------------------------------------------------\n\tTraceback (most recent call last):\n\t  File \"/home/vagrant/swift/test/unit/container/test_sharder.py\", line 1575, in\n\ttest_cleave_cleans_up\n\t    self.tempdir, \u0027sda\u0027, \u0027containers\u0027)))\n\tAssertionError: Lists differ: [\u00270\u0027] !\u003d [\u00270\u0027, \u0027238\u0027, \u00273\u0027]\n\n\tSecond list contains 2 additional elements.\n\tFirst extra element 1:\n\t\u0027238\u0027\n\n\t- [\u00270\u0027]\n\t+ [\u00270\u0027, \u0027238\u0027, \u00273\u0027]","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e562a3edacc71dbff6c828bb382c1871e89c2afe","unresolved":true,"context_lines":[{"line_number":1572,"context_line":"        self.assertEqual(len(found_parts), 2)"},{"line_number":1573,"context_line":"        # ... but the extra dir(s) always gets cleaned up"},{"line_number":1574,"context_line":"        self.assertEqual([\u00270\u0027], os.listdir(os.path.join("},{"line_number":1575,"context_line":"            self.tempdir, \u0027sda\u0027, \u0027containers\u0027)))"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    def test_cleave_root_listing_limit_one(self):"},{"line_number":1578,"context_line":"        # force yield_objects to update its marker and call to the broker\u0027s"}],"source_content_type":"text/x-python","patch_set":1,"id":"d715ea55_e097fe1d","line":1575,"in_reply_to":"e4726b13_2234642b","updated":"2022-02-17 15:16:24.000000000","message":"+1","commit_id":"7ab0e0ed7783c89040461a6d20c239ed41d09d29"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c39be5a8285770ea9e83c66e6025852065bcfb7e","unresolved":true,"context_lines":[{"line_number":1722,"context_line":"        partition_dir \u003d os.path.dirname(suffix_dir)"},{"line_number":1723,"context_line":"        self.assertEqual([broker.db_dir[-3:]], os.listdir(partition_dir))"},{"line_number":1724,"context_line":"        containers_dir \u003d os.path.dirname(partition_dir)"},{"line_number":1725,"context_line":"        self.assertEqual([\u00270\u0027], os.listdir(containers_dir))"},{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"    def test_cleave_root_empty_db_with_pre_existing_shard_db_handoff(self):"},{"line_number":1728,"context_line":"        broker \u003d self._make_broker()"}],"source_content_type":"text/x-python","patch_set":2,"id":"6f474b48_d813641b","line":1725,"updated":"2022-02-17 18:48:03.000000000","message":"interesting, so the existing code calls self.delete_db to cleanup the EMPTY shard_brokers; all that was left to do was to clean up the empty part dirs.\n\n  FAIL: test_cleave_root_empty_db_with_ranges (test.unit.container.test_sharder.TestSharder)\n  ----------------------------------------------------------------------\n  Traceback (most recent call last):\n    File \"/home/vagrant/swift/test/unit/container/test_sharder.py\", line 1725, in test_cleave_root_empty_db_with_ranges\n      self.assertEqual([\u00270\u0027], os.listdir(containers_dir))\n  AssertionError: Lists differ: [\u00270\u0027] !\u003d [\u00270\u0027, \u0027221\u0027, \u002778\u0027, \u0027219\u0027]\n\n  Second list contains 3 additional elements.\n  First extra element 1:\n  \u0027221\u0027\n\n  - [\u00270\u0027]\n  + [\u00270\u0027, \u0027221\u0027, \u002778\u0027, \u0027219\u0027]","commit_id":"12a4e607ebc4a8b2592395cb862fe2aaa84e1dfe"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8ae5a72650b24b15f0aa533fd19aac30ca8f20c3","unresolved":true,"context_lines":[{"line_number":1562,"context_line":"                \u0027devices\u0027: self.tempdir"},{"line_number":1563,"context_line":"            }, logger\u003dself.logger)"},{"line_number":1564,"context_line":"            sharder._local_device_ids \u003d {0, 1, 2}"},{"line_number":1565,"context_line":"            sharder._replicate_object \u003d fake_replicate_object"},{"line_number":1566,"context_line":"            self.assertFalse(sharder._cleave(broker))"},{"line_number":1567,"context_line":""},{"line_number":1568,"context_line":"        context \u003d CleavingContext.load(broker)"}],"source_content_type":"text/x-python","patch_set":3,"id":"86b622d2_4876aadd","line":1565,"updated":"2022-02-23 15:38:27.000000000","message":"this test won\u0027t be very good after we squash https://review.opendev.org/c/openstack/swift/+/830535 unless we drop this mock","commit_id":"f202eea3527f84b573fedd5ca02a926994446def"}]}
