)]}'
{"swift/cli/recon.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"5561823e8de547a6eab3362558cb82770762891c","unresolved":false,"context_lines":[{"line_number":986,"context_line":"            if options.unmounted:"},{"line_number":987,"context_line":"                self.umount_check(hosts)"},{"line_number":988,"context_line":"            if options.replication:"},{"line_number":989,"context_line":"                self.replication_check(hosts)"},{"line_number":990,"context_line":"            if options.auditor:"},{"line_number":991,"context_line":"                if self.server_type \u003d\u003d \u0027object\u0027:"},{"line_number":992,"context_line":"                    self.object_auditor_check(hosts)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_8c763da2","line":989,"updated":"2015-06-01 07:16:17.000000000","message":"This breaks compability with servers that run an older version of the middleware (before this commit). I think we need to find a different solution to this.","commit_id":"ec93c70ce58a97ae8720a9bfe21bb2c9256fcb25"}],"swift/common/db_replicator.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d8a9d300d6d13489b655079b3376ab3728c0217e","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            else:"},{"line_number":463,"context_line":"                self.logger.exception(_(\u0027ERROR reading db %s\u0027), object_file)"},{"line_number":464,"context_line":"            nodes \u003d self.ring.get_part_nodes(int(partition))"},{"line_number":465,"context_line":"            self._add_failure_stats([node[\u0027replication_ip\u0027] for node in nodes])"},{"line_number":466,"context_line":"            self.logger.increment(\u0027failures\u0027)"},{"line_number":467,"context_line":"            return"},{"line_number":468,"context_line":"        # The db is considered deleted if the delete_timestamp value is greater"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_98f53c53","line":465,"updated":"2015-02-18 00:53:06.000000000","message":"So I guess the point here is that if there is a timeout or the database if corrupted then this file will fail to replicate to all node to increment the failure count for these nodes.\n\nOK, I think I get this part.","commit_id":"da5b876c90f6ca87da1fb93004ee6a21ab7bf2b0"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"08c4058bf1f8a09c5ec7235444d5ba5f55a746f3","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            else:"},{"line_number":463,"context_line":"                self.logger.exception(_(\u0027ERROR reading db %s\u0027), object_file)"},{"line_number":464,"context_line":"            nodes \u003d self.ring.get_part_nodes(int(partition))"},{"line_number":465,"context_line":"            self._add_failure_stats([node[\u0027replication_ip\u0027] for node in nodes])"},{"line_number":466,"context_line":"            self.logger.increment(\u0027failures\u0027)"},{"line_number":467,"context_line":"            return"},{"line_number":468,"context_line":"        # The db is considered deleted if the delete_timestamp value is greater"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_385c6a25","line":465,"in_reply_to":"da86d52c_98f53c53","updated":"2015-02-24 01:50:34.000000000","message":"@Matthew, Thanks for the comment. Yes, you are right. I will put rule for counting later.","commit_id":"da5b876c90f6ca87da1fb93004ee6a21ab7bf2b0"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d8a9d300d6d13489b655079b3376ab3728c0217e","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            if not self.delete_db(broker):"},{"line_number":517,"context_line":"                nodes \u003d self.ring.get_part_nodes(int(partition))"},{"line_number":518,"context_line":"                self._add_failure_stats([node[\u0027replication_ip\u0027] for node"},{"line_number":519,"context_line":"                                         in nodes])"},{"line_number":520,"context_line":"        self.logger.timing_since(\u0027timing\u0027, start_time)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"    def delete_db(self, broker):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_78540822","line":519,"updated":"2015-02-18 00:53:06.000000000","message":"But here it doesn\u0027t make as much sense, unless I\u0027m missing something...\n\nYou are marking failures for all nodes, where up in line 500 some of these nodes could have been replicated to successfully (returned success is True), isn\u0027t this double handling or invalidating the resulting stats?","commit_id":"da5b876c90f6ca87da1fb93004ee6a21ab7bf2b0"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"08c4058bf1f8a09c5ec7235444d5ba5f55a746f3","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            if not self.delete_db(broker):"},{"line_number":517,"context_line":"                nodes \u003d self.ring.get_part_nodes(int(partition))"},{"line_number":518,"context_line":"                self._add_failure_stats([node[\u0027replication_ip\u0027] for node"},{"line_number":519,"context_line":"                                         in nodes])"},{"line_number":520,"context_line":"        self.logger.timing_since(\u0027timing\u0027, start_time)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"    def delete_db(self, broker):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_98bab621","line":519,"in_reply_to":"da86d52c_78540822","updated":"2015-02-24 01:50:34.000000000","message":"@Matthew, Thanks for the comment. This is a bug so I\u0027m re-checking and brush up the code in next patch.","commit_id":"da5b876c90f6ca87da1fb93004ee6a21ab7bf2b0"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1b9da5cc524a808e54ef17c09f328af2482d45f1","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        except (Exception, Timeout):"},{"line_number":553,"context_line":"            failure_devs_info.update([(failure_dev[\u0027replication_ip\u0027],"},{"line_number":554,"context_line":"                                       failure_dev[\u0027device\u0027])"},{"line_number":555,"context_line":"                                      for failure_dev in repl_nodes])"},{"line_number":556,"context_line":"            self.logger.exception(\u0027UNHANDLED EXCEPTION: in post replicate \u0027"},{"line_number":557,"context_line":"                                  \u0027hook for %s\u0027, broker.db_file)"},{"line_number":558,"context_line":"        if not shouldbehere and all(responses):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_2ca6290f","line":555,"updated":"2015-06-01 07:30:30.000000000","message":"Does a timeout or a failure in the _post_replicate_hook mean replication has failed? We don\u0027t seem to normally increment the success or failure count here.","commit_id":"ec93c70ce58a97ae8720a9bfe21bb2c9256fcb25"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"622a0b1d22d5f221e2bad7634f2f329acdcdecb8","unresolved":false,"context_lines":[{"line_number":552,"context_line":"        except (Exception, Timeout):"},{"line_number":553,"context_line":"            failure_devs_info.update([(failure_dev[\u0027replication_ip\u0027],"},{"line_number":554,"context_line":"                                       failure_dev[\u0027device\u0027])"},{"line_number":555,"context_line":"                                      for failure_dev in repl_nodes])"},{"line_number":556,"context_line":"            self.logger.exception(\u0027UNHANDLED EXCEPTION: in post replicate \u0027"},{"line_number":557,"context_line":"                                  \u0027hook for %s\u0027, broker.db_file)"},{"line_number":558,"context_line":"        if not shouldbehere and all(responses):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5afe65bd_9cf62bd6","line":555,"in_reply_to":"7a016987_2ca6290f","updated":"2015-06-02 04:03:54.000000000","message":"Yeah, it looks only for logging. So you are right. I will remove this increment logic.","commit_id":"ec93c70ce58a97ae8720a9bfe21bb2c9256fcb25"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1b9da5cc524a808e54ef17c09f328af2482d45f1","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                                for target_dev in repl_nodes])"},{"line_number":569,"context_line":"        self.stats[\u0027success\u0027] +\u003d len(target_devs_info - failure_devs_info)"},{"line_number":570,"context_line":"        self._add_failure_stats(failure_devs_info)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        self.logger.timing_since(\u0027timing\u0027, start_time)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def delete_db(self, broker):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a016987_ac133900","line":571,"updated":"2015-06-01 07:30:30.000000000","message":"If the broker has failed to replicate to only one of the repl_nodes, you\u0027d be marking the nodes that were successful here as failures.\n\nSince we are in the replicate function here, can\u0027t we tell which node it actually fails on. In fact isn\u0027t that what the \u0027not success\u0027 statement on line 546/7 tells us? So rather then adding all of the nodes time and time again, can\u0027t we have it in that one place?","commit_id":"ec93c70ce58a97ae8720a9bfe21bb2c9256fcb25"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"622a0b1d22d5f221e2bad7634f2f329acdcdecb8","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                                for target_dev in repl_nodes])"},{"line_number":569,"context_line":"        self.stats[\u0027success\u0027] +\u003d len(target_devs_info - failure_devs_info)"},{"line_number":570,"context_line":"        self._add_failure_stats(failure_devs_info)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        self.logger.timing_since(\u0027timing\u0027, start_time)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"    def delete_db(self, broker):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5afe65bd_a8775dd3","line":571,"in_reply_to":"7a016987_ac133900","updated":"2015-06-02 04:03:54.000000000","message":"As we discussed in IRC, I changed the spec for this patch from node base to device base. Sorry, it might confuse you. And I should re-write points of this patch as a comment on the patch. anyone can\u0027t find it now :-)","commit_id":"ec93c70ce58a97ae8720a9bfe21bb2c9256fcb25"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2868bf03e657cdec575f2bfa31bd51cc7a688187","unresolved":false,"context_lines":[{"line_number":559,"context_line":"            if not self.delete_db(broker):"},{"line_number":560,"context_line":"                failure_devs_info.update("},{"line_number":561,"context_line":"                    [(failure_dev[\u0027replication_ip\u0027], failure_dev[\u0027device\u0027])"},{"line_number":562,"context_line":"                     for failure_dev in repl_nodes])"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        target_devs_info \u003d set([(target_dev[\u0027replication_ip\u0027],"},{"line_number":565,"context_line":"                                 target_dev[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_2f0d7a37","line":562,"updated":"2015-08-08 23:15:29.000000000","message":"This part is a tough one, or maybe it\u0027s just because I\u0027m on a plane and not thinking correctly.\n\nfirstly, if we are going to the effort of marking a failure when we can\u0027t delete the database.. which isn\u0027t bad, then we should also log it, so an OP can figure out why the failure count was incremented:\n\n  self.logger.error(_(\"Failed to delete %s %s\"), self.server_type,\n                    getattr(broker, self.server_type))\n\nI think that part makes sense, the tough part (the part I\u0027m not 100% sure about) is should be adding all primary nodes to the failue_devs_info if all(responses) means they did what they were suppose to... That is to say did they really fail. I can see that sure something when wrong, but whats the best way of specifiying it? I mean what is the cause of a failure in self.delete_db(broker)?\nLooking at the function, it\u0027ll return False only if an OSError is raised while actually deleting files. So can we really blame the primary nodes for this? I\u0027m not sure we can. Not if its an filesystem issue on this handoff node failing the os.rmdir.\n\nSo I\u0027m not sure we can simply increment the failure or not increment the success in this case.","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"3ac1b26855801fc9d104da2d8d8cda4e2c6577d4","unresolved":false,"context_lines":[{"line_number":559,"context_line":"            if not self.delete_db(broker):"},{"line_number":560,"context_line":"                failure_devs_info.update("},{"line_number":561,"context_line":"                    [(failure_dev[\u0027replication_ip\u0027], failure_dev[\u0027device\u0027])"},{"line_number":562,"context_line":"                     for failure_dev in repl_nodes])"},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"        target_devs_info \u003d set([(target_dev[\u0027replication_ip\u0027],"},{"line_number":565,"context_line":"                                 target_dev[\u0027device\u0027])"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_0e4660bf","line":562,"in_reply_to":"1a4dcd0f_2f0d7a37","updated":"2015-08-10 12:30:21.000000000","message":"As for the logging, it already provided at L583.\nIn oder to keep consistency for counts, I think it better to have a counting rule when replication failed even if there is a differenct reason for it.","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"}],"swift/common/middleware/recon.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"68deb4d66aa87c3df140cf8d94dd359f9d7b2d6e","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                                           \u0027replication_stats\u0027,"},{"line_number":142,"context_line":"                                           \u0027replication_last\u0027,"},{"line_number":143,"context_line":"                                           \u0027object_replication_time\u0027,"},{"line_number":144,"context_line":"                                           \u0027object_replication_last\u0027],"},{"line_number":145,"context_line":"                                          self.object_recon_cache)"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_4d57195b","line":144,"updated":"2014-12-05 03:59:41.000000000","message":"Do we need to have the object_replication_time and object_replication_last any more, seeing as they are providing the same data as replication_time and replication_last?","commit_id":"45eec886587504f6afa1d7df39bcf8170330ef0a"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d8a9d300d6d13489b655079b3376ab3728c0217e","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                                           \u0027object_replication_last\u0027],"},{"line_number":145,"context_line":"                                          self.object_recon_cache)"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            return None"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def get_device_info(self):"},{"line_number":150,"context_line":"        \"\"\"get devices\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_71d8a3ef","line":147,"updated":"2015-02-18 00:53:06.000000000","message":"Couldn\u0027t we simplify this code a little:\n\n    def get_replication_info(self, recon_type):\n        \"\"\"get replication info\"\"\"\n        replication_list \u003d [\u0027replication_time\u0027,\n                            \u0027replication_stats\u0027,\n                            \u0027replication_last\u0027]\n        if recon_type \u003d\u003d \u0027account\u0027:\n            return self._from_recon_cache(replication_list,\n                                          self.account_recon_cache)\n        elif recon_type \u003d\u003d \u0027container\u0027:\n            return self._from_recon_cache(replication_list,\n                                          self.container_recon_cache)\n        elif recon_type \u003d\u003d \u0027object\u0027:\n            replication_list +\u003d [\u0027object_replication_time\u0027,\n                                 \u0027object_replication_last\u0027]\n            return self._from_recon_cache(replication_list,\n                                          self.object_recon_cache)\n        else:\n            return None","commit_id":"da5b876c90f6ca87da1fb93004ee6a21ab7bf2b0"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"08c4058bf1f8a09c5ec7235444d5ba5f55a746f3","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                                           \u0027object_replication_last\u0027],"},{"line_number":145,"context_line":"                                          self.object_recon_cache)"},{"line_number":146,"context_line":"        else:"},{"line_number":147,"context_line":"            return None"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def get_device_info(self):"},{"line_number":150,"context_line":"        \"\"\"get devices\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_3881ca4a","line":147,"in_reply_to":"da86d52c_71d8a3ef","updated":"2015-02-24 01:50:34.000000000","message":"@Matthew, Thanks for the comment. I will do refactoring it in next patch.","commit_id":"da5b876c90f6ca87da1fb93004ee6a21ab7bf2b0"}],"swift/obj/replicator.py":[{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"622a0b1d22d5f221e2bad7634f2f329acdcdecb8","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        except (Exception, Timeout):"},{"line_number":332,"context_line":"            failure_devs_info.update([(failure_dev[\u0027replication_ip\u0027],"},{"line_number":333,"context_line":"                                       failure_dev[\u0027device\u0027])"},{"line_number":334,"context_line":"                                      for failure_dev in job[\u0027nodes\u0027]])"},{"line_number":335,"context_line":"            self.logger.exception(_(\"Error syncing handoff partition\"))"},{"line_number":336,"context_line":"        finally:"},{"line_number":337,"context_line":"            target_devs_info \u003d set([(target_dev[\u0027replication_ip\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"5afe65bd_4748dc5b","line":334,"updated":"2015-06-02 04:03:54.000000000","message":"I will remove this increment logic.","commit_id":"ec93c70ce58a97ae8720a9bfe21bb2c9256fcb25"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2868bf03e657cdec575f2bfa31bd51cc7a688187","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                        failure_devs_info.update("},{"line_number":328,"context_line":"                            [(failure_dev[\u0027replication_ip\u0027],"},{"line_number":329,"context_line":"                              failure_dev[\u0027device\u0027])"},{"line_number":330,"context_line":"                             for failure_dev in job[\u0027nodes\u0027]])"},{"line_number":331,"context_line":"                else:"},{"line_number":332,"context_line":"                    self.delete_partition(job[\u0027path\u0027])"},{"line_number":333,"context_line":"            elif not suffixes:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_cf12d658","line":330,"updated":"2015-08-08 23:15:29.000000000","message":"Similarly, self.delete_handoff_objs actually only goes and deletes the local files (os.rmdir again), so again is it the replicated nodes fault. If anything its only this handoff node is considered a failure.","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"3ac1b26855801fc9d104da2d8d8cda4e2c6577d4","unresolved":false,"context_lines":[{"line_number":327,"context_line":"                        failure_devs_info.update("},{"line_number":328,"context_line":"                            [(failure_dev[\u0027replication_ip\u0027],"},{"line_number":329,"context_line":"                              failure_dev[\u0027device\u0027])"},{"line_number":330,"context_line":"                             for failure_dev in job[\u0027nodes\u0027]])"},{"line_number":331,"context_line":"                else:"},{"line_number":332,"context_line":"                    self.delete_partition(job[\u0027path\u0027])"},{"line_number":333,"context_line":"            elif not suffixes:"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_b38eb525","line":330,"in_reply_to":"1a4dcd0f_cf12d658","updated":"2015-08-10 12:30:21.000000000","message":"If failed here, that means replicator will replicate it again. So I deal with it as a failure.","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2868bf03e657cdec575f2bfa31bd51cc7a688187","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        jobs \u003d []"},{"line_number":548,"context_line":"        self.all_devs_info.update("},{"line_number":549,"context_line":"            [(dev[\u0027replication_ip\u0027], dev[\u0027device\u0027])"},{"line_number":550,"context_line":"             for dev in policy.object_ring.devs if dev])"},{"line_number":551,"context_line":"        data_dir \u003d get_data_dir(policy)"},{"line_number":552,"context_line":"        for local_dev in [dev for dev in policy.object_ring.devs"},{"line_number":553,"context_line":"                          if (dev"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_ef0f922c","line":550,"updated":"2015-08-08 23:15:29.000000000","message":"So your building a dictionary of all devs in the object ring? couldn\u0027t this potentially get rather large (in large clusters)?","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"3ac1b26855801fc9d104da2d8d8cda4e2c6577d4","unresolved":false,"context_lines":[{"line_number":547,"context_line":"        jobs \u003d []"},{"line_number":548,"context_line":"        self.all_devs_info.update("},{"line_number":549,"context_line":"            [(dev[\u0027replication_ip\u0027], dev[\u0027device\u0027])"},{"line_number":550,"context_line":"             for dev in policy.object_ring.devs if dev])"},{"line_number":551,"context_line":"        data_dir \u003d get_data_dir(policy)"},{"line_number":552,"context_line":"        for local_dev in [dev for dev in policy.object_ring.devs"},{"line_number":553,"context_line":"                          if (dev"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_c90952df","line":550,"in_reply_to":"1a4dcd0f_ef0f922c","updated":"2015-08-10 12:30:21.000000000","message":"I think it\u0027s not big even if large cluster env. do you worry about usage of memory or something?\n# a set which is consist of replication_ip and device","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"2868bf03e657cdec575f2bfa31bd51cc7a688187","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                    [(failure_dev[\u0027replication_ip\u0027],"},{"line_number":566,"context_line":"                      failure_dev[\u0027device\u0027])"},{"line_number":567,"context_line":"                     for failure_dev in policy.object_ring.devs"},{"line_number":568,"context_line":"                     if failure_dev])"},{"line_number":569,"context_line":"                self.logger.warn(_(\u0027%s is not mounted\u0027), local_dev[\u0027device\u0027])"},{"line_number":570,"context_line":"                continue"},{"line_number":571,"context_line":"            unlink_older_than(tmp_path, time.time() - self.reclaim_age)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_8f1cce6b","line":568,"updated":"2015-08-08 23:15:29.000000000","message":"Am I missing something here, but you \u0027if\u0027 filter in the above list comprehension isn\u0027t filtering anything. It\u0027s just adding all dev\u0027s dont you want something ike:\n\n  [ ... if failure_dev \u003d\u003d local_dev[\"device\"]\n\nor something.","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"},{"author":{"_account_id":12193,"name":"Hisashi Osanai","email":"osanai.hisashi@jp.fujitsu.com","username":"ho"},"change_message_id":"3ac1b26855801fc9d104da2d8d8cda4e2c6577d4","unresolved":false,"context_lines":[{"line_number":565,"context_line":"                    [(failure_dev[\u0027replication_ip\u0027],"},{"line_number":566,"context_line":"                      failure_dev[\u0027device\u0027])"},{"line_number":567,"context_line":"                     for failure_dev in policy.object_ring.devs"},{"line_number":568,"context_line":"                     if failure_dev])"},{"line_number":569,"context_line":"                self.logger.warn(_(\u0027%s is not mounted\u0027), local_dev[\u0027device\u0027])"},{"line_number":570,"context_line":"                continue"},{"line_number":571,"context_line":"            unlink_older_than(tmp_path, time.time() - self.reclaim_age)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a4dcd0f_f3fbdd45","line":568,"in_reply_to":"1a4dcd0f_8f1cce6b","updated":"2015-08-10 12:30:21.000000000","message":"In this case, we can\u0027t distinguish the device. In order to keep consistency of count, I deal with them as failures.","commit_id":"5037158a6958d9a707e8db46cb7aa2835375ce71"}]}
