github.com/altipla-consulting/ravendb-go-client@v0.1.3/evict_items_from_cache_based_on_changes.go (about)

     1  package ravendb
     2  
     3  // evictItemsFromCacheBasedOnChanges is for evicting cache items
     4  // based on database changes
     5  type evictItemsFromCacheBasedOnChanges struct {
     6  	databaseName                string
     7  	changes                     *DatabaseChanges
     8  	documentsSubscriptionCloser CancelFunc
     9  	indexesSubscriptionCloser   CancelFunc
    10  	requestExecutor             *RequestExecutor
    11  }
    12  
    13  // newEvictItemsFromCacheBasedOnChanges returns EvictItemsFromCacheBasedOnChanges
    14  func newEvictItemsFromCacheBasedOnChanges(store *DocumentStore, databaseName string) (*evictItemsFromCacheBasedOnChanges, error) {
    15  	res := &evictItemsFromCacheBasedOnChanges{
    16  		databaseName:    databaseName,
    17  		changes:         store.Changes(databaseName),
    18  		requestExecutor: store.GetRequestExecutor(databaseName),
    19  	}
    20  
    21  	cbDocChange := func(documentChange *DocumentChange) {
    22  		tp := documentChange.Type
    23  		if tp == DocumentChangePut || tp == DocumentChangeDelete {
    24  			cache := res.requestExecutor.Cache
    25  			cache.incGeneration()
    26  		}
    27  	}
    28  
    29  	var err error
    30  	res.documentsSubscriptionCloser, err = res.changes.ForAllDocuments(cbDocChange)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	cbIndexChange := func(indexChange *IndexChange) {
    36  		tp := indexChange.Type
    37  		if tp == IndexChangeBatchCompleted || tp == IndexChangeIndexRemoved {
    38  			cache := res.requestExecutor.Cache
    39  			cache.incGeneration()
    40  		}
    41  	}
    42  
    43  	res.indexesSubscriptionCloser, err = res.changes.ForAllIndexes(cbIndexChange)
    44  	if err != nil {
    45  		res.Close()
    46  		return nil, err
    47  	}
    48  
    49  	return res, nil
    50  }
    51  
    52  // Close closes EvictItemsFromCacheBasedOnChanges
    53  func (e *evictItemsFromCacheBasedOnChanges) Close() {
    54  	if e.documentsSubscriptionCloser != nil {
    55  		e.documentsSubscriptionCloser()
    56  	}
    57  	if e.indexesSubscriptionCloser != nil {
    58  		e.indexesSubscriptionCloser()
    59  	}
    60  	e.changes.Close()
    61  }