{"record":{"id":"b97c564d440e8a03","repo":"thanos-io/thanos","slug":"read-parquet-metadata-file-v","errorCode":null,"errorMessage":"read parquet metadata file: %v","messagePattern":"read parquet metadata file: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/block/fetcher.go","lineNumber":1237,"sourceCode":"\t\t}\n\t\tif canDelete {\n\t\t\tresult[b.id] = struct{}{}\n\t\t}\n\t}\n\treturn result\n}\n\nfunc (f *IgnoreParquetConvertedBlocksFilter) readMigratedBlocksFromParquetMetadata(ctx context.Context, path string) (map[ulid.ULID]struct{}, error) {\n\tmigratedBlocks := make(map[ulid.ULID]struct{})\n\tr, err := f.bkt.Get(ctx, path)\n\tif err != nil {\n\t\treturn nil, errors.Wrapf(err, \"get parquet metadata file: %v\", path)\n\t}\n\tdefer runutil.CloseWithLogOnErr(f.logger, r, \"close bkt get\")\n\n\tcontent, err := io.ReadAll(r)\n\tif err != nil {\n\t\treturn nil, errors.Wrapf(err, \"read parquet metadata file: %v\", path)\n\t}\n\n\tvar fc easyproto.FieldContext\n\tfor len(content) > 0 {\n\t\tcontent, err = fc.NextField(content)\n\t\tif err != nil {\n\t\t\treturn nil, errors.Wrapf(err, \"read next field from parquet metadata file: %v\", path)\n\t\t}\n\t\tswitch fc.FieldNum {\n\t\tcase 6:\n\t\t\tu, ok := fc.String()\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.Wrapf(err, \"read convertedFromBLIDs field from parquet metadata file: %v\", path)\n\t\t\t}\n\t\t\tid, err := ulid.Parse(u)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Wrapf(err, \"parse block ID %q from parquet metadata file: %v\", u, path)\n\t\t\t}","sourceCodeStart":1219,"sourceCodeEnd":1255,"githubUrl":"https://github.com/thanos-io/thanos/blob/35b8b991177def87ed52dcf10f9b6d87f07282c8/pkg/block/fetcher.go#L1219-L1255","documentation":"Wraps io.ReadAll on the reader returned by bkt.Get for the parquet conversion metadata file: the object was opened but its contents could not be read to completion (connection reset, truncated object). The migrated-block list cannot be reconstructed.","triggerScenarios":"io.ReadAll(r) fails inside readMigratedBlocksFromParquetMetadata — usually network interruption, context cancellation/deadline during read, or a closed/broken object stream.","commonSituations":"Large metadata files on slow links hitting request deadlines; bucket connections dropped by proxies/load balancers; ctx canceled due to shutdown or timeout.","solutions":["Retry; the object may have been mid-upload","Check parquet bucket consistency","Inspect the object at the given path"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err := readAll(ctx, path); err != nil {\n    if errors.Is(err, context.DeadlineExceeded) { /* raise timeout and retry */ }\n    return retry.WithBackoff(ctx, readAll, 3)\n}","preventionTips":["Set generous deadlines for object reads","Avoid canceling parent contexts during scans","Check proxy/LB idle timeouts against large reads","Monitor object-store connection errors"],"tags":["object-storage","io","parquet"],"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"}