github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/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 }