diff --git a/core/src/main/java/org/apache/iceberg/rest/RESTCatalogProperties.java b/core/src/main/java/org/apache/iceberg/rest/RESTCatalogProperties.java
index 7281862481dd..70609afe9d20 100644
--- a/core/src/main/java/org/apache/iceberg/rest/RESTCatalogProperties.java
+++ b/core/src/main/java/org/apache/iceberg/rest/RESTCatalogProperties.java
@@ -40,9 +40,10 @@ private RESTCatalogProperties() {}
public static final String NAMESPACE_SEPARATOR = "namespace-separator";
- // Enable planning on the REST server side
- public static final String REST_SCAN_PLANNING_ENABLED = "rest-scan-planning-enabled";
- public static final boolean REST_SCAN_PLANNING_ENABLED_DEFAULT = false;
+ // Configure scan planning mode
+ // Can be set by server in LoadTableResponse.config() for table-level override
+ public static final String SCAN_PLANNING_MODE = "scan-planning-mode";
+ public static final String SCAN_PLANNING_MODE_DEFAULT = ScanPlanningMode.CLIENT.modeName();
public static final String REST_SCAN_PLAN_ID = "rest-scan-plan-id";
@@ -59,4 +60,38 @@ public enum SnapshotMode {
ALL,
REFS
}
+
+ /**
+ * Enum to represent scan planning mode.
+ *
+ *
+ * - CLIENT - Use client-side scan planning
+ *
- SERVER - Use server-side scan planning
+ *
+ */
+ public enum ScanPlanningMode {
+ CLIENT("client"),
+ SERVER("server");
+
+ private final String modeName;
+
+ ScanPlanningMode(String modeName) {
+ this.modeName = modeName;
+ }
+
+ public String modeName() {
+ return modeName;
+ }
+
+ public static ScanPlanningMode fromString(String mode) {
+ for (ScanPlanningMode planningMode : values()) {
+ if (planningMode.modeName.equalsIgnoreCase(mode)) {
+ return planningMode;
+ }
+ }
+
+ throw new IllegalArgumentException(
+ String.format("Invalid scan planning mode: %s. Valid values are: client, server", mode));
+ }
+ }
}
diff --git a/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java b/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java
index cda71fccda3a..f23d1ea72b9d 100644
--- a/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java
+++ b/core/src/main/java/org/apache/iceberg/rest/RESTSessionCatalog.java
@@ -166,7 +166,6 @@ public class RESTSessionCatalog extends BaseViewSessionCatalog
private MetricsReporter reporter = null;
private boolean reportingViaRestEnabled;
private Integer pageSize = null;
- private boolean restScanPlanningEnabled;
private CloseableGroup closeables = null;
private Set endpoints;
private Supplier