diff options
Diffstat (limited to 'state.go')
-rwxr-xr-x[-rw-r--r--] | state.go | 49 |
1 files changed, 37 insertions, 12 deletions
@@ -5,18 +5,24 @@ import ( "sync/atomic" ) -// State represents worker status and updated time. +// State represents WorkerProcess status and updated time. type State interface { fmt.Stringer // Value returns state value Value() int64 - - // NumJobs shows how many times worker was invoked + // Set sets the state + Set(value int64) + // NumJobs shows how many times WorkerProcess was invoked NumExecs() int64 - - // IsActive returns true if worker not Inactive or Stopped + // IsActive returns true if WorkerProcess not Inactive or Stopped IsActive() bool + // RegisterExec using to registering php executions + RegisterExec() + // SetLastUsed sets worker last used time + SetLastUsed(lu uint64) + // LastUsed return worker last used time + LastUsed() uint64 } const ( @@ -29,24 +35,34 @@ const ( // StateWorking - working on given payload. StateWorking - // StateInvalid - indicates that worker is being disabled and will be removed. + // StateInvalid - indicates that WorkerProcess is being disabled and will be removed. StateInvalid // StateStopping - process is being softly stopped. StateStopping + StateKilling + + // State of worker, when no need to allocate new one + StateDestroyed + // StateStopped - process has been terminated. StateStopped // StateErrored - error state (can't be used). StateErrored + + StateRemove ) type state struct { value int64 numExecs int64 + // to be lightweight, use UnixNano + lastUsed uint64 } +// Thread safe func newState(value int64) *state { return &state{value: value} } @@ -71,7 +87,7 @@ func (s *state) String() string { return "undefined" } -// NumExecs returns number of registered worker execs. +// NumExecs returns number of registered WorkerProcess execs. func (s *state) NumExecs() int64 { return atomic.LoadInt64(&s.numExecs) } @@ -81,18 +97,27 @@ func (s *state) Value() int64 { return atomic.LoadInt64(&s.value) } -// IsActive returns true if worker not Inactive or Stopped +// IsActive returns true if WorkerProcess not Inactive or Stopped func (s *state) IsActive() bool { - state := s.Value() - return state == StateWorking || state == StateReady + val := s.Value() + return val == StateWorking || val == StateReady } // change state value (status) -func (s *state) set(value int64) { +func (s *state) Set(value int64) { atomic.StoreInt64(&s.value, value) } // register new execution atomically -func (s *state) registerExec() { +func (s *state) RegisterExec() { atomic.AddInt64(&s.numExecs, 1) } + +// Update last used time +func (s *state) SetLastUsed(lu uint64) { + atomic.StoreUint64(&s.lastUsed, lu) +} + +func (s *state) LastUsed() uint64 { + return atomic.LoadUint64(&s.lastUsed) +} |