{"record":{"id":"2e20abab02cf30df","repo":"apache/iceberg","slug":"the-action-s-s-is-unsupported","errorCode":null,"errorMessage":"The action %s's is unsupported","messagePattern":"The action (.+?)'s is unsupported","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"delta-lake/src/main/java/org/apache/iceberg/delta/BaseSnapshotDeltaLakeTableAction.java","lineNumber":308,"sourceCode":"      VersionLog versionLog,\n      Transaction transaction,\n      ImmutableSet.Builder<String> migratedDataFilesBuilder) {\n    // Only need actions related to data change: AddFile and RemoveFile\n    List<Action> dataFileActions =\n        versionLog.getActions().stream()\n            .filter(action -> action instanceof AddFile || action instanceof RemoveFile)\n            .collect(Collectors.toList());\n\n    List<DataFile> filesToAdd = Lists.newArrayList();\n    List<DataFile> filesToRemove = Lists.newArrayList();\n    for (Action action : dataFileActions) {\n      DataFile dataFile = buildDataFileFromAction(action, transaction.table());\n      if (action instanceof AddFile) {\n        filesToAdd.add(dataFile);\n      } else if (action instanceof RemoveFile) {\n        filesToRemove.add(dataFile);\n      } else {\n        throw new ValidationException(\n            \"The action %s's is unsupported\", action.getClass().getSimpleName());\n      }\n      migratedDataFilesBuilder.add(dataFile.location());\n    }\n\n    if (!filesToAdd.isEmpty() && !filesToRemove.isEmpty()) {\n      // OverwriteFiles case\n      OverwriteFiles overwriteFiles = transaction.newOverwrite();\n      filesToAdd.forEach(overwriteFiles::addFile);\n      filesToRemove.forEach(overwriteFiles::deleteFile);\n      overwriteFiles.commit();\n    } else if (!filesToAdd.isEmpty()) {\n      // AppendFiles case\n      AppendFiles appendFiles = transaction.newAppend();\n      filesToAdd.forEach(appendFiles::appendFile);\n      appendFiles.commit();\n    } else if (!filesToRemove.isEmpty()) {\n      // DeleteFiles case","sourceCodeStart":290,"sourceCodeEnd":326,"githubUrl":"https://github.com/apache/iceberg/blob/86d9c8fc543e7c56c9f624eb725f76c9baff9570/delta-lake/src/main/java/org/apache/iceberg/delta/BaseSnapshotDeltaLakeTableAction.java#L290-L326","documentation":"ValidationException thrown when a Delta log version contains an action type other than AddFile or RemoveFile, which the Delta-to-Iceberg migration does not support converting into Iceberg data file operations.","triggerScenarios":"commitDeltaVersionLogToIcebergTransaction encounters a Delta action (e.g. metadata, protocol, txn or newer action types) in a version log where only AddFile/RemoveFile are expected.","commonSituations":"Delta tables using features the migration doesn't handle (e.g. checkpoint-only changes, OPTIMIZE/clone metadata actions in the chosen version range), newer Delta writer versions introducing new action types.","solutions":["Upgrade the iceberg-delta module to a version supporting the action type","Exclude/skip the unsupported version range, or re-run migration from a full snapshot","Avoid operations generating unsupported actions between incremental snapshot versions"],"exampleFix":"null","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { action.execute(); } catch (ValidationException e) { /* unsupported Delta action: fall back to full re-snapshot */ }","preventionTips":["Keep iceberg-delta and Delta Standalone versions up to date","Avoid unsupported Delta operations (new writer features) in tables under incremental migration","Fall back to full snapshot migration when a version log contains unsupported actions"],"tags":["delta-lake","migration","unsupported"],"backgroundTag":"unsupported-operation","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"}