func (m *JSONDir) Save(id bakapy.TaskId, metadata *bakapy.Metadata) error { defer m.unLockId(id) saveTo := ospath.Join(m.RootDir, id.String()) saveToTmp := saveTo + ".inpr" m.logger.Debug("saving metadata for task id %s to %s", id, saveTo) m.logger.Debug("%s", metadata) err := os.MkdirAll(ospath.Dir(saveTo), 0750) if err != nil { return err } file, err := os.Create(saveToTmp) if err != nil { return err } jsonData, err := json.Marshal(metadata) if err != nil { file.Close() return err } _, err = io.Copy(file, bytes.NewReader(jsonData)) if err != nil { file.Close() return err } file.Close() err = os.Rename(saveToTmp, saveTo) if err != nil { return err } return nil }
func (m *JSONDir) get(id bakapy.TaskId) (*bakapy.Metadata, error) { filePath := ospath.Join(m.RootDir, id.String()) file, err := os.Open(filePath) if err != nil { return nil, err } defer file.Close() data, err := ioutil.ReadAll(file) if err != nil { return nil, err } metadata := &bakapy.Metadata{} err = json.Unmarshal(data, metadata) if err != nil { return nil, err } return metadata, nil }
func (m *JSONDir) Remove(id bakapy.TaskId) error { m.logger.Debug("removing metadata for task id %s", id) m.lockId(id) defer m.unLockId(id) return os.Remove(ospath.Join(m.RootDir, id.String())) }