Skip to content

Commit 0482677

Browse files
committed
Make sure to call after hook on error
1 parent fb80d42 commit 0482677

File tree

1 file changed

+32
-58
lines changed

1 file changed

+32
-58
lines changed

redis.go

Lines changed: 32 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -48,83 +48,57 @@ func (hs *hooks) AddHook(hook Hook) {
4848
func (hs hooks) process(
4949
ctx context.Context, cmd Cmder, fn func(context.Context, Cmder) error,
5050
) error {
51-
ctx, err := hs.beforeProcess(ctx, cmd)
52-
if err != nil {
53-
cmd.SetErr(err)
54-
return err
51+
var hookIndex int
52+
var retErr error
53+
54+
for ; hookIndex < len(hs.hooks); hookIndex++ {
55+
ctx, retErr = hs.hooks[hookIndex].BeforeProcess(ctx, cmd)
56+
if retErr != nil {
57+
cmd.SetErr(retErr)
58+
break
59+
}
5560
}
5661

57-
cmdErr := fn(ctx, cmd)
58-
59-
if err := hs.afterProcess(ctx, cmd); err != nil {
60-
cmd.SetErr(err)
61-
return err
62+
if retErr == nil {
63+
retErr = fn(ctx, cmd)
6264
}
6365

64-
return cmdErr
65-
}
66-
67-
func (hs hooks) beforeProcess(ctx context.Context, cmd Cmder) (context.Context, error) {
68-
for _, h := range hs.hooks {
69-
var err error
70-
ctx, err = h.BeforeProcess(ctx, cmd)
71-
if err != nil {
72-
return nil, err
66+
for ; hookIndex >= 0; hookIndex-- {
67+
if err := hs.hooks[hookIndex].AfterProcess(ctx, cmd); err != nil {
68+
retErr = err
69+
cmd.SetErr(retErr)
7370
}
7471
}
75-
return ctx, nil
76-
}
7772

78-
func (hs hooks) afterProcess(ctx context.Context, cmd Cmder) error {
79-
var firstErr error
80-
for i := len(hs.hooks) - 1; i >= 0; i-- {
81-
h := hs.hooks[i]
82-
if err := h.AfterProcess(ctx, cmd); err != nil && firstErr == nil {
83-
firstErr = err
84-
}
85-
}
86-
return firstErr
73+
return retErr
8774
}
8875

8976
func (hs hooks) processPipeline(
9077
ctx context.Context, cmds []Cmder, fn func(context.Context, []Cmder) error,
9178
) error {
92-
ctx, err := hs.beforeProcessPipeline(ctx, cmds)
93-
if err != nil {
94-
setCmdsErr(cmds, err)
95-
return err
79+
var hookIndex int
80+
var retErr error
81+
82+
for ; hookIndex < len(hs.hooks); hookIndex++ {
83+
ctx, retErr = hs.hooks[hookIndex].BeforeProcessPipeline(ctx, cmds)
84+
if retErr != nil {
85+
setCmdsErr(cmds, retErr)
86+
break
87+
}
9688
}
9789

98-
cmdsErr := fn(ctx, cmds)
99-
100-
if err := hs.afterProcessPipeline(ctx, cmds); err != nil {
101-
setCmdsErr(cmds, err)
102-
return err
90+
if retErr == nil {
91+
retErr = fn(ctx, cmds)
10392
}
10493

105-
return cmdsErr
106-
}
107-
108-
func (hs hooks) beforeProcessPipeline(ctx context.Context, cmds []Cmder) (context.Context, error) {
109-
for _, h := range hs.hooks {
110-
var err error
111-
ctx, err = h.BeforeProcessPipeline(ctx, cmds)
112-
if err != nil {
113-
return nil, err
94+
for ; hookIndex >= 0; hookIndex-- {
95+
if err := hs.hooks[hookIndex].AfterProcessPipeline(ctx, cmds); err != nil {
96+
retErr = err
97+
setCmdsErr(cmds, retErr)
11498
}
11599
}
116-
return ctx, nil
117-
}
118100

119-
func (hs hooks) afterProcessPipeline(ctx context.Context, cmds []Cmder) error {
120-
var firstErr error
121-
for i := len(hs.hooks) - 1; i >= 0; i-- {
122-
h := hs.hooks[i]
123-
if err := h.AfterProcessPipeline(ctx, cmds); err != nil && firstErr == nil {
124-
firstErr = err
125-
}
126-
}
127-
return firstErr
101+
return retErr
128102
}
129103

130104
func (hs hooks) processTxPipeline(

0 commit comments

Comments
 (0)