dimas-b commented on code in PR #1070:
URL: https://github.com/apache/polaris/pull/1070#discussion_r1976114073


##########
polaris-core/src/main/java/org/apache/polaris/core/persistence/BasePersistence.java:
##########
@@ -0,0 +1,366 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.polaris.core.persistence;
+
+import jakarta.annotation.Nonnull;
+import jakarta.annotation.Nullable;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import org.apache.polaris.core.PolarisCallContext;
+import org.apache.polaris.core.entity.EntityNameLookupRecord;
+import org.apache.polaris.core.entity.PolarisBaseEntity;
+import org.apache.polaris.core.entity.PolarisChangeTrackingVersions;
+import org.apache.polaris.core.entity.PolarisEntityCore;
+import org.apache.polaris.core.entity.PolarisEntityId;
+import org.apache.polaris.core.entity.PolarisEntityType;
+import org.apache.polaris.core.entity.PolarisGrantRecord;
+
+/**
+ * Interface to the Polaris persistence backend, with which to persist and 
retrieve all the data
+ * defining the internal data model for Polaris, and which defines the basis 
for the RBAC model
+ * provided by Polaris.
+ *
+ * <p>Note that APIs to the actual persistence store are very basic, often 
point read or write to
+ * the underlying data store. The goal is to make it really easy to back this 
using databases like
+ * Postgres or simpler KV store.
+ */
+public interface BasePersistence {
+  /**
+   * The returned id must be fully unique within a realm and never reused once 
generated, whether or
+   * not anything ends up committing an entity with the generated id.
+   *
+   * @param callCtx call context
+   * @return new unique entity identifier
+   */
+  long generateNewId(@Nonnull PolarisCallContext callCtx);
+
+  /**
+   * Write this entity to the persistence backend. If successful, the write 
must be durable and
+   * visible to any other reader.
+   *
+   * <p>TODO: Either standardize the expected system of exceptions to throw 
for various concurrency
+   * errors (entity not found when originalEntity != null, entity changed from 
originalEntity, etc)
+   * or push down the return status enums from PolarisMetaStoreManager into 
this layer and document
+   * accordingly.
+   *
+   * @param callCtx call context
+   * @param entity entity to persist
+   * @param nameOrParentChanged if true, also write it to by-name lookups if 
applicable

Review Comment:
   "by-name" lookups looks like the interface is making too many assumptions 
about the implementation.
   
   Can we say that the caller is responsible for setting this flag in case the 
parent of the name of the entity changes so that the implementation could use 
it as a hint to perform additional validation. In any case, the implementation 
is responsible for ensuring that names are unique within each namespace and 
that the same object cannot be found under more than one parent. 
   
   WDYT? 



-- 
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