mattermost-community-enterp.../vendor/github.com/splitio/go-split-commons/v7/push/split.go
Claude ec1f89217a Merge: Complete Mattermost Server with Community Enterprise
Full Mattermost server source with integrated Community Enterprise features.
Includes vendor directory for offline/air-gapped builds.

Structure:
- enterprise-impl/: Enterprise feature implementations
- enterprise-community/: Init files that register implementations
- enterprise/: Bridge imports (community_imports.go)
- vendor/: All dependencies for offline builds

Build (online):
  go build ./cmd/mattermost

Build (offline/air-gapped):
  go build -mod=vendor ./cmd/mattermost

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 23:59:07 +09:00

81 lines
1.8 KiB
Go

package push
import (
"errors"
"fmt"
"github.com/splitio/go-split-commons/v7/dtos"
"github.com/splitio/go-toolkit/v5/logging"
"github.com/splitio/go-toolkit/v5/struct/traits/lifecycle"
)
// SplitUpdateWorker struct
type SplitUpdateWorker struct {
splitQueue chan dtos.SplitChangeUpdate
sync synchronizerInterface
logger logging.LoggerInterface
lifecycle lifecycle.Manager
}
// NewSplitUpdateWorker creates SplitUpdateWorker
func NewSplitUpdateWorker(
splitQueue chan dtos.SplitChangeUpdate,
synchronizer synchronizerInterface,
logger logging.LoggerInterface,
) (*SplitUpdateWorker, error) {
if cap(splitQueue) < 5000 {
return nil, errors.New("")
}
worker := &SplitUpdateWorker{
splitQueue: splitQueue,
sync: synchronizer,
logger: logger,
}
worker.lifecycle.Setup()
return worker, nil
}
// Start starts worker
func (s *SplitUpdateWorker) Start() {
if !s.lifecycle.BeginInitialization() {
s.logger.Info("Split worker is already running")
return
}
s.logger.Debug("Started SplitUpdateWorker")
go func() {
defer s.lifecycle.ShutdownComplete()
if !s.lifecycle.InitializationComplete() {
return
}
for {
select {
case splitUpdate := <-s.splitQueue:
s.logger.Debug("Received Split update and proceding to perform fetch")
s.logger.Debug(fmt.Sprintf("ChangeNumber: %d", splitUpdate.ChangeNumber()))
err := s.sync.SynchronizeFeatureFlags(&splitUpdate)
if err != nil {
s.logger.Error(err)
}
case <-s.lifecycle.ShutdownRequested():
return
}
}
}()
}
// Stop stops worker
func (s *SplitUpdateWorker) Stop() {
if !s.lifecycle.BeginShutdown() {
s.logger.Debug("Split worker not runnning. Ignoring.")
return
}
s.lifecycle.AwaitShutdownComplete()
}
// IsRunning indicates if worker is running or not
func (s *SplitUpdateWorker) IsRunning() bool {
return s.lifecycle.IsRunning()
}