diff options
| author | nsfisis <nsfisis@gmail.com> | 2024-08-08 19:30:20 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2024-08-08 19:30:20 +0900 |
| commit | 9e5500269746d3826382a6dec78f0e82cfda0d42 (patch) | |
| tree | d8f15d4081132d6cfff3ea3b02f197b2d6bad700 /backend/taskqueue/processor_wrapper.go | |
| parent | 401a28944fc0408811aedadd1c3104e2e2d4d7fe (diff) | |
| parent | 113c83b19acc58fbd46e8acdac67ff1a112d0d8c (diff) | |
| download | phperkaigi-2025-albatross-9e5500269746d3826382a6dec78f0e82cfda0d42.tar.gz phperkaigi-2025-albatross-9e5500269746d3826382a6dec78f0e82cfda0d42.tar.zst phperkaigi-2025-albatross-9e5500269746d3826382a6dec78f0e82cfda0d42.zip | |
Merge branch 'feat/taskqueue'
Diffstat (limited to 'backend/taskqueue/processor_wrapper.go')
| -rw-r--r-- | backend/taskqueue/processor_wrapper.go | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/backend/taskqueue/processor_wrapper.go b/backend/taskqueue/processor_wrapper.go new file mode 100644 index 0000000..b1fbd16 --- /dev/null +++ b/backend/taskqueue/processor_wrapper.go @@ -0,0 +1,112 @@ +// Code generated by go generate; DO NOT EDIT. + +package taskqueue + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "github.com/hibiken/asynq" +) + +type processorWrapper struct { + impl processor + results chan TaskResult +} + +func newProcessorWrapper(impl processor) *processorWrapper { + return &processorWrapper{ + impl: impl, + results: make(chan TaskResult), + } +} + +func (p *processorWrapper) processTaskCompileSwiftToWasm(ctx context.Context, t *asynq.Task) error { + var payload TaskPayloadCompileSwiftToWasm + if err := json.Unmarshal(t.Payload(), &payload); err != nil { + err := fmt.Errorf("json.Unmarshal failed: %v: %w", err, asynq.SkipRetry) + p.results <- &TaskResultCompileSwiftToWasm{Err: err} + return err + } + + result, err := p.impl.doProcessTaskCompileSwiftToWasm(ctx, &payload) + if err != nil { + retryCount, _ := asynq.GetRetryCount(ctx) + maxRetry, _ := asynq.GetMaxRetry(ctx) + isRecoverable := !errors.Is(err, asynq.SkipRetry) && retryCount < maxRetry + if !isRecoverable { + p.results <- &TaskResultCompileSwiftToWasm{Err: err} + } + return err + } + p.results <- result + return nil +} + +func (p *processorWrapper) processTaskCompileWasmToNativeExecutable(ctx context.Context, t *asynq.Task) error { + var payload TaskPayloadCompileWasmToNativeExecutable + if err := json.Unmarshal(t.Payload(), &payload); err != nil { + err := fmt.Errorf("json.Unmarshal failed: %v: %w", err, asynq.SkipRetry) + p.results <- &TaskResultCompileWasmToNativeExecutable{Err: err} + return err + } + + result, err := p.impl.doProcessTaskCompileWasmToNativeExecutable(ctx, &payload) + if err != nil { + retryCount, _ := asynq.GetRetryCount(ctx) + maxRetry, _ := asynq.GetMaxRetry(ctx) + isRecoverable := !errors.Is(err, asynq.SkipRetry) && retryCount < maxRetry + if !isRecoverable { + p.results <- &TaskResultCompileWasmToNativeExecutable{Err: err} + } + return err + } + p.results <- result + return nil +} + +func (p *processorWrapper) processTaskCreateSubmissionRecord(ctx context.Context, t *asynq.Task) error { + var payload TaskPayloadCreateSubmissionRecord + if err := json.Unmarshal(t.Payload(), &payload); err != nil { + err := fmt.Errorf("json.Unmarshal failed: %v: %w", err, asynq.SkipRetry) + p.results <- &TaskResultCreateSubmissionRecord{Err: err} + return err + } + + result, err := p.impl.doProcessTaskCreateSubmissionRecord(ctx, &payload) + if err != nil { + retryCount, _ := asynq.GetRetryCount(ctx) + maxRetry, _ := asynq.GetMaxRetry(ctx) + isRecoverable := !errors.Is(err, asynq.SkipRetry) && retryCount < maxRetry + if !isRecoverable { + p.results <- &TaskResultCreateSubmissionRecord{Err: err} + } + return err + } + p.results <- result + return nil +} + +func (p *processorWrapper) processTaskRunTestcase(ctx context.Context, t *asynq.Task) error { + var payload TaskPayloadRunTestcase + if err := json.Unmarshal(t.Payload(), &payload); err != nil { + err := fmt.Errorf("json.Unmarshal failed: %v: %w", err, asynq.SkipRetry) + p.results <- &TaskResultRunTestcase{Err: err} + return err + } + + result, err := p.impl.doProcessTaskRunTestcase(ctx, &payload) + if err != nil { + retryCount, _ := asynq.GetRetryCount(ctx) + maxRetry, _ := asynq.GetMaxRetry(ctx) + isRecoverable := !errors.Is(err, asynq.SkipRetry) && retryCount < maxRetry + if !isRecoverable { + p.results <- &TaskResultRunTestcase{Err: err} + } + return err + } + p.results <- result + return nil +} |
