Fix caching of stateful tokens after an addition.
This commit is contained in:
+20
-19
@@ -134,20 +134,24 @@ func member(v string, l []string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// called locked
|
||||||
|
func (state *state) reset() {
|
||||||
|
state.modTime = time.Time{}
|
||||||
|
state.fileSize = 0
|
||||||
|
state.tokens = nil
|
||||||
|
}
|
||||||
|
|
||||||
// load updates the state from the corresponding file.
|
// load updates the state from the corresponding file.
|
||||||
// called locked
|
// called locked
|
||||||
func (state *state) load() (string, error) {
|
func (state *state) load() (string, error) {
|
||||||
if state.filename == "" {
|
if state.filename == "" {
|
||||||
state.modTime = time.Time{}
|
state.reset()
|
||||||
state.tokens = nil
|
return "", nil
|
||||||
return state.etag(), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fi, err := os.Stat(state.filename)
|
fi, err := os.Stat(state.filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.modTime = time.Time{}
|
state.reset()
|
||||||
state.fileSize = 0
|
|
||||||
state.tokens = nil
|
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
@@ -160,9 +164,7 @@ func (state *state) load() (string, error) {
|
|||||||
|
|
||||||
f, err := os.Open(state.filename)
|
f, err := os.Open(state.filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.modTime = time.Time{}
|
state.reset()
|
||||||
state.fileSize = 0
|
|
||||||
state.tokens = nil
|
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
return state.etag(), nil
|
return state.etag(), nil
|
||||||
}
|
}
|
||||||
@@ -179,8 +181,7 @@ func (state *state) load() (string, error) {
|
|||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
break
|
break
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
state.modTime = time.Time{}
|
state.reset()
|
||||||
state.fileSize = 0
|
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
// the "message" permission was introduced in Galene 0.9,
|
// the "message" permission was introduced in Galene 0.9,
|
||||||
@@ -194,11 +195,9 @@ func (state *state) load() (string, error) {
|
|||||||
state.tokens = ts
|
state.tokens = ts
|
||||||
fi, err = f.Stat()
|
fi, err = f.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.modTime = time.Time{}
|
state.reset()
|
||||||
state.fileSize = 0
|
|
||||||
state.tokens = nil
|
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
return state.etag(), nil
|
return "", nil
|
||||||
}
|
}
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -323,9 +322,12 @@ func (state *state) add(token *Stateful) (*Stateful, error) {
|
|||||||
state.tokens[token.Token] = token.Clone()
|
state.tokens[token.Token] = token.Clone()
|
||||||
|
|
||||||
fi, err := f.Stat()
|
fi, err := f.Stat()
|
||||||
if err != nil {
|
if err == nil {
|
||||||
state.modTime = fi.ModTime()
|
state.modTime = fi.ModTime()
|
||||||
state.fileSize = fi.Size()
|
state.fileSize = fi.Size()
|
||||||
|
} else {
|
||||||
|
// This shouldn't happen. Force full read next time.
|
||||||
|
state.reset()
|
||||||
}
|
}
|
||||||
return token, nil
|
return token, nil
|
||||||
}
|
}
|
||||||
@@ -381,9 +383,8 @@ func (state *state) rewrite() error {
|
|||||||
state.modTime = fi.ModTime()
|
state.modTime = fi.ModTime()
|
||||||
state.fileSize = fi.Size()
|
state.fileSize = fi.Size()
|
||||||
} else {
|
} else {
|
||||||
// force rereading next time
|
// This shouldn't happen, force rereading next time
|
||||||
state.modTime = time.Time{}
|
state.reset()
|
||||||
state.fileSize = 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user