Commit 62c85978 by lancet

fatal mistake in algo fix

parent 00036ba5
...@@ -8,6 +8,9 @@ import ( ...@@ -8,6 +8,9 @@ import (
// GetValue - получить значение ключа из хранилища // GetValue - получить значение ключа из хранилища
func (store *Store) GetValue(key string) (string, error) { func (store *Store) GetValue(key string) (string, error) {
if store.isInit == false {
store.init()
}
reply := make(chan Message) reply := make(chan Message)
msg := Message{Action: "GET", Reply: reply, Key: key} msg := Message{Action: "GET", Reply: reply, Key: key}
store.exchange <- msg store.exchange <- msg
...@@ -20,6 +23,9 @@ func (store *Store) GetValue(key string) (string, error) { ...@@ -20,6 +23,9 @@ func (store *Store) GetValue(key string) (string, error) {
// SetValue - установить/обновить значение ключа // SetValue - установить/обновить значение ключа
func (store *Store) SetValue(key, value string) error { func (store *Store) SetValue(key, value string) error {
if store.isInit == false {
store.init()
}
reply := make(chan Message) reply := make(chan Message)
msg := Message{Action: "SET", Reply: reply, Key: key, Value: value} msg := Message{Action: "SET", Reply: reply, Key: key, Value: value}
store.exchange <- msg store.exchange <- msg
...@@ -32,6 +38,9 @@ func (store *Store) SetValue(key, value string) error { ...@@ -32,6 +38,9 @@ func (store *Store) SetValue(key, value string) error {
// DelValue - удалить ключ из хранилища // DelValue - удалить ключ из хранилища
func (store *Store) DelValue(key string) error { func (store *Store) DelValue(key string) error {
if store.isInit == false {
store.init()
}
reply := make(chan Message) reply := make(chan Message)
msg := Message{Action: "DEL", Reply: reply, Key: key} msg := Message{Action: "DEL", Reply: reply, Key: key}
store.exchange <- msg store.exchange <- msg
......
...@@ -16,6 +16,7 @@ func (store *Store) init() { ...@@ -16,6 +16,7 @@ func (store *Store) init() {
store.ttl = store.TTL store.ttl = store.TTL
store.exchange = make(chan Message) store.exchange = make(chan Message)
store.flat = make(map[string]*node) store.flat = make(map[string]*node)
store.isInit = true
// Создаём достаточное количество узлов-филлеров, чтобы механизм // Создаём достаточное количество узлов-филлеров, чтобы механизм
// устаревания не начал уничтожать записи преждевременно. // устаревания не начал уничтожать записи преждевременно.
...@@ -25,14 +26,10 @@ func (store *Store) init() { ...@@ -25,14 +26,10 @@ func (store *Store) init() {
} }
go store.control() // запускаем управление хранилищем go store.control() // запускаем управление хранилищем
store.isInit = true
} }
// addNode - добавляем новый узел в хвост очереди. // addNode - добавляем новый узел в хвост очереди.
func (store *Store) addNode(key, value string, kind bool) error { func (store *Store) addNode(key, value string, kind bool) error {
if store.isInit == false {
store.init()
}
var prev *node var prev *node
if store.tail != nil { if store.tail != nil {
prev = store.tail prev = store.tail
...@@ -54,9 +51,6 @@ func (store *Store) addNode(key, value string, kind bool) error { ...@@ -54,9 +51,6 @@ func (store *Store) addNode(key, value string, kind bool) error {
// Если ключа ещё нет - просто добавляем в хвост. // Если ключа ещё нет - просто добавляем в хвост.
// Если ключ есть - переносим в хвост. // Если ключ есть - переносим в хвост.
func (store *Store) setNode(key, value string) error { func (store *Store) setNode(key, value string) error {
if store.isInit == false {
store.init()
}
if _, ok := store.flat[key]; ok == false { if _, ok := store.flat[key]; ok == false {
store.addNode(key, value, true) store.addNode(key, value, true)
return nil return nil
...@@ -70,9 +64,6 @@ func (store *Store) setNode(key, value string) error { ...@@ -70,9 +64,6 @@ func (store *Store) setNode(key, value string) error {
// Если Kind == 0 - то возвращаем ошибку. // Если Kind == 0 - то возвращаем ошибку.
// При ошибке устаревание приостанавливается на секунду. // При ошибке устаревание приостанавливается на секунду.
func (store *Store) popNode() error { func (store *Store) popNode() error {
if store.isInit == false {
store.init()
}
var err error var err error
if store.head == nil { if store.head == nil {
return errors.New("No nodes") return errors.New("No nodes")
...@@ -92,9 +83,6 @@ func (store *Store) popNode() error { ...@@ -92,9 +83,6 @@ func (store *Store) popNode() error {
// getNode - получить значение ключа, или ошибку, если такого нет. // getNode - получить значение ключа, или ошибку, если такого нет.
func (store *Store) getNode(key string) (string, error) { func (store *Store) getNode(key string) (string, error) {
if store.isInit == false {
store.init()
}
if v, ok := store.flat[key]; ok != false { if v, ok := store.flat[key]; ok != false {
return v.Value, nil return v.Value, nil
} }
...@@ -104,9 +92,6 @@ func (store *Store) getNode(key string) (string, error) { ...@@ -104,9 +92,6 @@ func (store *Store) getNode(key string) (string, error) {
// delNode - удалить узел с указанным ключом. // delNode - удалить узел с указанным ключом.
// Если такого ключа не было - вернуть ошибку. // Если такого ключа не было - вернуть ошибку.
func (store *Store) delNode(key string) error { func (store *Store) delNode(key string) error {
if store.isInit == false {
store.init()
}
if _, ok := store.flat[key]; ok == false { if _, ok := store.flat[key]; ok == false {
return errors.New("No such key") return errors.New("No such key")
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment