)]}'
{"swift/common/middleware/automated_tiering.py":[{"author":{"_account_id":17901,"name":"Akihito Takai","email":"takaiak@nttdata.co.jp","username":"AkihitoTakai"},"change_message_id":"4dfecc0580c6dde37c25c0a4f38dc3c38af9525b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        +-----------+-------------------+-------------------+"},{"line_number":40,"context_line":"        Note:"},{"line_number":41,"context_line":"        \u0027Link\u0027 means objects to refer to other objects. Link objects have"},{"line_number":42,"context_line":"        converted metadata to restore metadata of the refered entity."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"In State1, there are nothing special. Any requests to tiered objects will be"},{"line_number":45,"context_line":"processed in the same way as requests to normal objects."}],"source_content_type":"text/x-python","patch_set":54,"id":"da36d5c6_abc41a5f","line":42,"range":{"start_line":42,"start_character":54,"end_line":42,"end_character":61},"updated":"2017-02-21 19:53:40.000000000","message":"(nit) \u0027refered\u0027 --\u003e \u0027referred\u0027 :-)","commit_id":"4a60f0bd62be114f242956f6e1cff2d8159e5d55"}],"swift/common/middleware/delivery_address.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c1d49acb25c7d6fdd0b322dd0db591614e3f2a14","unresolved":false,"context_lines":[{"line_number":18,"context_line":"This middleware is for only demo."},{"line_number":19,"context_line":"This is not component of automated-tiering."},{"line_number":20,"context_line":"This middleware will be deleted."},{"line_number":21,"context_line":"\"\"\""},{"line_number":22,"context_line":"class DeliveryAddress(object):"},{"line_number":23,"context_line":"    def __init__(self, app, conf):"},{"line_number":24,"context_line":"        self.app \u003d app"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_a9faef72","line":21,"updated":"2016-03-03 14:54:18.000000000","message":"I think you should consider, when you remove this middleware, to include a operator/developer tool \"swift-deliverer-enqueue\" like bin/swift-reconciler-enqueue [1]\n\n1. https://github.com/openstack/swift/blob/master/bin/swift-reconciler-enqueue","commit_id":"47895862f0df6800c7cd74eb4a06fb08f5818c6e"}],"swift/obj/addresser.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        while True:"},{"line_number":246,"context_line":"            try:"},{"line_number":247,"context_line":"                routine_method()"},{"line_number":248,"context_line":"                self.logger.info("},{"line_number":249,"context_line":"                    \u0027sleeping between intervals in %s (%ss)\u0027 %"},{"line_number":250,"context_line":"                    (routine_name, self.interval))"},{"line_number":251,"context_line":"                sleep(self.interval)"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_dbf00a00","line":248,"range":{"start_line":248,"start_character":28,"end_line":248,"end_character":32},"updated":"2016-10-07 15:43:54.000000000","message":"this seems more like a debug statement, but i\u0027d check with consistency in other similar daemons","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        while True:"},{"line_number":246,"context_line":"            try:"},{"line_number":247,"context_line":"                routine_method()"},{"line_number":248,"context_line":"                self.logger.info("},{"line_number":249,"context_line":"                    \u0027sleeping between intervals in %s (%ss)\u0027 %"},{"line_number":250,"context_line":"                    (routine_name, self.interval))"},{"line_number":251,"context_line":"                sleep(self.interval)"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_2e9f9104","line":248,"range":{"start_line":248,"start_character":28,"end_line":248,"end_character":32},"in_reply_to":"1a95cdbc_dbf00a00","updated":"2016-10-11 08:42:18.000000000","message":"I imitated container-reconciler. Ummm... I don\u0027t have a strong will on log level.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def address(self, addressing_diskfile):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Try to register destination container name with TIERING_INFO_ACCOUNT."},{"line_number":273,"context_line":"        If the registration is successful, throw a DeliveryTask."},{"line_number":274,"context_line":"        :param addressing_diskfile: a AddressingDiskFile instance"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        successful \u003d self.register_dst_container(addressing_diskfile)"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_fbb6a6f7","line":273,"range":{"start_line":272,"start_character":8,"end_line":273,"end_character":64},"updated":"2016-10-07 15:43:54.000000000","message":"it is not very clear to me the difference between register_dst_container and throw_delivery_task, more especifically it is not clear why you need register_dst_container, whereas throw_delivery_task is more clear.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def address(self, addressing_diskfile):"},{"line_number":271,"context_line":"        \"\"\""},{"line_number":272,"context_line":"        Try to register destination container name with TIERING_INFO_ACCOUNT."},{"line_number":273,"context_line":"        If the registration is successful, throw a DeliveryTask."},{"line_number":274,"context_line":"        :param addressing_diskfile: a AddressingDiskFile instance"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        successful \u003d self.register_dst_container(addressing_diskfile)"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_91928056","line":273,"range":{"start_line":272,"start_character":8,"end_line":273,"end_character":64},"in_reply_to":"1a95cdbc_fbb6a6f7","updated":"2016-10-11 08:42:18.000000000","message":"The reason why addresser registers destination containers is to get derivative container list when addressers to check consistency.\nAddressers cannot get the correct derivative container list by using derivative_container_prefix and derivative_policies, because in split brain case, another original policy and another derivative container prefix may be applied to the original container.\nTherefore, addresser registers derivative container.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            except (DiskFileNotExist, DiskFileDeleted):"},{"line_number":347,"context_line":"                continue"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def register_dst_container(self, addressing_diskfile):"},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        :param addressing_diskfile: a instance of AddressingDiskFile"},{"line_number":352,"context_line":"        :returns: the request does succeed or not"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_7b9a966f","line":349,"range":{"start_line":349,"start_character":8,"end_line":349,"end_character":30},"updated":"2016-10-07 15:43:54.000000000","message":"maybe just add a comment about the purpose of this method","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            except (DiskFileNotExist, DiskFileDeleted):"},{"line_number":347,"context_line":"                continue"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    def register_dst_container(self, addressing_diskfile):"},{"line_number":350,"context_line":"        \"\"\""},{"line_number":351,"context_line":"        :param addressing_diskfile: a instance of AddressingDiskFile"},{"line_number":352,"context_line":"        :returns: the request does succeed or not"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_fc93934d","line":349,"range":{"start_line":349,"start_character":8,"end_line":349,"end_character":30},"in_reply_to":"1a95cdbc_7b9a966f","updated":"2016-10-11 08:42:18.000000000","message":"OK. I will add a comment.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                return headers, objects"},{"line_number":496,"context_line":"        return HeaderKeyDict(), []"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def direct_put_to_tiering_info_account(self, container, obj, headers):"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        :param container: a container name in TIERING_INFO_ACCOUNT"},{"line_number":501,"context_line":"        :param obj: a object name"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_9bc84224","line":498,"updated":"2016-10-07 15:43:54.000000000","message":"just wondering why send requests directly to each node, instead of sending requests to proxy as it is done by the expirer, it seems like you are going through a lot of trouble handling everything here. \n\ncheck out here for what i\u0027m referring to: https://github.com/openstack/swift/blob/master/swift/obj/expirer.py#L302,L305","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":495,"context_line":"                return headers, objects"},{"line_number":496,"context_line":"        return HeaderKeyDict(), []"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def direct_put_to_tiering_info_account(self, container, obj, headers):"},{"line_number":499,"context_line":"        \"\"\""},{"line_number":500,"context_line":"        :param container: a container name in TIERING_INFO_ACCOUNT"},{"line_number":501,"context_line":"        :param obj: a object name"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_9c1d3769","line":498,"in_reply_to":"1a95cdbc_9bc84224","updated":"2016-10-11 08:42:18.000000000","message":"The reason why addressers send requests directly is to reduce PUT requests of zero-byte objects to object-servers. Deliverers will not use the actual zero-byte objects in object-server, therefore, sending requests to proxy will cause unnecessary requests.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":983,"context_line":""},{"line_number":984,"context_line":"    @property"},{"line_number":985,"context_line":"    def query_to_update_link(self):"},{"line_number":986,"context_line":"        return \u0027?multipart-manifest\u003dput\u0027"},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"    def body_to_update_link(self, obj_headers):"},{"line_number":989,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_91758399","line":986,"range":{"start_line":986,"start_character":9,"end_line":986,"end_character":40},"updated":"2016-10-07 15:43:54.000000000","message":"it would be cool to start using symlinks","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":983,"context_line":""},{"line_number":984,"context_line":"    @property"},{"line_number":985,"context_line":"    def query_to_update_link(self):"},{"line_number":986,"context_line":"        return \u0027?multipart-manifest\u003dput\u0027"},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"    def body_to_update_link(self, obj_headers):"},{"line_number":989,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_9cc8d776","line":986,"range":{"start_line":986,"start_character":9,"end_line":986,"end_character":40},"in_reply_to":"1a95cdbc_91758399","updated":"2016-10-11 08:42:18.000000000","message":"In my current plan, changing link implementation patch will be made after automated-tiering (slo version) is merged. Because this automated-tiering patch is big, I think discussion topic should be divided into smaller one.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"}],"swift/obj/deliverer.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c1d49acb25c7d6fdd0b322dd0db591614e3f2a14","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.container_ring \u003d None"},{"line_number":53,"context_line":"        self.conn_timeout \u003d float(conf.get(\u0027conn_timeout\u0027, 0.5))"},{"line_number":54,"context_line":"        self.node_timeout \u003d float(conf.get(\u0027node_timeout\u0027, 10))"},{"line_number":55,"context_line":"        self.ips \u003d whataremyips()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def execute_delivery_task(self, delivery_task):"},{"line_number":58,"context_line":"        self.logger.info(\u0027Start processing %s\u0027 % delivery_task)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_89945343","line":55,"updated":"2016-03-03 14:54:18.000000000","message":"I think you should consider update to whataremyips to allow configuration of bind_ip for control and flexibility of operator and developer\n\n@@ -48,11 +45,12 @@ class ObjectDeliverer(Daemon):\n             conf_path, \u0027Swift Object Deliverer\u0027, request_tries)\n         self.stats \u003d defaultdict(int)\n         self.port \u003d int(conf.get(\u0027bind_port\u0027, 6000))\n+        self.bind_ip \u003d conf.get(\u0027bind_ip\u0027, \u00270.0.0.0\u0027)\n         self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)\n         self.container_ring \u003d None\n         self.conn_timeout \u003d float(conf.get(\u0027conn_timeout\u0027, 0.5))\n         self.node_timeout \u003d float(conf.get(\u0027node_timeout\u0027, 10))\n-        self.ips \u003d whataremyips()\n+        self.ips \u003d whataremyips(self.bind_ip)\n \n     def execute_delivery_task(self, delivery_task):\n         self.logger.info(\u0027Start processing %s\u0027 % delivery_task)","commit_id":"47895862f0df6800c7cd74eb4a06fb08f5818c6e"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"53a1892b20acdea55e186c75e4c55319218aa823","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self.interval \u003d int(conf.get(\u0027interval\u0027) or 300)"},{"line_number":258,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":259,"context_line":"        self.logger \u003d logger or get_logger(conf, log_route\u003d\u0027object-deliverer\u0027)"},{"line_number":260,"context_line":"        conf_path \u003d conf.get(\u0027__file__\u0027) or \u0027/etc/swift/object-deliverer.conf\u0027"},{"line_number":261,"context_line":"        request_tries \u003d int(conf.get(\u0027request_tries\u0027) or 3)"},{"line_number":262,"context_line":"        self.swift \u003d swift or InternalClient("},{"line_number":263,"context_line":"            conf_path, \u0027Swift Object Deliverer\u0027, request_tries)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3ac371cc_51fd716d","line":260,"updated":"2016-08-25 07:13:38.000000000","message":"Hmm, interesting. That means we need duplicated pipeline config in object-deliverer.conf too. (and reconciler/expier does same thing) \n\nIn my thought, that should be merged to /etc/swift/internal-client.conf?","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"a58d42d2bc290bd9a3829c80ad4a85f13f94d95a","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        self.interval \u003d int(conf.get(\u0027interval\u0027) or 300)"},{"line_number":258,"context_line":"        self.swift_dir \u003d conf.get(\u0027swift_dir\u0027, \u0027/etc/swift\u0027)"},{"line_number":259,"context_line":"        self.logger \u003d logger or get_logger(conf, log_route\u003d\u0027object-deliverer\u0027)"},{"line_number":260,"context_line":"        conf_path \u003d conf.get(\u0027__file__\u0027) or \u0027/etc/swift/object-deliverer.conf\u0027"},{"line_number":261,"context_line":"        request_tries \u003d int(conf.get(\u0027request_tries\u0027) or 3)"},{"line_number":262,"context_line":"        self.swift \u003d swift or InternalClient("},{"line_number":263,"context_line":"            conf_path, \u0027Swift Object Deliverer\u0027, request_tries)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a95cdbc_ab30959f","line":260,"in_reply_to":"3ac371cc_51fd716d","updated":"2016-10-06 10:59:09.000000000","message":"Your thought may be correct.\nBut I think the config should be merged in another patch.","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"53a1892b20acdea55e186c75e4c55319218aa823","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":265,"context_line":"        self.bind_ip \u003d conf.get(\u0027bind_ip\u0027, \u00270.0.0.0\u0027)"},{"line_number":266,"context_line":"        self.container_ring \u003d\\"},{"line_number":267,"context_line":"            Ring(self.swift_dir, ring_name\u003d\u0027container\u0027)"},{"line_number":268,"context_line":"        self.ips \u003d whataremyips(self.bind_ip)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":36,"id":"3ac371cc_711ced13","line":267,"updated":"2016-08-25 07:13:38.000000000","message":"why do we need container ring as the member of this instance?","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"a58d42d2bc290bd9a3829c80ad4a85f13f94d95a","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        self.stats \u003d defaultdict(int)"},{"line_number":265,"context_line":"        self.bind_ip \u003d conf.get(\u0027bind_ip\u0027, \u00270.0.0.0\u0027)"},{"line_number":266,"context_line":"        self.container_ring \u003d\\"},{"line_number":267,"context_line":"            Ring(self.swift_dir, ring_name\u003d\u0027container\u0027)"},{"line_number":268,"context_line":"        self.ips \u003d whataremyips(self.bind_ip)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def stats_log(self, metric, msg, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a95cdbc_ab089592","line":267,"in_reply_to":"3ac371cc_711ced13","updated":"2016-10-06 10:59:09.000000000","message":"Because ObjectDeliverer will delete task objects from task containers directly. Direct delete object to container requires container ring.","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"53a1892b20acdea55e186c75e4c55319218aa823","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        self.logger.info(\u0027End processing %s\u0027 % unification_task)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def assigned_task_check(self, delivery_task):"},{"line_number":313,"context_line":"        nodes \u003d delivery_task.task_primary_nodes[:3]"},{"line_number":314,"context_line":"        return any([is_local_device("},{"line_number":315,"context_line":"            self.ips, None, node[\"ip\"], node[\"port\"]) for node in nodes])"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"3ac371cc_516c5108","line":313,"updated":"2016-08-25 07:13:38.000000000","message":"s/task_primary_nodes/primary_nodes/\n\nwhy do we need :3 for this?","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"a58d42d2bc290bd9a3829c80ad4a85f13f94d95a","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        self.logger.info(\u0027End processing %s\u0027 % unification_task)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def assigned_task_check(self, delivery_task):"},{"line_number":313,"context_line":"        nodes \u003d delivery_task.task_primary_nodes[:3]"},{"line_number":314,"context_line":"        return any([is_local_device("},{"line_number":315,"context_line":"            self.ips, None, node[\"ip\"], node[\"port\"]) for node in nodes])"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"1a95cdbc_8b32f90e","line":313,"in_reply_to":"3ac371cc_516c5108","updated":"2016-10-06 10:59:09.000000000","message":"\u003e s/task_primary_nodes/primary_nodes/\n\nI replaced \u0027task_primary_nodes\u0027 with \u0027executor_nodes\u0027\n\n\u003e why do we need :3 for this?\n\nHmm, \"[:3]\" doesn\u0027t make sense.\nI removed it in next patch set.","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"53a1892b20acdea55e186c75e4c55319218aa823","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def iter_assigned_tasks(self):"},{"line_number":405,"context_line":"        return [task for task in self.iter_tasks()"},{"line_number":406,"context_line":"                if self.assigned_task_check(task)]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def deliver(self):"},{"line_number":409,"context_line":"        run_pool \u003d GreenPool(size\u003dself.concurrency)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3ac371cc_91da49e8","line":406,"updated":"2016-08-25 07:13:38.000000000","message":"Could you make this as iterator (generator) (not a list)","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"a58d42d2bc290bd9a3829c80ad4a85f13f94d95a","unresolved":false,"context_lines":[{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def iter_assigned_tasks(self):"},{"line_number":405,"context_line":"        return [task for task in self.iter_tasks()"},{"line_number":406,"context_line":"                if self.assigned_task_check(task)]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def deliver(self):"},{"line_number":409,"context_line":"        run_pool \u003d GreenPool(size\u003dself.concurrency)"}],"source_content_type":"text/x-python","patch_set":36,"id":"1a95cdbc_661a4470","line":406,"in_reply_to":"3ac371cc_91da49e8","updated":"2016-10-06 10:59:09.000000000","message":"Done","commit_id":"ecd7a74048cb9bc221bd66aefa3031d631c90475"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            run_pool.spawn(self.execute, task)"},{"line_number":73,"context_line":"        run_pool.waitall()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def execute(self, task):"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        :param task: a TieringTask instance"},{"line_number":78,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_fba14647","line":75,"updated":"2016-10-07 15:43:54.000000000","message":"could each Task object have it\u0027s own execute method?","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            run_pool.spawn(self.execute, task)"},{"line_number":73,"context_line":"        run_pool.waitall()"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def execute(self, task):"},{"line_number":76,"context_line":"        \"\"\""},{"line_number":77,"context_line":"        :param task: a TieringTask instance"},{"line_number":78,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_bc4bdbaf","line":75,"in_reply_to":"1a95cdbc_fba14647","updated":"2016-10-11 08:42:18.000000000","message":"Umm... in my thought, \"task\" means \"an object to be executed\". Therefore I don\u0027t want to implement \"execute\" method in task classes...","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                return"},{"line_number":83,"context_line":"            if task.requires_deliverer_to_copy_object:"},{"line_number":84,"context_line":"                account, container, obj \u003d task.aco_to_get_object"},{"line_number":85,"context_line":"                _, obj_headers, content_iter \u003d self.swift.get_object("},{"line_number":86,"context_line":"                    account, container, obj,"},{"line_number":87,"context_line":"                    headers\u003dtask.headers_to_get_object)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                account, container, obj \u003d task.aco_to_put_object"},{"line_number":90,"context_line":"                self.swift.create_container("},{"line_number":91,"context_line":"                    account, container,"},{"line_number":92,"context_line":"                    headers\u003dtask.headers_to_put_container)"},{"line_number":93,"context_line":"                self.swift.upload_object("},{"line_number":94,"context_line":"                    FileLikeIter(content_iter),"},{"line_number":95,"context_line":"                    account, container, obj,"},{"line_number":96,"context_line":"                    headers\u003dtask.headers_to_put_object(obj_headers))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            if task.requires_deliverer_to_head_object:"},{"line_number":99,"context_line":"                account, container, obj \u003d task.aco_to_head_object"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_3112ef57","line":96,"range":{"start_line":85,"start_character":16,"end_line":96,"end_character":68},"updated":"2016-10-07 15:43:54.000000000","message":"maybe use a copy request instead?","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                return"},{"line_number":83,"context_line":"            if task.requires_deliverer_to_copy_object:"},{"line_number":84,"context_line":"                account, container, obj \u003d task.aco_to_get_object"},{"line_number":85,"context_line":"                _, obj_headers, content_iter \u003d self.swift.get_object("},{"line_number":86,"context_line":"                    account, container, obj,"},{"line_number":87,"context_line":"                    headers\u003dtask.headers_to_get_object)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"                account, container, obj \u003d task.aco_to_put_object"},{"line_number":90,"context_line":"                self.swift.create_container("},{"line_number":91,"context_line":"                    account, container,"},{"line_number":92,"context_line":"                    headers\u003dtask.headers_to_put_container)"},{"line_number":93,"context_line":"                self.swift.upload_object("},{"line_number":94,"context_line":"                    FileLikeIter(content_iter),"},{"line_number":95,"context_line":"                    account, container, obj,"},{"line_number":96,"context_line":"                    headers\u003dtask.headers_to_put_object(obj_headers))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            if task.requires_deliverer_to_head_object:"},{"line_number":99,"context_line":"                account, container, obj \u003d task.aco_to_head_object"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_bc559b1e","line":96,"range":{"start_line":85,"start_character":16,"end_line":96,"end_character":68},"in_reply_to":"1a95cdbc_3112ef57","updated":"2016-10-11 08:42:18.000000000","message":"We cannot use a COPY request here. Because COPY requests will update X-Timestamp of the entity objects. In automated-tiering, timestamp MUST be preserved for consistency between the original container and derivative containers. Please see the consistency definition in swift.obj.addresser.ConsistencyDiskFile comments.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                    account, container, obj,"},{"line_number":96,"context_line":"                    headers\u003dtask.headers_to_put_object(obj_headers))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            if task.requires_deliverer_to_head_object:"},{"line_number":99,"context_line":"                account, container, obj \u003d task.aco_to_head_object"},{"line_number":100,"context_line":"                obj_headers \u003d self.swift.get_object_metadata("},{"line_number":101,"context_line":"                    account, container, obj,"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_dbb3aa98","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":53},"updated":"2016-10-07 15:43:54.000000000","message":"not clear what\u0027s this is doing...","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                    account, container, obj,"},{"line_number":96,"context_line":"                    headers\u003dtask.headers_to_put_object(obj_headers))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"            if task.requires_deliverer_to_head_object:"},{"line_number":99,"context_line":"                account, container, obj \u003d task.aco_to_head_object"},{"line_number":100,"context_line":"                obj_headers \u003d self.swift.get_object_metadata("},{"line_number":101,"context_line":"                    account, container, obj,"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_d736a8b3","line":98,"range":{"start_line":98,"start_character":15,"end_line":98,"end_character":53},"in_reply_to":"1a95cdbc_dbb3aa98","updated":"2016-10-11 08:42:18.000000000","message":"This is only for LinkUpdateTasks. In LinkUpdateTask case, deliverer need to PUT link object with the same metadata of the entity object. Therefore, deliverer HEAD to the entity object.\nI will update the property name and add comments.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"94c2795643798be92eccbf1a6b84d5b5b6c4fea6","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                path \u003d self.swift.make_path(account, container, obj)"},{"line_number":108,"context_line":"                link_headers \u003d task.headers_to_update_link(obj_headers)"},{"line_number":109,"context_line":"                link_body \u003d task.body_to_update_link(obj_headers)"},{"line_number":110,"context_line":"                self.swift.make_request("},{"line_number":111,"context_line":"                    \u0027PUT\u0027, path + query, link_headers, (2,), link_body)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            if task.requires_deliverer_to_delete_object:"}],"source_content_type":"text/x-python","patch_set":37,"id":"1a95cdbc_113c13c7","line":110,"range":{"start_line":110,"start_character":21,"end_line":110,"end_character":39},"updated":"2016-10-07 15:43:54.000000000","message":"nice, i\u0027d use this too in the addresser...see my comments there.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"},{"author":{"_account_id":14766,"name":"Kazuhiro MIYAHARA","email":"miyahara.kazuhiro@lab.ntt.co.jp","username":"miyahara"},"change_message_id":"d421d1bc64b47c5956d51d6e438289d5d3b0cdf0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                path \u003d self.swift.make_path(account, container, obj)"},{"line_number":108,"context_line":"                link_headers \u003d task.headers_to_update_link(obj_headers)"},{"line_number":109,"context_line":"                link_body \u003d task.body_to_update_link(obj_headers)"},{"line_number":110,"context_line":"                self.swift.make_request("},{"line_number":111,"context_line":"                    \u0027PUT\u0027, path + query, link_headers, (2,), link_body)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"            if task.requires_deliverer_to_delete_object:"}],"source_content_type":"text/x-python","patch_set":37,"id":"fa6399be_979fd05e","line":110,"range":{"start_line":110,"start_character":21,"end_line":110,"end_character":39},"in_reply_to":"1a95cdbc_113c13c7","updated":"2016-10-11 08:42:18.000000000","message":"I added answer comments for your question. Please see direct_put_to_tiering_info_account in swift.obj.addresser.","commit_id":"84de3272c5bc2d8806674c604003665a5160350c"}]}
