Sebastian, It's been a little while since I looked at this, but wouldn't it make more sense to interrogate the FileIO to see if it's HadoopConfigurable and grab the exact configuration used by the IO rather than go through this catalog path?
At that point, you'd have the exact configuration and overrides for that specific table. -Dan On Wed, Oct 28, 2026 at 1:15 AM Sebastian Daberdaku via dev < [email protected]> wrote: > Hi all, > > I'd like to get some eyes on a PR that fixes a credentials mismatch in > remove_orphan_files, and agree on the approach before I port it across > Spark versions: > > https://github.com/apache/iceberg/pull/17862 (closes #17860) > > Problem > > Unless prefix_listing is enabled, DeleteOrphanFilesSparkAction lists the > table location with a Hadoop FileSystem built from the Spark session > configuration alone, while every other file operation in the action goes > through table.io(). When a catalog reaches its storage with credentials > other than the cluster's (e.g. a catalog that assumes a role in another AWS > account), reads and deletes succeed but the listing fails with AccessDenied > or silently sees no files. > > Change > > - DeleteOrphanFilesSparkAction gets a new catalogName(String) method. When > set, the listing uses the session Hadoop configuration plus that catalog's > spark.sql.catalog.<name>.hadoop.* overrides > (SparkUtil.hadoopConfCatalogOverrides). When not set, behavior is unchanged. > - RemoveOrphanFilesProcedure passes the catalog it was invoked on, so CALL > <catalog>.system.remove_orphan_files(...) picks up that catalog's overrides > with no new procedure argument. > - spark-procedures.md documents which configuration the listing uses. > > The catalog is passed explicitly rather than inferred from Table.name(): > as @yangshangqing95 pointed out in review, a table name's first segment > isn't guaranteed to identify the Spark catalog it came from, and resolving > it via CatalogManager can initialize unrelated catalogs as a side effect. > > Tests cover the procedure path across the test catalogs and the action API > with both SparkCatalog and SparkSessionCatalog, using a marker FileSystem > registered only in the catalog's hadoop.* overrides. > > Questions > > 1. Is a catalogName(String) method on the action an acceptable public API > addition, or would people prefer a different shape? > 2. The PR was opened against Spark 4.1 before the 4.2 module landed. If > the direction is agreed, I'll move the change to 4.2 and backport it to > 4.1, 4.0 and 3.5. > > Thanks, > Sebastian Daberdaku > -- > > > > > Sebastian Daberdaku > > Head of Platform & Data Engineering > > Via San Francesco d > <https://www.google.com/maps/search/Via+San+Francesco+d+Assisi+15,+20122+Milan,+Italy?entry=gmail&source=g> > 'Assisi 15, 20122 Milan, Italy > <https://www.google.com/maps/search/Via+San+Francesco+d+Assisi+15,+20122+Milan,+Italy?entry=gmail&source=g> > > 40 New Bond St > <https://www.google.com/maps/search/40+New+Bond+St?entry=gmail&source=g>., > W1S 2DE, London, United Kingdom > > Vaso Pasha St., Rainbow Center, Tirana, Albania Musa Tolaj St., Lam A, 2/104, > Prishtina, Kosova > <https://www.google.com/maps/search/104,+Prishtina,+Kosova?entry=gmail&source=g> > > www.cardoai.com > > > *This communication, including any attachments, is intended solely for the > recipient(s) addressed. * > *If you have received this email in error, please notify the sender > immediately and delete it from your system. * > *Any unauthorized use, disclosure, or distribution, of this communication > is strictly prohibited.* >
