)]}'
{"glance_store/capabilities.py":[{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"fc159d18c88fa6ddb73e9d408cc72be49e425645","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self._capabilities \u0026\u003d ~caps"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _schedule_capabilities_update(store):"},{"line_number":145,"context_line":"    def _update_capabilities(store, context):"},{"line_number":146,"context_line":"        with context[\u0027lock\u0027]:"},{"line_number":147,"context_line":"            if context[\u0027updating\u0027]:"},{"line_number":148,"context_line":"                return"},{"line_number":149,"context_line":"            context[\u0027updating\u0027] \u003d True"},{"line_number":150,"context_line":"            try:"},{"line_number":151,"context_line":"                store.update_capabilities()"},{"line_number":152,"context_line":"            except Exception:"},{"line_number":153,"context_line":"                pass"},{"line_number":154,"context_line":"            finally:"},{"line_number":155,"context_line":"                context[\u0027updating\u0027] \u003d False"},{"line_number":156,"context_line":"                # NOTE(zhiyan): Update \u0027latest_update\u0027 field"},{"line_number":157,"context_line":"                # in anyway even an exception raised, to"},{"line_number":158,"context_line":"                # prevent call problematic routine cyclically."},{"line_number":159,"context_line":"                context[\u0027latest_update\u0027] \u003d int(time.time())"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    global _STORE_CAPABILITES_UPDATE_SCHEDULING_BOOK"},{"line_number":162,"context_line":"    book \u003d _STORE_CAPABILITES_UPDATE_SCHEDULING_BOOK"},{"line_number":163,"context_line":"    if store not in book:"},{"line_number":164,"context_line":"        with _STORE_CAPABILITES_UPDATE_SCHEDULING_LOCK:"},{"line_number":165,"context_line":"            if store not in book:"},{"line_number":166,"context_line":"                book[store] \u003d {\u0027latest_update\u0027: int(time.time()),"},{"line_number":167,"context_line":"                               \u0027lock\u0027: threading.Lock(),"},{"line_number":168,"context_line":"                               \u0027updating\u0027: False}"},{"line_number":169,"context_line":"    else:"},{"line_number":170,"context_line":"        context \u003d book[store]"},{"line_number":171,"context_line":"        if not context[\u0027updating\u0027]:"},{"line_number":172,"context_line":"            # NOTE(zhiyan): Using a real thread pool instead"},{"line_number":173,"context_line":"            # of green pool due to store capabilities updating"},{"line_number":174,"context_line":"            # probably calls some inevitably blocking code for"},{"line_number":175,"context_line":"            # IO operation on remote or local storage."},{"line_number":176,"context_line":"            # Eventlet allows operator to uses environment var"},{"line_number":177,"context_line":"            # EVENTLET_THREADPOOL_SIZE to desired pool size."},{"line_number":178,"context_line":"            tpool.execute(_update_capabilities, store, context)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def check(store_op_fun):"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_6675e4ca","line":179,"range":{"start_line":144,"start_character":0,"end_line":179,"end_character":0},"updated":"2019-05-28 15:29:07.000000000","message":"Remove this.","commit_id":"548fa6cf4bc30b04c51a6a9471ec4f1f74f8337a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"430cd16b745971233404b217fcac6f67cd3257f1","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        self._capabilities \u0026\u003d ~caps"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def _schedule_capabilities_update(store):"},{"line_number":145,"context_line":"    def _update_capabilities(store, context):"},{"line_number":146,"context_line":"        with context[\u0027lock\u0027]:"},{"line_number":147,"context_line":"            if context[\u0027updating\u0027]:"},{"line_number":148,"context_line":"                return"},{"line_number":149,"context_line":"            context[\u0027updating\u0027] \u003d True"},{"line_number":150,"context_line":"            try:"},{"line_number":151,"context_line":"                store.update_capabilities()"},{"line_number":152,"context_line":"            except Exception:"},{"line_number":153,"context_line":"                pass"},{"line_number":154,"context_line":"            finally:"},{"line_number":155,"context_line":"                context[\u0027updating\u0027] \u003d False"},{"line_number":156,"context_line":"                # NOTE(zhiyan): Update \u0027latest_update\u0027 field"},{"line_number":157,"context_line":"                # in anyway even an exception raised, to"},{"line_number":158,"context_line":"                # prevent call problematic routine cyclically."},{"line_number":159,"context_line":"                context[\u0027latest_update\u0027] \u003d int(time.time())"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    global _STORE_CAPABILITES_UPDATE_SCHEDULING_BOOK"},{"line_number":162,"context_line":"    book \u003d _STORE_CAPABILITES_UPDATE_SCHEDULING_BOOK"},{"line_number":163,"context_line":"    if store not in book:"},{"line_number":164,"context_line":"        with _STORE_CAPABILITES_UPDATE_SCHEDULING_LOCK:"},{"line_number":165,"context_line":"            if store not in book:"},{"line_number":166,"context_line":"                book[store] \u003d {\u0027latest_update\u0027: int(time.time()),"},{"line_number":167,"context_line":"                               \u0027lock\u0027: threading.Lock(),"},{"line_number":168,"context_line":"                               \u0027updating\u0027: False}"},{"line_number":169,"context_line":"    else:"},{"line_number":170,"context_line":"        context \u003d book[store]"},{"line_number":171,"context_line":"        if not context[\u0027updating\u0027]:"},{"line_number":172,"context_line":"            # NOTE(zhiyan): Using a real thread pool instead"},{"line_number":173,"context_line":"            # of green pool due to store capabilities updating"},{"line_number":174,"context_line":"            # probably calls some inevitably blocking code for"},{"line_number":175,"context_line":"            # IO operation on remote or local storage."},{"line_number":176,"context_line":"            # Eventlet allows operator to uses environment var"},{"line_number":177,"context_line":"            # EVENTLET_THREADPOOL_SIZE to desired pool size."},{"line_number":178,"context_line":"            tpool.execute(_update_capabilities, store, context)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def check(store_op_fun):"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_1c146c43","line":179,"range":{"start_line":144,"start_character":0,"end_line":179,"end_character":0},"in_reply_to":"bfb3d3c7_6675e4ca","updated":"2019-05-29 06:21:57.000000000","message":"Done","commit_id":"548fa6cf4bc30b04c51a6a9471ec4f1f74f8337a"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"fc159d18c88fa6ddb73e9d408cc72be49e425645","unresolved":false,"context_lines":[{"line_number":181,"context_line":"def check(store_op_fun):"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def op_checker(store, *args, **kwargs):"},{"line_number":184,"context_line":"        # NOTE(zhiyan): Trigger the hook of updating store"},{"line_number":185,"context_line":"        # dynamic capabilities based on current store status."},{"line_number":186,"context_line":"        _schedule_capabilities_update(store)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        get_capabilities \u003d ["},{"line_number":189,"context_line":"            BitMasks.READ_ACCESS,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_c664d024","line":186,"range":{"start_line":184,"start_character":0,"end_line":186,"end_character":44},"updated":"2019-05-28 15:29:07.000000000","message":"And this","commit_id":"548fa6cf4bc30b04c51a6a9471ec4f1f74f8337a"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"430cd16b745971233404b217fcac6f67cd3257f1","unresolved":false,"context_lines":[{"line_number":181,"context_line":"def check(store_op_fun):"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def op_checker(store, *args, **kwargs):"},{"line_number":184,"context_line":"        # NOTE(zhiyan): Trigger the hook of updating store"},{"line_number":185,"context_line":"        # dynamic capabilities based on current store status."},{"line_number":186,"context_line":"        _schedule_capabilities_update(store)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        get_capabilities \u003d ["},{"line_number":189,"context_line":"            BitMasks.READ_ACCESS,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bfb3d3c7_3c113053","line":186,"range":{"start_line":184,"start_character":0,"end_line":186,"end_character":44},"in_reply_to":"bfb3d3c7_c664d024","updated":"2019-05-29 06:21:57.000000000","message":"Done","commit_id":"548fa6cf4bc30b04c51a6a9471ec4f1f74f8337a"}]}
