)]}'
{"swift/account/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"749e18fe74ae1c6dfe58224de465e228d0b7c6c0","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                    pass"},{"line_number":188,"context_line":"            if (req.headers.get(\u0027x-account-override-deleted\u0027, \u0027no\u0027).lower()"},{"line_number":189,"context_line":"                    !\u003d \u0027yes\u0027 and broker.is_deleted()) \\"},{"line_number":190,"context_line":"                    or not os.path.exists(broker.db_file):"},{"line_number":191,"context_line":"                return HTTPNotFound(request\u003dreq)"},{"line_number":192,"context_line":"            broker.put_container(container, req.headers[\u0027x-put-timestamp\u0027],"},{"line_number":193,"context_line":"                                 req.headers[\u0027x-delete-timestamp\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_a4665928","line":190,"updated":"2020-06-20 00:52:52.000000000","message":"Yeah, this seems sensible enough.","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"}],"swift/container/updater.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3178704c05594b02a14b73d359b9c025c0578b91","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            if statuses \u003d\u003d [404] * len(events):"},{"line_number":274,"context_line":"                # Run on all other nodes to be sure the account was deleted"},{"line_number":275,"context_line":"                nodes \u003d self.get_account_ring().get_more_nodes(part)"},{"line_number":276,"context_line":"                with ContextPool(10) as pool:"},{"line_number":277,"context_line":"                    events \u003d [pool.spawn(self.container_report,"},{"line_number":278,"context_line":"                                         node, part, container,"},{"line_number":279,"context_line":"                                         info[\u0027put_timestamp\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_e853fd14","line":276,"updated":"2020-03-19 23:45:00.000000000","message":"Is the pool really needed here? I think once all the nodes that proxy suggested threw 404, there is no rush anymore, I think. The updater can iterate sequentially, with a minimal expenditure of resources.","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"c0e1a2880c1ebbe6a60a0a53919cdf5b20609225","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            if statuses \u003d\u003d [404] * len(events):"},{"line_number":274,"context_line":"                # Run on all other nodes to be sure the account was deleted"},{"line_number":275,"context_line":"                nodes \u003d self.get_account_ring().get_more_nodes(part)"},{"line_number":276,"context_line":"                with ContextPool(10) as pool:"},{"line_number":277,"context_line":"                    events \u003d [pool.spawn(self.container_report,"},{"line_number":278,"context_line":"                                         node, part, container,"},{"line_number":279,"context_line":"                                         info[\u0027put_timestamp\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_5b013f6b","line":276,"in_reply_to":"1fa4df85_e853fd14","updated":"2020-03-26 21:54:53.000000000","message":"On most account devices, the cost will be really low as it will return 404 because the DB file won\u0027t exist.\n\nAlso, if it hits a DB file, it will be on different devices, likely on different servers, so IMHO the resource impact is quite negligible.\n\nBut I don\u0027t want it to be too slow because it would delay the real work of the container-update. I also don\u0027t like the idea of a new configuration option. Maybe re-use concurrency? WDYT?","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e54d64c7febe4a7a72bb0196a5d1d5977516a3d8","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            if statuses \u003d\u003d [404] * len(events):"},{"line_number":274,"context_line":"                # Run on all other nodes to be sure the account was deleted"},{"line_number":275,"context_line":"                nodes \u003d self.get_account_ring().get_more_nodes(part)"},{"line_number":276,"context_line":"                with ContextPool(10) as pool:"},{"line_number":277,"context_line":"                    events \u003d [pool.spawn(self.container_report,"},{"line_number":278,"context_line":"                                         node, part, container,"},{"line_number":279,"context_line":"                                         info[\u0027put_timestamp\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff570b3c_0044581a","line":276,"in_reply_to":"df33271e_5b013f6b","updated":"2020-05-28 23:01:47.000000000","message":"I\u0027m bothered that updater already runs at the configured concurrency, and now you\u0027re adding this request amplification to it. Of course, you have a real experience, and I don\u0027t, but still, it\u0027s iffy. I agree about not having the extra knob.","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"70a9f877da25b01b077160cd8d7e75c73bd0e3b9","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                                         info[\u0027object_count\u0027],"},{"line_number":282,"context_line":"                                         info[\u0027bytes_used\u0027],"},{"line_number":283,"context_line":"                                         info[\u0027storage_policy_index\u0027])"},{"line_number":284,"context_line":"                              for node in nodes]"},{"line_number":285,"context_line":"                    statuses \u003d [ev.wait() for ev in events]"},{"line_number":286,"context_line":"                if statuses \u003d\u003d [404] * len(events):"},{"line_number":287,"context_line":"                    # If account does not exist anywhere in the cluster,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_19d4464a","line":284,"updated":"2020-03-28 13:32:45.000000000","message":"this is potentially like... a LOT of requests right?  \"nodes\" in this context is all the devices in the cluster?","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"35c44e96f8f1344897ccd46d3bc0fb9519feb1be","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                                         info[\u0027object_count\u0027],"},{"line_number":282,"context_line":"                                         info[\u0027bytes_used\u0027],"},{"line_number":283,"context_line":"                                         info[\u0027storage_policy_index\u0027])"},{"line_number":284,"context_line":"                              for node in nodes]"},{"line_number":285,"context_line":"                    statuses \u003d [ev.wait() for ev in events]"},{"line_number":286,"context_line":"                if statuses \u003d\u003d [404] * len(events):"},{"line_number":287,"context_line":"                    # If account does not exist anywhere in the cluster,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_f53c4e30","line":284,"in_reply_to":"3fa7e38b_19d4464a","updated":"2020-03-31 19:52:18.000000000","message":"Yes, all devices of the account ring. That\u0027s why there is a ContextPool to limit the concurrency.","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"aa8585e5c098452d0064f7f1fcb58d7c0a44a00f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                    # If account does not exist anywhere in the cluster,"},{"line_number":288,"context_line":"                    # simulate a success so the container updates its reports"},{"line_number":289,"context_line":"                    # timestamps. That way, it gets a chance to be reclaimed"},{"line_number":290,"context_line":"                    statuses \u003d [200] * len(events)"},{"line_number":291,"context_line":"            successes \u003d len([s for s in statuses if is_success(s)])"},{"line_number":292,"context_line":"            if successes \u003e\u003d majority_size(len(events)):"},{"line_number":293,"context_line":"                self.logger.increment(\u0027successes\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_38dd9c12","line":290,"updated":"2020-01-27 21:57:37.000000000","message":"I\u0027m a little nervous about us doing this even when the container hasn\u0027t been marked deleted, or worse yet, when the stats are non-zero. Seeing those\n\n Update report failed for ...\n\nlog lines seem like a pretty good signal that the operator has some cleanup that needs doing...","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"3178704c05594b02a14b73d359b9c025c0578b91","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                    # If account does not exist anywhere in the cluster,"},{"line_number":288,"context_line":"                    # simulate a success so the container updates its reports"},{"line_number":289,"context_line":"                    # timestamps. That way, it gets a chance to be reclaimed"},{"line_number":290,"context_line":"                    statuses \u003d [200] * len(events)"},{"line_number":291,"context_line":"            successes \u003d len([s for s in statuses if is_success(s)])"},{"line_number":292,"context_line":"            if successes \u003e\u003d majority_size(len(events)):"},{"line_number":293,"context_line":"                self.logger.increment(\u0027successes\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_080bf923","line":290,"in_reply_to":"3fa7e38b_38dd9c12","updated":"2020-03-19 23:45:00.000000000","message":"The problem with leaving this as-is is two or three-fold\n\n0. The log entry is done with debug priority, so it\u0027s invisible to most simple-minded operators. They never know it\u0027s there.\n\n1. The log is not harmless, although mostly because of the traceback. I literally have a bug outstanding about it in the RH system: they\u0027re running out of /var space. The system loops between account server and updater.\n\n2. The operator is not capable to establishing that container can be removed and then removing it manually.","commit_id":"6fec67691d8d411f51491b98a946d3d4ee9af583"}]}
