Bound document content extraction time and decouple it from uploads (MM-69098) (#36856) (#37043)

Automatic Merge
Этот коммит содержится в:
Julien Tant
2026-06-14 23:35:26 -07:00
коммит произвёл GitHub
родитель 775c36f827
Коммит acc19baca0
19 изменённых файлов: 513 добавлений и 13 удалений

Просмотреть файл

@@ -107,6 +107,13 @@ type PlatformService struct {
goroutineExitSignal chan struct{}
goroutineBuffered chan struct{}
// Document content extraction runs on a dedicated, bounded worker pool so
// that expensive extractions cannot saturate the generic worker pool and
// block the request goroutines that dispatch them.
extractionQueue chan func()
extractionStop chan struct{}
extractionWG sync.WaitGroup
additionalClusterHandlers map[model.ClusterEvent]einterfaces.ClusterMessageHandler
shareChannelServiceMux sync.RWMutex
@@ -136,6 +143,8 @@ func New(sc ServiceConfig, options ...Option) (*PlatformService, error) {
hashSeed: maphash.MakeSeed(),
goroutineExitSignal: make(chan struct{}, 1),
goroutineBuffered: make(chan struct{}, runtime.NumCPU()),
extractionQueue: make(chan func(), runtime.NumCPU()),
extractionStop: make(chan struct{}),
WebSocketRouter: &WebSocketRouter{
handlers: make(map[string]webSocketHandler),
},
@@ -401,6 +410,8 @@ func New(sc ServiceConfig, options ...Option) (*PlatformService, error) {
ps.searchConfigListenerId = searchConfigListenerId
ps.searchLicenseListenerId = searchLicenseListenerId
ps.startExtractionWorkers()
return ps, nil
}
@@ -517,6 +528,10 @@ func (ps *PlatformService) Shutdown() error {
ps.RemoveLicenseListener(ps.licenseListenerId)
// Stop the document extraction workers and wait for any in-flight
// extraction to finish before closing the store it depends on.
ps.stopExtractionWorkers()
// we need to wait the goroutines to finish before closing the store
// and this needs to be called after hub stop because hub generates goroutines
// when it is active. If we wait first we have no mechanism to prevent adding