summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZheng Chao <[email protected]>2023-01-02 15:33:42 +0800
committer郑超 <[email protected]>2023-01-02 07:34:43 +0000
commitb5515b3929dba7ecf3bb6a2bd84da1284d4db59d (patch)
tree7cee984d857f0eb3729d7720f6fa110e5f1180c6 /src
parentc90ac25fbb168f586ce729b251261788b258f585 (diff)
:recycle: refactor undefined object handling.
Diffstat (limited to 'src')
-rw-r--r--src/t_token_bucket.c31
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)
{