burlesque/storage.go

50 lines
780 B
Go
Raw Normal View History

2014-07-10 19:19:39 +07:00
package main
import (
2014-07-12 17:42:26 +07:00
"strconv"
"strings"
2014-07-31 15:23:41 +07:00
"bitbucket.org/ww/cabinet"
2014-07-10 19:19:39 +07:00
)
type (
2014-09-09 12:20:40 +04:00
message []byte
key []byte
2014-07-10 19:19:39 +07:00
)
var (
2014-07-17 00:50:21 +07:00
storage = cabinet.New()
2014-07-10 19:19:39 +07:00
)
2014-09-09 12:20:40 +04:00
func newKey(queue string, index uint) key {
2014-07-12 17:42:26 +07:00
istr := strconv.FormatUint(uint64(index), 10)
2014-09-09 12:20:40 +04:00
k := strings.Join([]string{queue, istr}, "_")
return key(k)
2014-07-12 17:42:26 +07:00
}
2014-09-09 12:20:40 +04:00
func setupStorage() {
err := storage.Open(config.storage, cabinet.KCOWRITER|cabinet.KCOCREATE)
2014-07-10 19:19:39 +07:00
if err != nil {
2014-09-09 12:20:40 +04:00
alert(err, "Failed to open database '%s'", config.storage)
2014-07-10 19:19:39 +07:00
}
}
2014-09-09 12:20:40 +04:00
func closeStorage() {
2014-07-17 00:50:21 +07:00
var err error
2014-07-10 19:19:39 +07:00
2014-07-17 00:50:21 +07:00
err = storage.Sync(true)
if err != nil {
2014-09-09 12:20:40 +04:00
alert(err, "Failed to sync storage (hard)")
2014-07-17 00:50:21 +07:00
} else {
2014-09-09 12:20:40 +04:00
log("Storage synchronized")
2014-07-17 00:50:21 +07:00
}
2014-07-12 17:42:04 +07:00
2014-07-17 00:50:21 +07:00
err = storage.Close()
if err != nil {
2014-09-09 12:20:40 +04:00
alert(err, "Failed to close storage")
2014-07-17 00:50:21 +07:00
} else {
2014-09-09 12:20:40 +04:00
log("Storage closed")
2014-07-10 19:19:39 +07:00
}
}