{"record":{"id":"5aaf43c17c68fddb","repo":"apache/druid","slug":"metric-s-loaded-up-metric-s-from-disk-file-n","errorCode":null,"errorMessage":"Metric[%s] loaded up metric[%s] from disk.  File names do matter.","messagePattern":"Metric\\[(.+?)\\] loaded up metric\\[(.+?)\\] from disk\\.  File names do matter\\.","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/segment/IndexIO.java","lineNumber":385,"sourceCode":"          GenericIndexed.STRING_STRATEGY,\n          smooshedFiles\n      );\n      final Interval dataInterval = Intervals.of(SERIALIZER_UTILS.readString(indexBuffer));\n      final BitmapSerdeFactory bitmapSerdeFactory = new BitmapSerde.LegacyBitmapSerdeFactory();\n\n      CompressedColumnarLongsSupplier timestamps = CompressedColumnarLongsSupplier.fromByteBuffer(\n          smooshedFiles.mapFile(makeTimeFile(inDir, BYTE_ORDER).getName()),\n          BYTE_ORDER,\n          smooshedFiles\n      );\n\n      Map<String, MetricHolder> metrics = Maps.newLinkedHashMap();\n      for (String metric : availableMetrics) {\n        final String metricFilename = makeMetricFile(inDir, metric, BYTE_ORDER).getName();\n        final MetricHolder holder = MetricHolder.fromByteBuffer(smooshedFiles.mapFile(metricFilename));\n\n        if (!metric.equals(holder.getName())) {\n          throw new ISE(\"Metric[%s] loaded up metric[%s] from disk.  File names do matter.\", metric, holder.getName());\n        }\n        metrics.put(metric, holder);\n      }\n\n      Map<String, GenericIndexed<ByteBuffer>> dimValueUtf8Lookups = new HashMap<>();\n      Map<String, VSizeColumnarMultiInts> dimColumns = new HashMap<>();\n      Map<String, GenericIndexed<ImmutableBitmap>> bitmaps = new HashMap<>();\n\n      for (String dimension : IndexedIterable.create(availableDimensions)) {\n        ByteBuffer dimBuffer = smooshedFiles.mapFile(makeDimFile(inDir, dimension).getName());\n        String fileDimensionName = SERIALIZER_UTILS.readString(dimBuffer);\n        Preconditions.checkState(\n            dimension.equals(fileDimensionName),\n            \"Dimension file[%s] has dimension[%s] in it!?\",\n            makeDimFile(inDir, dimension),\n            fileDimensionName\n        );\n","sourceCodeStart":367,"sourceCodeEnd":403,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/segment/IndexIO.java#L367-L403","documentation":"When mapping a v8 segment, IndexIO.mapDir loads each metric file and MetricHolder carries the metric name recorded inside the binary. If the internal name does not equal the metric filename, the index is inconsistent and Druid throws ISE, since lookups are by filename and would silently attach data to the wrong metric.","triggerScenarios":"Loading a v8 segment directory where a metric file (e.g. index_0.smoosh entry) was renamed, or the segment was written with mismatched metric order/names in index.drd vs the metric holder data.","commonSituations":"Hand-edited or partially-copied segment directories; files renamed during custom archival scripts; corrupted/mixed segments after failed manual merge attempts.","solutions":["Restore the original metric filenames from a clean copy of the segment in deep storage","Re-persist the segment from raw data (or re-run the merge) to regenerate consistent metric files","Do not rename metric files inside segment directories; archive/restore directories atomically"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  MMappedIndex idx = indexIO.mapDir(inDir);\n} catch (ISE e) {\n  if (e.getMessage().contains(\"File names do matter\")) {\n    log.error(\"Corrupt/renamed v8 segment %s: re-fetch from deep storage\", inDir);\n  }\n}","preventionTips":["Never rename files inside segment directories","Copy/restore segment directories atomically (whole-directory moves)","Verify segment integrity (checksums) after manual archival tooling"],"tags":["druid","segment","v8","naming","corruption"],"backgroundTag":"internal-invariant-violation","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}