)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"253b489d282396a5106e29d63bc0d6b45f38743d","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Matthew Oliver \u003cmatt@oliver.net.au\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-12-03 10:44:33 +1100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Unlink Asyncs older then reclaim_age"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Any async_pendings that are older then reclaim_age"},{"line_number":10,"context_line":"can cause ghost listings. This patch will quarantine"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"de66d166_5f9d45ff","line":7,"updated":"2024-12-04 17:35:39.000000000","message":"is this *really* what this change is doing anymore?","commit_id":"d4473ad7c6c9727ba2f720396c8bc071ffe45475"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"49c8aa1cea2a12096ec1a917a382e6ecb9f70887","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Matthew Oliver \u003cmatt@oliver.net.au\u003e"},{"line_number":5,"context_line":"CommitDate: 2024-12-03 10:44:33 +1100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Unlink Asyncs older then reclaim_age"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Any async_pendings that are older then reclaim_age"},{"line_number":10,"context_line":"can cause ghost listings. This patch will quarantine"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"b0688cc3_6c83052d","line":7,"in_reply_to":"de66d166_5f9d45ff","updated":"2024-12-04 21:03:55.000000000","message":"opps muissed an obvious one :P","commit_id":"d4473ad7c6c9727ba2f720396c8bc071ffe45475"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0710f2606b705162158ab35c3382b82e90227578","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"86086d9b_4fb0d4fa","updated":"2024-11-15 21:54:02.000000000","message":"this patch does at least two things wrong:\n\n1) we shouldn\u0027t do *anything* about an \"old enough\" async until *after* we\u0027ve tried to send the update one last time.  Presumably the async has been failing for ages (do we have that information in the pickle?  I feel like there\u0027s some situation where we write back into the pickle - maybe only on success?) BUT what if it was going to succeed THIS time!?  If we have a FAILED async; that\u0027s really old - maybe we can log a bunch of information about the failure and the responses and any useful info in the async about the shard or root or target and then \"do something\"\n\n2) the \"do something\" should NEVER be \"Un-processable DELETEd\" - it\u0027s reasonable to \"move it out of the way\" if we\u0027ve been trying it long enough; but that implies \"quarantine\" (not unlink)","commit_id":"ccf87309e39afc40a39264d570b4a68a49d212f3"},{"author":{"_account_id":34930,"name":"Jianjian Huo","email":"jhuo@nvidia.com","username":"jhuo"},"change_message_id":"e58d5bfdbc2b01c59353c6668dac9891ce2dc27d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"af56d585_c17a3645","in_reply_to":"54b60db2_f648607b","updated":"2024-12-05 21:15:26.000000000","message":"``we shouldn\u0027t do anything about an \"old enough\" async until after we\u0027ve tried to send the update one last time``\nif ``reclaim_age`` is 30 days, then this will give one day like grace period to ``reclaim_age`` I think.","commit_id":"ccf87309e39afc40a39264d570b4a68a49d212f3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6f54753c666a711f7fa4d796bdeea3736b67875b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"54b60db2_f648607b","in_reply_to":"86086d9b_4fb0d4fa","updated":"2024-12-01 22:17:19.000000000","message":"yup, both good calls. This is 6 years old, I can\u0027t even remember writing it :P But yeah, maybe pushing it to qaranatine is a much better idea, we know to open these up, so good for an op to do something about it.\n\nI guess it\u0027s time this got rebases.","commit_id":"ccf87309e39afc40a39264d570b4a68a49d212f3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"253b489d282396a5106e29d63bc0d6b45f38743d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e1e60d95_872c29f0","updated":"2024-12-04 17:35:39.000000000","message":"needs another review.","commit_id":"d4473ad7c6c9727ba2f720396c8bc071ffe45475"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e4db7ba7ca829ea403a4ab4246af509d8c47fe38","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7ebbac81_95b0273f","updated":"2024-12-05 21:39:12.000000000","message":"FWIW we have some other work going on in 936959: Fix OldestAsyncManager Run Forever | https://review.opendev.org/c/openstack/swift/+/936959 to get some better viz on \"old asyncs\" \n\nI\u0027d like to suggest we should take time to evaluate the current state of any async older than a reclaim age we have in prod and carefully consider the appropriate level of \"double checking\" we\u0027d like to do before we ultimately/probably \"manually quarantine them\"\n\nIt may also inform additional sanity checking we could add to this patch that might be easier than trying to process any stale asyncs we\u0027ve prematurely (?) moved to quarantine.\n\nOTOH, if we conclude: \"yes the only reasonable action is all of these should be quarantined\" then we have the perfect test bed to carry this patch and watch it work on prod data!","commit_id":"cca866ebbd20858a2856784e9d7dd7ddf87be24d"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"528007f0c0c3c20e4c6c03c0eb58c5b55f671462","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"75907a68_3ad57464","in_reply_to":"7ebbac81_95b0273f","updated":"2024-12-06 00:12:05.000000000","message":"Sounds like a plan!","commit_id":"cca866ebbd20858a2856784e9d7dd7ddf87be24d"}],"swift/common/db_replicator.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"253b489d282396a5106e29d63bc0d6b45f38743d","unresolved":true,"context_lines":[{"line_number":162,"context_line":"        Make an HTTP REPLICATE request"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        :param args: list of json-encodable objects"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        :returns: bufferedhttp response object"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5bd5ef7a_a921b1b0","side":"PARENT","line":165,"updated":"2024-12-04 17:35:39.000000000","message":"unrelated diff","commit_id":"2dad4dcbbd71191d3ec014f93eeefd4d2013d293"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"49c8aa1cea2a12096ec1a917a382e6ecb9f70887","unresolved":true,"context_lines":[{"line_number":162,"context_line":"        Make an HTTP REPLICATE request"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        :param args: list of json-encodable objects"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        :returns: bufferedhttp response object"},{"line_number":167,"context_line":"        \"\"\""},{"line_number":168,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3240a1f5_ee72b623","side":"PARENT","line":165,"in_reply_to":"5bd5ef7a_a921b1b0","updated":"2024-12-04 21:03:55.000000000","message":"probably bloody vscode","commit_id":"2dad4dcbbd71191d3ec014f93eeefd4d2013d293"}],"swift/obj/updater.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a25c92ae2e8d235ea3dc883f202ea3424eae007e","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.recon_cache_path \u003d conf.get(\u0027recon_cache_path\u0027,"},{"line_number":70,"context_line":"                                         \u0027/var/cache/swift\u0027)"},{"line_number":71,"context_line":"        self.rcache \u003d os.path.join(self.recon_cache_path, \u0027object.recon\u0027)"},{"line_number":72,"context_line":"        self.reclaim_age \u003d int(conf.get(\u0027reclaim_age\u0027, DEFAULT_RECLAIM_AGE))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _listdir(self, path):"},{"line_number":75,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"df87a7cf_fd437e3d","line":72,"updated":"2017-12-12 04:03:45.000000000","message":"We could potentially create a DiskFileManager and get the value from there, as then we might be able to capture the exact reclaim_age used. But that might be a little confusing for ops.","commit_id":"ccf87309e39afc40a39264d570b4a68a49d212f3"}]}
