{"record":{"id":"0359bd28195e7bf3","repo":"thanos-io/thanos","slug":"failed-to-read-parquet-metadata-from-s-w","errorCode":null,"errorMessage":"failed to read parquet metadata from %s: %w","messagePattern":"failed to read parquet metadata from (.+?): %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/block/fetcher.go","lineNumber":1106,"sourceCode":"\tif f.bkt == nil {\n\t\treturn nil\n\t}\n\n\tvar (\n\t\teg                errgroup.Group\n\t\tch                = make(chan string, f.concurrency)\n\t\tmtx               sync.Mutex\n\t\tallMigratedBlocks = make(map[ulid.ULID]struct{})\n\t\tmerrs             errutil.MultiError\n\t)\n\n\tfor range f.concurrency {\n\t\teg.Go(func() error {\n\t\t\tfor path := range ch {\n\t\t\t\tmigratedBlocks, err := f.readMigratedBlocksFromParquetMetadata(ctx, path)\n\t\t\t\tif err != nil {\n\t\t\t\t\tmtx.Lock()\n\t\t\t\t\tmerrs.Add(fmt.Errorf(\"failed to read parquet metadata from %s: %w\", path, err))\n\t\t\t\t\tmtx.Unlock()\n\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tmtx.Lock()\n\t\t\t\tfor id := range migratedBlocks {\n\t\t\t\t\tallMigratedBlocks[id] = struct{}{}\n\t\t\t\t}\n\t\t\t\tmtx.Unlock()\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t}\n\n\teg.Go(func() error {\n\t\tdefer close(ch)\n","sourceCodeStart":1088,"sourceCodeEnd":1124,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/block/fetcher.go#L1088-L1124","documentation":"While scanning parquet bucket metadata paths concurrently, reading one metadata object failed; the error is accumulated into a MultiError (reading continues for other paths). Indicates object store read failure or corrupt parquet metadata.","triggerScenarios":"Calling the method that lists parquet-converted block metadata (parquet metadata objects under the bucket) when reading one of those objects fails: objstore Get error, io.ReadAll error, or proto field parse error inside readMigratedBlocksFromParquetMetadata.","commonSituations":"Missing permissions on the parquet metadata prefix; object deleted between listing and Get; truncated/corrupt parquet metadata files written by a crashed converter; bucket throttling under concurrency.","solutions":["Check object store connectivity for the parquet bucket","Inspect the failed path in the error","Retry the operation"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := ensureParquetMetadataScanned(ctx); err != nil {\n    var errs []error\n    if errors.As(err, &errs) {\n        for _, e := range errs { log.Printf(\"parquet meta: %v\", e) }\n    }\n    // fall back to treating no blocks as migrated\n}","preventionTips":["Pre-grant read permissions on the parquet metadata prefix","Avoid deleting parquet metadata files during a scan","Throttle concurrency to bucket limits","Re-run the parquet converter to completion before scans"],"tags":["object-storage","parquet","aggregated-errors"],"backgroundTag":"file-read-failed","analyzedSha":"35b8b991177def87ed52dcf10f9b6d87f07282c8","analyzedAt":"2026-09-07T01:49:59.689Z","contentChangedAt":"2026-09-07T01:49:59.689Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}