github.com/0chain/gosdk@v1.17.11/zboxcore/sdk/read_counter_ctr.go (about) 1 package sdk 2 3 import ( 4 "sync" 5 ) 6 7 type blobberReadCounter struct { 8 m map[string]int64 9 mu *sync.RWMutex 10 blobberLockMap map[string]*sync.Mutex 11 muBlobberLock *sync.Mutex 12 } 13 14 var brc = &blobberReadCounter{ 15 m: make(map[string]int64), 16 mu: &sync.RWMutex{}, 17 blobberLockMap: make(map[string]*sync.Mutex), 18 muBlobberLock: &sync.Mutex{}, 19 } 20 21 func lockBlobberReadCtr(allocID, blobberID string) { 22 brc.muBlobberLock.Lock() 23 key := allocID + blobberID 24 if _, ok := brc.blobberLockMap[key]; !ok { 25 brc.blobberLockMap[key] = &sync.Mutex{} 26 } 27 mut := brc.blobberLockMap[key] 28 brc.muBlobberLock.Unlock() 29 mut.Lock() 30 } 31 32 func unlockBlobberReadCtr(allocID, blobberID string) { 33 brc.muBlobberLock.Lock() 34 key := allocID + blobberID 35 mut := brc.blobberLockMap[key] 36 brc.muBlobberLock.Unlock() 37 if mut != nil { 38 mut.Unlock() 39 } 40 } 41 42 func setBlobberReadCtr(allocID, blobberID string, ctr int64) { 43 key := allocID + blobberID 44 brc.mu.Lock() 45 brc.m[key] = ctr 46 brc.mu.Unlock() 47 } 48 49 func getBlobberReadCtr(allocID, blobberID string) int64 { 50 key := allocID + blobberID 51 brc.mu.RLock() 52 c := brc.m[key] 53 brc.mu.RUnlock() 54 return c 55 } 56 57 func incBlobberReadCtr(allocID, blobberID string, numBlocks int64) { 58 key := allocID + blobberID 59 brc.mu.Lock() 60 brc.m[key] += numBlocks 61 brc.mu.Unlock() 62 }