From 68bb1ee3201fedef2dc8d0d454003d5b7b047e7a Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Sat, 25 Jul 2015 22:18:16 +0200 Subject: [PATCH] Avoid redundant decoding when sendind coordinate to change tracker or coverage index. Don't try to store in coverage index if the key already exists. Handle more potential database errors. --- cmd/mtredisalize/changetracker.go | 8 +------- cmd/mtredisalize/leveldb.go | 19 ++++++++++++------- cmd/mtredisalize/sqlite.go | 18 ++++++++++++------ 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/cmd/mtredisalize/changetracker.go b/cmd/mtredisalize/changetracker.go index 78d7e68..1fc6c2a 100644 --- a/cmd/mtredisalize/changetracker.go +++ b/cmd/mtredisalize/changetracker.go @@ -27,13 +27,7 @@ func NewChangeTracker() *ChangeTracker { return &ChangeTracker{changes: make(map[quantizedXZ]bool)} } -func (ct *ChangeTracker) BlockChanged(key []byte) { - var err error - var coord common.Coord - if coord, err = common.DecodeStringBytesToCoord(key); err != nil { - log.Printf("decoding key failed: %s\n", err) - return - } +func (ct *ChangeTracker) BlockChanged(coord common.Coord) { ct.mutex.Lock() ct.changes[quantizedXZ{ X: coord.X / quantizationFactor, diff --git a/cmd/mtredisalize/leveldb.go b/cmd/mtredisalize/leveldb.go index a03c6a9..592fcbb 100644 --- a/cmd/mtredisalize/leveldb.go +++ b/cmd/mtredisalize/leveldb.go @@ -189,17 +189,22 @@ func (ldbs *LevelDBSession) Store(hash, key, value []byte) (exists bool, err err err = db.Put(wo, key, value) wo.Close() }) - // This technically too early because this done in transactions + if err != nil { + return + } + // This technically too early because this is done in a transactions // which are commited (and possible fail) later. - if ldbs.backend.coverage != nil { + if ldbs.backend.changeTracker != nil || ldbs.backend.coverage != nil { c, err := common.DecodeStringBytesToCoord(origKey) if err != nil { - return false, err + return exists, err + } + if ldbs.backend.coverage != nil && !exists { + ldbs.backend.coverage.Insert(c) + } + if ldbs.backend.changeTracker != nil { + ldbs.backend.changeTracker.BlockChanged(c) } - ldbs.backend.coverage.Insert(c) - } - if ldbs.backend.changeTracker != nil { - ldbs.backend.changeTracker.BlockChanged(origKey) } return } diff --git a/cmd/mtredisalize/sqlite.go b/cmd/mtredisalize/sqlite.go index bb24ef9..6931167 100644 --- a/cmd/mtredisalize/sqlite.go +++ b/cmd/mtredisalize/sqlite.go @@ -239,15 +239,21 @@ func (ss *SqliteSession) Store(hash, key, value []byte) (exists bool, err error) insertStmt := ss.txStmt(ss.backend.insertStmt) _, err = insertStmt.Exec(pos, value) } - // This technically too early because this done in transactions + if err != nil { + return + } + // This technically too early because this is done in a transactions // which are commited (and possible fail) later. - if ss.backend.coverage != nil { - ss.backend.coverage.Insert(common.PlainToCoord(pos)) + if ss.backend.changeTracker != nil || ss.backend.coverage != nil { + c := common.PlainToCoord(pos) + if ss.backend.coverage != nil && !exists { + ss.backend.coverage.Insert(c) + } + if ss.backend.changeTracker != nil { + ss.backend.changeTracker.BlockChanged(c) + } } - if ss.backend.changeTracker != nil { - ss.backend.changeTracker.BlockChanged(key) - } return }