{"record":{"id":"976f39ddadc3ef3d","repo":"apache/iceberg","slug":"failed-to-encode-partition-976f39","errorCode":null,"errorMessage":"Failed to encode partition","messagePattern":"Failed to encode partition","errorType":"exception","errorClass":"UncheckedIOException","httpStatus":null,"severity":"error","filePath":"flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/maintenance/operator/StructLikeSerializer.java","lineNumber":88,"sourceCode":"\n    return new SerializedEqualityValues(baos.toByteArray());\n  }\n\n  public byte[] encodePartition(StructLike partition, Types.StructType partitionType) {\n    List<Types.NestedField> fields = partitionType.fields();\n    if (fields.isEmpty()) {\n      return EMPTY_PARTITION;\n    }\n\n    baos.reset();\n    try {\n      for (int i = 0; i < fields.size(); i++) {\n        writeField(partition, i, fields.get(i).type());\n      }\n\n      dos.flush();\n    } catch (IOException e) {\n      throw new UncheckedIOException(\"Failed to encode partition\", e);\n    }\n\n    return baos.toByteArray();\n  }\n\n  public static StructLike decodePartition(byte[] encoded, Types.StructType partitionType) {\n    PartitionData partition = new PartitionData(partitionType);\n    List<Types.NestedField> fields = partitionType.fields();\n    if (fields.isEmpty()) {\n      return partition;\n    }\n\n    try (DataInputStream dis = new DataInputStream(new ByteArrayInputStream(encoded))) {\n      for (int i = 0; i < fields.size(); i++) {\n        boolean isNull = dis.readBoolean();\n        if (isNull) {\n          partition.set(i, null);\n        } else {","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/flink/v2.2/flink/src/main/java/org/apache/iceberg/flink/maintenance/operator/StructLikeSerializer.java#L70-L106","documentation":"StructLikeSerializer.encodePartition serializes a partition StructLike into bytes for use as an index key; any IOException from the DataOutputStream is wrapped in an UncheckedIOException with this message. Like serializeKey, the stream is in-memory so failures are unexpected.","triggerScenarios":"IOException raised while writing partition fields in encodePartition during table-change processing in the maintenance operators.","commonSituations":"Rare runtime/IO fault; often appears alongside broader task failures during checkpoint-heavy maintenance jobs.","solutions":["Retry the failing Flink task/job; the failure is typically transient.","Check the wrapped cause for JVM-level issues (OOM, thread interruption during flush).","If reproducible for a specific partition type, file a bug with the partition schema."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  bytes = serializer.encodePartition(partition, partitionType);\n} catch (UncheckedIOException e) {\n  LOG.error(\"Partition encoding failed\", e.getCause());\n  throw e;\n}","preventionTips":["Ensure the partition StructLike is built with the table's current partition spec.","Watch for task-level IO/OOM problems in Flink logs."],"tags":["flink","serialization","unchecked-io"],"backgroundTag":"json-serialization-failed","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"}