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
}