From 9d5fe4f6a98b30fd73be8259f84fa595ac994a71 Mon Sep 17 00:00:00 2001 From: Valery Piashchynski Date: Thu, 17 Dec 2020 02:34:44 +0300 Subject: huge refactor --- pool.go | 139 ---------------------------------------------------------------- 1 file changed, 139 deletions(-) delete mode 100755 pool.go (limited to 'pool.go') diff --git a/pool.go b/pool.go deleted file mode 100755 index 3e38c4cb..00000000 --- a/pool.go +++ /dev/null @@ -1,139 +0,0 @@ -package roadrunner - -import ( - "context" - "runtime" - "time" - - "github.com/spiral/roadrunner/v2/util" -) - -// PoolEvent triggered by pool on different events. Pool as also trigger WorkerEvent in case of log. -type PoolEvent struct { - // Event type, see below. - Event int64 - - // Payload depends on event type, typically it's worker or error. - Payload interface{} -} - -const ( - // EventWorkerConstruct thrown when new worker is spawned. - EventWorkerConstruct = iota + 7800 - - // EventWorkerDestruct thrown after worker destruction. - EventWorkerDestruct - - // EventPoolError caused on pool wide errors. - EventPoolError - - // EventSupervisorError triggered when supervisor can not complete work. - EventSupervisorError - - // EventNoFreeWorkers triggered when there are no free workers in the stack and timeout for worker allocate elapsed - EventNoFreeWorkers - - // todo: EventMaxMemory caused when worker consumes more memory than allowed. - EventMaxMemory - - // todo: EventTTL thrown when worker is removed due TTL being reached. Context is rr.WorkerError - EventTTL - - // todo: EventIdleTTL triggered when worker spends too much time at rest. - EventIdleTTL - - // todo: EventExecTTL triggered when worker spends too much time doing the task (max_execution_time). - EventExecTTL -) - -// Pool managed set of inner worker processes. -type Pool interface { - // AddListener connects event listener to the pool. - AddListener(listener util.EventListener) - - // GetConfig returns pool configuration. - GetConfig() PoolConfig - - // Exec - Exec(rqs Payload) (Payload, error) - - ExecWithContext(ctx context.Context, rqs Payload) (Payload, error) - - // Workers returns worker list associated with the pool. - Workers() (workers []WorkerBase) - - // Remove worker from the pool. - RemoveWorker(worker WorkerBase) error - - // Destroy all underlying stack (but let them to complete the task). - Destroy(ctx context.Context) -} - -// Configures the pool behaviour. -type PoolConfig struct { - // Debug flag creates new fresh worker before every request. - Debug bool - - // NumWorkers defines how many sub-processes can be run at once. This value - // might be doubled by Swapper while hot-swap. Defaults to number of CPU cores. - NumWorkers int64 - - // MaxJobs defines how many executions is allowed for the worker until - // it's destruction. set 1 to create new process for each new task, 0 to let - // worker handle as many tasks as it can. - MaxJobs int64 - - // AllocateTimeout defines for how long pool will be waiting for a worker to - // be freed to handle the task. Defaults to 60s. - AllocateTimeout time.Duration - - // DestroyTimeout defines for how long pool should be waiting for worker to - // properly destroy, if timeout reached worker will be killed. Defaults to 60s. - DestroyTimeout time.Duration - - // Supervision config to limit worker and pool memory usage. - Supervisor *SupervisorConfig -} - -// InitDefaults enables default config values. -func (cfg *PoolConfig) InitDefaults() { - if cfg.NumWorkers == 0 { - cfg.NumWorkers = int64(runtime.NumCPU()) - } - - if cfg.AllocateTimeout == 0 { - cfg.AllocateTimeout = time.Minute - } - - if cfg.DestroyTimeout == 0 { - cfg.DestroyTimeout = time.Minute - } - if cfg.Supervisor == nil { - return - } - cfg.Supervisor.InitDefaults() -} - -type SupervisorConfig struct { - // WatchTick defines how often to check the state of worker. - WatchTick uint64 - - // TTL defines maximum time worker is allowed to live. - TTL uint64 - - // IdleTTL defines maximum duration worker can spend in idle mode. Disabled when 0. - IdleTTL uint64 - - // ExecTTL defines maximum lifetime per job. - ExecTTL uint64 - - // MaxWorkerMemory limits memory per worker. - MaxWorkerMemory uint64 -} - -// InitDefaults enables default config values. -func (cfg *SupervisorConfig) InitDefaults() { - if cfg.WatchTick == 0 { - cfg.WatchTick = 1 - } -} -- cgit v1.2.3