task

package
v1.2.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 18, 2026 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotificationSenderNotInitialized 서비스 시작 시 핵심 의존성 객체인 NotificationSender가 올바르게 초기화되지 않았을 때 반환되는 에러입니다.
	ErrNotificationSenderNotInitialized = apperrors.New(apperrors.Internal, "NotificationSender 객체가 초기화되지 않았습니다")

	// ErrServiceNotRunning Task 서비스가 실행 중이 아닐 때 반환되는 에러입니다.
	ErrServiceNotRunning = apperrors.New(apperrors.Internal, "Task 서비스가 현재 실행 중이지 않아 요청을 수행할 수 없습니다")

	// ErrInvalidTaskSubmitRequest Submit() 호출 시 전달된 요청 객체가 유효하지 않을 때 반환되는 에러입니다.
	ErrInvalidTaskSubmitRequest = apperrors.New(apperrors.Internal, "작업 실행 요청 정보가 유효하지 않아 요청을 처리할 수 없습니다")

	// ErrCancelQueueFull Cancel() 호출 시 취소 요청 대기열이 가득 차 있을 때 반환되는 에러입니다.
	// 비블로킹 방식으로 채널 전송을 시도하여, 즉시 수신이 불가능하면 재시도 없이 바로 반환합니다.
	ErrCancelQueueFull = apperrors.New(apperrors.Internal, "작업 취소 대기열이 포화 상태에 도달하여 일시적으로 요청을 접수할 수 없습니다")
)

Functions

This section is empty.

Types

type Service

type Service struct {
	// contains filtered or unexported fields
}

Service Task 서비스입니다. Task의 제출, 취소, 완료, 스케줄링을 총괄합니다.

모든 상태 변경 이벤트(Submit, Cancel, Done)는 채널을 통해 단일 이벤트 루프로 직렬화됩니다. 이로써 복잡한 Mutex 없이 안전한 동시성을 보장합니다.

주요 책임:

  • 중복 실행 방지 및 Fail Fast 검증
  • Cron 스케줄에 따른 자동 실행
  • 서비스 종료 시 실행 중인 모든 Task의 안전한 정리 (Graceful Shutdown)

func NewService

func NewService(appConfig *config.AppConfig, idGenerator contract.IDGenerator, taskResultStore contract.TaskResultStore) *Service

NewService Task 서비스를 생성합니다.

func (*Service) Cancel

func (s *Service) Cancel(instanceID contract.TaskInstanceID) (err error)

Cancel 전달받은 InstanceID에 해당하는 실행 중인 Task의 취소를 요청합니다.

이 메서드는 취소 요청을 taskCancelC 채널에 전달하는 역할만 담당합니다. 실제 취소 처리(task.Cancel() 호출 및 사용자 알림)는 이벤트 루프의 handleTaskCancel()이 수행합니다.

반환값:

  • nil: 취소 요청이 성공적으로 큐에 등록된 경우
  • error: 서비스가 실행 중이 아니거나, 취소 요청 큐가 가득 찬 경우

func (*Service) SetNotificationSender

func (s *Service) SetNotificationSender(notificationSender contract.NotificationSender)

SetNotificationSender Task 실행 결과 및 중요 이벤트를 외부로 전달할 NotificationSender를 주입합니다.

Task 서비스는 순환 의존성 문제로 인해 생성자(NewService)에서 NotificationSender를 받지 않으므로, Start() 호출 전에 이 메서드를 통해 별도로 주입해야 합니다. Start() 내부에서 초기화 여부를 검증하므로, 주입 없이 Start()를 호출하면 오류가 반환됩니다.

매개변수:

  • notificationSender: 알림을 전송할 구현체입니다. nil을 전달하면 Start() 시 오류가 반환됩니다.

func (*Service) Start

func (s *Service) Start(serviceStopCtx context.Context, serviceStopWG *sync.WaitGroup) error

Start Task 서비스를 시작하고 이벤트 루프를 준비합니다.

내부적으로 runEventLoop()를 별도의 고루틴으로 실행하여 Task의 제출, 완료, 취소 이벤트를 처리합니다. 서비스가 이미 실행 중인 경우에는 경고 로그만 남기고 정상 반환합니다.

매개변수:

  • serviceStopCtx: 서비스 종료 신호를 전달받는 컨텍스트입니다. 이 컨텍스트가 취소되면 이벤트 루프가 Graceful Shutdown을 시작합니다.
  • serviceStopWG: 서비스 종료 시 이벤트 루프 고루틴이 완전히 종료될 때까지 대기하기 위한 WaitGroup입니다.

반환값:

  • error: NotificationSender가 주입되지 않았거나 그 외 초기화 실패 시 오류를 반환합니다.

func (*Service) Submit

func (s *Service) Submit(ctx context.Context, req *contract.TaskSubmitRequest) (err error)

Submit Task 실행 요청을 검증하고 이벤트 루프의 실행 큐에 등록합니다.

요청은 아래 순서로 검증된 후 큐에 등록됩니다:

  1. 요청 객체 유효성 검사 (nil 체크, 필드 유효성)
  2. TaskID / CommandID 지원 여부 확인 (지원하지 않으면 즉시 오류 반환)
  3. 서비스 실행 상태 확인
  4. taskSubmitC 채널에 비동기로 전달

매개변수:

  • ctx: 채널이 가득 찼을 때 호출자가 대기를 취소할 수 있는 컨텍스트입니다. ctx가 취소되면 ctx.Err()를 반환합니다.
  • req: 실행을 요청할 Task의 식별 정보(TaskID, CommandID, NotifierID 등)를 담은 요청 객체입니다.

반환값:

  • nil: 요청이 성공적으로 큐에 등록된 경우
  • error: 요청이 유효하지 않거나, 서비스가 중지 중이거나, ctx가 취소된 경우

Directories

Path Synopsis
mocks
Package mocks는 fetcher 패키지의 테스트를 위한 Mock 구현체들을 제공합니다.
Package mocks는 fetcher 패키지의 테스트를 위한 Mock 구현체들을 제공합니다.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL