diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go index 0a749a8..21e85ea 100644 --- a/pkg/manager/manager.go +++ b/pkg/manager/manager.go @@ -21,7 +21,7 @@ type InstanceManager interface { UpdateInstance(name string, options *instance.CreateInstanceOptions) (*instance.Process, error) DeleteInstance(name string) error StartInstance(name string) (*instance.Process, error) - CanStartInstance(inst *instance.Process) (bool, error) + IsMaxRunningInstancesReached() bool StopInstance(name string) (*instance.Process, error) RestartInstance(name string) (*instance.Process, error) GetInstanceLogs(name string) (string, error) diff --git a/pkg/manager/operations.go b/pkg/manager/operations.go index 5f8b910..5af19e7 100644 --- a/pkg/manager/operations.go +++ b/pkg/manager/operations.go @@ -201,30 +201,15 @@ func (im *instanceManager) StartInstance(name string) (*instance.Process, error) return instance, nil } -// CanStartInstance checks if an instance can be started. -// An instance can be started if: -// 1. It is not already running, AND -// 2. Either: -// a) There is capacity (MaxRunningInstances is unlimited or not reached), OR -// b) The instance has on-demand start enabled AND LRU eviction is enabled -// (allowing older instances to be evicted to make room) -func (im *instanceManager) CanStartInstance(inst *instance.Process) (bool, error) { +func (im *instanceManager) IsMaxRunningInstancesReached() bool { im.mu.RLock() defer im.mu.RUnlock() - if inst == nil { - return false, fmt.Errorf("instance is nil") + if im.instancesConfig.MaxRunningInstances != -1 && len(im.runningInstances) >= im.instancesConfig.MaxRunningInstances { + return true } - if inst.IsRunning() { - return false, fmt.Errorf("instance with name %s is already running", inst.Name) - } - - allowMaxRunning := im.instancesConfig.MaxRunningInstances == -1 || len(im.runningInstances) < im.instancesConfig.MaxRunningInstances - allowOnDemand := inst.GetOptions() != nil && inst.GetOptions().OnDemandStart != nil && *inst.GetOptions().OnDemandStart - allowLRUEviction := im.instancesConfig.EnableLRUEviction - - return allowMaxRunning || (allowOnDemand && allowLRUEviction), nil + return false } // StopInstance stops a running instance and returns it.