From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 73D8B2528A for ; Wed, 6 Jun 2018 11:57:34 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ea1awGi9Q6MR for ; Wed, 6 Jun 2018 11:57:34 -0400 (EDT) Received: from smtp38.i.mail.ru (smtp38.i.mail.ru [94.100.177.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id EFAFE2529B for ; Wed, 6 Jun 2018 11:57:33 -0400 (EDT) From: AKhatskevich Subject: [tarantool-patches] [PATCH 3/3] Add error messages Date: Wed, 6 Jun 2018 18:57:14 +0300 Message-Id: In-Reply-To: References: In-Reply-To: References: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-help: List-unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-subscribe: List-owner: List-post: List-archive: To: tarantool-patches@freelists.org, v.shpilevoy@tarantool.org Add error message to each `error_message_template`. This change required to change arguments of some errors to make them more informative. Closes #100 --- test/router/reroute_wrong_bucket.result | 7 ++++--- test/router/router.result | 16 +++++++++------- test/storage/storage.result | 3 ++- vshard/error.lua | 15 +++++++++++---- vshard/router/init.lua | 3 +-- vshard/storage/init.lua | 28 ++++++++++++++++++++-------- 6 files changed, 47 insertions(+), 25 deletions(-) diff --git a/test/router/reroute_wrong_bucket.result b/test/router/reroute_wrong_bucket.result index c7b980c..75a1c5a 100644 --- a/test/router/reroute_wrong_bucket.result +++ b/test/router/reroute_wrong_bucket.result @@ -113,7 +113,7 @@ vshard.router.call(100, 'read', 'customer_lookup', {1}, {timeout = 1}) code: 9 type: ShardingError name: NO_ROUTE_TO_BUCKET - message: 'NO_ROUTE_TO_BUCKET: "{\"bucket_id\":100}"' + message: Bucket 100 cannot be found. Is rebalancing in progress? ... -- Wait reconfiguration durigin timeout, if a replicaset was not -- found by bucket.destination from WRONG_BUCKET or @@ -190,8 +190,9 @@ test_run:grep_log('router_1', 'please update configuration') ... err --- -- {'bucket_id': 100, 'code': 1, 'type': 'ShardingError', 'destination': 'ac522f65-aa94-4134-9f64-51ee384f1a54', - 'message': 'WRONG_BUCKET: "{\"bucket_id\":100,\"destination\":\"ac522f65-aa94-4134-9f64-51ee384f1a54\"}"', +- {'bucket_id': 100, 'reason': 'bucket moving to ac522f65-aa94-4134-9f64-51ee384f1a54', + 'code': 1, 'type': 'ShardingError', 'destination': 'ac522f65-aa94-4134-9f64-51ee384f1a54', + 'message': 'Cannot perform action with bucket 100, reason: bucket moving to ac522f65-aa94-4134-9f64-51ee384f1a54', 'name': 'WRONG_BUCKET'} ... -- diff --git a/test/router/router.result b/test/router/router.result index 6955b59..dab71f2 100644 --- a/test/router/router.result +++ b/test/router/router.result @@ -199,7 +199,7 @@ util.check_error(vshard.router.call, 1, 'read', 'echo', {123}) code: 9 type: ShardingError name: NO_ROUTE_TO_BUCKET - message: 'NO_ROUTE_TO_BUCKET: "{\"bucket_id\":1}"' + message: Bucket 1 cannot be found. Is rebalancing in progress? ... replicaset, err = vshard.router.bucket_discovery(1); return err == nil or err --- @@ -207,7 +207,7 @@ replicaset, err = vshard.router.bucket_discovery(1); return err == nil or err code: 9 type: ShardingError name: NO_ROUTE_TO_BUCKET - message: 'NO_ROUTE_TO_BUCKET: "{\"bucket_id\":1}"' + message: Bucket 1 cannot be found. Is rebalancing in progress? ... vshard.router.bootstrap() --- @@ -321,7 +321,7 @@ replicaset, err = vshard.router.bucket_discovery(0); return err == nil or err code: 9 type: ShardingError name: NO_ROUTE_TO_BUCKET - message: 'NO_ROUTE_TO_BUCKET: "{\"bucket_id\":0}"' + message: Bucket 0 cannot be found. Is rebalancing in progress? ... replicaset, err = vshard.router.bucket_discovery(1); return err == nil or err --- @@ -361,7 +361,7 @@ util.check_error(vshard.router.call, 1, 'write', 'echo', {123}) --- - null - {'bucket_id': 1, 'code': 7, 'type': 'ShardingError', 'destination': '', - 'message': 'TRANSFER_IS_IN_PROGRESS: "{\"bucket_id\":1,\"destination\":\"\"}"', + 'message': 'Bucket 1 is transferring to replicaset ', 'name': 'TRANSFER_IS_IN_PROGRESS'} ... test_run:cmd('switch storage_2_a') @@ -435,7 +435,7 @@ vshard.router.route(vshard.consts.DEFAULT_BUCKET_COUNT + 100) code: 9 type: ShardingError name: NO_ROUTE_TO_BUCKET - message: 'NO_ROUTE_TO_BUCKET: "{\"bucket_id\":3100}"' + message: Bucket 3100 cannot be found. Is rebalancing in progress? ... util.check_error(vshard.router.route, 'asdfg') --- @@ -969,8 +969,10 @@ test_run:cmd("switch router_1") util.check_error(vshard.router.call, 1, 'write', 'echo', { 'hello world' }) --- - null -- {'bucket_id': 1, 'code': 2, 'type': 'ShardingError', 'name': 'NON_MASTER', 'message': 'NON_MASTER: - "{\"bucket_id\":1}"'} +- {'code': 2, 'replica_uuid': '1e02ae8a-afc0-4e91-ba34-843a356b8ed7', 'type': 'ShardingError', + 'replicaset_uuid': '', 'message': 'Replica 1e02ae8a-afc0-4e91-ba34-843a356b8ed7 + is not a master for replicaset anymore', + 'name': 'NON_MASTER'} ... -- Reconfigure router and test that the WRITE request does work vshard.router.cfg(cfg) diff --git a/test/storage/storage.result b/test/storage/storage.result index aee9477..1258c9b 100644 --- a/test/storage/storage.result +++ b/test/storage/storage.result @@ -595,10 +595,11 @@ vshard.storage.call(100500, 'read', 'customer_lookup', {1}) --- - null - bucket_id: 100500 + reason: Not found code: 1 type: ShardingError name: WRONG_BUCKET - message: 'WRONG_BUCKET: "{\"bucket_id\":100500}"' + message: 'Cannot perform action with bucket 100500, reason: Not found' ... -- -- Test not existing space in bucket data. diff --git a/vshard/error.lua b/vshard/error.lua index 1271d16..8785695 100644 --- a/vshard/error.lua +++ b/vshard/error.lua @@ -14,23 +14,28 @@ local json = require('json') local error_message_template = { [1] = { name = 'WRONG_BUCKET', - args = {'bucket_id', 'destination'} + msg = 'Cannot perform action with bucket %d, reason: %s', + args = {'bucket_id', 'reason', 'destination'} }, [2] = { name = 'NON_MASTER', - args = {'bucket_id', 'destination'} + msg = 'Replica %s is not a master for replicaset %s anymore', + args = {'replica_uuid', 'replicaset_uuid'} }, [3] = { name = 'BUCKET_ALREADY_EXISTS', + msg = 'Bucket %d already exists', args = {'bucket_id'} }, [4] = { name = 'NO_SUCH_REPLICASET', + msg = 'Replicaset %s not found', args = {'replicaset_uuid'} }, [5] = { name = 'MOVE_TO_SELF', - args = {'replicaset_uuid', 'bucket_id'} + msg = 'Cannot move: bucket %d is already on replicaset %s', + args = {'bucket_id', 'replicaset_uuid'} }, [6] = { name = 'MISSING_MASTER', @@ -39,6 +44,7 @@ local error_message_template = { }, [7] = { name = 'TRANSFER_IS_IN_PROGRESS', + msg = 'Bucket %d is transferring to replicaset %s', args = {'bucket_id', 'destination'} }, [8] = { @@ -48,7 +54,8 @@ local error_message_template = { }, [9] = { name = 'NO_ROUTE_TO_BUCKET', - args = {'bucket_id', 'unreachable_uuid'} + msg = 'Bucket %d cannot be found. Is rebalancing in progress?', + args = {'bucket_id'} }, [10] = { name = 'NON_EMPTY', diff --git a/vshard/router/init.lua b/vshard/router/init.lua index 95ee8b3..21093e5 100644 --- a/vshard/router/init.lua +++ b/vshard/router/init.lua @@ -96,8 +96,7 @@ local function bucket_discovery(bucket_id) -- bucket was found to be RECEIVING on one replicaset, and -- was not found on other replicasets (it was sent during -- discovery). - err = lerror.vshard(lerror.code.NO_ROUTE_TO_BUCKET, bucket_id, - unreachable_uuid) + err = lerror.vshard(lerror.code.NO_ROUTE_TO_BUCKET, bucket_id) end return nil, err diff --git a/vshard/storage/init.lua b/vshard/storage/init.lua index 2d38ff9..cd02657 100644 --- a/vshard/storage/init.lua +++ b/vshard/storage/init.lua @@ -428,31 +428,43 @@ local function bucket_check_state(bucket_id, mode) assert(mode == 'read' or mode == 'write') local bucket = box.space._bucket:get({bucket_id}) local errcode = nil + local reason = nil if not bucket then errcode = lerror.code.WRONG_BUCKET - goto finish + reason = 'Not found' + goto wrong_bucket elseif mode == 'read' then if not bucket_is_readable(bucket) then errcode = lerror.code.WRONG_BUCKET - goto finish + reason = 'read prohibited' + goto wrong_bucket end elseif not bucket_is_writable(bucket) then if bucket_is_transfer_in_progress(bucket) then errcode = lerror.code.TRANSFER_IS_IN_PROGRESS + return bucket, errcode and + lerror.vshard(errcode, bucket_id, bucket.destination) else errcode = lerror.code.WRONG_BUCKET + reason = 'write prohibited' + goto wrong_bucket end - goto finish elseif M.this_replicaset.master ~= M.this_replica then errcode = lerror.code.NON_MASTER - goto finish + return bucket, errcode and + lerror.vshard(errcode, M.this_replica.uuid, + M.this_replicaset.uuid) end assert(not errcode) assert(mode == 'read' and bucket_is_readable(bucket) or mode == 'write' and bucket_is_writable(bucket)) -::finish:: +::wrong_bucket:: + if bucket and bucket.destination then + reason = "bucket moving to " .. bucket.destination + end return bucket, errcode and - lerror.vshard(errcode, bucket_id, bucket and bucket.destination) + lerror.vshard(errcode, bucket_id, reason, + bucket and bucket.destination) end -- @@ -721,8 +733,8 @@ local function bucket_send(bucket_id, destination) end if destination == box.info.cluster.uuid then - return nil, lerror.vshard(lerror.code.MOVE_TO_SELF, replicaset_uuid, - bucket_id) + return nil, lerror.vshard(lerror.code.MOVE_TO_SELF, bucket_id, + replicaset_uuid) end local data = bucket_collect_internal(bucket_id) -- 2.14.1