eric-maynard commented on code in PR #1037:
URL: https://github.com/apache/polaris/pull/1037#discussion_r1965932908


##########
service/common/src/main/java/org/apache/polaris/service/catalog/PolarisCatalogHandlerWrapper.java:
##########
@@ -786,15 +787,44 @@ public boolean sendNotification(TableIdentifier 
identifier, NotificationRequest
         && notificationCatalog.sendNotification(identifier, request);
   }
 
+  private boolean etagMatchesCurrentMetadataLocation(String etag, 
TableIdentifier tableIdentifier) {
+    if (etag != null) {
+      PolarisResolvedPathWrapper target = resolutionManifest
+              .getResolvedPath(tableIdentifier, PolarisEntitySubType.TABLE, 
true);
+
+      String currentEntityMetadataVersion = target
+              .getRawLeafEntity()
+              .getInternalPropertiesAsMap()
+              .get(TableLikeEntity.METADATA_LOCATION_KEY);

Review Comment:
   I _think_ using metadata location is correct for tables, but could we 
consider alternatives? entity ID + entity version would be the most robust for 
things that are entities in the metastore



##########
service/common/src/main/java/org/apache/polaris/service/catalog/PolarisCatalogHandlerWrapper.java:
##########
@@ -786,15 +787,44 @@ public boolean sendNotification(TableIdentifier 
identifier, NotificationRequest
         && notificationCatalog.sendNotification(identifier, request);
   }
 
+  private boolean etagMatchesCurrentMetadataLocation(String etag, 
TableIdentifier tableIdentifier) {
+    if (etag != null) {
+      PolarisResolvedPathWrapper target = resolutionManifest
+              .getResolvedPath(tableIdentifier, PolarisEntitySubType.TABLE, 
true);
+
+      String currentEntityMetadataVersion = target
+              .getRawLeafEntity()
+              .getInternalPropertiesAsMap()
+              .get(TableLikeEntity.METADATA_LOCATION_KEY);
+
+      if (etag.equals(currentEntityMetadataVersion)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   public LoadTableResponse loadTable(TableIdentifier tableIdentifier, String 
snapshots) {
-    PolarisAuthorizableOperation op = PolarisAuthorizableOperation.LOAD_TABLE;
-    authorizeBasicTableLikeOperationOrThrow(op, PolarisEntitySubType.TABLE, 
tableIdentifier);
+    return loadTableFreshnessAware(tableIdentifier, null, snapshots).get();
+  }
 
-    return CatalogHandlers.loadTable(baseCatalog, tableIdentifier);
+  public Optional<LoadTableResponse> loadTableFreshnessAware(TableIdentifier 
tableIdentifier, String etag, String snapshots) {

Review Comment:
   javadoc please



##########
service/common/src/main/java/org/apache/polaris/service/catalog/PolarisCatalogHandlerWrapper.java:
##########
@@ -786,15 +787,44 @@ public boolean sendNotification(TableIdentifier 
identifier, NotificationRequest
         && notificationCatalog.sendNotification(identifier, request);
   }
 
+  private boolean etagMatchesCurrentMetadataLocation(String etag, 
TableIdentifier tableIdentifier) {
+    if (etag != null) {
+      PolarisResolvedPathWrapper target = resolutionManifest
+              .getResolvedPath(tableIdentifier, PolarisEntitySubType.TABLE, 
true);
+
+      String currentEntityMetadataVersion = target
+              .getRawLeafEntity()
+              .getInternalPropertiesAsMap()
+              .get(TableLikeEntity.METADATA_LOCATION_KEY);
+
+      if (etag.equals(currentEntityMetadataVersion)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
   public LoadTableResponse loadTable(TableIdentifier tableIdentifier, String 
snapshots) {
-    PolarisAuthorizableOperation op = PolarisAuthorizableOperation.LOAD_TABLE;
-    authorizeBasicTableLikeOperationOrThrow(op, PolarisEntitySubType.TABLE, 
tableIdentifier);
+    return loadTableFreshnessAware(tableIdentifier, null, snapshots).get();
+  }
 
-    return CatalogHandlers.loadTable(baseCatalog, tableIdentifier);
+  public Optional<LoadTableResponse> loadTableFreshnessAware(TableIdentifier 
tableIdentifier, String etag, String snapshots) {
+      PolarisAuthorizableOperation op = 
PolarisAuthorizableOperation.LOAD_TABLE;
+      authorizeBasicTableLikeOperationOrThrow(op, PolarisEntitySubType.TABLE, 
tableIdentifier);
+
+      if (etagMatchesCurrentMetadataLocation(etag, tableIdentifier)) {
+        return Optional.empty();
+      }
+
+      return Optional.of(CatalogHandlers.loadTable(baseCatalog, 
tableIdentifier));
+  }
+
+  public LoadTableResponse loadTableWithAccessDelegation(TableIdentifier 
tableIdentifier, String snapshots) {
+    return loadTableWithAccessDelegationFreshnessAware(tableIdentifier, null, 
snapshots).get();
   }
 
-  public LoadTableResponse loadTableWithAccessDelegation(
-      TableIdentifier tableIdentifier, String snapshots) {
+  public Optional<LoadTableResponse> 
loadTableWithAccessDelegationFreshnessAware(

Review Comment:
   javadoc please



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to