From 99c69b314f033059b9e997a93a93bcab40fa345f Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Tue, 28 Sep 2021 22:42:11 +0800 Subject: [PATCH 1/3] feat(conf): update const conf --- conf/wheat-cache.yaml | 2 +- pkg/structure/generate/const.template | 4 +- pkg/structure/generate/interface.template | 2 +- pkg/structure/generate/storage.template | 83 ++++++++++++++++------- pkg/structure/generate/tem.yaml | 1 + 5 files changed, 63 insertions(+), 29 deletions(-) diff --git a/conf/wheat-cache.yaml b/conf/wheat-cache.yaml index 4475627..f204eb2 100644 --- a/conf/wheat-cache.yaml +++ b/conf/wheat-cache.yaml @@ -5,4 +5,4 @@ env: 'dev' storage: host: '127.0.0.1' port: 5890 - + timeOut: 2 # second diff --git a/pkg/structure/generate/const.template b/pkg/structure/generate/const.template index fdedc49..cebfbf1 100644 --- a/pkg/structure/generate/const.template +++ b/pkg/structure/generate/const.template @@ -1,7 +1,7 @@ -// Code generated by gen-struct-const. DO NOT EDIT. +// Code generated by gen-struct. DO NOT EDIT. // make gen-struct generated -package generate +package structure const ( DEFAULT_KEY = iota diff --git a/pkg/structure/generate/interface.template b/pkg/structure/generate/interface.template index ebc12dc..d82ada6 100644 --- a/pkg/structure/generate/interface.template +++ b/pkg/structure/generate/interface.template @@ -1,4 +1,4 @@ -// Code generated by gen-struct-const. DO NOT EDIT. +// Code generated by gen-struct. DO NOT EDIT. // make gen-struct generated package structure diff --git a/pkg/structure/generate/storage.template b/pkg/structure/generate/storage.template index b9c6d7a..55a6096 100644 --- a/pkg/structure/generate/storage.template +++ b/pkg/structure/generate/storage.template @@ -1,45 +1,78 @@ -// TODO 添加 storage server 模板 +// Code generated by gen-struct. DO NOT EDIT. +// make gen-struct generated + package server import ( context "context" + "gitee.com/timedb/wheatCache/pkg/errorx" + "gitee.com/timedb/wheatCache/pkg/event" "gitee.com/timedb/wheatCache/pkg/proto" + "gitee.com/timedb/wheatCache/pkg/structure" + + {% for name in mod_name %} + "gitee.com/timedb/wheatCache/pkg/structure/{{name}}" + {% endfor %} + + "time" ) -type server struct { +type serverSingle struct { + middleProduce event.ProduceInterface + lruProduce event.ProduceInterface + ttl time.Duration } func NewServer() proto.CommServerServer { - ser := &server{} + ser := &serverSingle{} return ser } -func (s *server) Get( - cxt context.Context, - req *proto.GetRequest, -) (*proto.CommendResponse, error) { - panic("implement me") +// TODO 移除 +func mockLruValue() structure.KeyBaseInterface { + return stringx.NewStringSingle() } -func (s *server) Set( - ctx context.Context, - req *proto.SetRequest, -) (*proto.CommendResponse, error) { - panic("implement me") -} +{% for opt in option %} -func (s *server) Add(ctx context.Context, request *proto.AddRequest) (*proto.CommendResponse, error) { - panic("implement me") -} +{% for fun in opt.option %} +func (s *serverSingle) {{ fun }} ( + cxt context.Context, + req *proto.{{ fun }}Request, +) (*proto.{{ fun }}Response, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() -func (s *server) Reduce(ctx context.Context, request *proto.ReduceRequest) (*proto.CommendResponse, error) { - panic("implement me") -} + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.{{ opt.key }}Interface: + resp, err := value.(structure.{{ opt.key }}Interface).{{ fun }}(req) + if err != nil { + return nil, err + } + return resp, nil -func (s *server) Setbit(ctx context.Context, request *proto.SetbitRequest) (*proto.CommendResponse, error) { - panic("implement me") -} + default: + return nil, errorx.New("value err") + } -func (s *server) Getbit(ctx context.Context, request *proto.GetbitRequest) (*proto.CommendResponse, error) { - panic("implement me") + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.{{ fun }}Response: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.{{ fun }}Response), nil } +{% endfor %} + +{% endfor %} diff --git a/pkg/structure/generate/tem.yaml b/pkg/structure/generate/tem.yaml index 9aae05e..2798f70 100644 --- a/pkg/structure/generate/tem.yaml +++ b/pkg/structure/generate/tem.yaml @@ -1,4 +1,5 @@ # 这里定义结构体的支持的命令, 以后也许会添加结构体的命令验证 +# 定义结构体名称以及方法使, 方法全部小写,结构体名称全部大写且结构体名称需要加上 _X, 如 LIST_X STRING_X: - set -- Gitee From f1a260316163873b78897722f68501e91d4b75bf Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Tue, 28 Sep 2021 22:43:11 +0800 Subject: [PATCH 2/3] feat(shell): add storage shell --- shell/make-struct.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/shell/make-struct.py b/shell/make-struct.py index 13c5186..86e9787 100644 --- a/shell/make-struct.py +++ b/shell/make-struct.py @@ -7,6 +7,7 @@ sysPath = os.getcwd() tempPath = f"{sysPath}/pkg/structure/generate" structurePath = f"{sysPath}/pkg/structure" protobufPath = f"{sysPath}/protobuf" +storagePath = f"{sysPath}/storage" class KeyMap(object): @@ -24,6 +25,15 @@ def to_camel(val: str) -> str: return "".join([k.capitalize() for k in val.split('_')]) +class KeyOption(object): + def __init__(self, key, option): + self.key = to_camel(key) + self.option = option + + def __str__(self): + return "{}:{}".format(self.key, self.option) + + def load_template(name: str) -> str: with open(f"{tempPath}/{name}", "r", encoding="utf-8") as fp: return fp.read() @@ -59,7 +69,7 @@ def set_structure_const_template(conf: dict): template = Template(tem_text) text = template.render(keys=keys, key_maps=key_map, sets=val_set) - temp_path = f"{tempPath}/structure.gen.go" + temp_path = f"{structurePath}/const.gen.go" with open(temp_path, 'w', encoding='utf-8') as f: f.write(text) @@ -79,14 +89,31 @@ def set_structure_interface(conf): f.write(text) +def set_storage_server(server_conf): + mod_name = [i.replace("_", "").lower() for i in server_conf.keys()] + + option = [] + for key, item in server_conf.items(): + option.append(KeyOption(key, item)) + + text = load_template("storage.template") + template = Template(text) + text = template.render(option=option, mod_name=mod_name) + temp_path = f"{storagePath}/server/single.gen.go" + with open(temp_path, 'w', encoding='utf-8') as f: + f.write(text) + + def format_code_go(): go_fmt(f"{structurePath}/interface.gen.go") - go_fmt(f"{structurePath}/generate/structure.gen.go") + go_fmt(f"{structurePath}/const.gen.go") + go_fmt(f"{storagePath}/server/*.go") if __name__ == "__main__": conf, cfg_camel = load_conf() set_structure_const_template(conf) set_structure_interface(cfg_camel) + set_storage_server(cfg_camel) # 格式化代码 format_code_go() -- Gitee From d7ac2588aae6a8a165a7c0dc0357783105310858 Mon Sep 17 00:00:00 2001 From: bandl <1658002533@qq.com> Date: Tue, 28 Sep 2021 22:45:17 +0800 Subject: [PATCH 3/3] chore(structure): update structure --- .../structure.gen.go => const.gen.go} | 4 +- pkg/structure/interface.gen.go | 2 +- storage/server/server.go | 44 --- storage/server/single.gen.go | 260 ++++++++++++++++++ 4 files changed, 263 insertions(+), 47 deletions(-) rename pkg/structure/{generate/structure.gen.go => const.gen.go} (86%) delete mode 100644 storage/server/server.go create mode 100644 storage/server/single.gen.go diff --git a/pkg/structure/generate/structure.gen.go b/pkg/structure/const.gen.go similarity index 86% rename from pkg/structure/generate/structure.gen.go rename to pkg/structure/const.gen.go index e9dc9d5..fa802ac 100644 --- a/pkg/structure/generate/structure.gen.go +++ b/pkg/structure/const.gen.go @@ -1,7 +1,7 @@ -// Code generated by gen-struct-const. DO NOT EDIT. +// Code generated by gen-struct. DO NOT EDIT. // make gen-struct generated -package generate +package structure const ( DEFAULT_KEY = iota diff --git a/pkg/structure/interface.gen.go b/pkg/structure/interface.gen.go index e09faba..6aa2437 100644 --- a/pkg/structure/interface.gen.go +++ b/pkg/structure/interface.gen.go @@ -1,4 +1,4 @@ -// Code generated by gen-struct-const. DO NOT EDIT. +// Code generated by gen-struct. DO NOT EDIT. // make gen-struct generated package structure diff --git a/storage/server/server.go b/storage/server/server.go deleted file mode 100644 index 82806c3..0000000 --- a/storage/server/server.go +++ /dev/null @@ -1,44 +0,0 @@ -package server - -import ( - context "context" - "gitee.com/timedb/wheatCache/pkg/proto" -) - -type server struct { -} - -func NewServer() proto.CommServerServer { - ser := &server{} - return ser -} - -func (s *server) Get( - cxt context.Context, - req *proto.GetRequest, -) (*proto.CommendResponse, error) { - panic("implement me") -} - -func (s *server) Set( - ctx context.Context, - req *proto.SetRequest, -) (*proto.CommendResponse, error) { - panic("implement me") -} - -func (s *server) Add(ctx context.Context, request *proto.AddRequest) (*proto.CommendResponse, error) { - panic("implement me") -} - -func (s *server) Reduce(ctx context.Context, request *proto.ReduceRequest) (*proto.CommendResponse, error) { - panic("implement me") -} - -func (s *server) Setbit(ctx context.Context, request *proto.SetbitRequest) (*proto.CommendResponse, error) { - panic("implement me") -} - -func (s *server) Getbit(ctx context.Context, request *proto.GetbitRequest) (*proto.CommendResponse, error) { - panic("implement me") -} diff --git a/storage/server/single.gen.go b/storage/server/single.gen.go new file mode 100644 index 0000000..851ab87 --- /dev/null +++ b/storage/server/single.gen.go @@ -0,0 +1,260 @@ +// Code generated by gen-struct. DO NOT EDIT. +// make gen-struct generated + +package server + +import ( + context "context" + "gitee.com/timedb/wheatCache/pkg/errorx" + "gitee.com/timedb/wheatCache/pkg/event" + "gitee.com/timedb/wheatCache/pkg/proto" + "gitee.com/timedb/wheatCache/pkg/structure" + + "gitee.com/timedb/wheatCache/pkg/structure/stringx" + + "time" +) + +type serverSingle struct { + middleProduce event.ProduceInterface + lruProduce event.ProduceInterface + ttl time.Duration +} + +func NewServer() proto.CommServerServer { + ser := &serverSingle{} + return ser +} + +// TODO 移除 +func mockLruValue() structure.KeyBaseInterface { + return stringx.NewStringSingle() +} + +func (s *serverSingle) Set( + cxt context.Context, + req *proto.SetRequest, +) (*proto.SetResponse, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() + + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.StringXInterface: + resp, err := value.(structure.StringXInterface).Set(req) + if err != nil { + return nil, err + } + return resp, nil + + default: + return nil, errorx.New("value err") + } + + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.SetResponse: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.SetResponse), nil +} + +func (s *serverSingle) Get( + cxt context.Context, + req *proto.GetRequest, +) (*proto.GetResponse, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() + + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.StringXInterface: + resp, err := value.(structure.StringXInterface).Get(req) + if err != nil { + return nil, err + } + return resp, nil + + default: + return nil, errorx.New("value err") + } + + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.GetResponse: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.GetResponse), nil +} + +func (s *serverSingle) Add( + cxt context.Context, + req *proto.AddRequest, +) (*proto.AddResponse, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() + + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.StringXInterface: + resp, err := value.(structure.StringXInterface).Add(req) + if err != nil { + return nil, err + } + return resp, nil + + default: + return nil, errorx.New("value err") + } + + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.AddResponse: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.AddResponse), nil +} + +func (s *serverSingle) Reduce( + cxt context.Context, + req *proto.ReduceRequest, +) (*proto.ReduceResponse, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() + + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.StringXInterface: + resp, err := value.(structure.StringXInterface).Reduce(req) + if err != nil { + return nil, err + } + return resp, nil + + default: + return nil, errorx.New("value err") + } + + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.ReduceResponse: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.ReduceResponse), nil +} + +func (s *serverSingle) Setbit( + cxt context.Context, + req *proto.SetbitRequest, +) (*proto.SetbitResponse, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() + + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.StringXInterface: + resp, err := value.(structure.StringXInterface).Setbit(req) + if err != nil { + return nil, err + } + return resp, nil + + default: + return nil, errorx.New("value err") + } + + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.SetbitResponse: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.SetbitResponse), nil +} + +func (s *serverSingle) Getbit( + cxt context.Context, + req *proto.GetbitRequest, +) (*proto.GetbitResponse, error) { + lruEvent := event.NewEvent("lru event") + lruEvent.InitWaitEvent() + + work := event.EventWorkFunc(func() (interface{}, error) { + value := mockLruValue() // TODO 替换为从 lru 获取 + switch value.(type) { + case structure.StringXInterface: + resp, err := value.(structure.StringXInterface).Getbit(req) + if err != nil { + return nil, err + } + return resp, nil + + default: + return nil, errorx.New("value err") + } + + }) + + lruEvent.SetValue("lru work", work) + s.lruProduce.Call(cxt, lruEvent) + resp, err := lruEvent.StartWaitEvent(s.ttl) + if err != nil { + return nil, err + } + + switch resp.(type) { + case *proto.GetbitResponse: + default: + return nil, errorx.New("value err") + } + return resp.(*proto.GetbitResponse), nil +} -- Gitee