From b7d2a74aeec5671b393943217022bce09eb30404 Mon Sep 17 00:00:00 2001 From: sshiv012 <122703005+sshiv012@users.noreply.github.com> Date: Mon, 10 Aug 2026 23:40:49 -0700 Subject: [PATCH] seed 517d42 --- .../amber/core/storage/IcebergCatalogInstance.scala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/common/workflow-core/src/main/scala/org/apache/texera/amber/core/storage/IcebergCatalogInstance.scala b/common/workflow-core/src/main/scala/org/apache/texera/amber/core/storage/IcebergCatalogInstance.scala index 313772b0fcb..bd63785d44d 100644 --- a/common/workflow-core/src/main/scala/org/apache/texera/amber/core/storage/IcebergCatalogInstance.scala +++ b/common/workflow-core/src/main/scala/org/apache/texera/amber/core/storage/IcebergCatalogInstance.scala @@ -70,9 +70,14 @@ object IcebergCatalogInstance { */ def getInstance(warehouse: Option[String] = None): Catalog = { val name = warehouse.getOrElse(defaultWarehouse) - synchronized { - catalogs.getOrElseUpdate(cacheKey(name), createCatalog(name)) + val key = cacheKey(name) + // Read the cache outside the lock: building a catalog can block on the + // REST endpoint, and holding the monitor for that long stalls every other + // warehouse's first access. + if (!catalogs.contains(key)) { + catalogs.put(key, createCatalog(name)) } + catalogs(key) } private def createCatalog(warehouse: String): Catalog =