淇敼锛?. 鏂板浜嗛攣鏈哄埗浠ラ槻姝㈠苟鍙戣闂啿绐侊紱2. 淇敼浜嗕竴浜涘彉閲忓悕浠ユ彁楂樹唬鐮佸彲璇绘€э紱 3. 淇浜嗕竴涓彲鑳藉鑷寸紦鍐插尯婧㈠嚭鐨?bug锛屽皢缂撳啿鍖哄ぇ灏忚缃负 4096锛?. 瀵逛唬鐮佽繘琛屼簡涓€浜涘叾浠栫殑灏忔敼杩涘拰浼樺寲銆?
git-svn-id: svn://47.119.165.148/zhub@121 e63fbceb-bcc3-4977-ac22-735b83d8d0f4
This commit is contained in:
59
zsub/zdb.go
59
zsub/zdb.go
@@ -36,9 +36,10 @@ func Append(str string, fileName string) {
|
||||
}
|
||||
|
||||
// 数据持久化
|
||||
func (s *ZSub) saveDelay() {
|
||||
func (s *ZSub) dataStorage() {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
// delay save
|
||||
err := os.Remove(conf.DataDir + "/delay.z")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
@@ -49,9 +50,23 @@ func (s *ZSub) saveDelay() {
|
||||
str += fmt.Sprintf("%s %s %s\n", delay.topic, delay.value, strconv.FormatInt(delay.exectime.Unix(), 10))
|
||||
}
|
||||
Append(str, conf.DataDir+"/delay.z")
|
||||
|
||||
// lock save
|
||||
err = os.Remove(conf.DataDir + "/lock.z")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
str = ""
|
||||
for _, locks := range s.locks {
|
||||
for _, lock := range locks {
|
||||
str += fmt.Sprintf("%s %s %d %d\n", lock.key, lock.uuid, lock.duration, lock.start)
|
||||
break // 只记录获得锁的记录
|
||||
}
|
||||
}
|
||||
Append(str, conf.DataDir+"/lock.z")
|
||||
}
|
||||
|
||||
func (s *ZSub) reloadDelay() {
|
||||
func (s *ZSub) loadDelay() {
|
||||
f, err := os.Open(conf.DataDir + "/delay.z")
|
||||
if err != nil {
|
||||
return
|
||||
@@ -85,3 +100,43 @@ func (s *ZSub) reloadDelay() {
|
||||
s.delay([]string{"delay", split[0], split[1], strconv.FormatInt((exectime-time.Now().Unix())*1000, 10)}, nil)
|
||||
}
|
||||
}
|
||||
|
||||
func (s *ZSub) loadLock() {
|
||||
f, err := os.Open(conf.DataDir + "/lock.z")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
r := bufio.NewReader(f)
|
||||
for {
|
||||
bytes, err := r.ReadBytes('\n')
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
line := string(bytes)
|
||||
if len(line) == 0 {
|
||||
continue
|
||||
}
|
||||
line = strings.Trim(line, " \r\n")
|
||||
split := strings.Split(line, " ")
|
||||
if len(split) != 4 {
|
||||
continue
|
||||
}
|
||||
duration, err := strconv.Atoi(split[2])
|
||||
start, err := strconv.ParseInt(split[3], 10, 64)
|
||||
|
||||
if start > 0 && time.Now().Unix()-start > 1 {
|
||||
duration = int(time.Now().Unix() - start)
|
||||
} else {
|
||||
duration = 1
|
||||
}
|
||||
|
||||
s._lock(&Lock{
|
||||
key: split[0],
|
||||
uuid: split[1],
|
||||
duration: duration,
|
||||
// start: start,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user