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  }