diff --git a/internal/base/base.go b/internal/base/base.go index 4e7186c..5b0023b 100644 --- a/internal/base/base.go +++ b/internal/base/base.go @@ -48,6 +48,7 @@ const ( TaskStateScheduled TaskStateRetry TaskStateArchived + TaskStateCompleted ) func (s TaskState) String() string { @@ -62,6 +63,8 @@ func (s TaskState) String() string { return "retry" case TaskStateArchived: return "archived" + case TaskStateCompleted: + return "completed" } panic(fmt.Sprintf("internal error: unknown task state %d", s)) } @@ -78,6 +81,8 @@ func TaskStateFromString(s string) (TaskState, error) { return TaskStateRetry, nil case "archived": return TaskStateArchived, nil + case "completed": + return TaskStateCompleted, nil } return 0, errors.E(errors.FailedPrecondition, fmt.Sprintf("%q is not supported task state", s)) } @@ -136,6 +141,10 @@ func DeadlinesKey(qname string) string { return fmt.Sprintf("%sdeadlines", QueueKeyPrefix(qname)) } +func CompletedKey(qname string) string { + return fmt.Sprintf("%scompleted", QueueKeyPrefix(qname)) +} + // PausedKey returns a redis key to indicate that the given queue is paused. func PausedKey(qname string) string { return fmt.Sprintf("%spaused", QueueKeyPrefix(qname)) diff --git a/internal/base/base_test.go b/internal/base/base_test.go index 7da6cc5..f49d336 100644 --- a/internal/base/base_test.go +++ b/internal/base/base_test.go @@ -139,6 +139,23 @@ func TestArchivedKey(t *testing.T) { } } +func TestCompletedKey(t *testing.T) { + tests := []struct { + qname string + want string + }{ + {"default", "asynq:{default}:completed"}, + {"custom", "asynq:{custom}:completed"}, + } + + for _, tc := range tests { + got := CompletedKey(tc.qname) + if got != tc.want { + t.Errorf("CompletedKey(%q) = %q, want %q", tc.qname, got, tc.want) + } + } +} + func TestPausedKey(t *testing.T) { tests := []struct { qname string