From: AKhatskevich <avkhatskevich@tarantool.org> To: tarantool-patches@freelists.org, v.shpilevoy@tarantool.org Subject: [tarantool-patches] [PATCH 3/3] Add error messages Date: Wed, 6 Jun 2018 18:57:14 +0300 [thread overview] Message-ID: <b2d143a13480120b46e94ae0442725c22e1e016f.1528300145.git.avkhatskevich@tarantool.org> (raw) In-Reply-To: <cover.1528300145.git.avkhatskevich@tarantool.org> In-Reply-To: <cover.1528300145.git.avkhatskevich@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': '<replicaset_1>', - 'message': 'TRANSFER_IS_IN_PROGRESS: "{\"bucket_id\":1,\"destination\":\"<replicaset_1>\"}"', + 'message': 'Bucket 1 is transferring to replicaset <replicaset_1>', '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': '<replicaset_2>', 'message': 'Replica 1e02ae8a-afc0-4e91-ba34-843a356b8ed7 + is not a master for replicaset <replicaset_2> 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
next prev parent reply other threads:[~2018-06-06 15:57 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-06-06 15:57 [tarantool-patches] [PATCH 0/3][vshard] " AKhatskevich 2018-06-06 15:57 ` [tarantool-patches] [PATCH 1/3] Fix test on bucket_transferring error AKhatskevich 2018-06-06 15:57 ` [tarantool-patches] [PATCH 2/3] Refactor error reporting system AKhatskevich 2018-06-07 12:22 ` [tarantool-patches] " Vladislav Shpilevoy 2018-06-07 16:13 ` Alex Khatskevich 2018-06-06 15:57 ` AKhatskevich [this message] 2018-06-07 12:22 ` [tarantool-patches] Re: [PATCH 3/3] Add error messages Vladislav Shpilevoy 2018-06-07 16:12 ` Alex Khatskevich 2018-06-07 18:44 ` Vladislav Shpilevoy 2018-06-07 12:22 ` [tarantool-patches] Re: [PATCH 0/3][vshard] " Vladislav Shpilevoy 2018-06-07 13:16 ` Alex Khatskevich
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=b2d143a13480120b46e94ae0442725c22e1e016f.1528300145.git.avkhatskevich@tarantool.org \ --to=avkhatskevich@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [tarantool-patches] [PATCH 3/3] Add error messages' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox