diff options
| author | Zheng Chao <[email protected]> | 2023-01-02 15:33:42 +0800 |
|---|---|---|
| committer | 郑超 <[email protected]> | 2023-01-02 07:34:43 +0000 |
| commit | b5515b3929dba7ecf3bb6a2bd84da1284d4db59d (patch) | |
| tree | 7cee984d857f0eb3729d7720f6fa110e5f1180c6 | |
| parent | c90ac25fbb168f586ce729b251261788b258f585 (diff) | |
:recycle: refactor undefined object handling.
| -rw-r--r-- | src/t_token_bucket.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/t_token_bucket.c b/src/t_token_bucket.c index 8e3a2b5..db97c96 100644 --- a/src/t_token_bucket.c +++ b/src/t_token_bucket.c @@ -6,7 +6,19 @@ #include <stdlib.h> #include <assert.h> - +enum cmd_exec_result handle_undefined_object(struct sobj *obj, struct swarmkv_reply **reply) +{ + assert(obj->type==OBJ_TYPE_UNDEFINED); + node_t replica; + int ret=0; + ret=sobj_get_random_replica(obj, &replica); + if(ret) + { + *reply=swarmkv_reply_new_node(&replica, 1); + return REDIRECT; + } + return NEED_KEY_ROUTE; +} enum cmd_exec_result tcfg_command(struct swarmkv_module *mod_store, const struct swarmkv_cmd *cmd, const node_t *accessing_node, struct swarmkv_reply **reply) { /*TCFG key rate capacity*/ @@ -69,10 +81,15 @@ enum cmd_exec_result tinfo_command(struct swarmkv_module *mod_store, const struc const sds key=cmd->argv[1]; obj=store_lookup(mod_store, key); - if(!obj || obj->type==OBJ_TYPE_UNDEFINED) + if(!obj) { return NEED_KEY_ROUTE; } + //Unlike string, set and hash, TCONSUME and TINFO can only operate on an initialized token bucket. + if(obj->type==OBJ_TYPE_UNDEFINED) + { + return handle_undefined_object(obj, reply); + } if(obj->type!=OBJ_TYPE_TOKEN_BUCKET) { *reply=swarmkv_reply_new_error(error_wrong_type); @@ -109,15 +126,7 @@ enum cmd_exec_result tconsume_command(struct swarmkv_module *mod_store, const st } if(obj->type==OBJ_TYPE_UNDEFINED) { - node_t replica; - int ret=0; - ret=sobj_get_random_replica(obj, &replica); - if(ret) - { - *reply=swarmkv_reply_new_node(&replica, 1); - return REDIRECT; - } - return NEED_KEY_ROUTE; + return handle_undefined_object(obj, reply); } if(obj->type!=OBJ_TYPE_TOKEN_BUCKET) { |
