mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 17:33:47 +00:00
swarm/storage: Create get/set for resource map rw
This commit is contained in:
parent
a88e093765
commit
54da86db9c
1 changed files with 21 additions and 13 deletions
|
|
@ -102,7 +102,7 @@ type ResourceHandler struct {
|
||||||
ethapi *rpc.Client
|
ethapi *rpc.Client
|
||||||
resources map[string]*resource
|
resources map[string]*resource
|
||||||
hashLock sync.Mutex
|
hashLock sync.Mutex
|
||||||
resourceLock sync.Mutex
|
resourceLock sync.RWMutex
|
||||||
hasher SwarmHash
|
hasher SwarmHash
|
||||||
privKey *ecdsa.PrivateKey
|
privKey *ecdsa.PrivateKey
|
||||||
maxChunkData int64
|
maxChunkData int64
|
||||||
|
|
@ -202,15 +202,15 @@ func (self *ResourceHandler) NewResource(name string, frequency uint64) (*resour
|
||||||
self.Put(chunk)
|
self.Put(chunk)
|
||||||
log.Debug("new resource", "name", validname, "key", ensName, "startBlock", currentblock, "frequency", frequency)
|
log.Debug("new resource", "name", validname, "key", ensName, "startBlock", currentblock, "frequency", frequency)
|
||||||
|
|
||||||
self.resourceLock.Lock()
|
rsrc := &resource{
|
||||||
defer self.resourceLock.Unlock()
|
|
||||||
self.resources[name] = &resource{
|
|
||||||
name: validname,
|
name: validname,
|
||||||
ensName: ensName,
|
ensName: ensName,
|
||||||
startBlock: currentblock,
|
startBlock: currentblock,
|
||||||
frequency: frequency,
|
frequency: frequency,
|
||||||
updated: time.Now(),
|
updated: time.Now(),
|
||||||
}
|
}
|
||||||
|
self.setResource(name, rsrc)
|
||||||
|
|
||||||
return self.resources[name], nil
|
return self.resources[name], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -355,12 +355,9 @@ func (self *ResourceHandler) loadResource(name string, refresh bool) (*resource,
|
||||||
// if the resource is not known to this session we must load it
|
// if the resource is not known to this session we must load it
|
||||||
// if refresh is set, we force load
|
// if refresh is set, we force load
|
||||||
|
|
||||||
rsrc := &resource{}
|
rsrc := self.getResource(name)
|
||||||
|
if rsrc == nil || refresh {
|
||||||
self.resourceLock.Lock()
|
rsrc = &resource{}
|
||||||
_, ok := self.resources[name]
|
|
||||||
self.resourceLock.Unlock()
|
|
||||||
if !ok || refresh {
|
|
||||||
// make sure our ens identifier is idna safe
|
// make sure our ens identifier is idna safe
|
||||||
validname, err := idna.ToASCII(name)
|
validname, err := idna.ToASCII(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -414,9 +411,7 @@ func (self *ResourceHandler) updateResourceIndex(rsrc *resource, chunk *Chunk, i
|
||||||
rsrc.data = make([]byte, len(data))
|
rsrc.data = make([]byte, len(data))
|
||||||
copy(rsrc.data, data)
|
copy(rsrc.data, data)
|
||||||
log.Debug("Resource synced", "name", rsrc.name, "key", chunk.Key, "period", rsrc.lastPeriod, "version", rsrc.version)
|
log.Debug("Resource synced", "name", rsrc.name, "key", chunk.Key, "period", rsrc.lastPeriod, "version", rsrc.version)
|
||||||
self.resourceLock.Lock()
|
self.setResource(*indexname, rsrc)
|
||||||
self.resources[*indexname] = rsrc
|
|
||||||
self.resourceLock.Unlock()
|
|
||||||
return rsrc, nil
|
return rsrc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -542,6 +537,19 @@ func (self *ResourceHandler) PeriodToBlock(name string, period uint32) uint64 {
|
||||||
return self.resources[name].startBlock + (uint64(period) * self.resources[name].frequency)
|
return self.resources[name].startBlock + (uint64(period) * self.resources[name].frequency)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (self *ResourceHandler) getResource(name string) *resource {
|
||||||
|
self.resourceLock.RLock()
|
||||||
|
defer self.resourceLock.RUnlock()
|
||||||
|
rsrc := self.resources[name]
|
||||||
|
return rsrc
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ResourceHandler) setResource(name string, rsrc *resource) {
|
||||||
|
self.resourceLock.Lock()
|
||||||
|
defer self.resourceLock.Unlock()
|
||||||
|
self.resources[name] = rsrc
|
||||||
|
}
|
||||||
|
|
||||||
func (self *ResourceHandler) resourceHash(namehash common.Hash, period uint32, version uint32) Key {
|
func (self *ResourceHandler) resourceHash(namehash common.Hash, period uint32, version uint32) Key {
|
||||||
// format is: hash(namehash|period|version)
|
// format is: hash(namehash|period|version)
|
||||||
self.hashLock.Lock()
|
self.hashLock.Lock()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue