)]}'
{"tripleo_common/image/image_uploader.py":[{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"5b8bf1b40564bdc91eb9c95148649ec94c25c60a","unresolved":false,"context_lines":[{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    @classmethod"},{"line_number":1128,"context_line":"    @tenacity.retry(  # Retry until we no longer have collisions or it raise"},{"line_number":1129,"context_line":"        reraise\u003dTrue,"},{"line_number":1130,"context_line":"        retry\u003dtenacity.retry_if_exception_type(ImageUploaderThreadException),"},{"line_number":1131,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d20)"},{"line_number":1132,"context_line":"    )"},{"line_number":1133,"context_line":"    def _layer_fetch_lock(cls, layer, lock\u003dNone):"},{"line_number":1134,"context_line":"        if not lock:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_d83e4bb8","line":1131,"range":{"start_line":1129,"start_character":1,"end_line":1131,"end_character":67},"updated":"2019-10-23 15:42:51.000000000","message":"I\u0027m still not sure with the final logic here, like either to reraise, or retry indefinitely, or keep it as is","commit_id":"803ebb997a24c59aeb4ca965112136b19b3438a2"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"51ef3486774b1ad196b25bfcab6eb5ae93fe2dda","unresolved":false,"context_lines":[{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    @classmethod"},{"line_number":1128,"context_line":"    @tenacity.retry(  # Retry until we no longer have collisions or it raise"},{"line_number":1129,"context_line":"        reraise\u003dTrue,"},{"line_number":1130,"context_line":"        retry\u003dtenacity.retry_if_exception_type(ImageUploaderThreadException),"},{"line_number":1131,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d20)"},{"line_number":1132,"context_line":"    )"},{"line_number":1133,"context_line":"    def _layer_fetch_lock(cls, layer, lock\u003dNone):"},{"line_number":1134,"context_line":"        if not lock:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_18db834f","line":1131,"range":{"start_line":1129,"start_character":1,"end_line":1131,"end_character":67},"in_reply_to":"3fa7e38b_186e23c9","updated":"2019-10-23 15:58:25.000000000","message":"if no stop condition and \u0027max\u0027 is set, it will stop after the max value AFAIK. So adjusting it to match our expectations.","commit_id":"803ebb997a24c59aeb4ca965112136b19b3438a2"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"5578e6005c516528b5a7b677e2ee2904c214d782","unresolved":false,"context_lines":[{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    @classmethod"},{"line_number":1128,"context_line":"    @tenacity.retry(  # Retry until we no longer have collisions or it raise"},{"line_number":1129,"context_line":"        reraise\u003dTrue,"},{"line_number":1130,"context_line":"        retry\u003dtenacity.retry_if_exception_type(ImageUploaderThreadException),"},{"line_number":1131,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d20)"},{"line_number":1132,"context_line":"    )"},{"line_number":1133,"context_line":"    def _layer_fetch_lock(cls, layer, lock\u003dNone):"},{"line_number":1134,"context_line":"        if not lock:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_53c55c09","line":1131,"range":{"start_line":1129,"start_character":1,"end_line":1131,"end_character":67},"in_reply_to":"3fa7e38b_18db834f","updated":"2019-10-23 16:54:11.000000000","message":"My understanding is that max is the max number of seconds it will get to. It\u0027s an exponential backoff until value of max. then it uses the value of max.","commit_id":"803ebb997a24c59aeb4ca965112136b19b3438a2"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"d90a3b723378bcb476a12df8641a71ec79b68a2f","unresolved":false,"context_lines":[{"line_number":1126,"context_line":""},{"line_number":1127,"context_line":"    @classmethod"},{"line_number":1128,"context_line":"    @tenacity.retry(  # Retry until we no longer have collisions or it raise"},{"line_number":1129,"context_line":"        reraise\u003dTrue,"},{"line_number":1130,"context_line":"        retry\u003dtenacity.retry_if_exception_type(ImageUploaderThreadException),"},{"line_number":1131,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d20)"},{"line_number":1132,"context_line":"    )"},{"line_number":1133,"context_line":"    def _layer_fetch_lock(cls, layer, lock\u003dNone):"},{"line_number":1134,"context_line":"        if not lock:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_186e23c9","line":1131,"range":{"start_line":1129,"start_character":1,"end_line":1131,"end_character":67},"in_reply_to":"3fa7e38b_d83e4bb8","updated":"2019-10-23 15:44:48.000000000","message":"My understanding based on the docs is that this will loop forever. Currently we want to wait forever. This has a possible side effect of never completing if something in the locking goes wrong. If you want to prevent that we could put an overall cap of like 60 minutes or something and then reraise.","commit_id":"803ebb997a24c59aeb4ca965112136b19b3438a2"},{"author":{"_account_id":6926,"name":"Bogdan Dobrelya","email":"bdobreli@redhat.com","username":"bogdando"},"change_message_id":"b51ca5d81aac30b46b096bc9978c72008b31d718","unresolved":false,"context_lines":[{"line_number":1507,"context_line":"        except ImageUploaderThreadException:"},{"line_number":1508,"context_line":"            # skip trying to unlock, because that\u0027s what threw the exception"},{"line_number":1509,"context_line":"            LOG.error(\u0027[%s] Failed processing layer for the target \u0027"},{"line_number":1510,"context_line":"                      \u0027image\u0027 % layer)"},{"line_number":1511,"context_line":"            raise"},{"line_number":1512,"context_line":"        except Exception:"},{"line_number":1513,"context_line":"            cls._layer_fetch_unlock(layer, lock)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_380aff1f","line":1510,"updated":"2019-10-23 15:39:12.000000000","message":"here we probably don\u0027t have a real error, so need no log that","commit_id":"803ebb997a24c59aeb4ca965112136b19b3438a2"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"5238f85ba57c813ddd774bf43cd85b8d58221229","unresolved":false,"context_lines":[{"line_number":1127,"context_line":"    @classmethod"},{"line_number":1128,"context_line":"    @tenacity.retry(  # Retry until we no longer have collisions"},{"line_number":1129,"context_line":"        retry\u003dtenacity.retry_if_exception_type(ImageUploaderThreadException),"},{"line_number":1130,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1),"},{"line_number":1131,"context_line":"        stop\u003dtenacity.stop_never"},{"line_number":1132,"context_line":"    )"},{"line_number":1133,"context_line":"    def _layer_fetch_lock(cls, layer, lock\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_10bb45e5","line":1130,"updated":"2019-10-24 13:47:31.000000000","message":"We still want a max.  From the docs https://tenacity.readthedocs.io/en/latest/index.html\n\n\n@retry(wait\u003dwait_random_exponential(multiplier\u003d1, max\u003d60))\ndef wait_exponential_jitter():\n    print(\"Randomly wait up to 2^x * 1 seconds between each retry until the range reaches 60 seconds, then randomly up to 60 seconds afterwards\")\n    raise Exception\n\nWe don\u0027t need to explicitly specify the stop, that\u0027s the default","commit_id":"97374acac2b6de831bc12ec03e170301f841df7f"}]}
