mirror of
https://bitbucket.org/s_l_teichmann/mtsatellite
synced 2025-02-02 11:10:20 +01:00
Experimental increased priorities for typical mt-server ops.
This commit is contained in:
parent
6a1356f0eb
commit
aad612d097
@ -23,6 +23,9 @@ type LevelDBBackend struct {
|
|||||||
|
|
||||||
changeTracker *changeTracker
|
changeTracker *changeTracker
|
||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
|
|
||||||
|
priority *sync.Cond
|
||||||
|
priorityCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
type LevelDBSession struct {
|
type LevelDBSession struct {
|
||||||
@ -72,7 +75,8 @@ func NewLeveDBBackend(
|
|||||||
interleaved: interleaved,
|
interleaved: interleaved,
|
||||||
encoder: encoder,
|
encoder: encoder,
|
||||||
decoder: decoder,
|
decoder: decoder,
|
||||||
changeTracker: changeTracker}
|
changeTracker: changeTracker,
|
||||||
|
priority: sync.NewCond(new(sync.Mutex))}
|
||||||
|
|
||||||
if !interleaved {
|
if !interleaved {
|
||||||
if err = ldb.buildCoverage(); err != nil {
|
if err = ldb.buildCoverage(); err != nil {
|
||||||
@ -84,6 +88,28 @@ func NewLeveDBBackend(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ldb *LevelDBBackend) suspend() {
|
||||||
|
ldb.priority.L.Lock()
|
||||||
|
for ldb.priorityCount > 0 {
|
||||||
|
ldb.priority.Wait()
|
||||||
|
}
|
||||||
|
ldb.priority.L.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ldb *LevelDBBackend) grab() {
|
||||||
|
ldb.priority.L.Lock()
|
||||||
|
ldb.priorityCount++
|
||||||
|
ldb.priority.L.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ldb *LevelDBBackend) ungrab() {
|
||||||
|
ldb.priority.L.Lock()
|
||||||
|
if ldb.priorityCount--; ldb.priorityCount <= 0 {
|
||||||
|
ldb.priority.Broadcast()
|
||||||
|
}
|
||||||
|
ldb.priority.L.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
func (ldb *LevelDBBackend) buildCoverage() error {
|
func (ldb *LevelDBBackend) buildCoverage() error {
|
||||||
log.Println("INFO: Start building coverage index (this may take some time)...")
|
log.Println("INFO: Start building coverage index (this may take some time)...")
|
||||||
|
|
||||||
@ -169,6 +195,9 @@ func (ldbs *LevelDBSession) Fetch(hash, key []byte) (value []byte, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
ldbs.backend.doRead(func(db *leveldb.DB) {
|
ldbs.backend.doRead(func(db *leveldb.DB) {
|
||||||
|
ldbs.backend.grab()
|
||||||
|
defer ldbs.backend.ungrab()
|
||||||
|
|
||||||
ro := leveldb.NewReadOptions()
|
ro := leveldb.NewReadOptions()
|
||||||
value, err = ldbs.backend.db.Get(ro, key)
|
value, err = ldbs.backend.db.Get(ro, key)
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
@ -202,6 +231,8 @@ func (ldbs *LevelDBSession) Store(hash, key, value []byte) (exists bool, err err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
ldbs.backend.doWrite(func(db *leveldb.DB) {
|
ldbs.backend.doWrite(func(db *leveldb.DB) {
|
||||||
|
ldbs.backend.grab()
|
||||||
|
defer ldbs.backend.ungrab()
|
||||||
if exists, err = keyExists(db, key); err != nil {
|
if exists, err = keyExists(db, key); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -424,6 +455,7 @@ func (ldbs *LevelDBSession) interleavedSpatialQuery(
|
|||||||
//log.Printf("seeking to: %d\n", zmin)
|
//log.Printf("seeking to: %d\n", zmin)
|
||||||
it.Seek(common.ToBigEndian(zmin))
|
it.Seek(common.ToBigEndian(zmin))
|
||||||
for it.Valid() {
|
for it.Valid() {
|
||||||
|
ldbs.backend.suspend()
|
||||||
zcode := common.FromBigEndian(it.Key())
|
zcode := common.FromBigEndian(it.Key())
|
||||||
|
|
||||||
if zcode > zmax {
|
if zcode > zmax {
|
||||||
|
Loading…
Reference in New Issue
Block a user