{"record":{"id":"d181cb7b34bb1d45","repo":"apache/iceberg","slug":"unknown-field-ordinal-d181cb","errorCode":null,"errorMessage":"Unknown field ordinal: ","messagePattern":"Unknown field ordinal: ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/apache/iceberg/V1Metadata.java","lineNumber":103,"sourceCode":"          return snapshotId();\n        case 4:\n          return addedFilesCount();\n        case 5:\n          return existingFilesCount();\n        case 6:\n          return deletedFilesCount();\n        case 7:\n          return partitions();\n        case 8:\n          return addedRowsCount();\n        case 9:\n          return existingRowsCount();\n        case 10:\n          return deletedRowsCount();\n        case 11:\n          return keyMetadata();\n        default:\n          throw new UnsupportedOperationException(\"Unknown field ordinal: \" + pos);\n      }\n    }\n\n    @Override\n    public String path() {\n      return wrapped.path();\n    }\n\n    @Override\n    public long length() {\n      return wrapped.length();\n    }\n\n    @Override\n    public int partitionSpecId() {\n      return wrapped.partitionSpecId();\n    }\n","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/core/src/main/java/org/apache/iceberg/V1Metadata.java#L85-L121","documentation":"ManifestFileWrapper.get(pos) maps fixed ordinals 0-11 to V1 manifest-list schema columns. An ordinal outside that range has no corresponding field, so the wrapper throws UnsupportedOperationException with the offending pos. This indicates the caller is using a struct position that does not exist in the V1 manifest list schema.","triggerScenarios":"Calling get(pos) with pos < 0 or pos > 11 on a V1Metadata.ManifestFileWrapper, typically from generic StructLike iteration code that assumes a different schema version or struct shape.","commonSituations":"Code written against the V2 manifest schema (extra columns like partitions/sequence numbers) applied to a V1 table's manifest wrappers; off-by-one loops over struct fields using a wrong size constant.","solutions":["Use pos values only within 0-11 for V1 manifest files; derive the bound from size() rather than hardcoding","Check you are not reading a V2-schema field from a V1 wrapper; use V2Metadata wrappers for V2 tables","Inspect the pos value in the message and map it against MANIFEST_LIST_SCHEMA.columns()"],"exampleFix":"// before\nObject v = wrapper.get(13); // V2-only ordinal\n// after\nObject v = wrapper.get(pos < wrapper.size() ? pos : -1); // guard by size()","handlingStrategy":"validation","validationCode":"if (pos < 0 || pos >= MANIFEST_LIST_SCHEMA.columns().size()) { throw new IllegalArgumentException(\"ordinal out of range for manifest list schema\"); }","typeGuard":"boolean validManifestPos(int pos) { return pos >= 0 && pos < MANIFEST_LIST_SCHEMA.columns().size(); }","tryCatchPattern":"try { return wrapper.get(pos); } catch (UnsupportedOperationException e) { LOG.warn(\"bad ordinal {} for V1 manifest wrapper\", pos); return null; }","preventionTips":["Derive field bounds from size(), never hardcode ordinals","Check table format version before reading version-specific fields","Map field names via Types.NestedField lookups instead of positions"],"tags":["java","schema","ordinal"],"backgroundTag":"index-out-of-range","analyzedSha":"86d9c8fc543e7c56c9f624eb725f76c9baff9570","analyzedAt":"2026-09-12T00:46:39.097Z","contentChangedAt":"2026-09-12T00:46:39.097Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}