Skip to content

Commit 12c0521

Browse files
Guard HMGET against empty payload keys in GetWorkflowInstanceHistory
When an instance's history stream is empty, payloadKeys is empty and HMGET is called with no fields, which Redis rejects with 'ERR wrong number of arguments for hmget'. Guard the payload fetch with len(payloadKeys) > 0, mirroring the existing guard in workflow.go.
1 parent 92ebb1a commit 12c0521

1 file changed

Lines changed: 13 additions & 8 deletions

File tree

backend/redis/instance.go

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,20 @@ func (rb *redisBackend) GetWorkflowInstanceHistory(ctx context.Context, instance
9797
events = append(events, event)
9898
}
9999

100-
res, err := rb.rdb.HMGet(ctx, rb.keys.payloadKey(instance), payloadKeys...).Result()
101-
if err != nil {
102-
return nil, fmt.Errorf("reading payloads: %w", err)
103-
}
104-
105-
for i, event := range events {
106-
event.Attributes, err = history.DeserializeAttributes(event.Type, []byte(res[i].(string)))
100+
// Only fetch payloads when there are events; HMGET with no fields is a
101+
// syntax error in Redis ("wrong number of arguments"). Mirrors the guard
102+
// in workflow.go's getWorkflowInstanceState.
103+
if len(payloadKeys) > 0 {
104+
res, err := rb.rdb.HMGet(ctx, rb.keys.payloadKey(instance), payloadKeys...).Result()
107105
if err != nil {
108-
return nil, fmt.Errorf("deserializing attributes for event %v: %w", event.Type, err)
106+
return nil, fmt.Errorf("reading payloads: %w", err)
107+
}
108+
109+
for i, event := range events {
110+
event.Attributes, err = history.DeserializeAttributes(event.Type, []byte(res[i].(string)))
111+
if err != nil {
112+
return nil, fmt.Errorf("deserializing attributes for event %v: %w", event.Type, err)
113+
}
109114
}
110115
}
111116

0 commit comments

Comments
 (0)