)]}'
{"swiftclient/service.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1af8408ee2db69fb4b42cae76ec07baba037cc44","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"                obj_dels \u003d {}"},{"line_number":2153,"context_line":""},{"line_number":2154,"context_line":"                bulk_delete, bulk_page_size \u003d self._should_bulk_delete(objects)"},{"line_number":2155,"context_line":"                if bulk_delete and isinstance(bulk_page_size, int):"},{"line_number":2156,"context_line":"                    number_of_pages, extra \u003d divmod(len(objects),"},{"line_number":2157,"context_line":"                                                    bulk_page_size)"},{"line_number":2158,"context_line":"                    if extra \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bff0334d_89a5ba49","line":2155,"updated":"2017-04-10 21:52:34.000000000","message":"How about we just change _should_bulk_delete to return the page size, and use 0 to mean \"don\u0027t bulk delete\"?\n\nCan you configure the bulk deleter with max_deletes_per_request\u003d0?","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"c35241540212c1368e00b394813c20256262b306","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"                obj_dels \u003d {}"},{"line_number":2153,"context_line":""},{"line_number":2154,"context_line":"                bulk_delete, bulk_page_size \u003d self._should_bulk_delete(objects)"},{"line_number":2155,"context_line":"                if bulk_delete and isinstance(bulk_page_size, int):"},{"line_number":2156,"context_line":"                    number_of_pages, extra \u003d divmod(len(objects),"},{"line_number":2157,"context_line":"                                                    bulk_page_size)"},{"line_number":2158,"context_line":"                    if extra \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_4ad14bfb","line":2155,"in_reply_to":"7ffa3b31_59e00ffb","updated":"2017-04-17 23:43:16.000000000","message":"...so if it *is* configured with a page size of zero, we should fall back to per-object deletes, yeah? Otherwise, we hit a ZeroDivisionError (under patchset 1) or burn CPU in an infinite loop (under patchset 2).\n\nI don\u0027t think we need to touch anything in the bulk middleware; what about something like http://paste.openstack.org/show/606929/ ?","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"39e20c90a21282e54b5d6559f32cbc8850a236cf","unresolved":false,"context_lines":[{"line_number":2152,"context_line":"                obj_dels \u003d {}"},{"line_number":2153,"context_line":""},{"line_number":2154,"context_line":"                bulk_delete, bulk_page_size \u003d self._should_bulk_delete(objects)"},{"line_number":2155,"context_line":"                if bulk_delete and isinstance(bulk_page_size, int):"},{"line_number":2156,"context_line":"                    number_of_pages, extra \u003d divmod(len(objects),"},{"line_number":2157,"context_line":"                                                    bulk_page_size)"},{"line_number":2158,"context_line":"                    if extra \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_59e00ffb","line":2155,"in_reply_to":"bff0334d_89a5ba49","updated":"2017-04-17 20:47:45.000000000","message":"In fact you *can* configure bulk delete with a max size of zero. And it means that you\u0027ll always get an error back from bulk delete.\n\nI like where you\u0027re coming from on the simpler return signature, but using zero means we probably have to change the bulk middleware code (in a different repo). I think this patch as-is keeps things simpler over all.","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1af8408ee2db69fb4b42cae76ec07baba037cc44","unresolved":false,"context_lines":[{"line_number":2154,"context_line":"                bulk_delete, bulk_page_size \u003d self._should_bulk_delete(objects)"},{"line_number":2155,"context_line":"                if bulk_delete and isinstance(bulk_page_size, int):"},{"line_number":2156,"context_line":"                    number_of_pages, extra \u003d divmod(len(objects),"},{"line_number":2157,"context_line":"                                                    bulk_page_size)"},{"line_number":2158,"context_line":"                    if extra \u003e 0:"},{"line_number":2159,"context_line":"                        number_of_pages +\u003d 1"},{"line_number":2160,"context_line":"                    for page_slice in n_groups("}],"source_content_type":"text/x-python","patch_set":1,"id":"bff0334d_29434e6e","line":2157,"updated":"2017-04-10 21:52:34.000000000","message":"How about we import n_at_a_time instead?\n\nhttps://github.com/openstack/python-swiftclient/blob/3.3.0/swiftclient/utils.py#L331-L333","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"88a655dbf9ba6b3bcc4005bc5d05df200e1dd4a0","unresolved":false,"context_lines":[{"line_number":2154,"context_line":"                bulk_delete, bulk_page_size \u003d self._should_bulk_delete(objects)"},{"line_number":2155,"context_line":"                if bulk_delete and isinstance(bulk_page_size, int):"},{"line_number":2156,"context_line":"                    number_of_pages, extra \u003d divmod(len(objects),"},{"line_number":2157,"context_line":"                                                    bulk_page_size)"},{"line_number":2158,"context_line":"                    if extra \u003e 0:"},{"line_number":2159,"context_line":"                        number_of_pages +\u003d 1"},{"line_number":2160,"context_line":"                    for page_slice in n_groups("}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_5f5c884a","line":2157,"in_reply_to":"bff0334d_29434e6e","updated":"2017-04-17 03:11:35.000000000","message":"Done","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1af8408ee2db69fb4b42cae76ec07baba037cc44","unresolved":false,"context_lines":[{"line_number":2233,"context_line":""},{"line_number":2234,"context_line":"        swift_info \u003d cap_result[\u0027capabilities\u0027]"},{"line_number":2235,"context_line":"        if \u0027bulk_delete\u0027 in swift_info:"},{"line_number":2236,"context_line":"            return True, swift_info[\u0027bulk_delete\u0027][\u0027max_deletes_per_request\u0027]"},{"line_number":2237,"context_line":"        else:"},{"line_number":2238,"context_line":"            return False, None"},{"line_number":2239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bff0334d_89dedad7","line":2236,"range":{"start_line":2236,"start_character":52,"end_line":2236,"end_character":75},"updated":"2017-04-10 21:52:34.000000000","message":"Prior to https://github.com/openstack/swift/commit/0d45e99 (so swift \u003c1.11.0,\u003e\u003d1.8.0) this wouldn\u0027t be there. How about we do\n\n .get(\u0027max_deletes_per_request\u0027, 10000)\n\nor something? I\u0027d also be OK with a more conservative default.","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"},{"author":{"_account_id":330,"name":"John Dickinson","email":"me@not.mn","username":"notmyname"},"change_message_id":"88a655dbf9ba6b3bcc4005bc5d05df200e1dd4a0","unresolved":false,"context_lines":[{"line_number":2233,"context_line":""},{"line_number":2234,"context_line":"        swift_info \u003d cap_result[\u0027capabilities\u0027]"},{"line_number":2235,"context_line":"        if \u0027bulk_delete\u0027 in swift_info:"},{"line_number":2236,"context_line":"            return True, swift_info[\u0027bulk_delete\u0027][\u0027max_deletes_per_request\u0027]"},{"line_number":2237,"context_line":"        else:"},{"line_number":2238,"context_line":"            return False, None"},{"line_number":2239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7ffa3b31_7f5f4441","line":2236,"range":{"start_line":2236,"start_character":52,"end_line":2236,"end_character":75},"in_reply_to":"bff0334d_89dedad7","updated":"2017-04-17 03:11:35.000000000","message":"Done","commit_id":"169d57f0abe256e5b9b0a02cbfcc78de1e6559d7"}]}
