)]}'
{"nova/conductor/api.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"4c49784f23cbcb8dc0b78d4da0071cceb9c2a6f0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    locally instead of via RPC\"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self):"},{"line_number":66,"context_line":"        self._manager \u003d ExceptionHelper(manager.ConductorManager())"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def instance_update(self, context, instance_uuid, **updates):"},{"line_number":69,"context_line":"        \"\"\"Perform an instance update in the database\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F6os%3D","line":66,"updated":"2012-12-07 08:12:49.000000000","message":"I wonder is there any way we could just make the decorator a no-op rather than wrapping the exception and immediately unwrapping it?\n\ne.g use something like this in the decorator:\n\n def bypass(func):\n     func_self \u003d getattr(func, \u0027im_self\u0027, None)\n     if func_self is None:\n         return False\n\n     if not hasattr(func_self, \u0027client_exception_bypass\u0027):\n         return False\n\n     return func_self.client_exception_bypass\n\nthen if you just set client_exception_bypass\u003dTrue on the manager, we just don\u0027t do the catch_client_exception() thing","commit_id":"d0d130583dd07b018b374f20f3b12bf25fc80121"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"c3da1b6246c28554a9131697370f5661d0571830","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    locally instead of via RPC\"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self):"},{"line_number":66,"context_line":"        self._manager \u003d ExceptionHelper(manager.ConductorManager())"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def instance_update(self, context, instance_uuid, **updates):"},{"line_number":69,"context_line":"        \"\"\"Perform an instance update in the database\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F5Sc%3D","line":66,"in_reply_to":"AAAAMX%2F%2F6c8%3D","updated":"2012-12-10 06:48:28.000000000","message":"\u003e You mean in the decorator we _just_ merged into oslo? :)\n\nYes, where I said this:\n\n  I think you\u0027ll run into more places where a manager method is used remotely and locally like you dealt with for the conductor use_local case ... maybe a helper in Oslo would be good for that case, but we can deal with that later\n\n:)","commit_id":"d0d130583dd07b018b374f20f3b12bf25fc80121"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e57f580b34760a06ecbf9a1c2d0c1270c0f7dad9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    locally instead of via RPC\"\"\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def __init__(self):"},{"line_number":66,"context_line":"        self._manager \u003d ExceptionHelper(manager.ConductorManager())"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def instance_update(self, context, instance_uuid, **updates):"},{"line_number":69,"context_line":"        \"\"\"Perform an instance update in the database\"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F6c8%3D","line":66,"in_reply_to":"AAAAMX%2F%2F6os%3D","updated":"2012-12-07 14:37:26.000000000","message":"You mean in the decorator we _just_ merged into oslo? :)\n\nI agree it\u0027s a little silly to wrap and unwrap the exception, but I think that\u0027s only going to happen in the relatively rare case of using a manager directly (the LocalAPI is not intended as anything other than a transitional measure).\n\nThat said, I\u0027ll be glad to go back to add such a thing to the decorator, if you think it\u0027s worth it.","commit_id":"d0d130583dd07b018b374f20f3b12bf25fc80121"}],"nova/conductor/manager.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"c3da1b6246c28554a9131697370f5661d0571830","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                            \"\u0027%(key)s\u0027 on %(instance_uuid)s\") % locals())"},{"line_number":58,"context_line":"                raise KeyError(\"unexpected update keyword \u0027%s\u0027\" % key)"},{"line_number":59,"context_line":"            if key in datetime_fields and isinstance(value, basestring):"},{"line_number":60,"context_line":"                updates[key] \u003d timeutils.parse_strtime(value)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        old_ref, instance_ref \u003d self.db.instance_update_and_get_original("},{"line_number":63,"context_line":"            context, instance_uuid, updates)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F5R8%3D","line":60,"updated":"2012-12-10 06:48:28.000000000","message":"This can raise ValueError if we\u0027re passed bogus updates\n\nI guess if it makes sense to silently pass back errors about update keys, it equally makes sense to do so about update values","commit_id":"d0d130583dd07b018b374f20f3b12bf25fc80121"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"c3da1b6246c28554a9131697370f5661d0571830","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                updates[key] \u003d timeutils.parse_strtime(value)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        old_ref, instance_ref \u003d self.db.instance_update_and_get_original("},{"line_number":63,"context_line":"            context, instance_uuid, updates)"},{"line_number":64,"context_line":"        notifications.send_update(context, old_ref, instance_ref)"},{"line_number":65,"context_line":"        return jsonutils.to_primitive(instance_ref)"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAMX%2F%2F5Rc%3D","line":63,"updated":"2012-12-10 06:48:28.000000000","message":"Makes sense to report DB connection failures, that\u0027s an issue with conductor itself\n\nInstanceNotFound, InvalidUUID and UnexpectedTaskStateError should probably pass silently - they\u0027re all cases of the remote caller doing something wrong","commit_id":"d0d130583dd07b018b374f20f3b12bf25fc80121"}],"nova/network/manager.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"f4ae5ee08ac21e7d971608a666e960603ea287a9","unresolved":false,"context_lines":[{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        return nw_info"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    @rpc_common.client_exceptions(exception.FloatingIpNotFound)"},{"line_number":362,"context_line":"    @wrap_check_policy"},{"line_number":363,"context_line":"    def deallocate_for_instance(self, context, **kwargs):"},{"line_number":364,"context_line":"        \"\"\"Handles deallocating floating IP resources for an instance."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMX%2F%2F4gc%3D","line":361,"updated":"2012-12-10 22:54:36.000000000","message":"Hmm, why is FloatingIpNotFound expected?\n\nInstanceNotFound is expected though","commit_id":"1390123e4b8c8657a38672d2896290de8e7f1514"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"f4ae5ee08ac21e7d971608a666e960603ea287a9","unresolved":false,"context_lines":[{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        return floating_ip"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"    @rpc_common.client_exceptions(exception.FloatingIpNotFound)"},{"line_number":465,"context_line":"    @wrap_check_policy"},{"line_number":466,"context_line":"    def deallocate_floating_ip(self, context, address,"},{"line_number":467,"context_line":"                               affect_auto_assigned\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAMX%2F%2F4gU%3D","line":464,"updated":"2012-12-10 22:54:36.000000000","message":"Shouldn\u0027t this be FloatingIpNotFoundForAddress ?\n\nHow about NotAuthorized and FloatingIpAssociated?","commit_id":"1390123e4b8c8657a38672d2896290de8e7f1514"}]}
