func()

in series_migrator.go [267:318]


func (m *storageMigrator) initTrackers(ctx context.Context) error {
	archivedFingerprintToMetrics, err := index.NewFingerprintMetricIndex(m.v1Path)
	if err != nil {
		return fmt.Errorf("error opening fingerprint-metric index: %s", err)
	}

	for i := 0; i < 1<<(seriesDirNameLen*4); i++ {
		select {
		case <-ctx.Done():
			return ctx.Err()
		default:
		}
		dirname := filepath.Join(m.v1Path, fmt.Sprintf(seriesDirNameFmt, i))
		dir, err := os.Open(dirname)
		if os.IsNotExist(err) {
			continue
		}
		if err != nil {
			return err
		}
		for fis := []os.FileInfo{}; err != io.EOF; fis, err = dir.Readdir(1024) {
			if err != nil {
				dir.Close()
				return err
			}
			for _, fi := range fis {
				fp, err := model.FingerprintFromString(filepath.Base(dirname) + fi.Name()[:fpLen-seriesDirNameLen])
				if err != nil {
					return fmt.Errorf("error parsing file name %s: %s", filepath.Join(dirname, fi.Name()), err)
				}
				metric, ok, err := archivedFingerprintToMetrics.Lookup(fp)
				if err != nil {
					return fmt.Errorf("error looking up metric for fingerprint %v: %s", fp, err)
				}
				if !ok {
					return fmt.Errorf("unable to find metric for fingerprint %v", fp)
				}
				ls := make(labels.Labels, 0, len(metric))
				for k, v := range metric {
					ls = append(ls, labels.Label{Name: string(k), Value: string(v)})
				}
				m.trackers = append(m.trackers, &seriesFileTracker{
					fp:       fp,
					curChunk: 0,
					labels:   labels.New(ls...),
					skipUnknownLabels: m.skipUnknownLabels,
				})
			}
		}
	}
	return nil
}