func()

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
}