)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"33dd1ce709eef2a0580365bc85e0c97ec3c8f3f6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"directory regardless of a policy setting. This means that, for example,"},{"line_number":11,"context_line":"if there are \u0027objects\u0027, \u0027objects-1\u0027 and \u0027objects-2\u0027 directories in the"},{"line_number":12,"context_line":"device and swift.conf contains only [storage-policy:0] and"},{"line_number":13,"context_line":"[storage-policy:1] sections (because of some operational mistakes),"},{"line_number":14,"context_line":"object-auditor audits all files not only in \u0027objects\u0027 and \u0027objects-1\u0027"},{"line_number":15,"context_line":"directories but also in \u0027objects-2\u0027 directory."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_1fa16da9","line":13,"updated":"2015-02-10 00:08:12.000000000","message":"It looks to me this situation may arise not only because of mistakes, but also when a node was down and rejoins the cluster. Is this the case?","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"83268002e4bc23c2d3afebc3c120e054be581c39","unresolved":false,"context_lines":[{"line_number":10,"context_line":"directory regardless of a policy setting. This means that, for example,"},{"line_number":11,"context_line":"if there are \u0027objects\u0027, \u0027objects-1\u0027 and \u0027objects-2\u0027 directories in the"},{"line_number":12,"context_line":"device and swift.conf contains only [storage-policy:0] and"},{"line_number":13,"context_line":"[storage-policy:1] sections (because of some operational mistakes),"},{"line_number":14,"context_line":"object-auditor audits all files not only in \u0027objects\u0027 and \u0027objects-1\u0027"},{"line_number":15,"context_line":"directories but also in \u0027objects-2\u0027 directory."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da86d52c_3fb9d1cb","line":13,"updated":"2015-02-09 23:57:19.000000000","message":"nit: it\u0027s not just operational mistakes, so this parenthetical comment isn\u0027t needed.","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"}],"swift/common/storage_policy.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5294a50511cc204253a13baee39a67eed2b0ac8e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                raise PolicyError(\"No policy with index %s\" % policy_idx)"},{"line_number":254,"context_line":"            else:"},{"line_number":255,"context_line":"                return Ring(swift_dir,"},{"line_number":256,"context_line":"                            ring_name\u003d_get_policy_string(\u0027object\u0027, policy_idx))"},{"line_number":257,"context_line":"        if not policy.object_ring:"},{"line_number":258,"context_line":"            policy.load_ring(swift_dir)"},{"line_number":259,"context_line":"        return policy.object_ring"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_45d3145f","line":256,"updated":"2015-02-10 00:09:56.000000000","message":"If the ring doesn\u0027t exist then creating a ring using the constructor will throw an IOError. To you will need to catch and handle this.\n\nie:\n\n  Ring(\u0027/etc/swift\u0027, ring_name\u003d\u0027blahblah\u0027)\n\n  IOError: [Errno 2] No such file or directory: \u0027/etc/swift/blahblah.ring.gz\u0027","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"7d6cbafbfa0da7f8b405a10c8f73f010e2312ffb","unresolved":false,"context_lines":[{"line_number":253,"context_line":"                raise PolicyError(\"No policy with index %s\" % policy_idx)"},{"line_number":254,"context_line":"            else:"},{"line_number":255,"context_line":"                return Ring(swift_dir,"},{"line_number":256,"context_line":"                            ring_name\u003d_get_policy_string(\u0027object\u0027, policy_idx))"},{"line_number":257,"context_line":"        if not policy.object_ring:"},{"line_number":258,"context_line":"            policy.load_ring(swift_dir)"},{"line_number":259,"context_line":"        return policy.object_ring"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_da125a61","line":256,"in_reply_to":"da86d52c_45d3145f","updated":"2015-02-10 22:49:53.000000000","message":"Thanks for testing. Replicator will catch IOError and output an error log.","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"}],"swift/obj/diskfile.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"33dd1ce709eef2a0580365bc85e0c97ec3c8f3f6","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            raise"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"def extract_policy_index(obj_path, conf_check\u003dTrue):"},{"line_number":158,"context_line":"    \"\"\""},{"line_number":159,"context_line":"    Extracts the policy index for an object (based on the name of the objects"},{"line_number":160,"context_line":"    directory) given the device-relative path to the object. Returns 0 in"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_65a57803","line":157,"updated":"2015-02-10 00:08:12.000000000","message":"This looks unused.","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"7d6cbafbfa0da7f8b405a10c8f73f010e2312ffb","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            raise"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"def extract_policy_index(obj_path, conf_check\u003dTrue):"},{"line_number":158,"context_line":"    \"\"\""},{"line_number":159,"context_line":"    Extracts the policy index for an object (based on the name of the objects"},{"line_number":160,"context_line":"    directory) given the device-relative path to the object. Returns 0 in"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_3a59b65b","line":157,"in_reply_to":"da86d52c_65a57803","updated":"2015-02-10 22:49:53.000000000","message":"It\u0027s my mistake. The previous patches used it but current version does not use it. Thanks.","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"}],"swift/obj/replicator.py":[{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"83268002e4bc23c2d3afebc3c120e054be581c39","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        \"\"\""},{"line_number":415,"context_line":"        jobs \u003d []"},{"line_number":416,"context_line":"        obj_ring \u003d self.get_object_ring(policy_idx)"},{"line_number":417,"context_line":"        data_dir \u003d get_data_dir(policy_idx, conf_check\u003dFalse)"},{"line_number":418,"context_line":"        for local_dev in [dev for dev in obj_ring.devs"},{"line_number":419,"context_line":"                          if (dev"},{"line_number":420,"context_line":"                              and dev[\u0027replication_ip\u0027] in ips"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_c2453a16","line":417,"updated":"2015-02-09 23:57:19.000000000","message":"conf_check needs to be True (ie the default)\n\nReplication has to fail because we don\u0027t have a ring and/or the conf. But it\u0027s good to log that there is data to replicate, but can\u0027t be because of the misconfiguration.","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"7d6cbafbfa0da7f8b405a10c8f73f010e2312ffb","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        \"\"\""},{"line_number":415,"context_line":"        jobs \u003d []"},{"line_number":416,"context_line":"        obj_ring \u003d self.get_object_ring(policy_idx)"},{"line_number":417,"context_line":"        data_dir \u003d get_data_dir(policy_idx, conf_check\u003dFalse)"},{"line_number":418,"context_line":"        for local_dev in [dev for dev in obj_ring.devs"},{"line_number":419,"context_line":"                          if (dev"},{"line_number":420,"context_line":"                              and dev[\u0027replication_ip\u0027] in ips"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_9a04627f","line":417,"in_reply_to":"da86d52c_c2453a16","updated":"2015-02-10 22:49:53.000000000","message":"PolicyError raised here will be catched in collect_jobs function and warning message will be logged.","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"83268002e4bc23c2d3afebc3c120e054be581c39","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            dev_path \u003d join(self.devices_dir, local_dev[\u0027device\u0027])"},{"line_number":425,"context_line":"            obj_path \u003d join(dev_path, data_dir)"},{"line_number":426,"context_line":"            tmp_path \u003d join(dev_path, get_tmp_dir(policy_idx,"},{"line_number":427,"context_line":"                                                  conf_check\u003dFalse))"},{"line_number":428,"context_line":"            if self.mount_check and not ismount(dev_path):"},{"line_number":429,"context_line":"                self.logger.warn(_(\u0027%s is not mounted\u0027), local_dev[\u0027device\u0027])"},{"line_number":430,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_62580efb","line":427,"updated":"2015-02-09 23:57:19.000000000","message":"conf_check needs to be true (see above)","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"},{"author":{"_account_id":8859,"name":"Daisuke Morita","email":"morita.daisuke@ntti3.com","username":"morrisson"},"change_message_id":"7d6cbafbfa0da7f8b405a10c8f73f010e2312ffb","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            dev_path \u003d join(self.devices_dir, local_dev[\u0027device\u0027])"},{"line_number":425,"context_line":"            obj_path \u003d join(dev_path, data_dir)"},{"line_number":426,"context_line":"            tmp_path \u003d join(dev_path, get_tmp_dir(policy_idx,"},{"line_number":427,"context_line":"                                                  conf_check\u003dFalse))"},{"line_number":428,"context_line":"            if self.mount_check and not ismount(dev_path):"},{"line_number":429,"context_line":"                self.logger.warn(_(\u0027%s is not mounted\u0027), local_dev[\u0027device\u0027])"},{"line_number":430,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_1a02323e","line":427,"in_reply_to":"da86d52c_62580efb","updated":"2015-02-10 22:49:53.000000000","message":"ditto","commit_id":"853c8256c24e4fe63731176d44d2433728de1677"}],"swift/obj/updater.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"534b56830187bee8dee94353b3a69c92fcf67707","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            try:"},{"line_number":161,"context_line":"                base, policy \u003d split_policy_string(asyncdir)"},{"line_number":162,"context_line":"            except PolicyError as e:"},{"line_number":163,"context_line":"                policy \u003d StoragePolicy(e.idx, \u0027Policy-%d\u0027 % int(e.idx))"},{"line_number":164,"context_line":"            for prefix in self._listdir(async_pending):"},{"line_number":165,"context_line":"                prefix_path \u003d os.path.join(async_pending, prefix)"},{"line_number":166,"context_line":"                if not os.path.isdir(prefix_path):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_e5562529","line":163,"updated":"2015-08-12 18:26:31.000000000","message":"1) we still need a warning here because we found a problem with swift.conf (probably)\n2) lets add a clear comment here that we\u0027re going to *assume* that a policy e.idx exists because the dir is here so we\u0027ll make one with that index to enable processing the updates in this dir.","commit_id":"d20a9efc62253eb8b4f08ca3d20782eb82a2e1f0"}]}
