)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"73928f881a51ac4cf4de3a146b759e5a4c801d9d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     HCLTech-SSW \u003chcl_ss_oss@hcl.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-09-27 02:46:15 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implemented the fix to support the feature of undeleting the"},{"line_number":8,"context_line":"account which was marked for deletion for the reaper."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"To undelete the account, the following cURL command would"},{"line_number":11,"context_line":"be invoked to undelete the account."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7f515b1d_1686a167","line":8,"range":{"start_line":7,"start_character":0,"end_line":8,"end_character":53},"updated":"2017-09-27 10:37:22.000000000","message":"First line of a commit message should be short, this should be something like:\n\n    Add ability to undelete an account","commit_id":"c31f1f7a82f22d18c3278d5871a308d5fa80ad4e"}],"doc/manpages/account-server.conf.5":[{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":141,"context_line":"Ignored if IOPRIO_CLASS_IDLE is set."},{"line_number":142,"context_line":".IP \\fBdelay_reaping\\fR"},{"line_number":143,"context_line":"Normally, the reaper begins deleting account information for deleted accounts"},{"line_number":144,"context_line":"after 7 days; you can set this to delay its work however. The value is in"},{"line_number":145,"context_line":"seconds. The default is 0.  The sum of this value and the"},{"line_number":146,"context_line":"container-updater interval should be less than the account-replicator"},{"line_number":147,"context_line":"reclaim_age. This ensures that once the account-reaper has deleted a"}],"source_content_type":"text/troff","patch_set":7,"id":"3f4b6375_44506e33","line":144,"updated":"2017-11-02 12:51:02.000000000","message":"I see you updated doc. But is the default 7 days or 0 seconds ? It\u0027s not clear in this description.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":141,"context_line":"Ignored if IOPRIO_CLASS_IDLE is set."},{"line_number":142,"context_line":".IP \\fBdelay_reaping\\fR"},{"line_number":143,"context_line":"Normally, the reaper begins deleting account information for deleted accounts"},{"line_number":144,"context_line":"after 7 days; you can set this to delay its work however. The value is in"},{"line_number":145,"context_line":"seconds. The default is 0.  The sum of this value and the"},{"line_number":146,"context_line":"container-updater interval should be less than the account-replicator"},{"line_number":147,"context_line":"reclaim_age. This ensures that once the account-reaper has deleted a"}],"source_content_type":"text/troff","patch_set":7,"id":"3f4b6375_58c306ee","line":144,"in_reply_to":"3f4b6375_44506e33","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":142,"context_line":".IP \\fBdelay_reaping\\fR"},{"line_number":143,"context_line":"Normally, the reaper begins deleting account information for deleted accounts"},{"line_number":144,"context_line":"after 7 days; you can set this to delay its work however. The value is in"},{"line_number":145,"context_line":"seconds. The default is 0.  The sum of this value and the"},{"line_number":146,"context_line":"container-updater interval should be less than the account-replicator"},{"line_number":147,"context_line":"reclaim_age. This ensures that once the account-reaper has deleted a"},{"line_number":148,"context_line":"container there is sufficient time for the container-updater to report to the"}],"source_content_type":"text/troff","patch_set":11,"id":"3f4b6375_5418911c","line":145,"range":{"start_line":145,"start_character":9,"end_line":145,"end_character":25},"updated":"2017-11-02 12:51:02.000000000","message":"This is not true anymore","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":142,"context_line":".IP \\fBdelay_reaping\\fR"},{"line_number":143,"context_line":"Normally, the reaper begins deleting account information for deleted accounts"},{"line_number":144,"context_line":"after 7 days; you can set this to delay its work however. The value is in"},{"line_number":145,"context_line":"seconds. The default is 0.  The sum of this value and the"},{"line_number":146,"context_line":"container-updater interval should be less than the account-replicator"},{"line_number":147,"context_line":"reclaim_age. This ensures that once the account-reaper has deleted a"},{"line_number":148,"context_line":"container there is sufficient time for the container-updater to report to the"}],"source_content_type":"text/troff","patch_set":11,"id":"3f4b6375_f8b19290","line":145,"range":{"start_line":145,"start_character":9,"end_line":145,"end_character":25},"in_reply_to":"3f4b6375_5418911c","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":142,"context_line":".IP \\fBdelay_reaping\\fR"},{"line_number":143,"context_line":"Normally, the reaper begins deleting account information for deleted accounts"},{"line_number":144,"context_line":"after 7 days; you can set this to delay its work however. The value is in"},{"line_number":145,"context_line":"seconds. The default is 0.  The sum of this value and the"},{"line_number":146,"context_line":"container-updater interval should be less than the account-replicator"},{"line_number":147,"context_line":"reclaim_age. This ensures that once the account-reaper has deleted a"},{"line_number":148,"context_line":"container there is sufficient time for the container-updater to report to the"},{"line_number":149,"context_line":"account before the account DB is removed."},{"line_number":150,"context_line":".RE"}],"source_content_type":"text/troff","patch_set":11,"id":"3f4b6375_b4b345e9","line":147,"range":{"start_line":145,"start_character":28,"end_line":147,"end_character":11},"updated":"2017-11-02 12:51:02.000000000","message":"Default delay_reaping is 604800\nDefault container-updater/interval is 300\nDefault account-replicator/reclaim_age is 604800\n\nThe default values does not match this recommendation.","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":142,"context_line":".IP \\fBdelay_reaping\\fR"},{"line_number":143,"context_line":"Normally, the reaper begins deleting account information for deleted accounts"},{"line_number":144,"context_line":"after 7 days; you can set this to delay its work however. The value is in"},{"line_number":145,"context_line":"seconds. The default is 0.  The sum of this value and the"},{"line_number":146,"context_line":"container-updater interval should be less than the account-replicator"},{"line_number":147,"context_line":"reclaim_age. This ensures that once the account-reaper has deleted a"},{"line_number":148,"context_line":"container there is sufficient time for the container-updater to report to the"},{"line_number":149,"context_line":"account before the account DB is removed."},{"line_number":150,"context_line":".RE"}],"source_content_type":"text/troff","patch_set":11,"id":"3f4b6375_d8aed62c","line":147,"range":{"start_line":145,"start_character":28,"end_line":147,"end_character":11},"in_reply_to":"3f4b6375_b4b345e9","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"}],"doc/source/deployment_guide.rst":[{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":1455,"context_line":"                                             2592000 \u003d 30 days, for example. The sum of"},{"line_number":1456,"context_line":"                                             this value and the container-updater"},{"line_number":1457,"context_line":"                                             ``interval`` should be less than the"},{"line_number":1458,"context_line":"                                             account-replicator ``reclaim_age``. This"},{"line_number":1459,"context_line":"                                             ensures that once the account-reaper has"},{"line_number":1460,"context_line":"                                             deleted a container there is sufficient"},{"line_number":1461,"context_line":"                                             time for the container-updater to report"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_64192a87","line":1458,"updated":"2017-11-02 12:51:02.000000000","message":"With this new default, sum of default delay_reaping and default interval is greater than default reclaim_age now.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":1455,"context_line":"                                             2592000 \u003d 30 days, for example. The sum of"},{"line_number":1456,"context_line":"                                             this value and the container-updater"},{"line_number":1457,"context_line":"                                             ``interval`` should be less than the"},{"line_number":1458,"context_line":"                                             account-replicator ``reclaim_age``. This"},{"line_number":1459,"context_line":"                                             ensures that once the account-reaper has"},{"line_number":1460,"context_line":"                                             deleted a container there is sufficient"},{"line_number":1461,"context_line":"                                             time for the container-updater to report"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_78624240","line":1458,"in_reply_to":"3f4b6375_64192a87","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":611,"context_line":"replication_concurrency        4                      Set to restrict the number of"},{"line_number":612,"context_line":"                                                      concurrent incoming SSYNC"},{"line_number":613,"context_line":"                                                      requests; set to 0 for unlimited"},{"line_number":614,"context_line":"replication_one_per_device     True                   Restricts incoming SSYNC"},{"line_number":615,"context_line":"                                                      requests to one per device,"},{"line_number":616,"context_line":"                                                      replication_currency above"},{"line_number":617,"context_line":"                                                      allowing. This can help control"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bf8cb3f7_c9f9a5c8","line":614,"updated":"2017-12-28 01:16:14.000000000","message":"I think this is still supposed to be\n\n replication_concurrency_per_device\n\n(Option changed in https://review.openstack.org/#/c/390781/ )","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"326e89f9565e0732ee097e90f589bf3576f2ddfe","unresolved":false,"context_lines":[{"line_number":611,"context_line":"replication_concurrency        4                      Set to restrict the number of"},{"line_number":612,"context_line":"                                                      concurrent incoming SSYNC"},{"line_number":613,"context_line":"                                                      requests; set to 0 for unlimited"},{"line_number":614,"context_line":"replication_one_per_device     True                   Restricts incoming SSYNC"},{"line_number":615,"context_line":"                                                      requests to one per device,"},{"line_number":616,"context_line":"                                                      replication_currency above"},{"line_number":617,"context_line":"                                                      allowing. This can help control"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa0c359_fe752b99","line":614,"in_reply_to":"9f91af0f_df99526e","updated":"2018-02-20 08:17:27.000000000","message":"Done","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":611,"context_line":"replication_concurrency        4                      Set to restrict the number of"},{"line_number":612,"context_line":"                                                      concurrent incoming SSYNC"},{"line_number":613,"context_line":"                                                      requests; set to 0 for unlimited"},{"line_number":614,"context_line":"replication_one_per_device     True                   Restricts incoming SSYNC"},{"line_number":615,"context_line":"                                                      requests to one per device,"},{"line_number":616,"context_line":"                                                      replication_currency above"},{"line_number":617,"context_line":"                                                      allowing. This can help control"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f91af0f_df99526e","line":614,"in_reply_to":"bf8cb3f7_c9f9a5c8","updated":"2018-01-08 06:25:01.000000000","message":"\u003e I think this is still supposed to be\n \u003e \n \u003e replication_concurrency_per_device\n \u003e \n \u003e (Option changed in https://review.openstack.org/#/c/390781/ )\nWe understood this and will update it.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e24b66595a685c6ec39e497277cccb97af69cfb6","unresolved":false,"context_lines":[{"line_number":1462,"context_line":"                                             the lower the I/O priority of the process."},{"line_number":1463,"context_line":"                                             Work only with ionice_class."},{"line_number":1464,"context_line":"                                             Ignored if IOPRIO_CLASS_IDLE is set."},{"line_number":1465,"context_line":"delay_reaping                    604800      Normally, the reaper begins deleting"},{"line_number":1466,"context_line":"                                             account information for deleted accounts"},{"line_number":1467,"context_line":"                                             after 7 days; you can set this to delay"},{"line_number":1468,"context_line":"                                             its work however. The value is in seconds,"},{"line_number":1469,"context_line":"                                             2592000 \u003d 30 days, for example. The sum of"},{"line_number":1470,"context_line":"                                             this value and the container-updater"},{"line_number":1471,"context_line":"                                             ``interval`` should be greater than the"},{"line_number":1472,"context_line":"                                             account-replicator ``reclaim_age``. This"},{"line_number":1473,"context_line":"                                             ensures that once the account-reaper has"},{"line_number":1474,"context_line":"                                             deleted a container there is sufficient"},{"line_number":1475,"context_line":"                                             time for the container-updater to report"},{"line_number":1476,"context_line":"                                             to the account before the account DB is"},{"line_number":1477,"context_line":"                                             removed."},{"line_number":1478,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1479,"context_line":""},{"line_number":1480,"context_line":"****************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"3f79a3b5_5606fe1c","line":1477,"range":{"start_line":1465,"start_character":45,"end_line":1477,"end_character":53},"updated":"2018-11-28 03:29:46.000000000","message":"Not 100% sure about the wording with this paragraph. Maybe something like:\n\n  How long, in seconds, to delay reaping deleted accounts. The default is 7 days or 604800 seconds.","commit_id":"541b9d4dd80a5beb7be28daca30f74fb52a629c1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"75fe439010778adcc28e7014fe6adbc820566dba","unresolved":false,"context_lines":[{"line_number":1462,"context_line":"                                             the lower the I/O priority of the process."},{"line_number":1463,"context_line":"                                             Work only with ionice_class."},{"line_number":1464,"context_line":"                                             Ignored if IOPRIO_CLASS_IDLE is set."},{"line_number":1465,"context_line":"delay_reaping                    604800      Normally, the reaper begins deleting"},{"line_number":1466,"context_line":"                                             account information for deleted accounts"},{"line_number":1467,"context_line":"                                             after 7 days; you can set this to delay"},{"line_number":1468,"context_line":"                                             its work however. The value is in seconds,"},{"line_number":1469,"context_line":"                                             2592000 \u003d 30 days, for example. The sum of"},{"line_number":1470,"context_line":"                                             this value and the container-updater"},{"line_number":1471,"context_line":"                                             ``interval`` should be greater than the"},{"line_number":1472,"context_line":"                                             account-replicator ``reclaim_age``. This"},{"line_number":1473,"context_line":"                                             ensures that once the account-reaper has"},{"line_number":1474,"context_line":"                                             deleted a container there is sufficient"},{"line_number":1475,"context_line":"                                             time for the container-updater to report"},{"line_number":1476,"context_line":"                                             to the account before the account DB is"},{"line_number":1477,"context_line":"                                             removed."},{"line_number":1478,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d  \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":1479,"context_line":""},{"line_number":1480,"context_line":"****************"}],"source_content_type":"text/x-rst","patch_set":19,"id":"3f79a3b5_72d29fd2","line":1477,"range":{"start_line":1465,"start_character":45,"end_line":1477,"end_character":53},"in_reply_to":"3f79a3b5_5606fe1c","updated":"2018-12-05 05:49:24.000000000","message":"Thanks Matthew.\nWe will make the required changes.","commit_id":"541b9d4dd80a5beb7be28daca30f74fb52a629c1"}],"doc/source/ops_runbook/procedures.rst":[{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":358,"context_line":"next time the user attempts to access the account, the account will be created."},{"line_number":359,"context_line":"You may also use swiftly to recreate the account."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"Another way to undelete the account which was marked for deletion for reaper, the user"},{"line_number":362,"context_line":"needs to execute the following set of curl commands to get the account undeleted."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_5d23ed56","line":361,"range":{"start_line":361,"start_character":0,"end_line":361,"end_character":11},"updated":"2017-09-28 15:52:15.000000000","message":"I think it\u0027s safe to *replace* most of the above steps with your procedure.","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"700618987a9bfbf16fe6a39d7893a87140041e71","unresolved":false,"context_lines":[{"line_number":358,"context_line":"next time the user attempts to access the account, the account will be created."},{"line_number":359,"context_line":"You may also use swiftly to recreate the account."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"Another way to undelete the account which was marked for deletion for reaper, the user"},{"line_number":362,"context_line":"needs to execute the following set of curl commands to get the account undeleted."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_889e65b6","line":361,"range":{"start_line":361,"start_character":0,"end_line":361,"end_character":11},"in_reply_to":"7f515b1d_5d23ed56","updated":"2017-10-05 08:34:57.000000000","message":"Does it means to replace the entire stuff mentioned in Procedure.rst for \"Procedure: Revive a deleted account\"\nfrom line number 262 to 359?","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"6de09e49cc45729ab9fc5b8385fb308bf197093f","unresolved":false,"context_lines":[{"line_number":358,"context_line":"next time the user attempts to access the account, the account will be created."},{"line_number":359,"context_line":"You may also use swiftly to recreate the account."},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"Another way to undelete the account which was marked for deletion for reaper, the user"},{"line_number":362,"context_line":"needs to execute the following set of curl commands to get the account undeleted."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7db5fbed","line":361,"range":{"start_line":361,"start_character":0,"end_line":361,"end_character":11},"in_reply_to":"7f515b1d_889e65b6","updated":"2017-10-05 13:36:44.000000000","message":"I believe you should:\n\n- delete lines 274-278\n  (Except you may need a note about what happens if account\n  reaping has already started)\n\n- keep lines 238-286 \n\n- replace lines 287-355 with your new procedure; use the account name mentioned in lines 238-286","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":361,"context_line":"Another way to undelete the account which was marked for deletion for reaper, the user"},{"line_number":362,"context_line":"needs to execute the following set of curl commands to get the account undeleted."},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"   .. code::"},{"line_number":367,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_3dcef181","line":364,"range":{"start_line":364,"start_character":51,"end_line":364,"end_character":81},"updated":"2017-09-28 15:52:15.000000000","message":"This is clever.. it means steps 2-6 above can be replaced with this curl command. Those steps are hard/difficult to follow and it would be east to make a mistake, but looking for the\"recently deleted\" error message.","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":365,"context_line":""},{"line_number":366,"context_line":"   .. code::"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"       $ curl -v -X PUT -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 http://\u003cip-address\u003e:8080/v1/AUTH_test1"},{"line_number":369,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":370,"context_line":"       Content-Length: 16"},{"line_number":371,"context_line":"       X-Account-Status: Deleted"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_bd342194","line":368,"range":{"start_line":368,"start_character":94,"end_line":368,"end_character":104},"updated":"2017-09-28 15:52:15.000000000","message":"Use AUTH_4ebe3039674d4864a11fe0864ae4d905` to match step 1 of the procedure above","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":366,"context_line":"   .. code::"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"       $ curl -v -X PUT -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 http://\u003cip-address\u003e:8080/v1/AUTH_test1"},{"line_number":369,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":370,"context_line":"       Content-Length: 16"},{"line_number":371,"context_line":"       X-Account-Status: Deleted"},{"line_number":372,"context_line":"       Recently deleted"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_5d6e4d2f","line":369,"range":{"start_line":369,"start_character":16,"end_line":369,"end_character":19},"updated":"2017-09-28 15:52:15.000000000","message":"There is an account autocreate flag. I think it\u0027s usually on. I\u0027m assuming you get 403 when you attempt a PUT to a deleted account. is this also true if autocreate is false. Sorry, I can\u0027t answer this question -- I don\u0027t have access to Swift systems anymore.","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":368,"context_line":"       $ curl -v -X PUT -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 http://\u003cip-address\u003e:8080/v1/AUTH_test1"},{"line_number":369,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":370,"context_line":"       Content-Length: 16"},{"line_number":371,"context_line":"       X-Account-Status: Deleted"},{"line_number":372,"context_line":"       Recently deleted"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"#. To undelete the deleted account like the account name is AUTH_test1, user needs to pass"},{"line_number":375,"context_line":"   additional header \"X-account-meta-undelete: true\". Execute the command for example:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_3dca714d","line":372,"range":{"start_line":371,"start_character":7,"end_line":372,"end_character":23},"updated":"2017-09-28 15:52:15.000000000","message":"You need to tell the user what to look for in the response. Something such as:\n\n   Look for \"X-Account-Status: Deleted\" in the response. If \n   this not seen, then the account has not been deleted and \n   you should not proceed.\n\n   Look for the error message \"Recently deleted\". If you do \n   not see this, it means the account database files have\n   been reaped and the data in the account is now lost. \n   However, if the command worked, you have created a new\n   account with the same name as the original account and\n   you do not need to proceed.","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":371,"context_line":"       X-Account-Status: Deleted"},{"line_number":372,"context_line":"       Recently deleted"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"#. To undelete the deleted account like the account name is AUTH_test1, user needs to pass"},{"line_number":375,"context_line":"   additional header \"X-account-meta-undelete: true\". Execute the command for example:"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"   .. code::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_fd70590a","line":374,"range":{"start_line":374,"start_character":0,"end_line":374,"end_character":1},"updated":"2017-09-28 15:52:15.000000000","message":"So this replaces steps 5-8 (where database files are deleted).","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":377,"context_line":"   .. code::"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"       $ curl -v -X PUT -H \u0027X-account-meta-undelete: true\u0027 -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":380,"context_line":"\t   http://\u003cip-address\u003e:8080/v1/AUTH_test1"},{"line_number":381,"context_line":"       HTTP/1.1 202 Accepted"},{"line_number":382,"context_line":"       Content-Length: 76"},{"line_number":383,"context_line":"       \u003chtml\u003e\u003ch1\u003eAccepted\u003c/h1\u003e\u003cp\u003eThe request is accepted for processing.\u003c/p\u003e\u003c/html\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_9d59658f","line":380,"range":{"start_line":380,"start_character":37,"end_line":380,"end_character":42},"updated":"2017-09-28 15:52:15.000000000","message":"as above, use the correct example name","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"41a7013c3349f9043155b9882af3c7b6c573b68e","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":"   .. code::"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"       $ curl -v -X PUT -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 http://\u003cip-address\u003e:8080/v1/AUTH_test1"},{"line_number":391,"context_line":"       HTTP/1.1 202 Accepted"},{"line_number":392,"context_line":"       Content-Length: 76"},{"line_number":393,"context_line":"       \u003chtml\u003e\u003ch1\u003eAccepted\u003c/h1\u003e\u003cp\u003eThe request is accepted for processing.\u003c/p\u003e\u003c/html\u003e"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f515b1d_7d5ea976","line":390,"range":{"start_line":390,"start_character":100,"end_line":390,"end_character":104},"updated":"2017-09-28 15:52:15.000000000","message":"ditto","commit_id":"7a56381b02de207e0efb9e37bcd9e22f9f50dcb9"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    the deleted account cannot be revived. Otherwise it can be."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_0418367f","line":278,"updated":"2017-11-02 12:51:02.000000000","message":"The user \"might\" not, the user \"must\"","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":275,"context_line":"    the deleted account cannot be revived. Otherwise it can be."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_f8551251","line":278,"in_reply_to":"3f4b6375_0418367f","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"293048aeac7921f07554c89daa64a168ddf264fe","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_8247521e","line":279,"range":{"start_line":279,"start_character":49,"end_line":279,"end_character":50},"updated":"2017-10-19 08:56:43.000000000","message":"You\u0027ve lost the text about account name. At this point, add this text:\n\n    You must know the tenant/project ID. The account name\n    is AUTH_\u003cproject-id\u003e. In this example, the tenant/project is\n    ``4ebe3039674d4864a11fe0864ae4d905`` so the Swift account name is \n    ``AUTH_4ebe3039674d4864a11fe0864ae4d905``.\n\nYou also need to explain which token to use in the curl commands. I suggest this text:\n\n    When using the curl commands, use a token for a user with the\n    reseller admin role. An easy way to get this token is to use\n    the ``swift stat -s`` command as shown in the following\n    example:\n\n    .. code:\n\n       $ export OS_USERNAME\u003dadmin   # or whatever your reseller admin is\n       $ export OS_PASSWORD\u003dpassword\n       $ export OS_PROJECT_NAME\u003dadmin  # this is the reseller admin\u0027s project/tenant -- not the project/account you are reviving\n       $ swift stat -s\n\nThe command prints the token to use in the following steps.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"c2d26775624ad3dc40dac9cd9f238d60a73a218d","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"},{"line_number":282,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_02630d44","line":279,"range":{"start_line":279,"start_character":49,"end_line":279,"end_character":50},"in_reply_to":"3f4b6375_8247521e","updated":"2017-10-23 16:08:29.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"293048aeac7921f07554c89daa64a168ddf264fe","unresolved":false,"context_lines":[{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"   .. code::"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_a2c5ae90","line":281,"range":{"start_line":281,"start_character":50,"end_line":281,"end_character":82},"updated":"2017-10-19 08:56:43.000000000","message":"You need to say which token to use. I suggest this text:\n\n   Use the curl command as shown in the following example,\n   where AUTH_4ebe3039674d4864a11fe0864ae4d905 and the token\n   is the reseller admin\u0027s token.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"c2d26775624ad3dc40dac9cd9f238d60a73a218d","unresolved":false,"context_lines":[{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. To check whether the account has been deleted. Execute the command for example:"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"   .. code::"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_a25f9970","line":281,"range":{"start_line":281,"start_character":50,"end_line":281,"end_character":82},"in_reply_to":"3f4b6375_a2c5ae90","updated":"2017-10-23 16:08:29.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"293048aeac7921f07554c89daa64a168ddf264fe","unresolved":false,"context_lines":[{"line_number":295,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":296,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"#. To undelete the deleted account like the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"},{"line_number":299,"context_line":"   user needs to pass additional header \"X-account-meta-undelete: true\". Execute the command for example:"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"   .. code::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_bc2cb547","line":298,"range":{"start_line":298,"start_character":35,"end_line":298,"end_character":39},"updated":"2017-10-19 08:56:43.000000000","message":"s/like/where/","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"c2d26775624ad3dc40dac9cd9f238d60a73a218d","unresolved":false,"context_lines":[{"line_number":295,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":296,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"#. To undelete the deleted account like the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"},{"line_number":299,"context_line":"   user needs to pass additional header \"X-account-meta-undelete: true\". Execute the command for example:"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"   .. code::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_8256dd5b","line":298,"range":{"start_line":298,"start_character":35,"end_line":298,"end_character":39},"in_reply_to":"3f4b6375_bc2cb547","updated":"2017-10-23 16:08:29.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"293048aeac7921f07554c89daa64a168ddf264fe","unresolved":false,"context_lines":[{"line_number":303,"context_line":"       $ curl -v -X PUT -H \u0027X-account-meta-undelete: true\u0027 -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":304,"context_line":"       http://\u003cip-address\u003e:8080/v1/AUTH_4ebe3039674d4864a11fe0864ae4d905"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"       Output in case account database files have been not reaped:"},{"line_number":307,"context_line":"       HTTP/1.1 202 Accepted"},{"line_number":308,"context_line":"       Content-Length: 76"},{"line_number":309,"context_line":"       \u003chtml\u003e\u003ch1\u003eAccepted\u003c/h1\u003e\u003cp\u003eThe request is accepted for processing.\u003c/p\u003e\u003c/html\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_624a1656","line":306,"range":{"start_line":306,"start_character":7,"end_line":306,"end_character":66},"updated":"2017-10-19 08:56:43.000000000","message":"This sentence needs to be indented to the left (so that it is not part of the .. code::\nAnd then show the output in a .. code:","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"c2d26775624ad3dc40dac9cd9f238d60a73a218d","unresolved":false,"context_lines":[{"line_number":303,"context_line":"       $ curl -v -X PUT -H \u0027X-account-meta-undelete: true\u0027 -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":304,"context_line":"       http://\u003cip-address\u003e:8080/v1/AUTH_4ebe3039674d4864a11fe0864ae4d905"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"       Output in case account database files have been not reaped:"},{"line_number":307,"context_line":"       HTTP/1.1 202 Accepted"},{"line_number":308,"context_line":"       Content-Length: 76"},{"line_number":309,"context_line":"       \u003chtml\u003e\u003ch1\u003eAccepted\u003c/h1\u003e\u003cp\u003eThe request is accepted for processing.\u003c/p\u003e\u003c/html\u003e"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_021b0d81","line":306,"range":{"start_line":306,"start_character":7,"end_line":306,"end_character":66},"in_reply_to":"3f4b6375_624a1656","updated":"2017-10-23 16:08:29.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"293048aeac7921f07554c89daa64a168ddf264fe","unresolved":false,"context_lines":[{"line_number":308,"context_line":"       Content-Length: 76"},{"line_number":309,"context_line":"       \u003chtml\u003e\u003ch1\u003eAccepted\u003c/h1\u003e\u003cp\u003eThe request is accepted for processing.\u003c/p\u003e\u003c/html\u003e"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"       Output in case account database files have been reaped:"},{"line_number":312,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":313,"context_line":"       Content-Length: 40"},{"line_number":314,"context_line":"       Account database files have been reaped."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_42471a4d","line":311,"range":{"start_line":311,"start_character":7,"end_line":311,"end_character":62},"updated":"2017-10-19 08:56:43.000000000","message":"As above","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"c2d26775624ad3dc40dac9cd9f238d60a73a218d","unresolved":false,"context_lines":[{"line_number":308,"context_line":"       Content-Length: 76"},{"line_number":309,"context_line":"       \u003chtml\u003e\u003ch1\u003eAccepted\u003c/h1\u003e\u003cp\u003eThe request is accepted for processing.\u003c/p\u003e\u003c/html\u003e"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"       Output in case account database files have been reaped:"},{"line_number":312,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":313,"context_line":"       Content-Length: 40"},{"line_number":314,"context_line":"       Account database files have been reaped."}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_c214d550","line":311,"range":{"start_line":311,"start_character":7,"end_line":311,"end_character":62},"in_reply_to":"3f4b6375_42471a4d","updated":"2017-10-23 16:08:29.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"293048aeac7921f07554c89daa64a168ddf264fe","unresolved":false,"context_lines":[{"line_number":319,"context_line":"       If the response contains \"Account database files have been reaped.\", then it means the"},{"line_number":320,"context_line":"       reaper has reaped the account database files and there is no worth to undelete the account."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"#. To check the status that the account gets successfully undeleted like the account name is"},{"line_number":323,"context_line":"   AUTH_4ebe3039674d4864a11fe0864ae4d905. Execute the command for example:"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"   .. code::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_1cd3c93a","line":322,"range":{"start_line":322,"start_character":68,"end_line":322,"end_character":72},"updated":"2017-10-19 08:56:43.000000000","message":"as above","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"c2d26775624ad3dc40dac9cd9f238d60a73a218d","unresolved":false,"context_lines":[{"line_number":319,"context_line":"       If the response contains \"Account database files have been reaped.\", then it means the"},{"line_number":320,"context_line":"       reaper has reaped the account database files and there is no worth to undelete the account."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"#. To check the status that the account gets successfully undeleted like the account name is"},{"line_number":323,"context_line":"   AUTH_4ebe3039674d4864a11fe0864ae4d905. Execute the command for example:"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"   .. code::"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_62d641c6","line":322,"range":{"start_line":322,"start_character":68,"end_line":322,"end_character":72},"in_reply_to":"3f4b6375_1cd3c93a","updated":"2017-10-23 16:08:29.000000000","message":"Done","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"9353a97ad1a35158618956f5c74e3300ff6c3bd6","unresolved":false,"context_lines":[{"line_number":287,"context_line":"   the ``swift stat -s`` command as shown in the following"},{"line_number":288,"context_line":"   example:"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"   .. code:"},{"line_number":291,"context_line":"       $ export OS_USERNAME\u003dadmin   # or whatever your reseller admin is"},{"line_number":292,"context_line":"       $ export OS_PASSWORD\u003dpassword"},{"line_number":293,"context_line":"       $ export OS_PROJECT_NAME\u003dadmin  # this is the reseller admin\u0027s project/tenant -- not the project/account you are reviving"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_1b0c7deb","line":290,"range":{"start_line":290,"start_character":10,"end_line":290,"end_character":11},"updated":"2017-10-24 13:05:27.000000000","message":"Need two colons \"(\":\"). This did not render correctly:\n\n    http://logs.openstack.org/08/507808/8/check/build-openstack-sphinx-docs/cc71abb/html/ops_runbook/procedures.html#procedure-revive-a-deleted-account","commit_id":"835a534c23ef970bfb6b11f93d981fb28188c226"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6339a17d72c7064b1995d5e72b6818f454f18570","unresolved":false,"context_lines":[{"line_number":287,"context_line":"   the ``swift stat -s`` command as shown in the following"},{"line_number":288,"context_line":"   example:"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"   .. code:"},{"line_number":291,"context_line":"       $ export OS_USERNAME\u003dadmin   # or whatever your reseller admin is"},{"line_number":292,"context_line":"       $ export OS_PASSWORD\u003dpassword"},{"line_number":293,"context_line":"       $ export OS_PROJECT_NAME\u003dadmin  # this is the reseller admin\u0027s project/tenant -- not the project/account you are reviving"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_5c1c2877","line":290,"range":{"start_line":290,"start_character":10,"end_line":290,"end_character":11},"in_reply_to":"3f4b6375_1b0c7deb","updated":"2017-10-24 16:07:08.000000000","message":"Done","commit_id":"835a534c23ef970bfb6b11f93d981fb28188c226"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"62bacaadc90ce074d648f34ebf1ca6a48d26912d","unresolved":false,"context_lines":[{"line_number":292,"context_line":"       $ export OS_USERNAME\u003dadmin   # or whatever your reseller admin is"},{"line_number":293,"context_line":"       $ export OS_PASSWORD\u003dpassword"},{"line_number":294,"context_line":"       $ export OS_PROJECT_NAME\u003dadmin  # this is the reseller admin\u0027s project/tenant -- not the project/account you are reviving"},{"line_number":295,"context_line":"       $ swift stat -s"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"   The command prints the token to use in the following steps."},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_0d02eb0b","line":295,"range":{"start_line":295,"start_character":20,"end_line":295,"end_character":22},"updated":"2017-10-25 07:47:43.000000000","message":"My fault: this should, of course, be \"-v\".\n\nThe effect I was looking for is shown here: https://www.swiftstack.com/docs/cookbooks/swift_usage/auth.html","commit_id":"cb2e02505394ca2cbff143144856043e3c6b0fd3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"991f8ed8636ae6f377580449428308bd049592b5","unresolved":false,"context_lines":[{"line_number":292,"context_line":"       $ export OS_USERNAME\u003dadmin   # or whatever your reseller admin is"},{"line_number":293,"context_line":"       $ export OS_PASSWORD\u003dpassword"},{"line_number":294,"context_line":"       $ export OS_PROJECT_NAME\u003dadmin  # this is the reseller admin\u0027s project/tenant -- not the project/account you are reviving"},{"line_number":295,"context_line":"       $ swift stat -s"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"   The command prints the token to use in the following steps."},{"line_number":298,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f4b6375_b0c9eaac","line":295,"range":{"start_line":295,"start_character":20,"end_line":295,"end_character":22},"in_reply_to":"3f4b6375_0d02eb0b","updated":"2017-10-25 08:00:00.000000000","message":"Done","commit_id":"cb2e02505394ca2cbff143144856043e3c6b0fd3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. You must know the tenant/project ID. The account name is AUTH_\u003cproject-id\u003e."},{"line_number":282,"context_line":"   In this example, the tenant/project is ``4ebe3039674d4864a11fe0864ae4d905``"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ff82abbf_208966c9","line":279,"updated":"2017-11-22 05:17:20.000000000","message":"Not sure this sentence reads the best, maybe we can use something like:\n\n  So long as the account hasn\u0027t been reaped, a user can undelete the account by sending a new PUT request with the ``X-Account-Meta-Undelete`` header set to true. See the following curl commands as an example.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"1066b829b9a73a2059521fa84fecebd2fc5c4bd8","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. You must know the tenant/project ID. The account name is AUTH_\u003cproject-id\u003e."},{"line_number":282,"context_line":"   In this example, the tenant/project is ``4ebe3039674d4864a11fe0864ae4d905``"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ff82abbf_c41447a3","line":279,"in_reply_to":"ff82abbf_208966c9","updated":"2017-11-22 09:23:50.000000000","message":"We need to update the paragraph starting from Line no. 277-279 as like below? Please confirm.\n\nSo long as the account hasn\u0027t been reaped, a user can undelete the account by sending a new PUT request with the ``X-Undelete-Account`` header set to true. See the following curl commands as an example.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"The user can undelete the account which was marked for deletion for reaper, in"},{"line_number":278,"context_line":"order to undelete the deleted account user might need to execute the following"},{"line_number":279,"context_line":"set of curl commands to get the account undeleted."},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"#. You must know the tenant/project ID. The account name is AUTH_\u003cproject-id\u003e."},{"line_number":282,"context_line":"   In this example, the tenant/project is ``4ebe3039674d4864a11fe0864ae4d905``"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ff82abbf_f65fa16f","line":279,"in_reply_to":"ff82abbf_c41447a3","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"   .. code::"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"       $ curl -v -X PUT -H \u0027X-account-meta-undelete: true\u0027 -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":323,"context_line":"       http://\u003cip-address\u003e:8080/v1/AUTH_4ebe3039674d4864a11fe0864ae4d905"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"   Output in case account database files have been not reaped:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ff82abbf_43235406","line":322,"range":{"start_line":322,"start_character":28,"end_line":322,"end_character":51},"updated":"2017-11-22 05:17:20.000000000","message":"I agree with Romain, and I think I said in an earlier example. We shouldn\u0027t be using an account meta string. As this is only for storing some additional user metadata with an account. And with an undelete usecase there is no reason to store the undelete true value with the account.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"   .. code::"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"       $ curl -v -X PUT -H \u0027X-account-meta-undelete: true\u0027 -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":323,"context_line":"       http://\u003cip-address\u003e:8080/v1/AUTH_4ebe3039674d4864a11fe0864ae4d905"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"   Output in case account database files have been not reaped:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"ff82abbf_9656555c","line":322,"range":{"start_line":322,"start_character":28,"end_line":322,"end_character":51},"in_reply_to":"ff82abbf_43235406","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    If the account database files have been reaped or currently being reaped, then"},{"line_number":275,"context_line":"    the deleted account cannot be revived. Otherwise it can be."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"So long as the account hasn\u0027t been reaped, a user can undelete the account by"},{"line_number":278,"context_line":"sending a new PUT request with the ``X-Undelete-Account`` header set to"},{"line_number":279,"context_line":"true. See the following curl commands as an example."},{"line_number":280,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"bf8cb3f7_492fd53e","line":277,"range":{"start_line":277,"start_character":45,"end_line":277,"end_character":49},"updated":"2017-12-28 01:16:14.000000000","message":"Might be better to use \"operator\", \"administrator\", or \"reseller admin\" here; \"user\" makes it sound like your typical API consumer.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    If the account database files have been reaped or currently being reaped, then"},{"line_number":275,"context_line":"    the deleted account cannot be revived. Otherwise it can be."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"So long as the account hasn\u0027t been reaped, a user can undelete the account by"},{"line_number":278,"context_line":"sending a new PUT request with the ``X-Undelete-Account`` header set to"},{"line_number":279,"context_line":"true. See the following curl commands as an example."},{"line_number":280,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f91af0f_3fbcfeb9","line":277,"range":{"start_line":277,"start_character":45,"end_line":277,"end_character":49},"in_reply_to":"bf8cb3f7_492fd53e","updated":"2018-01-08 06:25:01.000000000","message":"\u003e Might be better to use \"operator\", \"administrator\", or \"reseller\n \u003e admin\" here; \"user\" makes it sound like your typical API consumer.\n\nWe will update it.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":297,"context_line":"   The command prints the token to use in the following steps."},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"#. To check whether the account has been deleted, use the curl command as shown in the following example,"},{"line_number":300,"context_line":"   where AUTH_4ebe3039674d4864a11fe0864ae4d905 and the token is the reseller admin\u0027s token."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"   .. code::"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"bf8cb3f7_e91d890f","line":300,"range":{"start_line":300,"start_character":3,"end_line":300,"end_character":46},"updated":"2017-12-28 01:16:14.000000000","message":"\"... is the account to check\"","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":297,"context_line":"   The command prints the token to use in the following steps."},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"#. To check whether the account has been deleted, use the curl command as shown in the following example,"},{"line_number":300,"context_line":"   where AUTH_4ebe3039674d4864a11fe0864ae4d905 and the token is the reseller admin\u0027s token."},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"   .. code::"},{"line_number":303,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f91af0f_5fc6a24a","line":300,"range":{"start_line":300,"start_character":3,"end_line":300,"end_character":46},"in_reply_to":"bf8cb3f7_e91d890f","updated":"2018-01-08 06:25:01.000000000","message":"\u003e \"... is the account to check\"\n\nWe will update it.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":304,"context_line":"       $ curl -v -X PUT -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":305,"context_line":"       http://\u003cip-address\u003e:8080/v1/AUTH_4ebe3039674d4864a11fe0864ae4d905"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":308,"context_line":"       Content-Length: 16"},{"line_number":309,"context_line":"       X-Account-Status: Deleted"},{"line_number":310,"context_line":"       Recently deleted"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bf8cb3f7_49d4b520","line":307,"range":{"start_line":307,"start_character":16,"end_line":307,"end_character":29},"updated":"2017-12-28 01:16:14.000000000","message":"Huh. I was kinda expecting a 410 Gone... but nope, sure enough: https://github.com/openstack/swift/blob/2.16.0/swift/account/server.py#L147-L149","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":304,"context_line":"       $ curl -v -X PUT -H \u0027X-Auth-Token: \u003cauthentication-token\u003e\u0027 \\"},{"line_number":305,"context_line":"       http://\u003cip-address\u003e:8080/v1/AUTH_4ebe3039674d4864a11fe0864ae4d905"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"       HTTP/1.1 403 Forbidden"},{"line_number":308,"context_line":"       Content-Length: 16"},{"line_number":309,"context_line":"       X-Account-Status: Deleted"},{"line_number":310,"context_line":"       Recently deleted"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f91af0f_df35d247","line":307,"range":{"start_line":307,"start_character":16,"end_line":307,"end_character":29},"in_reply_to":"bf8cb3f7_49d4b520","updated":"2018-01-08 06:25:01.000000000","message":"\u003e Huh. I was kinda expecting a 410 Gone... but nope, sure enough:\n \u003e https://github.com/openstack/swift/blob/2.16.0/swift/account/server.py#L147-L149\n\nIn HEAD or GET, the existing implementation throwing \"410 GONE\" We will update this procedures.rst file for GET request.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"bf8cb3f7_49bd95d6","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"updated":"2017-12-28 01:16:14.000000000","message":"Does this appear in responses to other request methods, like GET or HEAD? It seems... unfortunate... that we\u0027re using an unsafe HTTP method to check the status of something...\n\nIn particular, if the account *isn\u0027t* delete, we\u0027ll update the Last-Modified timestamp for it. I don\u0027t know that anyone watches these things *that* closely, but still...","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e24b66595a685c6ec39e497277cccb97af69cfb6","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_bac4220e","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"3f79a3b5_1771b2de","updated":"2018-11-28 03:29:46.000000000","message":"I\u0027m saying, change the RST to use a GET or HEAD to check if the account is deleted rather then a PUT. But also to add a note. Something like: http://paste.openstack.org/show/736285/","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"608d28838a08e2685c3599092f13dcd76c65e7c0","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_1771b2de","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"3f79a3b5_563df78c","updated":"2018-10-01 06:30:49.000000000","message":"Hi Mathew, \n\nWhat we understood from the suggestion is, we are also looking to get \u0027X-Account-Status: Deleted\u0027 along with the response of GET/HEAD?\n\nPlease Confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4c5d6df0741431da21287545f8adf3f22e64a6f0","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_563df78c","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"3f79a3b5_b8dfdc0a","updated":"2018-08-23 06:30:38.000000000","message":"Yup, but a note saying the `X-Account-Status: Deleted` is present in other requests wound\u0027t hurt.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"75fe439010778adcc28e7014fe6adbc820566dba","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_724dbfc4","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"3f79a3b5_bac4220e","updated":"2018-12-05 05:49:24.000000000","message":"Thanks Matthew.\nWe will take the reference as suggested and will make the required changes.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"30f04772553189d87decc83efa0b7bb1c062cd2a","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_b8dfdc0a","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"3f79a3b5_fc773dd3","updated":"2018-08-21 10:11:11.000000000","message":"Hi Mathew,\n\nThanks for the suggestions, what we understood from the comments here that we need to modify the rst file by updating it to check status for deleted Account using GET or HEAD command rather using PUT command.\n\nPlease confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f91af0f_546ad3ed","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"9f91af0f_47579927","updated":"2019-11-08 04:05:23.000000000","message":"I would recommend issuing a HEAD and looking for a 410 Gone response.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3fbab63e851ef60e9ec6ba5753fc359c1a1c7cee","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3f79a3b5_fc773dd3","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"9f91af0f_47579927","updated":"2018-08-13 00:08:08.000000000","message":"You\u0027ve labelled this part as \"To check whether the account has been deleted...\". A PUT doesn\u0027t sound like a good method to use if your just \"checking\" to see if was deleted. This is why Tim was asking about HEAD or GET and the X-Account-Status.\n\nSeeing as this is documentation, it\u0027s good to know that a response with an account that\u0027s deleted. I.E on a PUT etc, but if one wants to simply check if an account has been deleted a safer (non modifying verb) like GET or HEAD would be better.\n\nSo what should be written in this part of the document. If you saying \"check\" then maybe point people to use the HEAD or GET. But mention the \"X-Account-Status: Deleted\" is present in all responses, or something like that?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3fa7e38b_1491d946","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"9f91af0f_546ad3ed","updated":"2019-12-30 12:04:30.000000000","message":"OK, you want to get this change to HEAD from GET and should check for 410.\n\nPlease confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"   .. note::"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"       Look for \"X-Account-Status: Deleted\" in the response. If this not seen,"},{"line_number":315,"context_line":"       then the account has not been deleted and you should not proceed to undelete the account."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"#. To undelete the deleted account where the account name is AUTH_4ebe3039674d4864a11fe0864ae4d905,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"9f91af0f_47579927","line":314,"range":{"start_line":314,"start_character":17,"end_line":314,"end_character":42},"in_reply_to":"bf8cb3f7_49bd95d6","updated":"2018-01-08 06:25:01.000000000","message":"We have checked in code if we use:\na) GET then the response will be 410 GONE and Header contains X-Account-Status: Deleted.\n\nb) HEAD then the response will be 410 GONE and Header contains X-Account-Status: Deleted.\n\nc) PUT then the response will be 403 FORBIDDEN and Header contains X-Account-Status: Deleted.\n\nPlease suggest what we should consider here.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"}],"swift/account/backend.py":[{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"904d1fbc4680dc3a0ddded03ca709fcb47893092","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        conn.execute(\"\"\""},{"line_number":216,"context_line":"            UPDATE account_stat"},{"line_number":217,"context_line":"            SET delete_timestamp \u003d \u00270\u0027,"},{"line_number":218,"context_line":"                put_timestamp \u003d ?,"},{"line_number":219,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":220,"context_line":"                status_changed_at \u003d ?"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e03157a4","line":217,"updated":"2017-10-04 21:13:33.000000000","message":"Also concerned about setting delete_ts to 0, which would lost the information that the account was undeleted. checking the code at [1], it seems we can safely keep the delete timestamp untouched.\n\n[1] https://github.com/openstack/swift/blob/2.15.1/swift/account/backend.py#L278","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1790cf97c0ca954f7f765ae15d065069da19d55a","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        conn.execute(\"\"\""},{"line_number":216,"context_line":"            UPDATE account_stat"},{"line_number":217,"context_line":"            SET delete_timestamp \u003d \u00270\u0027,"},{"line_number":218,"context_line":"                put_timestamp \u003d ?,"},{"line_number":219,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":220,"context_line":"                status_changed_at \u003d ?"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_63b78788","line":217,"in_reply_to":"7f515b1d_e03157a4","updated":"2017-10-05 23:05:48.000000000","message":"+1 to this. Updating the put_timestamp is all that is needed, don\u0027t nuke the delete_timestamp.","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"96dbc87ceabd5d04d05dcbd0f40229aaa2d8eb18","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\"Encapsulates working with an account database.\"\"\""},{"line_number":56,"context_line":"    db_type \u003d \u0027account\u0027"},{"line_number":57,"context_line":"    db_contains_type \u003d \u0027container\u0027"},{"line_number":58,"context_line":"    db_reclaim_timestamp \u003d \u0027delete_timestamp\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _initialize(self, conn, put_timestamp, **kwargs):"},{"line_number":61,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f4e5783_1e2e66fa","line":58,"updated":"2017-10-17 19:58:22.000000000","message":"those backend queries are *so* similar - I wonder if it would make sense to grow a stat_table class attribute","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"240b10d41931c620b3e213294f67c73dd02d9f7b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\"Encapsulates working with an account database.\"\"\""},{"line_number":56,"context_line":"    db_type \u003d \u0027account\u0027"},{"line_number":57,"context_line":"    db_contains_type \u003d \u0027container\u0027"},{"line_number":58,"context_line":"    db_reclaim_timestamp \u003d \u0027delete_timestamp\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _initialize(self, conn, put_timestamp, **kwargs):"},{"line_number":61,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_857272e2","line":58,"in_reply_to":"5f4e5783_1e2e66fa","updated":"2017-10-23 15:56:21.000000000","message":"Please bit detail what is the point of benefit to add stat_table\nclass attribute in scope of this fix.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        Mark the DB as un-deleted."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        This method will reset the delete_timestamp and status back to empty"},{"line_number":210,"context_line":"        (i.e. the default value for the account)."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        :param conn: DB connection object"},{"line_number":213,"context_line":"        :param timestamp: timestamp to mark status changed and put timestamp"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_83707cde","line":210,"updated":"2017-11-22 05:17:20.000000000","message":"This doesn\u0027t actually reset the delete_timestamp. it just updates the put timestamp. So this doc string needs to be updated, maybe something like:\n\n  Mark the DB as un-deleted\n\n  This method will update the put timestamp and update the account status to mark it as undeleted.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        Mark the DB as un-deleted."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        This method will reset the delete_timestamp and status back to empty"},{"line_number":210,"context_line":"        (i.e. the default value for the account)."},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        :param conn: DB connection object"},{"line_number":213,"context_line":"        :param timestamp: timestamp to mark status changed and put timestamp"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_764b91af","line":210,"in_reply_to":"ff82abbf_83707cde","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":218,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":219,"context_line":"                status_changed_at \u003d ?"},{"line_number":220,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def _commit_puts_load(self, item_list, entry):"},{"line_number":223,"context_line":"        \"\"\"See :func:`swift.common.db.DatabaseBroker._commit_puts_load`\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_435b5453","line":220,"updated":"2017-11-22 05:17:20.000000000","message":"So there isn\u0027t a case we write to the container unnecessarily (ie, what if it was down elsewhere and replication has already updated the container) we could put in the same check we do in the _delete_db above:\n\n  conn.execute(\"\"\"\n      UPDATE account_stat\n      SET put_timetamp \u003d ?,\n          status \u003d \u0027\u0027,\n          status_changed_at \u003d ?\n      WHERE put_timestamp \u003c ?\"\"\",\n      (timestamp, timestamp, timestamp,))","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":217,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":218,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":219,"context_line":"                status_changed_at \u003d ?"},{"line_number":220,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def _commit_puts_load(self, item_list, entry):"},{"line_number":223,"context_line":"        \"\"\"See :func:`swift.common.db.DatabaseBroker._commit_puts_load`\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_36cbc91e","line":220,"in_reply_to":"ff82abbf_435b5453","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        conn.execute(\"\"\""},{"line_number":217,"context_line":"            UPDATE account_stat"},{"line_number":218,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":219,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":220,"context_line":"                status_changed_at \u003d ?"},{"line_number":221,"context_line":"            WHERE put_timestamp \u003c ?\"\"\", (timestamp, timestamp, timestamp))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_caccfc35","line":219,"updated":"2019-11-08 04:05:23.000000000","message":"I\u0027m worried that nothing replicates status... so if, say, we have three deleted account replicas and when a client goes to undelete,\n\n* one replica\u0027s temporarily unavailable,\n* one replica accepts the update but later the disk dies, and\n* the last replica accepts the write but then should change nodes because of a rebalance,\n\nthen in the steady state (if the DBs rsynced during rebalances came from the temporarily-unavailable replica) we could get three replicas in their primary locations all with put_timestamp \u003e delete_timestamp (which is good) and status \u003d \u0027DELETED\u0027 (which is bad).","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        conn.execute(\"\"\""},{"line_number":217,"context_line":"            UPDATE account_stat"},{"line_number":218,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":219,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":220,"context_line":"                status_changed_at \u003d ?"},{"line_number":221,"context_line":"            WHERE put_timestamp \u003c ?\"\"\", (timestamp, timestamp, timestamp))"},{"line_number":222,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_b4aa456a","line":219,"in_reply_to":"3fa7e38b_caccfc35","updated":"2019-12-30 12:04:30.000000000","message":"What we understood from the comment is:\nYou want us to analyze the scenario if the replication would happen on the DELETED account then this case would occur. You want us to analyze and fix in case of replication?\n\nPlease confirm.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"swift/account/reaper.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"bf8cb3f7_299db158","line":90,"updated":"2017-12-28 01:16:14.000000000","message":"I\u0027m partial toward not catching the ValueError and letting it prevent us from starting. I don\u0027t think we\u0027re doing anyone any favors by silently translating\n\n delay_reaping \u003d 2 days\n\nto\n\n delay_reaping \u003d 604800\n\nI guess the old code was tolerating an empty value... but I\u0027m pretty sure that was by accident, not intention.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e24b66595a685c6ec39e497277cccb97af69cfb6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_baed028e","line":90,"in_reply_to":"3f79a3b5_175a124f","updated":"2018-11-28 03:29:46.000000000","message":"Yes","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"608d28838a08e2685c3599092f13dcd76c65e7c0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_175a124f","line":90,"in_reply_to":"3f79a3b5_36d4fb1f","updated":"2018-10-01 06:30:49.000000000","message":"Hi Mathew, \n\nWhat we understood from the suggestion that we need to log the error in case of value error and exit from the system?\n\nPlease Confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"30f04772553189d87decc83efa0b7bb1c062cd2a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_78114404","line":90,"in_reply_to":"3f79a3b5_77002602","updated":"2018-08-21 10:11:11.000000000","message":"Hi Mathew,\n\nThanks for the suggestions, based on the earlier discussion with reviewers we have updated the changes as per below cases:\n\nCase1: When the delay_reaping key is used in the [account-reaper] section.\nCase 1.1: When delay_reaping key is present in account-reaper section.\n[account-reaper]\ndelay_reaping \u003d 2\nResult: The value of delay_reaping is 2.\n\nCase 1.2: When delay_reaping key is absent from the account-reaper section.\n[account-reaper]\nResult: The value of delay_reaping will be constant.\n\nCase 1.3: When delay_raping key is present with empty value.\n[account-reaper]\ndelay_reaping \u003d \nResult: This is a case of ValueError and delay_reaping gets value of constant.\n\nCase2: When the delay_reaping key is used in the [DEFAULT] section.\nCase 2.1: When delay_reaping key is present in default section.\n[DEFAULT]\ndelay_reaping \u003d 2\nResult: The value of delay_reaping is 2.\n\nCase 2.2: When delay_reaping key is absent from the default section.\n[DEFAULT]\nResult: The value of delay_reaping will be constant.\n\nCase 2.3: When delay_raping key is present with empty value.\n[DEFAULT]\ndelay_reaping \u003d \nResult: This is a case of ValueError and delay_reaping gets value of constant.\n\n\nWhat we understood from the comments provided by Mathew, that we need to remain the logic as we have implemented here, the only thing we need to modify here is in case of value error we need to log the problem and exit from the reaper.\n\nPlease confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4c5d6df0741431da21287545f8adf3f22e64a6f0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_36d4fb1f","line":90,"in_reply_to":"3f79a3b5_78114404","updated":"2018-08-23 06:30:38.000000000","message":"Yes, default if not defined, ie use constant. If there is a value error let\u0027s log an error and exit, so ops know there is an issue and we don\u0027t go deleting things.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"75fe439010778adcc28e7014fe6adbc820566dba","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_12748b02","line":90,"in_reply_to":"3f79a3b5_baed028e","updated":"2018-12-05 05:49:24.000000000","message":"Thanks Matthew.\nWe will implement the required changes here.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_947b7bbc","line":90,"in_reply_to":"9f91af0f_872601ce","updated":"2019-11-08 04:05:23.000000000","message":"If it were me, I\u0027d just have\n\n self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,\n                                   DEFAULT_DELAY_REAPING))\n\nwith no try/except.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3fbab63e851ef60e9ec6ba5753fc359c1a1c7cee","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_77002602","line":90,"in_reply_to":"9f91af0f_872601ce","updated":"2018-08-13 00:08:08.000000000","message":"Question is, do we want `delay_reaping` to become a manditory option in the reaper.\n\nBefore we had the ability to undelete an account, one could manually undelete it. But honestly, because we didn\u0027t have the functionality having a default value (which used to be 0) didn\u0027t bother me too much.\n\nBut the more I think about it, I now tend to side with Tim here. We are a storage solution trying to keep things durable. We should be more wary of deleting. So this option shouldn\u0027t default, especially on a Value Error. As the end result may mean deleting something that the operator didn\u0027t intend (the worst kind of durability :P ).\n\nI recommend, continue catching the ValueError but log the problem and exit the reaper. Better to not delete (and retain data) then decide to delete things on it\u0027s own schedule.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_74c84d55","line":90,"in_reply_to":"9f91af0f_947b7bbc","updated":"2019-12-30 12:04:30.000000000","message":"So please confirm because in earlier discussions some reviewers were saying to introduce to handle the ValueError.\n\nPlease confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":88,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":89,"context_line":"        except ValueError:"},{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_872601ce","line":90,"in_reply_to":"bf8cb3f7_299db158","updated":"2018-01-08 06:25:01.000000000","message":"Can your please tell us what we should do here? In earlier conversations the other reviewer are also not very pretty sure for this.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf8cb3f7_c9a3e59d","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"updated":"2017-12-28 01:16:14.000000000","message":"Wait, a *deadlock*? I was guessing this was slop to accommodate some clock skew between servers. How can we hit a deadlock without this?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e24b66595a685c6ec39e497277cccb97af69cfb6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_3af9f24d","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_171f7270","updated":"2018-11-28 03:29:46.000000000","message":"I explained the idea in my last comment, let me see if I can write up a quick patch to demonstrate the idea :)","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"75fe439010778adcc28e7014fe6adbc820566dba","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_921adbc5","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_3af9f24d","updated":"2018-12-05 05:49:24.000000000","message":"Thanks Matthew.\nWhen we would expect the Patch by which we can take the idea to implement quorum check here?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4c5d6df0741431da21287545f8adf3f22e64a6f0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f6420368","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_782aa42c","updated":"2018-08-23 06:30:38.000000000","message":"It would be to go ask the other primary servers for the account to be reaped to see if they agree (their deleted).\n\nA qourum in this case would probably be a majority size quorum (see swift.common.utils).\n\nBut before going to that effort maybe a probe test to demonstrate it\u0027s actually an issue would be good. If I have some spare time I\u0027ll see if I can write one to confirm.\n\nI.e attempt to delete an account, but delete only succeeds on 1 of the accounts, run the reapers and see if all the containers and objects disappear.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"608d28838a08e2685c3599092f13dcd76c65e7c0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_171f7270","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_915dd916","updated":"2018-10-01 06:30:49.000000000","message":"Hi Mathew, \n\nWe need some idea from you to first understands the quorum and then implement it.\n\nPlease give us some reference from where we can try to understand the quorum.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"56a81da9b9f944cec8e853546371d0c47df21f89","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_5fbd15d0","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_921adbc5","updated":"2018-12-19 05:29:05.000000000","message":"Hi Matthew,\n\nWhen you are planning to provide a sample patch, which can be used as a reference to implement quorum check here?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"9d5e2bfcd7a0a80f26559d5750478a1b802b3d53","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_915dd916","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_f6420368","updated":"2018-08-23 06:43:32.000000000","message":"I just ran this quickly on one of my SAIOs. And it does indeed delete all the objects. Currently this isn\u0027t an issue, as the delete will be replicated via the account replication well before the reaper comes around, so the account would definitely be deleted.\n\nWhen we add undelete to the mix, what happens if a reseller admin comes in just before the delay_reaping expires, issues an undelete but fails to apply the undelete to only 1 of the account\u0027s primary copies. Before account replication syncs the undelete metadata around to the node that missed it, the delay_reaping expires and the reaper happily goes off and deletes _all_ the containers and objects in the account.\n\nThis might be an edge case, but it\u0027s possible currently and deleting everyones data isn\u0027t something we really want. So I feel if we want to support undeleting we need to mitigate this edgecase.\n\nReaping accounts isn\u0027t as common as other activities in Swift, so I wonder if we need to add a quorum check before progressing, or somehow know if at least 1 replication cycle has completed before reaping (but the latter would be harder).\nBy quorum I mean the reaper, before it goes and acutally reaps the account it asks the other primary nodes for the account if they agree the account is deleted. If a majority quorum agree, it\u0027s safe to go and reap.\n\nIf this doesnt make sense, I\u0027m happy to discuss it further or even help get it coded :)","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"30f04772553189d87decc83efa0b7bb1c062cd2a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_782aa42c","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"3f79a3b5_f76af6b0","updated":"2018-08-21 10:11:11.000000000","message":"Hi Mathew,\n\nThanks for the suggestions, can you please exactly tell us what we need to do as part of using quorum check here?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf659307_0c9f0751","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"9f91af0f_071c3176","updated":"2019-11-08 04:05:23.000000000","message":"I think I just need to understand the motivation for this a little more. Are we sure it\u0027s a deadlock and not just a race condition? Either one should be avoided if we can, but one of them makes me much more nervous.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3fbab63e851ef60e9ec6ba5753fc359c1a1c7cee","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f79a3b5_f76af6b0","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"9f91af0f_071c3176","updated":"2018-08-13 00:08:08.000000000","message":"If I remember correctly the \"deadlock\" was if someone went and undeleted an account right on the end time which is valid there wouldn\u0027t be a race between the reaper and the undelete doing it\u0027s thing.\n\nSo add a skew to the reaper, to avoid this situation. So not necessarily a deadlock. Though Swift is eventually consistent so there is no guarantee that the undelete will hit all the primaries. What happens then, we can still end up in the same place.\nI probe test for this situation would be great so we can see what happens.\n\nAs far as I can see, the reaper doesn\u0027t check for a qourum from other primaries, so if the undelete doesn\u0027t make it to one primary node before the reaper gets to it (the initial requests fail to hit all primaries and a db replication run doesn\u0027t get the put timestamp updated in time) then the reaper running on that non-updated primary will go and delete all the containers and objects. We may need to add some kind of quorum check to the reaper to avoid this situation.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_34be55af","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"bf659307_0c9f0751","updated":"2019-12-30 12:04:30.000000000","message":"In your initial comment above you stated to handle the deadlock, so please confirm if this is needed or not?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":91,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":92,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":93,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":94,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":95,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":96,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_071c3176","line":93,"range":{"start_line":93,"start_character":10,"end_line":93,"end_character":18},"in_reply_to":"bf8cb3f7_c9a3e59d","updated":"2018-01-08 06:25:01.000000000","message":"Can your please tell us what we should do here? In earlier conversations the other reviewer are also not very pretty sure for this.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":90,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":91,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":92,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":93,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":94,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":95,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_747189de","line":92,"range":{"start_line":92,"start_character":10,"end_line":92,"end_character":19},"updated":"2019-11-08 04:05:23.000000000","message":"I need to remember why we think this could deadlock...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":90,"context_line":"        # in the trivial case an undelete request hits the account server."},{"line_number":91,"context_line":"        # Lets delay the reaper number by just a small to avoid potential"},{"line_number":92,"context_line":"        # deadlocks 30 seconds enough."},{"line_number":93,"context_line":"        if self.delay_reaping \u003e 0:"},{"line_number":94,"context_line":"            self.delay_reaping +\u003d 30"},{"line_number":95,"context_line":"        reap_warn_after \u003d float(conf.get(\u0027reap_warn_after\u0027) or 86400 * 30)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_f4d99d27","line":92,"range":{"start_line":92,"start_character":10,"end_line":92,"end_character":19},"in_reply_to":"3fa7e38b_747189de","updated":"2019-12-30 12:04:30.000000000","message":"Please confirm.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"swift/account/server.py":[{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"94a76763315bd43a837cc9ad129a2389975d1a2c","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    created \u003d False"},{"line_number":147,"context_line":"            elif broker.is_status_deleted():"},{"line_number":148,"context_line":"                if config_true_value(req.headers.get"},{"line_number":149,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":150,"context_line":"                    broker.undelete_db(timestamp.internal)"},{"line_number":151,"context_line":"                    return HTTPAccepted(request\u003dreq)"},{"line_number":152,"context_line":"                return self._deleted_response(broker, req, HTTPForbidden,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_c5b42df5","line":149,"updated":"2017-10-04 20:43:02.000000000","message":"I\u0027m expecting that a meta will be stored. So having a non-meta header would feel more appropriate to me","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1790cf97c0ca954f7f765ae15d065069da19d55a","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    created \u003d False"},{"line_number":147,"context_line":"            elif broker.is_status_deleted():"},{"line_number":148,"context_line":"                if config_true_value(req.headers.get"},{"line_number":149,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":150,"context_line":"                    broker.undelete_db(timestamp.internal)"},{"line_number":151,"context_line":"                    return HTTPAccepted(request\u003dreq)"},{"line_number":152,"context_line":"                return self._deleted_response(broker, req, HTTPForbidden,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e37ff7a8","line":149,"in_reply_to":"7f515b1d_c5b42df5","updated":"2017-10-05 23:05:48.000000000","message":"yeah, depending on what value you supply.. which seems to be a boolean means on true, this will be stored in the account\u0027s metadata.\n\nWe don\u0027t need to store it if the header is just used as a trigger to undelete the container.","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"94a76763315bd43a837cc9ad129a2389975d1a2c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"            elif broker.is_status_deleted():"},{"line_number":148,"context_line":"                if config_true_value(req.headers.get"},{"line_number":149,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":150,"context_line":"                    broker.undelete_db(timestamp.internal)"},{"line_number":151,"context_line":"                    return HTTPAccepted(request\u003dreq)"},{"line_number":152,"context_line":"                return self._deleted_response(broker, req, HTTPForbidden,"},{"line_number":153,"context_line":"                                              body\u003d\u0027Recently deleted\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e592894b","line":150,"updated":"2017-10-04 20:43:02.000000000","message":"should it check delay_reaping and refuse to undelete if it\u0027s too late? once the reaper started, i\u0027m not sure it will stop if account is undeleted, which can create confusion for users that would see objects disapearing after undeletion","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"06564adcbed2b243138c90e6f4fc58517db03aa9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"            config_true_value(conf.get(\u0027db_preallocation\u0027, \u0027f\u0027))"},{"line_number":64,"context_line":"        conf_reaper \u003d utils. \\"},{"line_number":65,"context_line":"            readconf(conf.get(\u0027__file__\u0027, \u0027/etc/swift/account-server.conf\u0027),"},{"line_number":66,"context_line":"                     \u0027account-reaper\u0027)"},{"line_number":67,"context_line":"        self.delay_reaping \u003d int(conf_reaper.get(\u0027delay_reaping\u0027) or 0)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _get_account_broker(self, drive, part, account, **kwargs):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f4e5783_1c3a8933","line":66,"updated":"2017-10-11 18:19:44.000000000","message":"a bunch of unittests are finding this file does not exist...","commit_id":"7bb90382ce046982072c22a21b51195cb7ef921b"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"96dbc87ceabd5d04d05dcbd0f40229aaa2d8eb18","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":67,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":68,"context_line":"        except (KeyError, ValueError, IOError):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f4e5783_3e712245","line":68,"updated":"2017-10-17 19:58:22.000000000","message":"this line can\u0027t  raise KeyError or IOError (that I can see?) - the ValueError is possible if the conf dict has {\u0027delay_reaping\u0027: \u0027foo\u0027}... but I\u0027m not sure the end result is the correct failure mode fallback behavior.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"240b10d41931c620b3e213294f67c73dd02d9f7b","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":67,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":68,"context_line":"        except (KeyError, ValueError, IOError):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_c674f76a","line":68,"in_reply_to":"5f4e5783_3e712245","updated":"2017-10-23 15:56:21.000000000","message":"We have validate the below sample cases for Value and Key Error:\n \nExample Cases verified:\n \nCase 1: Wrong configuration file path specified in read_conf\n[DEFAULT]\ndelay_reaping \u003d\n[account-reaper]\ndelay_reaping \u003d 2\nResult: This is a case of KeyError and delay_reaping gets value of\nconstant.\nCase 2: Configuration FilePath is correct\n[DEFAULT]\ndelay_reaping \u003d\n[account-reaper]\ndelay_reaping \u003d\nResult: This is a case of ValueError and delay_reaping gets value\nof constant.\n \nCase 3: Wrong configuration file path specified in read_conf\n[DEFAULT]\ndelay_reaping \u003d 1\n[account-reaper]\ndelay_reaping \u003d 2\nResult: The value of delay_reaping will be 1.\n \nCase 4: Wrong configuration file path specified in read_conf\n[DEFAULT]\n[account-reaper]\ndelay_reaping \u003d 2\nResult: The value of delay_reaping will be constant.\n \nCase 5: Configuration FilePath is correct\n[DEFAULT]\ndelay_reaping \u003d\n[account-reaper]\ndelay_reaping \u003d 2\nResult: The value of delay_reaping will be 2.\n \nFor IO Error: It can be thrown while there is some internal system\nerror during reading the configuration file.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"96dbc87ceabd5d04d05dcbd0f40229aaa2d8eb18","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            elif broker.is_status_deleted():"},{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                self.delay_reaping:"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f4e5783_5efcde3c","line":163,"updated":"2017-10-17 19:58:22.000000000","message":"I don\u0027t love this API - this is in the user meta name space for one... I\u0027m not even sure a header is the right interface (as opposed to a different method or a query string..\n\nI need to doublecheck ownership permissions for swift_owner PUT to their own account... it\u0027s probably safe to assume you can\u0027t get a valid token once your account has been marked for deletion; but idk","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"240b10d41931c620b3e213294f67c73dd02d9f7b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            elif broker.is_status_deleted():"},{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                self.delay_reaping:"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_86039fb8","line":163,"in_reply_to":"5f4e5783_5efcde3c","updated":"2017-10-23 15:56:21.000000000","message":"Please detail bit more on this.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":67,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":68,"context_line":"        except (KeyError, ValueError, IOError):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_b4d225d0","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":47},"updated":"2017-11-02 12:51:02.000000000","message":"I don\u0027t see how we can get KeyError or IOError here. conf is a dict, so worst case scenario is the key delay_reaping does not exist and it will return None. But as you provide a default value, it will never return None.\n\nOnly valid exception to catch is ValueError if the value is not an integer. Do we really want to catch it? (it\u0027s never been done anywhere else in swift AFAIK)","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":67,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":68,"context_line":"        except (KeyError, ValueError, IOError):"},{"line_number":69,"context_line":"            try:"},{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_557bcf8a","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":47},"in_reply_to":"3f4b6375_b4d225d0","updated":"2017-11-03 09:57:56.000000000","message":"try:\n            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,\n                                              DEFAULT_DELAY_REAPING))\n        except (ValueError):\n            try:\n                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)\n                self.delay_reaping \u003d \\\n                    int(conf_reaper.get(\u0027delay_reaping\u0027,\n                                        DEFAULT_DELAY_REAPING))\n            except (ValueError):\n                self.delay_reaping \u003d DEFAULT_DELAY_REAPING\n\nWe can have the above piece of code then and how this will work as explained below:\n\nCase 1: When there is a numeric value of delay_reaping in both the sections.\n[DEFAULT]\ndelay_reaping \u003d 1\n[account-reaper]\ndelay_reaping \u003d 2\nOutput: The output value is 1.\n\nCase 2. When there is a blank value of delay_reaping in both the sections.\n[DEFAULT]\ndelay_reaping \u003d \n[account-reaper]\ndelay_reaping \u003d \nOutput: The output is the DEFAULT value.\n\nCase 3. When there is a blank value of delay_reaping in [DEFAULT] section and numeric value in [account-reaper] section.\n[DEFAULT]\ndelay_reaping \u003d \n[account-reaper]\ndelay_reaping \u003d 2\nOutput: The output value is 2.\n\nCase 4. When there is a no delay_reaping key in both the sections.\n[DEFAULT]\n[account-reaper]\nOutput: The output is the DEFAULT value.\n\nCase 5. When there is non numeric value of delay_reaping in both the sections.\n[DEFAULT]\ndelay_reaping \u003d abcdef \n[account-reaper]\ndelay_reaping \u003d ghijkl\nOutput: The output is the DEFAULT value.","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            elif broker.is_status_deleted():"},{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                self.delay_reaping:"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_f49add11","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":62},"updated":"2017-11-02 12:51:02.000000000","message":"I\u0027m still bothered by this name. It looks like a metadata, but it\u0027s not. Why not use X-Account-Undelete or something that does not conflict with the meta namespace?","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            elif broker.is_status_deleted():"},{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                self.delay_reaping:"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_353df38d","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":62},"in_reply_to":"3f4b6375_f49add11","updated":"2017-11-03 09:57:56.000000000","message":"The analysis for this case as below:\n\t\t\t\t\n1. Proxy-server handles and transfers the client\u0027s specific headers using generate_request_headers() method(from contoller/base.py) to backend of account-server.\n2. The generate_request_headers internally invokes the transfer_headers() method that transfers only metadata specific headers. (i.e. it should contains the \u0027meta\u0027 string into the headers).\n3. As per the analysis, we observed that to handle our case we need to use metadata specific header, and hence we used \"X-Account-Meta-Undelete\".\n\nPlease suggest or confirm.","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                self.delay_reaping:"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"},{"line_number":167,"context_line":"                                return HTTPAccepted(request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_b447c577","line":164,"updated":"2017-11-02 12:51:02.000000000","message":"It there a risk of race condition? Should we include some hardcoded delay? (30 seconds more to be sure reaper does not start at the same time it is undeleted)","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                self.delay_reaping:"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"},{"line_number":167,"context_line":"                                return HTTPAccepted(request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_b550c3d6","line":164,"in_reply_to":"3f4b6375_b447c577","updated":"2017-11-03 09:57:56.000000000","message":"We will add here 30 seconds","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"},{"line_number":72,"context_line":"                    int(conf_reaper.get(\u0027delay_reaping\u0027,"},{"line_number":73,"context_line":"                                        DEFAULT_DELAY_REAPING))"},{"line_number":74,"context_line":"            except (ValueError):"},{"line_number":75,"context_line":"                self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_0e181373","line":73,"updated":"2017-11-22 05:17:20.000000000","message":"I think this might be confusing for operators. If you specify something different in a non [DEFAULT] section then you expect that thing to have a different value and anywhere else that needs it to use the default.\n\nWhich is what your code does.. unless someone puts a non int as the delay_reaping, in which case it will look elsewhere.\nThis could lead to what users would think is a strange result... or a bug.\n\nIt\u0027s better to let the op control it, as they know what they are doing. Put it in [Default] if they want to override the default for everything and/or put it in a sub-section if they want to change it for particular daemons.\nAnd if they ever get it wrong.. default to the default value so:\n\n  try:\n      self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027, DEFAULT_DELAY_REAPING))\n  except ValueError:\n      self.delay_reaping \u003d DEFAULT_DELAY_REAPING","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"1066b829b9a73a2059521fa84fecebd2fc5c4bd8","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"},{"line_number":72,"context_line":"                    int(conf_reaper.get(\u0027delay_reaping\u0027,"},{"line_number":73,"context_line":"                                        DEFAULT_DELAY_REAPING))"},{"line_number":74,"context_line":"            except (ValueError):"},{"line_number":75,"context_line":"                self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_84d15fd0","line":73,"in_reply_to":"ff82abbf_0e181373","updated":"2017-11-22 09:23:50.000000000","message":"Here you want us to change the code from line no. 65-75 with the following:\n\n  try:\n      self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027, DEFAULT_DELAY_REAPING))\n  except ValueError:\n      self.delay_reaping \u003d DEFAULT_DELAY_REAPING\n\nPlease confirm.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                conf_reaper \u003d readconf(conf[\u0027__file__\u0027], \u0027account-reaper\u0027)"},{"line_number":71,"context_line":"                self.delay_reaping \u003d \\"},{"line_number":72,"context_line":"                    int(conf_reaper.get(\u0027delay_reaping\u0027,"},{"line_number":73,"context_line":"                                        DEFAULT_DELAY_REAPING))"},{"line_number":74,"context_line":"            except (ValueError):"},{"line_number":75,"context_line":"                self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_115b2f2e","line":73,"in_reply_to":"ff82abbf_0e181373","updated":"2017-11-24 08:40:53.000000000","message":"To make both the reaper and account server in sync for delay_reaping, we have updated the source code as like the following:\n1) In reaper.py.\na) We have defined the default constant for delay reaper with the value of 7 days (i.e. 604800)\n\nb) We have updated the mechanism of reading the value from configuration file.\n\nc) Added the 30 seconds more to handle the situation of race condition.\n\n2) In server.py\na) We have defined the default constant for delay reaper with the value of 7 days (i.e. 604800)\n\nb) We have updated the mechanism of reading the value from configuration file by default it will read from DEFAULT section and if the key is not present there or the value is non int then it will use the default constant value else will read the value which is specified in the configuration file.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            elif broker.is_status_deleted():"},{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                (self.delay_reaping + 30):"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_2e41573a","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":62},"updated":"2017-11-22 05:17:20.000000000","message":"Like Romain suggested, should we use something like X-Undelete-Account?\n\nIt might be nicer to read and easier to remember, and best of all, not a user account meta header?","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            elif broker.is_status_deleted():"},{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                (self.delay_reaping + 30):"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_91465f4f","line":163,"range":{"start_line":163,"start_character":39,"end_line":163,"end_character":62},"in_reply_to":"ff82abbf_2e41573a","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"4da3612898383ab9647444ecc84929fa751d4805","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                (self.delay_reaping + 30):"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"},{"line_number":167,"context_line":"                                return HTTPAccepted(request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_937747d5","line":164,"range":{"start_line":164,"start_character":75,"end_line":164,"end_character":87},"updated":"2017-11-23 09:03:31.000000000","message":"pep8?","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":161,"context_line":"                info \u003d broker.get_info()"},{"line_number":162,"context_line":"                if config_true_value(req.headers.get"},{"line_number":163,"context_line":"                                     (\u0027X-account-meta-undelete\u0027)):"},{"line_number":164,"context_line":"                        if time.time() - float(Timestamp(info[\u0027delete_timestamp\u0027])) \u003c \\"},{"line_number":165,"context_line":"                                (self.delay_reaping + 30):"},{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"},{"line_number":167,"context_line":"                                return HTTPAccepted(request\u003dreq)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_11748f98","line":164,"range":{"start_line":164,"start_character":75,"end_line":164,"end_character":87},"in_reply_to":"ff82abbf_937747d5","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"},{"line_number":167,"context_line":"                                return HTTPAccepted(request\u003dreq)"},{"line_number":168,"context_line":"                        else:"},{"line_number":169,"context_line":"                                return self._deleted_response(broker, req,"},{"line_number":170,"context_line":"                                                              HTTPForbidden,"},{"line_number":171,"context_line":"                                                              body\u003d\u0027Account\u0027"},{"line_number":172,"context_line":"                                                              \u0027 database\u0027"},{"line_number":173,"context_line":"                                                              \u0027 files have\u0027"},{"line_number":174,"context_line":"                                                              \u0027 been reaped.\u0027)"},{"line_number":175,"context_line":"                return self._deleted_response(broker, req, HTTPForbidden,"},{"line_number":176,"context_line":"                                              body\u003d\u0027Recently deleted\u0027)"},{"line_number":177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_0e5fb30e","line":174,"range":{"start_line":169,"start_character":62,"end_line":174,"end_character":77},"updated":"2017-11-22 05:17:20.000000000","message":"You could bring this down on a new line to get more space and still pass pep8:\n\n  return self._deleted_response(\n      broker, req, HTTPForbidden,\n      body\u003d\u0027Account database files have \u0027\n           \u0027been reaped.\u0027)\n\nOr however long it needs to be before we wrap.","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":166,"context_line":"                                broker.undelete_db(timestamp.internal)"},{"line_number":167,"context_line":"                                return HTTPAccepted(request\u003dreq)"},{"line_number":168,"context_line":"                        else:"},{"line_number":169,"context_line":"                                return self._deleted_response(broker, req,"},{"line_number":170,"context_line":"                                                              HTTPForbidden,"},{"line_number":171,"context_line":"                                                              body\u003d\u0027Account\u0027"},{"line_number":172,"context_line":"                                                              \u0027 database\u0027"},{"line_number":173,"context_line":"                                                              \u0027 files have\u0027"},{"line_number":174,"context_line":"                                                              \u0027 been reaped.\u0027)"},{"line_number":175,"context_line":"                return self._deleted_response(broker, req, HTTPForbidden,"},{"line_number":176,"context_line":"                                              body\u003d\u0027Recently deleted\u0027)"},{"line_number":177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_7164fbe4","line":174,"range":{"start_line":169,"start_character":62,"end_line":174,"end_character":77},"in_reply_to":"ff82abbf_0e5fb30e","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":67,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":68,"context_line":"        except ValueError:"},{"line_number":69,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_account_broker(self, drive, part, account, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf8cb3f7_c9fa0574","line":68,"updated":"2017-12-28 01:16:14.000000000","message":"Again, I don\u0027t think this tolerance for bad configs is helping operators.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        try:"},{"line_number":66,"context_line":"            self.delay_reaping \u003d int(conf.get(\u0027delay_reaping\u0027,"},{"line_number":67,"context_line":"                                              DEFAULT_DELAY_REAPING))"},{"line_number":68,"context_line":"        except ValueError:"},{"line_number":69,"context_line":"            self.delay_reaping \u003d DEFAULT_DELAY_REAPING"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def _get_account_broker(self, drive, part, account, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_e716ed55","line":68,"in_reply_to":"bf8cb3f7_c9fa0574","updated":"2018-01-08 06:25:01.000000000","message":"Can your please tell us what we should do here?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                except DatabaseAlreadyExists:"},{"line_number":153,"context_line":"                    created \u003d False"},{"line_number":154,"context_line":"            elif broker.is_status_deleted():"},{"line_number":155,"context_line":"                info \u003d broker.get_info()"},{"line_number":156,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":157,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":158,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf8cb3f7_692f39f6","line":155,"updated":"2017-12-28 01:16:14.000000000","message":"nit: since this involves I/O, it\u0027s slightly preferable to have it inside the if block, so we only do it when we\u0027ll use the result.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"326e89f9565e0732ee097e90f589bf3576f2ddfe","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                except DatabaseAlreadyExists:"},{"line_number":153,"context_line":"                    created \u003d False"},{"line_number":154,"context_line":"            elif broker.is_status_deleted():"},{"line_number":155,"context_line":"                info \u003d broker.get_info()"},{"line_number":156,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":157,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":158,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa0c359_fe9a0bc3","line":155,"in_reply_to":"9f91af0f_6702dd0d","updated":"2018-02-20 08:17:27.000000000","message":"Done","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                except DatabaseAlreadyExists:"},{"line_number":153,"context_line":"                    created \u003d False"},{"line_number":154,"context_line":"            elif broker.is_status_deleted():"},{"line_number":155,"context_line":"                info \u003d broker.get_info()"},{"line_number":156,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":157,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":158,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_6702dd0d","line":155,"in_reply_to":"bf8cb3f7_692f39f6","updated":"2018-01-08 06:25:01.000000000","message":"We understood this, we will update it.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                except DatabaseAlreadyExists:"},{"line_number":170,"context_line":"                    created \u003d False"},{"line_number":171,"context_line":"            elif broker.is_status_deleted():"},{"line_number":172,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":173,"context_line":"                    info \u003d broker.get_info()"},{"line_number":174,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":175,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_7408a92c","line":172,"range":{"start_line":172,"start_character":54,"end_line":172,"end_character":72},"updated":"2019-11-08 04:05:23.000000000","message":"Right; we do the reseller-admin check in the proxy\u0027s obj controller so we don\u0027t need to shift this between client-facing and X-Backend-* headers...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"                except DatabaseAlreadyExists:"},{"line_number":170,"context_line":"                    created \u003d False"},{"line_number":171,"context_line":"            elif broker.is_status_deleted():"},{"line_number":172,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":173,"context_line":"                    info \u003d broker.get_info()"},{"line_number":174,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":175,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_b4dfa509","line":172,"range":{"start_line":172,"start_character":54,"end_line":172,"end_character":72},"in_reply_to":"3fa7e38b_7408a92c","updated":"2019-12-30 12:04:30.000000000","message":"We are not clear about it, would need more clarification from your side.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":173,"context_line":"                    info \u003d broker.get_info()"},{"line_number":174,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":175,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"},{"line_number":176,"context_line":"                        broker.undelete_db(timestamp.internal)"},{"line_number":177,"context_line":"                        return HTTPAccepted(request\u003dreq)"},{"line_number":178,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_ba104b51","line":175,"range":{"start_line":175,"start_character":23,"end_line":175,"end_character":34},"updated":"2019-11-08 04:05:23.000000000","message":"I wonder if this should depend on the timestamp from the request instead of the current server time...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":172,"context_line":"                if config_true_value(req.headers.get(\u0027X-Undelete-Account\u0027)):"},{"line_number":173,"context_line":"                    info \u003d broker.get_info()"},{"line_number":174,"context_line":"                    delete_ts \u003d float(Timestamp(info[\u0027delete_timestamp\u0027]))"},{"line_number":175,"context_line":"                    if time.time() - delete_ts \u003c self.delay_reaping:"},{"line_number":176,"context_line":"                        broker.undelete_db(timestamp.internal)"},{"line_number":177,"context_line":"                        return HTTPAccepted(request\u003dreq)"},{"line_number":178,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_d4e4a1e1","line":175,"range":{"start_line":175,"start_character":23,"end_line":175,"end_character":34},"in_reply_to":"3fa7e38b_ba104b51","updated":"2019-12-30 12:04:30.000000000","message":"We understood from this that you are saying to use request timestamp rather than server timestamp.\n\nPlease confirm.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"swift/common/db.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1790cf97c0ca954f7f765ae15d065069da19d55a","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        :param timestamp: internalized delete timestamp"},{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # first, clear the metadata"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        cleared_meta \u003d {}"},{"line_number":318,"context_line":"        for k in self.metadata:"},{"line_number":319,"context_line":"            cleared_meta[k] \u003d (\u0027\u0027, timestamp)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_8333a313","line":316,"updated":"2017-10-05 23:05:48.000000000","message":"do we need to have an extra line here?","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1790cf97c0ca954f7f765ae15d065069da19d55a","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        \"\"\""},{"line_number":315,"context_line":"        # first, clear the metadata"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        cleared_meta \u003d {}"},{"line_number":318,"context_line":"        for k in self.metadata:"},{"line_number":319,"context_line":"            cleared_meta[k] \u003d (\u0027\u0027, timestamp)"},{"line_number":320,"context_line":"        self.update_metadata(cleared_meta)"},{"line_number":321,"context_line":"        # then mark the db as deleted"},{"line_number":322,"context_line":"        with self.get() as conn:"},{"line_number":323,"context_line":"            self._delete_db(conn, timestamp)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e634a5e0","line":320,"range":{"start_line":317,"start_character":8,"end_line":320,"end_character":41},"updated":"2017-10-05 23:05:48.000000000","message":"This has nothing to do with this patch, but do we really need to clear db metadata when marking deleted? This is a problem we\u0027re facing in sharding, where there is a case where we may need to undelete shard containers, which would be much simpler if all the metadata wasn\u0027t removed.\n\nBut the same problem persists here with account undeletion, what about all the metadata attached to the account before it was deleted? Maybe this is something we need to raise and ask the community about.","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        :param timestamp: internalized delete timestamp"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        # first, clear the metadata"},{"line_number":353,"context_line":"        cleared_meta \u003d {}"},{"line_number":354,"context_line":"        for k in self.metadata:"},{"line_number":355,"context_line":"            cleared_meta[k] \u003d (\u0027\u0027, timestamp)"},{"line_number":356,"context_line":"        self.update_metadata(cleared_meta)"},{"line_number":357,"context_line":"        # then mark the db as deleted"},{"line_number":358,"context_line":"        with self.get() as conn:"},{"line_number":359,"context_line":"            self._delete_db(conn, timestamp)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_9a454f46","line":356,"range":{"start_line":352,"start_character":8,"end_line":356,"end_character":42},"updated":"2019-11-08 04:05:23.000000000","message":"I\u0027m a little worried about the lost metadata... but I suppose it\u0027s already gone...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        :param timestamp: internalized delete timestamp"},{"line_number":351,"context_line":"        \"\"\""},{"line_number":352,"context_line":"        # first, clear the metadata"},{"line_number":353,"context_line":"        cleared_meta \u003d {}"},{"line_number":354,"context_line":"        for k in self.metadata:"},{"line_number":355,"context_line":"            cleared_meta[k] \u003d (\u0027\u0027, timestamp)"},{"line_number":356,"context_line":"        self.update_metadata(cleared_meta)"},{"line_number":357,"context_line":"        # then mark the db as deleted"},{"line_number":358,"context_line":"        with self.get() as conn:"},{"line_number":359,"context_line":"            self._delete_db(conn, timestamp)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_54d0b1f4","line":356,"range":{"start_line":352,"start_character":8,"end_line":356,"end_character":42},"in_reply_to":"3fa7e38b_9a454f46","updated":"2019-12-30 12:04:30.000000000","message":"We have not made any changes here.\n\nPlease confirm, what you want from us.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":741,"context_line":"            for entry in fp.read().split(b\u0027:\u0027):"},{"line_number":742,"context_line":"                if entry:"},{"line_number":743,"context_line":"                    try:"},{"line_number":744,"context_line":"                        data \u003d pickle.loads(base64.b64decode(entry))"},{"line_number":745,"context_line":"                        self._commit_puts_load(item_list, data)"},{"line_number":746,"context_line":"                    except Exception:"},{"line_number":747,"context_line":"                        self.logger.exception("}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_3a4bfb5f","line":744,"updated":"2019-11-08 04:05:23.000000000","message":"This change is worrying... particularly since the test that went with it has gone away.\n\nI think there may have been a bit of trouble resolving the merge conflict with https://github.com/openstack/swift/commit/ef66470","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":741,"context_line":"            for entry in fp.read().split(b\u0027:\u0027):"},{"line_number":742,"context_line":"                if entry:"},{"line_number":743,"context_line":"                    try:"},{"line_number":744,"context_line":"                        data \u003d pickle.loads(base64.b64decode(entry))"},{"line_number":745,"context_line":"                        self._commit_puts_load(item_list, data)"},{"line_number":746,"context_line":"                    except Exception:"},{"line_number":747,"context_line":"                        self.logger.exception("}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_f402fd71","line":744,"in_reply_to":"3fa7e38b_3a4bfb5f","updated":"2019-12-30 12:04:30.000000000","message":"We have not made any changes here.\n\nPlease confirm, what you want from us.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"swift/container/backend.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1790cf97c0ca954f7f765ae15d065069da19d55a","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        \"\"\""},{"line_number":373,"context_line":"        conn.execute(\"\"\""},{"line_number":374,"context_line":"            UPDATE container_stat"},{"line_number":375,"context_line":"            SET delete_timestamp \u003d \u00270\u0027,"},{"line_number":376,"context_line":"                put_timestamp \u003d ?,"},{"line_number":377,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":378,"context_line":"                status_changed_at \u003d ?"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_46a7f90c","line":375,"range":{"start_line":375,"start_character":16,"end_line":375,"end_character":39},"updated":"2017-10-05 23:05:48.000000000","message":"Same as Romain mentioned earlier, let\u0027s not set delete_timestamp to 0. Like in delete_db, we don\u0027t 0 out the put_timestamp.","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9710d0982974c0f97cd7060d0504a40db3c2fb0","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":376,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":377,"context_line":"                status_changed_at \u003d ?"},{"line_number":378,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def _commit_puts_load(self, item_list, entry):"},{"line_number":381,"context_line":"        \"\"\"See :func:`swift.common.db.DatabaseBroker._commit_puts_load`\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_5a268517","line":378,"updated":"2017-10-23 20:02:32.000000000","message":"so this does acctually get tested:\n\ntest_undelete_db (test.unit.container.test_backend.TestCommonContainerBroker)","commit_id":"835a534c23ef970bfb6b11f93d981fb28188c226"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"12d90322718b3fa0783e3da46b4e0c661d489be4","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":376,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":377,"context_line":"                status_changed_at \u003d ?"},{"line_number":378,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def _commit_puts_load(self, item_list, entry):"},{"line_number":381,"context_line":"        \"\"\"See :func:`swift.common.db.DatabaseBroker._commit_puts_load`\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_051b05d0","line":378,"in_reply_to":"3f4b6375_5a268517","updated":"2017-10-24 08:00:48.000000000","message":"This method gets executed from \"test_undelete_db\" from test_db.py during the execution of unit test.","commit_id":"835a534c23ef970bfb6b11f93d981fb28188c226"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"62b224fa5209275c2a3e904405c4eb035db1722c","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":376,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":377,"context_line":"                status_changed_at \u003d ?"},{"line_number":378,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def _commit_puts_load(self, item_list, entry):"},{"line_number":381,"context_line":"        \"\"\"See :func:`swift.common.db.DatabaseBroker._commit_puts_load`\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_8ea8a3db","line":378,"updated":"2017-11-22 05:17:20.000000000","message":"as I mentioned with the account _undelete_db","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":376,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":377,"context_line":"                status_changed_at \u003d ?"},{"line_number":378,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    def _commit_puts_load(self, item_list, entry):"},{"line_number":381,"context_line":"        \"\"\"See :func:`swift.common.db.DatabaseBroker._commit_puts_load`\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_b19843c0","line":378,"in_reply_to":"ff82abbf_8ea8a3db","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                status_changed_at \u003d ?"},{"line_number":361,"context_line":"            WHERE delete_timestamp \u003c ? \"\"\", (timestamp, timestamp, timestamp))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _undelete_db(self, conn, timestamp):"},{"line_number":364,"context_line":"        \"\"\""},{"line_number":365,"context_line":"        Mark the DB as un-deleted."},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bf8cb3f7_691899d2","line":363,"updated":"2017-12-28 01:16:14.000000000","message":"Interesting... so container backends get this, too? Does anything actually use this? I wonder if Matt and Alistair would be interested in this over on the feature/deep branch... I know there\u0027s been some talk about reviving deleted containers over there...","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                status_changed_at \u003d ?"},{"line_number":361,"context_line":"            WHERE delete_timestamp \u003c ? \"\"\", (timestamp, timestamp, timestamp))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _undelete_db(self, conn, timestamp):"},{"line_number":364,"context_line":"        \"\"\""},{"line_number":365,"context_line":"        Mark the DB as un-deleted."},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bf659307_4cb65fdc","line":363,"in_reply_to":"9f91af0f_02017f05","updated":"2019-11-08 04:05:23.000000000","message":"Nothing needs to happen; I was just thinking aloud. I\u0027m 99% sure this is currently unused for containers, but I\u0027m happy to have the behavior mirrored between accounts and containers.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                status_changed_at \u003d ?"},{"line_number":361,"context_line":"            WHERE delete_timestamp \u003c ? \"\"\", (timestamp, timestamp, timestamp))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _undelete_db(self, conn, timestamp):"},{"line_number":364,"context_line":"        \"\"\""},{"line_number":365,"context_line":"        Mark the DB as un-deleted."},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3fa7e38b_b4f8057e","line":363,"in_reply_to":"bf659307_4cb65fdc","updated":"2019-12-30 12:04:30.000000000","message":"IF you want to mirror then that would be separate fix and the issue for container is already in the swift bug list.\n\nPlease confirm.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":360,"context_line":"                status_changed_at \u003d ?"},{"line_number":361,"context_line":"            WHERE delete_timestamp \u003c ? \"\"\", (timestamp, timestamp, timestamp))"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _undelete_db(self, conn, timestamp):"},{"line_number":364,"context_line":"        \"\"\""},{"line_number":365,"context_line":"        Mark the DB as un-deleted."},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_02017f05","line":363,"in_reply_to":"bf8cb3f7_691899d2","updated":"2018-01-08 06:25:01.000000000","message":"Can your please tell us what we should do here?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"}],"swift/proxy/controllers/account.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f6f3431e2f821f8588020ad40ddb2721fb1a6e14","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        account_partition, accounts \u003d \\"},{"line_number":127,"context_line":"            self.app.account_ring.get_nodes(self.account_name)"},{"line_number":128,"context_line":"        extra_headers \u003d None if \u0027X-Undelete-Account\u0027 not in req.headers else \\"},{"line_number":129,"context_line":"            {\u0027X-Undelete-Account\u0027: req.headers[\u0027X-Undelete-Account\u0027]}"},{"line_number":130,"context_line":"        headers \u003d self.generate_request_headers(req, extra_headers,"},{"line_number":131,"context_line":"                                                transfer\u003dTrue)"},{"line_number":132,"context_line":"        clear_info_cache(self.app, req.environ, self.account_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_ff0eff30","line":129,"updated":"2017-12-28 01:16:14.000000000","message":"This feels a little silly, particularly since we\u0027re already specifying transfer\u003dTrue... would it be better to add \u0027x-undelete-account\u0027 to AccountController.pass_through_headers?\n\nWhere do we restrict who can set this header? At first, I was afraid that a public operator can mark an account deleted (say, because the user stopped paying their bill), but the *user* could still say, \"Um, nah -- I\u0027m still good, I swear!\", issue a PUT with X-Undelete-Account: true, and continue using their account.\n\nBut experimentally, that\u0027s not what happens... normal user gets back a 403 on both PUT and DELETE to their account... but it\u0027s not obvious to me where that\u0027s getting raised :-/\n\nI guess it\u0027s coming out of the auth system? How much do we trust the auth system to get this right? Poking around at this caused me to notice https://bugs.launchpad.net/swift/+bug/1740326 in tempauth... if we can\u0027t even trust *ourselves* to get our crazy parallel auth system right, how much can we rely on other systems?","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"9e6e82e6b63e5add9a994bd82a841e53edb7b578","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        account_partition, accounts \u003d \\"},{"line_number":127,"context_line":"            self.app.account_ring.get_nodes(self.account_name)"},{"line_number":128,"context_line":"        extra_headers \u003d None if \u0027X-Undelete-Account\u0027 not in req.headers else \\"},{"line_number":129,"context_line":"            {\u0027X-Undelete-Account\u0027: req.headers[\u0027X-Undelete-Account\u0027]}"},{"line_number":130,"context_line":"        headers \u003d self.generate_request_headers(req, extra_headers,"},{"line_number":131,"context_line":"                                                transfer\u003dTrue)"},{"line_number":132,"context_line":"        clear_info_cache(self.app, req.environ, self.account_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9f91af0f_a268d3b8","line":129,"in_reply_to":"9f91af0f_ff0eff30","updated":"2018-01-08 06:25:01.000000000","message":"You want us to add this header into AccountController.pass_through_headers?\n\nIf yes, then we need to analyze the changes and based on we will provide our views over to it.","commit_id":"26dcececc82dd1a7c6511ed9d1da602a806da8b9"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"4b3105a63c96b08369460e1b871dc008f476d117","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            return resp"},{"line_number":125,"context_line":"        account_partition, accounts \u003d \\"},{"line_number":126,"context_line":"            self.app.account_ring.get_nodes(self.account_name)"},{"line_number":127,"context_line":"        extra_headers \u003d None if \u0027X-Undelete-Account\u0027 not in req.headers else \\"},{"line_number":128,"context_line":"            {\u0027X-Undelete-Account\u0027: req.headers[\u0027X-Undelete-Account\u0027]}"},{"line_number":129,"context_line":"        headers \u003d self.generate_request_headers(req, extra_headers,"},{"line_number":130,"context_line":"                                                transfer\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_cf2a322e","line":127,"updated":"2019-11-08 03:22:31.000000000","message":"I don\u0027t think the proxy should forward this header from clients, it would be better if this was x-backend-undelete-account so that the gatekeeper would guarantee it was set by an InternalClient","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            return resp"},{"line_number":125,"context_line":"        account_partition, accounts \u003d \\"},{"line_number":126,"context_line":"            self.app.account_ring.get_nodes(self.account_name)"},{"line_number":127,"context_line":"        extra_headers \u003d None if \u0027X-Undelete-Account\u0027 not in req.headers else \\"},{"line_number":128,"context_line":"            {\u0027X-Undelete-Account\u0027: req.headers[\u0027X-Undelete-Account\u0027]}"},{"line_number":129,"context_line":"        headers \u003d self.generate_request_headers(req, extra_headers,"},{"line_number":130,"context_line":"                                                transfer\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_546d1165","line":127,"in_reply_to":"3fa7e38b_cf2a322e","updated":"2019-12-30 12:04:30.000000000","message":"We understood that you want this to change to x-backend-undelete-account.\n\nPlease confirm.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"test/probe/test_account_reaper.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        self.assertTrue(account_reapers)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # run reaper, and make sure that nothing is reaped"},{"line_number":175,"context_line":"        for account_reaper in account_reapers:"},{"line_number":176,"context_line":"            account_reaper.run_once()"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_5a87d762","line":174,"updated":"2019-11-08 04:05:23.000000000","message":"Maybe worth doing our 30s sleep around here, and keeping it sleep(3) below? *shrug*","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        self.assertTrue(account_reapers)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # run reaper, and make sure that nothing is reaped"},{"line_number":175,"context_line":"        for account_reaper in account_reapers:"},{"line_number":176,"context_line":"            account_reaper.run_once()"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_d4fd816d","line":174,"in_reply_to":"3fa7e38b_5a87d762","updated":"2019-12-30 12:04:30.000000000","message":"We understood and we will update as per your suggestions.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                    self.fail(\"Nothing should be reaped. Object should exist\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        # wait 33 seconds, run reaper, and make sure that all is reaped"},{"line_number":200,"context_line":"        sleep(33)"},{"line_number":201,"context_line":"        for account_reaper in account_reapers:"},{"line_number":202,"context_line":"            account_reaper.run_once()"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_1aa87fd9","line":200,"updated":"2019-11-08 04:05:23.000000000","message":":-/ So we\u0027re forcing probe tests to take an extra half minute every run?\n\nI suppose they weren\u0027t exactly speedy to begin with...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                    self.fail(\"Nothing should be reaped. Object should exist\")"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        # wait 33 seconds, run reaper, and make sure that all is reaped"},{"line_number":200,"context_line":"        sleep(33)"},{"line_number":201,"context_line":"        for account_reaper in account_reapers:"},{"line_number":202,"context_line":"            account_reaper.run_once()"},{"line_number":203,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_74f60d93","line":200,"in_reply_to":"3fa7e38b_1aa87fd9","updated":"2019-12-30 12:04:30.000000000","message":"We understood and we will update as per your suggestions.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"test/unit/account/test_backend.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"96dbc87ceabd5d04d05dcbd0f40229aaa2d8eb18","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        # perform undeletion"},{"line_number":129,"context_line":"        broker1.undelete_db(Timestamp(time()).internal)"},{"line_number":130,"context_line":"        self.assertTrue(not broker1.is_status_deleted())"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_reclaim(self):"},{"line_number":133,"context_line":"        broker \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027test_account\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f4e5783_fe194ad6","line":130,"updated":"2017-10-17 19:58:22.000000000","message":"should container/test_backend have a similar test?","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"240b10d41931c620b3e213294f67c73dd02d9f7b","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        # perform undeletion"},{"line_number":129,"context_line":"        broker1.undelete_db(Timestamp(time()).internal)"},{"line_number":130,"context_line":"        self.assertTrue(not broker1.is_status_deleted())"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_reclaim(self):"},{"line_number":133,"context_line":"        broker \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027test_account\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_e62b732d","line":130,"in_reply_to":"5f4e5783_fe194ad6","updated":"2017-10-23 15:56:21.000000000","message":"We don\u0027t think, that test should be in container test backend to undelete the account because the delete account test cases are also not part of the container test backend.","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Test AccountBroker.is_status_deleted"},{"line_number":122,"context_line":"        broker1 \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027a\u0027)"},{"line_number":123,"context_line":"        broker1.initialize(Timestamp(time()).internal)"},{"line_number":124,"context_line":"        self.assertTrue(not broker1.is_status_deleted())"},{"line_number":125,"context_line":"        broker1.delete_db(Timestamp(time()).internal)"},{"line_number":126,"context_line":"        self.assertTrue(broker1.is_status_deleted())"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_4f447e47","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":56},"updated":"2017-11-02 12:51:02.000000000","message":"assertFalse seems better suited","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        # Test AccountBroker.is_status_deleted"},{"line_number":122,"context_line":"        broker1 \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027a\u0027)"},{"line_number":123,"context_line":"        broker1.initialize(Timestamp(time()).internal)"},{"line_number":124,"context_line":"        self.assertTrue(not broker1.is_status_deleted())"},{"line_number":125,"context_line":"        broker1.delete_db(Timestamp(time()).internal)"},{"line_number":126,"context_line":"        self.assertTrue(broker1.is_status_deleted())"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_a22e4b89","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":56},"in_reply_to":"3f4b6375_4f447e47","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        # perform undeletion"},{"line_number":129,"context_line":"        broker1.undelete_db(Timestamp(time()).internal)"},{"line_number":130,"context_line":"        self.assertTrue(not broker1.is_status_deleted())"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_reclaim(self):"},{"line_number":133,"context_line":"        broker \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027test_account\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_2f7702a3","line":130,"range":{"start_line":130,"start_character":8,"end_line":130,"end_character":56},"updated":"2017-11-02 12:51:02.000000000","message":"assertFalse seems better suited","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        # perform undeletion"},{"line_number":129,"context_line":"        broker1.undelete_db(Timestamp(time()).internal)"},{"line_number":130,"context_line":"        self.assertTrue(not broker1.is_status_deleted())"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_reclaim(self):"},{"line_number":133,"context_line":"        broker \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027test_account\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_62529315","line":130,"range":{"start_line":130,"start_character":8,"end_line":130,"end_character":56},"in_reply_to":"3f4b6375_2f7702a3","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"}],"test/unit/account/test_reaper.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self.assertEqual(r.delay_reaping, 123)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_delay_reaping_conf_bad_value(self):"},{"line_number":231,"context_line":"        self.assertRaises(ValueError, reaper.AccountReaper,"},{"line_number":232,"context_line":"                          {\u0027delay_reaping\u0027: \u0027abc\u0027})"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def test_reap_warn_after_conf_set(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_7a8f3375","side":"PARENT","line":231,"updated":"2019-11-08 04:05:23.000000000","message":"IDK -- I was kinda OK with this raising an error... I know Matt argued for it to take the default before, though... we\u0027ll sort it out ourselves -- shouldn\u0027t really hold this patch up.","commit_id":"4ae412e13b1b16e7a043235427229ead75186ce7"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        self.assertEqual(r.delay_reaping, 123)"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def test_delay_reaping_conf_bad_value(self):"},{"line_number":231,"context_line":"        self.assertRaises(ValueError, reaper.AccountReaper,"},{"line_number":232,"context_line":"                          {\u0027delay_reaping\u0027: \u0027abc\u0027})"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    def test_reap_warn_after_conf_set(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_94f3899f","side":"PARENT","line":231,"in_reply_to":"3fa7e38b_7a8f3375","updated":"2019-12-30 12:04:30.000000000","message":"We are not clear on this, please provide more clarification.","commit_id":"4ae412e13b1b16e7a043235427229ead75186ce7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        for cont in self.containers:"},{"line_number":55,"context_line":"            if cont \u003e marker:"},{"line_number":56,"context_line":"                yield cont, None, None, None, None"},{"line_number":57,"context_line":"                limit -\u003d 1"},{"line_number":58,"context_line":"            if limit \u003c\u003d 0:"},{"line_number":59,"context_line":"                break"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_ba95ab8a","line":57,"updated":"2019-11-08 04:05:23.000000000","message":"?\n\nI suspect this is actually the right thing to do, but I wouldn\u0027t have expected this to change for this fix...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        for cont in self.containers:"},{"line_number":55,"context_line":"            if cont \u003e marker:"},{"line_number":56,"context_line":"                yield cont, None, None, None, None"},{"line_number":57,"context_line":"                limit -\u003d 1"},{"line_number":58,"context_line":"            if limit \u003c\u003d 0:"},{"line_number":59,"context_line":"                break"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_54e991a8","line":57,"in_reply_to":"3fa7e38b_ba95ab8a","updated":"2019-12-30 12:04:30.000000000","message":"We have not made any changes here.\n\nPlease confirm, what you want from us.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"test/unit/account/test_server.py":[{"author":{"_account_id":13852,"name":"Romain LE DISEZ","email":"romain.le-disez@corp.ovh.com","username":"rledisez"},"change_message_id":"a4bcf95c509f75d8f77f47876639e8c9f7bf4a59","unresolved":false,"context_lines":[{"line_number":2144,"context_line":"                 StoragePolicy(2, \u0027two\u0027, False),"},{"line_number":2145,"context_line":"                 StoragePolicy(3, \u0027three\u0027, False)])"},{"line_number":2146,"context_line":"class TestNonLegacyDefaultStoragePolicy(TestAccountController):"},{"line_number":2147,"context_line":""},{"line_number":2148,"context_line":"    pass"},{"line_number":2149,"context_line":""},{"line_number":2150,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_4fb23e4b","line":2147,"updated":"2017-11-02 12:51:02.000000000","message":"Can you remove this useless/unrelated diff please","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"e456265960660bfffe0b0bbaf8fcb037a6f38996","unresolved":false,"context_lines":[{"line_number":2144,"context_line":"                 StoragePolicy(2, \u0027two\u0027, False),"},{"line_number":2145,"context_line":"                 StoragePolicy(3, \u0027three\u0027, False)])"},{"line_number":2146,"context_line":"class TestNonLegacyDefaultStoragePolicy(TestAccountController):"},{"line_number":2147,"context_line":""},{"line_number":2148,"context_line":"    pass"},{"line_number":2149,"context_line":""},{"line_number":2150,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f4b6375_02dd1f6f","line":2147,"in_reply_to":"3f4b6375_4fb23e4b","updated":"2017-11-03 09:57:56.000000000","message":"Done","commit_id":"0090e8dadb9b32e1c0d750ae629cb4004b2f6eb3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":2202,"context_line":"                            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(2),"},{"line_number":2203,"context_line":"                                     \u0027X-Undelete-Account\u0027: \u0027true\u0027})"},{"line_number":2204,"context_line":"        resp \u003d req.get_response(self.controller)"},{"line_number":2205,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":2206,"context_line":""},{"line_number":2207,"context_line":"    def test_UNDELETE_after_account_reaped(self):"},{"line_number":2208,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_bac36b8a","line":2205,"updated":"2019-11-08 04:05:23.000000000","message":"Whoa, wait... so we\n\n* do a PUT in the far-past,\n* DELETE it in the near-past, and finally\n* do an un-delete in the far-past which *succeeds*?\n\nWhat\u0027s the state of the account DB now? I suspect it\u0027s still deleted, since we use the request\u0027s X-Timestamp to update the put_timestamp, so that\u0027ll still be before the delete_timestamp...","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":2202,"context_line":"                            headers\u003d{\u0027X-Timestamp\u0027: normalize_timestamp(2),"},{"line_number":2203,"context_line":"                                     \u0027X-Undelete-Account\u0027: \u0027true\u0027})"},{"line_number":2204,"context_line":"        resp \u003d req.get_response(self.controller)"},{"line_number":2205,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":2206,"context_line":""},{"line_number":2207,"context_line":"    def test_UNDELETE_after_account_reaped(self):"},{"line_number":2208,"context_line":"        req \u003d Request.blank(\u0027/sda1/p/a\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_b42d65fd","line":2205,"in_reply_to":"3fa7e38b_bac36b8a","updated":"2019-12-30 12:04:30.000000000","message":"We are not able to understand, please provide more clarification.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}],"test/unit/common/test_db.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1790cf97c0ca954f7f765ae15d065069da19d55a","unresolved":false,"context_lines":[{"line_number":288,"context_line":"    def _undelete_db(self, conn, timestamp, force\u003dFalse):"},{"line_number":289,"context_line":"        conn.execute(\"\"\""},{"line_number":290,"context_line":"            UPDATE test_stat"},{"line_number":291,"context_line":"            SET delete_timestamp \u003d \u00270\u0027,"},{"line_number":292,"context_line":"                put_timestamp \u003d ?,"},{"line_number":293,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":294,"context_line":"                status_changed_at \u003d ?"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_06d7c151","line":291,"range":{"start_line":291,"start_character":17,"end_line":291,"end_character":39},"updated":"2017-10-05 23:05:48.000000000","message":"here to","commit_id":"ad7beb636ee0fa58aa3e02c902a83a0a913cb8d3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"96dbc87ceabd5d04d05dcbd0f40229aaa2d8eb18","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        broker.delete_db(next(self.ts))"},{"line_number":326,"context_line":"        self.assertTrue(broker.is_deleted())"},{"line_number":327,"context_line":"        broker.undelete_db(next(self.ts))"},{"line_number":328,"context_line":"        self.assertFalse(broker.is_deleted())"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def test_merge_timestamps_simple_delete(self):"},{"line_number":331,"context_line":"        put_timestamp \u003d next(self.ts)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f4e5783_de332e61","line":328,"updated":"2017-10-17 19:58:22.000000000","message":"nice!","commit_id":"bcc01e7165b6c53f0141734a8b537900312d54ff"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"f9710d0982974c0f97cd7060d0504a40db3c2fb0","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    of the abstract methods on DatabaseBroker."},{"line_number":307,"context_line":"    \"\"\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    broker_class \u003d ExampleBroker"},{"line_number":310,"context_line":"    policy \u003d 0"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_3a4d09c4","line":309,"updated":"2017-10-23 20:02:32.000000000","message":"Yea, over in test.unit.container.test_backend there\u0027s \n\n    class TestCommonContainerBroker(test_db.TestExampleBroker):\n        broker_class \u003d ContainerBroker","commit_id":"835a534c23ef970bfb6b11f93d981fb28188c226"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"12d90322718b3fa0783e3da46b4e0c661d489be4","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    of the abstract methods on DatabaseBroker."},{"line_number":307,"context_line":"    \"\"\""},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    broker_class \u003d ExampleBroker"},{"line_number":310,"context_line":"    policy \u003d 0"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_458d7dd1","line":309,"in_reply_to":"3f4b6375_3a4d09c4","updated":"2017-10-24 08:00:48.000000000","message":"If we don\u0027t need the _undelete_db in container\\backend.py then we can make the following changes in test_db.py:\n\n1) First we need to import the AccountBroker.\n2) In test_undelete_db we need to replace the below line:\n\nbroker \u003d self.broker_class(\u0027:memory:\u0027, account\u003d\u0027a\u0027, container\u003d\u0027c\u0027)\n\nwith \n\nbroker \u003d AccountBroker(\u0027:memory:\u0027, account\u003d\u0027a\u0027)\n\nPlease confirm.","commit_id":"835a534c23ef970bfb6b11f93d981fb28188c226"},{"author":{"_account_id":23630,"name":"Tovin Seven","email":"tovin07@gmail.com","username":"tovin07"},"change_message_id":"4da3612898383ab9647444ecc84929fa751d4805","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":292,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":293,"context_line":"                status_changed_at \u003d ?"},{"line_number":294,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def _is_deleted(self, conn):"},{"line_number":297,"context_line":"        info \u003d conn.execute(\u0027SELECT * FROM test_stat\u0027).fetchone()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_93b2e793","line":294,"range":{"start_line":294,"start_character":38,"end_line":294,"end_character":39},"updated":"2017-11-23 09:03:31.000000000","message":"redundant","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"206177be08a7b94d9e0ac8ff6c704fd2e21092d5","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            SET put_timestamp \u003d ?,"},{"line_number":292,"context_line":"                status \u003d \u0027\u0027,"},{"line_number":293,"context_line":"                status_changed_at \u003d ?"},{"line_number":294,"context_line":"            \"\"\", (timestamp, timestamp,))"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    def _is_deleted(self, conn):"},{"line_number":297,"context_line":"        info \u003d conn.execute(\u0027SELECT * FROM test_stat\u0027).fetchone()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ff82abbf_b1dda371","line":294,"range":{"start_line":294,"start_character":38,"end_line":294,"end_character":39},"in_reply_to":"ff82abbf_93b2e793","updated":"2017-11-24 08:40:53.000000000","message":"Done","commit_id":"b634f35b12f093656ae62c51b4c3ce1442840159"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"758e01e700a9e1526a452bc01092bbd1ed20e596","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                delete_timestamp TEXT DEFAULT \u00270\u0027,"},{"line_number":232,"context_line":"                hash TEXT default \u002700000000000000000000000000000000\u0027,"},{"line_number":233,"context_line":"                id TEXT,"},{"line_number":234,"context_line":"                status TEXT DEFAULT \u0027\u0027,"},{"line_number":235,"context_line":"                status_changed_at TEXT DEFAULT \u00270\u0027,"},{"line_number":236,"context_line":"                metadata TEXT DEFAULT \u0027\u0027"},{"line_number":237,"context_line":"            );"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_fa25635d","line":234,"updated":"2019-11-08 04:05:23.000000000","message":"Wow! This was a terrible mock before, wasn\u0027t it!","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"},{"author":{"_account_id":26690,"name":"HCLTech-SSW","email":"hcl_ss_oss@hcl.com","username":"hcltech-ssw"},"change_message_id":"6f8ee94887f581ca2f2082ce41b030f5f4f1a6a7","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                delete_timestamp TEXT DEFAULT \u00270\u0027,"},{"line_number":232,"context_line":"                hash TEXT default \u002700000000000000000000000000000000\u0027,"},{"line_number":233,"context_line":"                id TEXT,"},{"line_number":234,"context_line":"                status TEXT DEFAULT \u0027\u0027,"},{"line_number":235,"context_line":"                status_changed_at TEXT DEFAULT \u00270\u0027,"},{"line_number":236,"context_line":"                metadata TEXT DEFAULT \u0027\u0027"},{"line_number":237,"context_line":"            );"}],"source_content_type":"text/x-python","patch_set":24,"id":"3fa7e38b_9438693b","line":234,"in_reply_to":"3fa7e38b_fa25635d","updated":"2019-12-30 12:04:30.000000000","message":"We are not clear about this, please provide more clarification.","commit_id":"ac74dc38668b965bbab7d777ad67c525fb358bd1"}]}
