We do lock the node metadata when propagationg, but the delete codepath does not seem to care and just deletes the node. This causes the SetMultiple() implementation to just recreate the file:
msgBytes, err = os.ReadFile(metaPath)
subspan.End()
attribs := map[string][]byte{}
switch {
case err != nil:
if !errors.Is(err, fs.ErrNotExist) {
return err
}
case len(msgBytes) == 0:
// ugh. an empty file? bail out
return errors.New("encountered empty metadata file")
default:
// only unmarshal if we read data
err = msgpack.Unmarshal(msgBytes, &attribs)
if err != nil {
return err
}
}
we need to find a way to either not delete the mpk file if it is locked, or detect that tha file was deleted in the propagation...
The filesystem metadata is not corrupt, but we leave unused data, that accumulates.
when the async propagation tries to propagate to a node that was deleted it might log sth like this:
It will also write an mpk file that only contains the tmtime:
We do lock the node metadata when propagationg, but the delete codepath does not seem to care and just deletes the node. This causes the SetMultiple() implementation to just recreate the file:
we need to find a way to either not delete the mpk file if it is locked, or detect that tha file was deleted in the propagation...
The filesystem metadata is not corrupt, but we leave unused data, that accumulates.
cc @aduffeck