@@ -35,10 +35,6 @@ type Active struct {
3535
3636 BaseFileName string
3737
38- useMu sync.RWMutex
39- suicided bool
40- released bool
41-
4238 infoMu sync.RWMutex
4339 info * common.Info
4440
@@ -269,40 +265,18 @@ func (f *Active) String() string {
269265}
270266
271267func (f * Active ) Fetch (ctx context.Context , ids []seq.ID ) ([][]byte , error ) {
272- dp , release := f .DataProvider (ctx )
273- defer release ()
274- if dp == nil {
275- return EmptyFraction .Fetch (ctx , ids )
268+ if f .Info ().DocsTotal == 0 { // it is empty active fraction state
269+ return nil , nil
276270 }
277- return dp .Fetch (ids )
271+ return f . createDataProvider ( ctx ) .Fetch (ids )
278272}
279273
280274func (f * Active ) Search (ctx context.Context , params processor.SearchParams ) (* seq.QPR , error ) {
281- dp , release := f .DataProvider (ctx )
282- defer release ()
283- if dp == nil {
284- return EmptyFraction .Search (ctx , params )
285- }
286- return dp .Search (params )
287- }
288-
289- func (f * Active ) DataProvider (ctx context.Context ) (* activeDataProvider , func ()) {
290- f .useMu .RLock ()
291-
292- if f .suicided || f .released || f .Info ().DocsTotal == 0 { // it is empty active fraction state
293- if f .suicided {
294- metric .CountersTotal .WithLabelValues ("fraction_suicided" ).Inc ()
295- }
296- f .useMu .RUnlock ()
297- return nil , func () {}
298- }
299-
300- // it is ordinary active fraction state
301- dp := f .createDataProvider (ctx )
302- return dp , func () {
303- dp .release ()
304- f .useMu .RUnlock ()
275+ if f .Info ().DocsTotal == 0 { // it is empty active fraction state
276+ metric .CountersTotal .WithLabelValues ("empty_data_provider" ).Inc ()
277+ return & seq.QPR {Aggs : make ([]seq.AggregatableSamples , len (params .AggQ ))}, nil
305278 }
279+ return f .createDataProvider (ctx ).Search (params )
306280}
307281
308282func (f * Active ) createDataProvider (ctx context.Context ) * activeDataProvider {
@@ -338,49 +312,24 @@ func (f *Active) IsIntersecting(from, to seq.MID) bool {
338312}
339313
340314func (f * Active ) Release () {
341- f .useMu .Lock ()
342- f .released = true
343- f .useMu .Unlock ()
344-
345315 f .releaseMem ()
346316
347317 if ! f .Config .KeepMetaFile {
348- f . removeMetaFile ( )
318+ util . RemoveFile ( f . metaFile . Name () )
349319 }
350320
351321 if ! f .Config .SkipSortDocs {
352322 // we use sorted docs in sealed fraction so we can remove original docs of active fraction
353- f . removeDocsFiles ( )
323+ util . RemoveFile ( f . docsFile . Name () )
354324 }
355325}
356326
357- // Offload for [Active] fraction is no-op.
358- //
359- // Since search within [Active] fraction is too costly (we have to replay the whole index in memory),
360- // we decided to support offloading only for [Sealed] fractions.
361- func (f * Active ) Offload (context.Context , storage.Uploader ) (bool , error ) {
362- return false , nil
363- }
364-
365327func (f * Active ) Suicide () {
366- f .useMu .Lock ()
367- released := f .released
368- f .suicided = true
369- f .released = true
370- f .useMu .Unlock ()
371-
372- if released { // fraction can be suicided after release
373- if f .Config .KeepMetaFile {
374- f .removeMetaFile () // meta was not removed while release
375- }
376- if f .Config .SkipSortDocs {
377- f .removeDocsFiles () // docs was not removed while release
378- }
379- } else { // was not release
380- f .releaseMem ()
381- f .removeMetaFile ()
382- f .removeDocsFiles ()
383- }
328+ f .releaseMem ()
329+
330+ util .RemoveFile (f .metaFile .Name ())
331+ util .RemoveFile (f .docsFile .Name ())
332+ util .RemoveFile (f .BaseFileName + consts .SdocsFileSuffix )
384333}
385334
386335func (f * Active ) releaseMem () {
@@ -393,24 +342,12 @@ func (f *Active) releaseMem() {
393342 if err := f .metaFile .Close (); err != nil {
394343 logger .Error ("can't close meta file" , zap .String ("frac" , f .BaseFileName ), zap .Error (err ))
395344 }
345+ if err := f .docsFile .Close (); err != nil {
346+ logger .Error ("can't close docs file" , zap .String ("frac" , f .BaseFileName ), zap .Error (err ))
347+ }
396348
397349 f .RIDs = nil
398350 f .MIDs = nil
399351 f .TokenList = nil
400352 f .DocsPositions = nil
401353}
402-
403- func (f * Active ) removeDocsFiles () {
404- if err := f .docsFile .Close (); err != nil {
405- logger .Error ("can't close docs file" , zap .String ("frac" , f .BaseFileName ), zap .Error (err ))
406- }
407- if err := os .Remove (f .docsFile .Name ()); err != nil {
408- logger .Error ("can't delete docs file" , zap .String ("frac" , f .BaseFileName ), zap .Error (err ))
409- }
410- }
411-
412- func (f * Active ) removeMetaFile () {
413- if err := os .Remove (f .metaFile .Name ()); err != nil {
414- logger .Error ("can't delete metas file" , zap .String ("frac" , f .BaseFileName ), zap .Error (err ))
415- }
416- }
0 commit comments