Skip to content

Commit acf11e1

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 acf11e1

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

backend/redis/instance.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,17 @@ 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+
if len(payloadKeys) > 0 {
101+
res, err := rb.rdb.HMGet(ctx, rb.keys.payloadKey(instance), payloadKeys...).Result()
107102
if err != nil {
108-
return nil, fmt.Errorf("deserializing attributes for event %v: %w", event.Type, err)
103+
return nil, fmt.Errorf("reading payloads: %w", err)
104+
}
105+
106+
for i, event := range events {
107+
event.Attributes, err = history.DeserializeAttributes(event.Type, []byte(res[i].(string)))
108+
if err != nil {
109+
return nil, fmt.Errorf("deserializing attributes for event %v: %w", event.Type, err)
110+
}
109111
}
110112
}
111113

0 commit comments

Comments
 (0)