in series_migrator.go [222:247]
func (m *storageMigrator) lockV1Storage() error {
dirtyPath := filepath.Join(m.v1Path, dirtyFileName)
versionPath := filepath.Join(m.v1Path, versionFileName)
if versionData, err := ioutil.ReadFile(versionPath); err == nil {
if persistedVersion, err := strconv.Atoi(strings.TrimSpace(string(versionData))); err != nil {
return fmt.Errorf("cannot parse content of %q: %s", versionPath, versionData)
} else if persistedVersion != storageVersion {
return fmt.Errorf("found v1 storage storage version %d on disk, need version %d", persistedVersion, storageVersion)
}
} else if os.IsNotExist(err) {
return fmt.Errorf("no version file found in v1 storage directory, cannot migrate storage with unknown version")
}
fLock, dirtyfileExisted, err := flock.New(dirtyPath)
if err != nil {
return fmt.Errorf("unable to lock %q: %s", dirtyPath, err)
}
if dirtyfileExisted {
// This can only happen if the v1 directory becomes dirty for some reason
// between draining the heads file and locking the directory manually here.
return fmt.Errorf("v1 storage dir is dirty, please perform a crash recovery before retrying the migration")
}
m.fLock = fLock
return nil
}