You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by ak...@apache.org on 2017/04/11 23:11:52 UTC
sentry git commit: SENTRY-1629: Current MAuthzPathsMapping table
definition may cause error 'Duplicate entry XX for key PRIMARY' (Kalyan
Kalvagadda, reviewed by Hao Hao and Alex Kolbasov)
Repository: sentry
Updated Branches:
refs/heads/sentry-ha-redesign a21a41971 -> c94cfa6ed
SENTRY-1629: Current MAuthzPathsMapping table definition may cause error 'Duplicate entry XX for key PRIMARY' (Kalyan Kalvagadda, reviewed by Hao Hao and Alex Kolbasov)
- Changed the JDO definition to have Path as separate entity.
- SQL changes needed for the handle the new JDO definition.
- Application changes to use new JDO definition.
- Updated unit test cases to test the case where an authz object is associated with more than one path.
Testing done:
1. Tested the sql changes with derby, mysql, oracle, postgres and db2.
2. Added unit tests to be sure that the actual issues is addressed.
Project: http://git-wip-us.apache.org/repos/asf/sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/c94cfa6e
Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/c94cfa6e
Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/c94cfa6e
Branch: refs/heads/sentry-ha-redesign
Commit: c94cfa6ed4de85ae8e88cca649e583db5cfb0cc7
Parents: a21a419
Author: Alexander Kolbasov <ak...@cloudera.com>
Authored: Tue Apr 11 16:09:34 2017 -0700
Committer: Alexander Kolbasov <ak...@cloudera.com>
Committed: Tue Apr 11 16:09:34 2017 -0700
----------------------------------------------------------------------
.../db/service/model/MAuthzPathsMapping.java | 28 ++++++--
.../sentry/provider/db/service/model/MPath.java | 69 ++++++++++++++++++++
.../provider/db/service/model/package.jdo | 20 ++++--
.../db/service/persistent/SentryStore.java | 11 ++--
.../main/resources/007-SENTRY-1365.derby.sql | 25 +++----
.../main/resources/007-SENTRY-1365.mysql.sql | 24 +++----
.../main/resources/007-SENTRY-1365.oracle.sql | 25 +++----
.../main/resources/007-SENTRY-1365.postgres.sql | 24 +++----
.../src/main/resources/sentry-db2-1.8.0.sql | 22 ++++---
.../src/main/resources/sentry-derby-1.8.0.sql | 25 +++----
.../src/main/resources/sentry-mysql-1.8.0.sql | 24 +++----
.../src/main/resources/sentry-oracle-1.8.0.sql | 27 ++++----
.../main/resources/sentry-postgres-1.8.0.sql | 25 +++----
.../sentry-upgrade-db2-1.7.0-to-1.8.0.sql | 22 ++++---
.../db/service/persistent/TestSentryStore.java | 52 +++++++++++++--
15 files changed, 293 insertions(+), 130 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MAuthzPathsMapping.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MAuthzPathsMapping.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MAuthzPathsMapping.java
index 56e456e..c22364f 100644
--- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MAuthzPathsMapping.java
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MAuthzPathsMapping.java
@@ -19,6 +19,7 @@
package org.apache.sentry.provider.db.service.model;
import javax.jdo.annotations.PersistenceCapable;
+import java.util.HashSet;
import java.util.Set;
/**
@@ -29,13 +30,16 @@ import java.util.Set;
public class MAuthzPathsMapping {
private String authzObjName;
- private Set<String> paths;
+ private Set<MPath> paths;
private long createTimeMs;
- public MAuthzPathsMapping(String authzObjName, Set<String> paths, long createTimeMs) {
+ public MAuthzPathsMapping(String authzObjName, Iterable<String> paths) {
this.authzObjName = authzObjName;
- this.paths = paths;
- this.createTimeMs = createTimeMs;
+ this.paths = new HashSet<>();
+ for (String path : paths) {
+ this.paths.add(new MPath(path));
+ }
+ this.createTimeMs = System.currentTimeMillis();
}
public long getCreateTime() {
@@ -54,11 +58,23 @@ public class MAuthzPathsMapping {
this.authzObjName = authzObjName;
}
- public void setPaths(Set<String> paths) {
+ public void setPaths(Set<MPath> paths) {
this.paths = paths;
}
- public Set<String> getPaths() {
+ public Set<MPath> getPaths() {
+ return paths;
+ }
+
+ /*
+ This method is used to get path set in string format
+ constructed from Set<MPath>.
+ */
+ public Set<String> getPathStrings() {
+ Set<String> paths = new HashSet<>(this.paths.size());
+ for (MPath path : this.paths) {
+ paths.add(path.getPath());
+ }
return paths;
}
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MPath.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MPath.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MPath.java
new file mode 100644
index 0000000..c743846
--- /dev/null
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/MPath.java
@@ -0,0 +1,69 @@
+/*
+ * 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.sentry.provider.db.service.model;
+
+/**
+ * Used to store the path for the Authorizable object
+ *
+ * New class is created for path in order to have 1 to many mapping
+ * between path and Authorizable object.
+ */
+public class MPath {
+ private String path;
+
+ public MPath(String path) {
+ this.path = path;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) { this.path = path; }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((path == null) ? 0 : path.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (obj == null) {
+ return false;
+ }
+
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+
+ MPath other = (MPath) obj;
+
+ if (path == null) {
+ return other.path == null;
+ }
+
+ return path.equals(other.path);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/package.jdo
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/package.jdo b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/package.jdo
index e981bcf..dfeb221 100644
--- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/package.jdo
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/model/package.jdo
@@ -237,7 +237,7 @@
</field>
</class>
- <class name="MAuthzPathsMapping" identity-type="datastore" table="AUTHZ_PATHS_MAPPING" detachable="true">
+ <class name="MAuthzPathsMapping" identity-type="datastore" table="AUTHZ_PATHS_MAPPING" detachable="true">
<datastore-identity>
<column name="AUTHZ_OBJ_ID"/>
</datastore-identity>
@@ -254,14 +254,22 @@
<column name="CREATE_TIME_MS" jdbc-type="BIGINT"/>
</field>
<field name = "paths">
- <collection element-type="java.lang.String"/>
- <join/>
- <element>
- <column name="PATHS"/>
- </element>
+ <collection element-type="org.apache.sentry.provider.db.service.model.MPath"/>
+ <element>
+ <column name="AUTHZ_OBJ_ID"/>
+ </element>
</field>
</class>
+ <class name="MPath" identity-type="datastore" table="AUTHZ_PATH" detachable="true">
+ <datastore-identity>
+ <column name="PATH_ID"/>
+ </datastore-identity>
+ <field name="path">
+ <column name="PATH_NAME" length="4000" jdbc-type="VARCHAR"/>
+ </field>
+ </class>
+
<class name="MSentryPermChange" table="SENTRY_PERM_CHANGE" identity-type="application" detachable="true">
<field name="changeID" primary-key="true" value-strategy="increment">
<column name="CHANGE_ID" jdbc-type="BIGINT" allows-null="false"/>
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
index 19bae55..aaea979 100644
--- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
@@ -65,6 +65,7 @@ import org.apache.sentry.provider.db.service.model.MSentryPrivilege;
import org.apache.sentry.provider.db.service.model.MSentryUser;
import org.apache.sentry.provider.db.service.model.MSentryVersion;
import org.apache.sentry.provider.db.service.model.MSentryRole;
+import org.apache.sentry.provider.db.service.model.MPath;
import org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessor;
import org.apache.sentry.provider.db.service.thrift.TSentryActiveRoleSet;
import org.apache.sentry.provider.db.service.thrift.TSentryAuthorizable;
@@ -489,6 +490,8 @@ public class SentryStore {
pm.newQuery(MSentryPrivilege.class).deletePersistentAll();
pm.newQuery(MSentryPermChange.class).deletePersistentAll();
pm.newQuery(MSentryPathChange.class).deletePersistentAll();
+ pm.newQuery(MAuthzPathsMapping.class).deletePersistentAll();
+ pm.newQuery(MPath.class).deletePersistentAll();
return null;
}
});
@@ -2423,7 +2426,7 @@ public class SentryStore {
(Iterable<MAuthzPathsMapping>) query.execute();
for (MAuthzPathsMapping authzToPaths : authzToPathsMappings) {
- retVal.put(authzToPaths.getAuthzObjName(), authzToPaths.getPaths());
+ retVal.put(authzToPaths.getAuthzObjName(), authzToPaths.getPathStrings());
}
return retVal;
}
@@ -2460,11 +2463,11 @@ public class SentryStore {
private void createAuthzPathsMappingCore(PersistenceManager pm, String authzObj,
Set<String> paths) throws SentryAlreadyExistsException {
- MAuthzPathsMapping mAuthzPathsMapping = getMAuthzPathsMapping(pm, authzObj);
+ MAuthzPathsMapping mAuthzPathsMapping = getMAuthzPathsMappingCore(pm, authzObj);
if (mAuthzPathsMapping == null) {
mAuthzPathsMapping =
- new MAuthzPathsMapping(authzObj, paths, System.currentTimeMillis());
+ new MAuthzPathsMapping(authzObj, paths);
pm.makePersistent(mAuthzPathsMapping);
} else {
throw new SentryAlreadyExistsException("AuthzObj: " + authzObj);
@@ -2474,7 +2477,7 @@ public class SentryStore {
/**
* Get the MAuthzPathsMapping object from authzObj
*/
- public MAuthzPathsMapping getMAuthzPathsMapping(PersistenceManager pm, String authzObj) {
+ public MAuthzPathsMapping getMAuthzPathsMappingCore(PersistenceManager pm, String authzObj) {
Query query = pm.newQuery(MAuthzPathsMapping.class);
query.setFilter("this.authzObjName == t");
query.declareParameters("java.lang.String t");
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.derby.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.derby.sql b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.derby.sql
index 1883626..1935ef0 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.derby.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.derby.sql
@@ -8,23 +8,24 @@ CREATE TABLE AUTHZ_PATHS_MAPPING
ALTER TABLE AUTHZ_PATHS_MAPPING ADD CONSTRAINT AUTHZ_PATHS_MAPPING_PK PRIMARY KEY (AUTHZ_OBJ_ID);
--- Table MAUTHZPATHSMAPPING_PATHS for join relationship
-CREATE TABLE MAUTHZPATHSMAPPING_PATHS
-(
- AUTHZ_OBJ_ID_OID BIGINT NOT NULL,
- PATHS VARCHAR(4000) NOT NULL
-);
-
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_PK PRIMARY KEY (AUTHZ_OBJ_ID_OID,PATHS);
-
-- Constraints for table AUTHZ_PATHS_MAPPING for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX AUTHZOBJNAME ON AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_NAME);
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE AUTHZ_PATH
+ (
+ PATH_ID BIGINT NOT NULL,
+ PATH_NAME VARCHAR(4000),
+ AUTHZ_OBJ_ID BIGINT
+);
--- Constraints for table MAUTHZPATHSMAPPING_PATHS
-CREATE INDEX MAUTHZPATHSMAPPING_PATHS_N49 ON MAUTHZPATHSMAPPING_PATHS (AUTHZ_OBJ_ID_OID);
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_PK PRIMARY KEY (PATH_ID);
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_FK1 FOREIGN KEY (AUTHZ_OBJ_ID_OID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID) ;
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_FK
+ FOREIGN KEY (AUTHZ_OBJ_ID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID);
------------------------------------------------------------------
-- Sequences and SequenceTables
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.mysql.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.mysql.sql b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.mysql.sql
index 1829e2f..c0973b8 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.mysql.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.mysql.sql
@@ -7,21 +7,23 @@ CREATE TABLE `AUTHZ_PATHS_MAPPING`
CONSTRAINT `AUTHZ_PATHS_MAPPING_PK` PRIMARY KEY (`AUTHZ_OBJ_ID`)
) ENGINE=INNODB;
--- Table `MAUTHZPATHSMAPPING_PATHS` for join relationship
-CREATE TABLE `MAUTHZPATHSMAPPING_PATHS`
-(
- `AUTHZ_OBJ_ID_OID` BIGINT NOT NULL,
- `PATHS` VARCHAR(4000) BINARY NOT NULL,
- CONSTRAINT `MAUTHZPATHSMAPPING_PATHS_PK` PRIMARY KEY (`AUTHZ_OBJ_ID_OID`,`PATHS`)
-) ENGINE=INNODB;
-
-- Constraints for table `AUTHZ_PATHS_MAPPING` for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX `AUTHZOBJNAME` ON `AUTHZ_PATHS_MAPPING` (`AUTHZ_OBJ_NAME`);
--- Constraints for table `MAUTHZPATHSMAPPING_PATHS`
-CREATE INDEX `MAUTHZPATHSMAPPING_PATHS_N49` ON `MAUTHZPATHSMAPPING_PATHS` (`AUTHZ_OBJ_ID_OID`);
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE `AUTHZ_PATH` (
+ `PATH_ID` BIGINT NOT NULL,
+ `PATH_NAME` VARCHAR(4000) CHARACTER SET utf8 COLLATE utf8_bin,
+ `AUTHZ_OBJ_ID` BIGINT
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE `AUTHZ_PATH`
+ ADD CONSTRAINT `AUTHZ_PATH_PK` PRIMARY KEY (`PATH_ID`);
-ALTER TABLE `MAUTHZPATHSMAPPING_PATHS` ADD CONSTRAINT `MAUTHZPATHSMAPPING_PATHS_FK1` FOREIGN KEY (`AUTHZ_OBJ_ID_OID`) REFERENCES `AUTHZ_PATHS_MAPPING` (`AUTHZ_OBJ_ID`) ;
+ALTER TABLE `AUTHZ_PATH`
+ ADD CONSTRAINT `AUTHZ_PATH_FK`
+ FOREIGN KEY (`AUTHZ_OBJ_ID`) REFERENCES `AUTHZ_PATHS_MAPPING`(`AUTHZ_OBJ_ID`);
------------------------------------------------------------------
-- Sequences and SequenceTables
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.oracle.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.oracle.sql b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.oracle.sql
index 7de9751..081a369 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.oracle.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.oracle.sql
@@ -8,22 +8,23 @@ CREATE TABLE AUTHZ_PATHS_MAPPING
ALTER TABLE AUTHZ_PATHS_MAPPING ADD CONSTRAINT AUTHZ_PATHS_MAPPING_PK PRIMARY KEY (AUTHZ_OBJ_ID);
--- Table MAUTHZPATHSMAPPING_PATHS for join relationship
-CREATE TABLE MAUTHZPATHSMAPPING_PATHS
-(
- AUTHZ_OBJ_ID_OID NUMBER NOT NULL,
- PATHS VARCHAR2(4000) NOT NULL
-);
-
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_PK PRIMARY KEY (AUTHZ_OBJ_ID_OID,PATHS);
-
-- Constraints for table AUTHZ_PATHS_MAPPING for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX AUTHZOBJNAME ON AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_NAME);
--- Constraints for table MAUTHZPATHSMAPPING_PATHS
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_FK1 FOREIGN KEY (AUTHZ_OBJ_ID_OID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID) INITIALLY DEFERRED ;
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE AUTHZ_PATH
+ (
+ PATH_ID NUMBER NOT NULL,
+ PATH_NAME VARCHAR(4000),
+ AUTHZ_OBJ_ID NUMBER
+);
-CREATE INDEX MAUTHZPATHSMAPPING_PATHS_N49 ON MAUTHZPATHSMAPPING_PATHS (AUTHZ_OBJ_ID_OID);
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_PK PRIMARY KEY (PATH_ID);
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_FK
+ FOREIGN KEY (AUTHZ_OBJ_ID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID);
------------------------------------------------------------------
-- Sequences and SequenceTables
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.postgres.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.postgres.sql b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.postgres.sql
index adf5f1f..9456925 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.postgres.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/007-SENTRY-1365.postgres.sql
@@ -7,21 +7,23 @@ CREATE TABLE "AUTHZ_PATHS_MAPPING"
CONSTRAINT "AUTHZ_PATHS_MAPPING_PK" PRIMARY KEY ("AUTHZ_OBJ_ID")
);
--- Table "MAUTHZPATHSMAPPING_PATHS" for join relationship
-CREATE TABLE "MAUTHZPATHSMAPPING_PATHS"
-(
- "AUTHZ_OBJ_ID_OID" int8 NOT NULL,
- "PATHS" varchar(4000) NOT NULL,
- CONSTRAINT "MAUTHZPATHSMAPPING_PATHS_PK" PRIMARY KEY ("AUTHZ_OBJ_ID_OID","PATHS")
-);
-
-- Constraints for table "AUTHZ_PATHS_MAPPING" for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX "AUTHZOBJNAME" ON "AUTHZ_PATHS_MAPPING" ("AUTHZ_OBJ_NAME");
--- Constraints for table "MAUTHZPATHSMAPPING_PATHS"
-ALTER TABLE "MAUTHZPATHSMAPPING_PATHS" ADD CONSTRAINT "MAUTHZPATHSMAPPING_PATHS_FK1" FOREIGN KEY ("AUTHZ_OBJ_ID_OID") REFERENCES "AUTHZ_PATHS_MAPPING" ("AUTHZ_OBJ_ID") INITIALLY DEFERRED ;
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE "AUTHZ_PATH"
+ (
+ "PATH_ID" BIGINT NOT NULL,
+ "PATH_NAME" varchar(4000),
+ "AUTHZ_OBJ_ID" BIGINT
+);
-CREATE INDEX "MAUTHZPATHSMAPPING_PATHS_N49" ON "MAUTHZPATHSMAPPING_PATHS" ("AUTHZ_OBJ_ID_OID");
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE "AUTHZ_PATH"
+ ADD CONSTRAINT "AUTHZ_PATH_PK" PRIMARY KEY ("PATH_ID");
+ALTER TABLE "AUTHZ_PATH"
+ ADD CONSTRAINT "AUTHZ_PATH_FK"
+ FOREIGN KEY ("AUTHZ_OBJ_ID") REFERENCES "AUTHZ_PATHS_MAPPING" ("AUTHZ_OBJ_ID") DEFERRABLE;
------------------------------------------------------------------
-- Sequences and SequenceTables
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/sentry-db2-1.8.0.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/sentry-db2-1.8.0.sql b/sentry-provider/sentry-provider-db/src/main/resources/sentry-db2-1.8.0.sql
index 547bbe8..037e6c3 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/sentry-db2-1.8.0.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/sentry-db2-1.8.0.sql
@@ -187,18 +187,24 @@ CREATE TABLE AUTHZ_PATHS_MAPPING(AUTHZ_OBJ_ID BIGINT NOT NULL generated always a
ALTER TABLE AUTHZ_PATHS_MAPPING ADD CONSTRAINT AUTHZ_PATHSCO7K_PK PRIMARY KEY (AUTHZ_OBJ_ID);
--- Table MAUTHZPATHSMAPPING_PATHS for join relationship
-CREATE TABLE MAUTHZPATHSMAPPING_PATHS(AUTHZ_OBJ_ID_OID BIGINT NOT NULL,PATHS VARCHAR(4000) NOT NULL);
-
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSS184_PK PRIMARY KEY (AUTHZ_OBJ_ID_OID,PATHS);
-
-- Constraints for table AUTHZ_PATHS_MAPPING for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX AUTHZOBJNAME ON AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_NAME);
--- Constraints for table MAUTHZPATHSMAPPING_PATHS
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHS184_FK1 FOREIGN KEY (AUTHZ_OBJ_ID_OID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID) ;
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE AUTHZ_PATH
+ (
+ PATH_ID BIGINT NOT NULL,
+ PATH_NAME VARCHAR(4000),
+ AUTHZ_OBJ_ID BIGINT
+);
+
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_PK PRIMARY KEY (PATH_ID);
-CREATE INDEX MAUTHZPATHS184_N49 ON MAUTHZPATHSMAPPING_PATHS (AUTHZ_OBJ_ID_OID);
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_FK
+ FOREIGN KEY (AUTHZ_OBJ_ID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID);
-- Table SENTRY_PERM_CHANGE for classes [org.apache.sentry.provider.db.service.model.MSentryPermChange]
CREATE TABLE "SENTRY_PERM_CHANGE"
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/sentry-derby-1.8.0.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/sentry-derby-1.8.0.sql b/sentry-provider/sentry-provider-db/src/main/resources/sentry-derby-1.8.0.sql
index 6474389..847c879 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/sentry-derby-1.8.0.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/sentry-derby-1.8.0.sql
@@ -191,23 +191,24 @@ CREATE TABLE AUTHZ_PATHS_MAPPING
ALTER TABLE AUTHZ_PATHS_MAPPING ADD CONSTRAINT AUTHZ_PATHS_MAPPING_PK PRIMARY KEY (AUTHZ_OBJ_ID);
--- Table MAUTHZPATHSMAPPING_PATHS for join relationship
-CREATE TABLE MAUTHZPATHSMAPPING_PATHS
-(
- AUTHZ_OBJ_ID_OID BIGINT NOT NULL,
- PATHS VARCHAR(4000) NOT NULL
-);
-
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_PK PRIMARY KEY (AUTHZ_OBJ_ID_OID,PATHS);
-
-- Constraints for table AUTHZ_PATHS_MAPPING for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX AUTHZOBJNAME ON AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_NAME);
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE AUTHZ_PATH
+ (
+ PATH_ID BIGINT NOT NULL,
+ PATH_NAME VARCHAR(4000),
+ AUTHZ_OBJ_ID BIGINT
+);
--- Constraints for table MAUTHZPATHSMAPPING_PATHS
-CREATE INDEX MAUTHZPATHSMAPPING_PATHS_N49 ON MAUTHZPATHSMAPPING_PATHS (AUTHZ_OBJ_ID_OID);
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_PK PRIMARY KEY (PATH_ID);
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_FK1 FOREIGN KEY (AUTHZ_OBJ_ID_OID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID) ;
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_FK
+ FOREIGN KEY (AUTHZ_OBJ_ID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID);
-- Table SENTRY_PERM_CHANGE for classes [org.apache.sentry.provider.db.service.model.MSentryPermChange]
CREATE TABLE SENTRY_PERM_CHANGE
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/sentry-mysql-1.8.0.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/sentry-mysql-1.8.0.sql b/sentry-provider/sentry-provider-db/src/main/resources/sentry-mysql-1.8.0.sql
index 1ab8343..78e318b 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/sentry-mysql-1.8.0.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/sentry-mysql-1.8.0.sql
@@ -230,21 +230,23 @@ CREATE TABLE `AUTHZ_PATHS_MAPPING`
CONSTRAINT `AUTHZ_PATHS_MAPPING_PK` PRIMARY KEY (`AUTHZ_OBJ_ID`)
) ENGINE=INNODB;
--- Table `MAUTHZPATHSMAPPING_PATHS` for join relationship
-CREATE TABLE `MAUTHZPATHSMAPPING_PATHS`
-(
- `AUTHZ_OBJ_ID_OID` BIGINT NOT NULL,
- `PATHS` VARCHAR(4000) BINARY NOT NULL,
- CONSTRAINT `MAUTHZPATHSMAPPING_PATHS_PK` PRIMARY KEY (`AUTHZ_OBJ_ID_OID`,`PATHS`)
-) ENGINE=INNODB;
-
-- Constraints for table `AUTHZ_PATHS_MAPPING` for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX `AUTHZOBJNAME` ON `AUTHZ_PATHS_MAPPING` (`AUTHZ_OBJ_NAME`);
--- Constraints for table `MAUTHZPATHSMAPPING_PATHS`
-CREATE INDEX `MAUTHZPATHSMAPPING_PATHS_N49` ON `MAUTHZPATHSMAPPING_PATHS` (`AUTHZ_OBJ_ID_OID`);
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE `AUTHZ_PATH` (
+ `PATH_ID` BIGINT NOT NULL,
+ `PATH_NAME` VARCHAR(4000) CHARACTER SET utf8 COLLATE utf8_bin,
+ `AUTHZ_OBJ_ID` BIGINT
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE `AUTHZ_PATH`
+ ADD CONSTRAINT `AUTHZ_PATH_PK` PRIMARY KEY (`PATH_ID`);
-ALTER TABLE `MAUTHZPATHSMAPPING_PATHS` ADD CONSTRAINT `MAUTHZPATHSMAPPING_PATHS_FK1` FOREIGN KEY (`AUTHZ_OBJ_ID_OID`) REFERENCES `AUTHZ_PATHS_MAPPING` (`AUTHZ_OBJ_ID`) ;
+ALTER TABLE `AUTHZ_PATH`
+ ADD CONSTRAINT `AUTHZ_PATH_FK`
+ FOREIGN KEY (`AUTHZ_OBJ_ID`) REFERENCES `AUTHZ_PATHS_MAPPING`(`AUTHZ_OBJ_ID`);
-- Table `SENTRY_PERM_CHANGE` for classes [org.apache.sentry.provider.db.service.model.MSentryPermChange]
CREATE TABLE `SENTRY_PERM_CHANGE`
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/sentry-oracle-1.8.0.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/sentry-oracle-1.8.0.sql b/sentry-provider/sentry-provider-db/src/main/resources/sentry-oracle-1.8.0.sql
index 0418b29..e972bbf 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/sentry-oracle-1.8.0.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/sentry-oracle-1.8.0.sql
@@ -206,22 +206,25 @@ CREATE TABLE AUTHZ_PATHS_MAPPING
ALTER TABLE AUTHZ_PATHS_MAPPING ADD CONSTRAINT AUTHZ_PATHS_MAPPING_PK PRIMARY KEY (AUTHZ_OBJ_ID);
--- Table MAUTHZPATHSMAPPING_PATHS for join relationship
-CREATE TABLE MAUTHZPATHSMAPPING_PATHS
-(
- AUTHZ_OBJ_ID_OID NUMBER NOT NULL,
- PATHS VARCHAR2(4000) NOT NULL
-);
-
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_PK PRIMARY KEY (AUTHZ_OBJ_ID_OID,PATHS);
-
-- Constraints for table AUTHZ_PATHS_MAPPING for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX AUTHZOBJNAME ON AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_NAME);
--- Constraints for table MAUTHZPATHSMAPPING_PATHS
-ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSMAPPING_PATHS_FK1 FOREIGN KEY (AUTHZ_OBJ_ID_OID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID) INITIALLY DEFERRED ;
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE AUTHZ_PATH
+ (
+ PATH_ID NUMBER NOT NULL,
+ PATH_NAME VARCHAR(4000),
+ AUTHZ_OBJ_ID NUMBER
+);
+
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_PK PRIMARY KEY (PATH_ID);
+
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_FK
+ FOREIGN KEY (AUTHZ_OBJ_ID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID);
-CREATE INDEX MAUTHZPATHSMAPPING_PATHS_N49 ON MAUTHZPATHSMAPPING_PATHS (AUTHZ_OBJ_ID_OID);
-- Table "SENTRY_PERM_CHANGE" for classes [org.apache.sentry.provider.db.service.model.MSentryPermChange]
CREATE TABLE "SENTRY_PERM_CHANGE"
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/sentry-postgres-1.8.0.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/sentry-postgres-1.8.0.sql b/sentry-provider/sentry-provider-db/src/main/resources/sentry-postgres-1.8.0.sql
index 68d2c8d..d2a4e0d 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/sentry-postgres-1.8.0.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/sentry-postgres-1.8.0.sql
@@ -217,21 +217,24 @@ CREATE TABLE "AUTHZ_PATHS_MAPPING"
CONSTRAINT "AUTHZ_PATHS_MAPPING_PK" PRIMARY KEY ("AUTHZ_OBJ_ID")
);
--- Table "MAUTHZPATHSMAPPING_PATHS" for join relationship
-CREATE TABLE "MAUTHZPATHSMAPPING_PATHS"
-(
- "AUTHZ_OBJ_ID_OID" int8 NOT NULL,
- "PATHS" varchar(4000) NOT NULL,
- CONSTRAINT "MAUTHZPATHSMAPPING_PATHS_PK" PRIMARY KEY ("AUTHZ_OBJ_ID_OID","PATHS")
-);
-
-- Constraints for table "AUTHZ_PATHS_MAPPING" for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX "AUTHZOBJNAME" ON "AUTHZ_PATHS_MAPPING" ("AUTHZ_OBJ_NAME");
--- Constraints for table "MAUTHZPATHSMAPPING_PATHS"
-ALTER TABLE "MAUTHZPATHSMAPPING_PATHS" ADD CONSTRAINT "MAUTHZPATHSMAPPING_PATHS_FK1" FOREIGN KEY ("AUTHZ_OBJ_ID_OID") REFERENCES "AUTHZ_PATHS_MAPPING" ("AUTHZ_OBJ_ID") INITIALLY DEFERRED ;
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE "AUTHZ_PATH"
+ (
+ "PATH_ID" BIGINT NOT NULL,
+ "PATH_NAME" varchar(4000),
+ "AUTHZ_OBJ_ID" BIGINT
+);
+
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE "AUTHZ_PATH"
+ ADD CONSTRAINT "AUTHZ_PATH_PK" PRIMARY KEY ("PATH_ID");
-CREATE INDEX "MAUTHZPATHSMAPPING_PATHS_N49" ON "MAUTHZPATHSMAPPING_PATHS" ("AUTHZ_OBJ_ID_OID");
+ALTER TABLE "AUTHZ_PATH"
+ ADD CONSTRAINT "AUTHZ_PATH_FK"
+ FOREIGN KEY ("AUTHZ_OBJ_ID") REFERENCES "AUTHZ_PATHS_MAPPING" ("AUTHZ_OBJ_ID") DEFERRABLE;
-- Table `SENTRY_PERM_CHANGE` for classes [org.apache.sentry.provider.db.service.model.MSentryPermChange]
CREATE TABLE "SENTRY_PERM_CHANGE"
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/main/resources/sentry-upgrade-db2-1.7.0-to-1.8.0.sql
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/resources/sentry-upgrade-db2-1.7.0-to-1.8.0.sql b/sentry-provider/sentry-provider-db/src/main/resources/sentry-upgrade-db2-1.7.0-to-1.8.0.sql
index 5376c16..7c3db17 100644
--- a/sentry-provider/sentry-provider-db/src/main/resources/sentry-upgrade-db2-1.7.0-to-1.8.0.sql
+++ b/sentry-provider/sentry-provider-db/src/main/resources/sentry-upgrade-db2-1.7.0-to-1.8.0.sql
@@ -33,18 +33,24 @@ ALTER TABLE SENTRY_ROLE_USER_MAP ADD CONSTRAINT SENTRY_ROLE_USER_MAP_FK1 FOREIGN
ALTER TABLE AUTHZ_PATHS_MAPPING ADD CONSTRAINT AUTHZ_PATHSCO7K_PK PRIMARY KEY (AUTHZ_OBJ_ID);
--- Table MAUTHZPATHSMAPPING_PATHS for join relationship
- CREATE TABLE MAUTHZPATHSMAPPING_PATHS(AUTHZ_OBJ_ID_OID BIGINT NOT NULL,PATHS VARCHAR(4000) NOT NULL);
-
- ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHSS184_PK PRIMARY KEY (AUTHZ_OBJ_ID_OID,PATHS);
-
-- Constraints for table AUTHZ_PATHS_MAPPING for class(es) [org.apache.sentry.provider.db.service.model.MAuthzPathsMapping]
CREATE UNIQUE INDEX AUTHZOBJNAME ON AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_NAME);
--- Constraints for table MAUTHZPATHSMAPPING_PATHS
- ALTER TABLE MAUTHZPATHSMAPPING_PATHS ADD CONSTRAINT MAUTHZPATHS184_FK1 FOREIGN KEY (AUTHZ_OBJ_ID_OID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID) ;
+-- Table `AUTHZ_PATH` for classes [org.apache.sentry.provider.db.service.model.MPath]
+CREATE TABLE AUTHZ_PATH
+ (
+ PATH_ID BIGINT NOT NULL,
+ PATH_NAME VARCHAR(4000),
+ AUTHZ_OBJ_ID BIGINT
+);
+
+-- Constraints for table `AUTHZ_PATH`
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_PK PRIMARY KEY (PATH_ID);
-CREATE INDEX MAUTHZPATHS184_N49 ON MAUTHZPATHSMAPPING_PATHS (AUTHZ_OBJ_ID_OID);
+ALTER TABLE AUTHZ_PATH
+ ADD CONSTRAINT AUTHZ_PATH_FK
+ FOREIGN KEY (AUTHZ_OBJ_ID) REFERENCES AUTHZ_PATHS_MAPPING (AUTHZ_OBJ_ID);
-- Table `SENTRY_PERM_CHANGE` for classes [org.apache.sentry.provider.db.service.model.MSentryPermChange]
CREATE TABLE "SENTRY_PERM_CHANGE"
http://git-wip-us.apache.org/repos/asf/sentry/blob/c94cfa6e/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/persistent/TestSentryStore.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/persistent/TestSentryStore.java b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/persistent/TestSentryStore.java
index fe3880d..31a309b 100644
--- a/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/persistent/TestSentryStore.java
+++ b/sentry-provider/sentry-provider-db/src/test/java/org/apache/sentry/provider/db/service/persistent/TestSentryStore.java
@@ -2240,24 +2240,64 @@ public class TestSentryStore extends org.junit.Assert {
assertEquals(2, roles.size());
}
+ /*
+ Makes sure that Authorizable object could be associated with multiple paths and can be properly persisted into
+ database.
+ */
@Test
public void testAuthzPathsMapping() throws Exception {
- sentryStore.createAuthzPathsMapping("db1.table1", Sets.newHashSet("/user/hive/warehouse/db1.db/table1"));
- sentryStore.createAuthzPathsMapping("db1.table2", Sets.newHashSet("/user/hive/warehouse/db1.db/table2"));
+ sentryStore.createAuthzPathsMapping("db1.table1", Sets.newHashSet("/user/hive/warehouse/db1.db/table1.1","/user/hive/warehouse/db1.db/table1.2"));
+ sentryStore.createAuthzPathsMapping("db1.table2", Sets.newHashSet("/user/hive/warehouse/db1.db/table2.1","/user/hive/warehouse/db1.db/table2.2"));
PathsImage pathsImage = sentryStore.retrieveFullPathsImage();
Map<String, Set<String>> pathImage = pathsImage.getPathImage();
assertEquals(2, pathImage.size());
- assertEquals(Sets.newHashSet("/user/hive/warehouse/db1.db/table1"), pathImage.get("db1.table1"));
+ for (Map.Entry<String, Set<String>> entry : pathImage.entrySet()) {
+ assertEquals(2, entry.getValue().size());
+ }
+ assertEquals(Sets.newHashSet("/user/hive/warehouse/db1.db/table1.1","/user/hive/warehouse/db1.db/table1.2"), pathImage.get("db1.table1"));
+ assertEquals(Sets.newHashSet("/user/hive/warehouse/db1.db/table2.1","/user/hive/warehouse/db1.db/table2.2"), pathImage.get("db1.table2"));
Map<String, Set<String>> authzPaths = new HashMap<>();
- authzPaths.put("db2.table1", Sets.newHashSet("/user/hive/warehouse/db2.db/table1"));
- authzPaths.put("db2.table2", Sets.newHashSet("/user/hive/warehouse/db2.db/table2"));
+ authzPaths.put("db2.table1", Sets.newHashSet("/user/hive/warehouse/db2.db/table1.1","/user/hive/warehouse/db2.db/table1.2"));
+ authzPaths.put("db2.table2", Sets.newHashSet("/user/hive/warehouse/db2.db/table2.1","/user/hive/warehouse/db2.db/table2.2"));
sentryStore.persistFullPathsImage(authzPaths);
pathsImage = sentryStore.retrieveFullPathsImage();
pathImage = pathsImage.getPathImage();
assertEquals(4, pathImage.size());
- assertEquals(Sets.newHashSet("/user/hive/warehouse/db2.db/table1"), pathImage.get("db2.table1"));
+ for (Map.Entry<String, Set<String>> entry : pathImage.entrySet()) {
+ assertEquals(2, entry.getValue().size());
+ }
+ assertEquals(Sets.newHashSet("/user/hive/warehouse/db2.db/table1.1","/user/hive/warehouse/db2.db/table1.2"), pathImage.get("db2.table1"));
+ assertEquals(Sets.newHashSet("/user/hive/warehouse/db2.db/table2.1","/user/hive/warehouse/db2.db/table2.2"), pathImage.get("db2.table2"));
+ }
+
+ /*
+ Makes sure that Authorizable object could be associated with multiple files and are associated with other Authorizable
+ objects and can be properly persisted into database.
+ */
+ @Test
+ public void testAuthzSharedPathsMapping() throws Exception {
+ sentryStore.createAuthzPathsMapping("db1.table1", Sets.newHashSet("/user/hive/warehouse/db1.db/table1.1","/user/hive/warehouse/db1.db/table1.2"));
+
+ PathsImage pathsImage = sentryStore.retrieveFullPathsImage();
+ Map<String, Set<String>> pathImage = pathsImage.getPathImage();
+ assertEquals(1, pathImage.size());
+ for (Map.Entry<String, Set<String>> entry : pathImage.entrySet()) {
+ assertEquals(2, entry.getValue().size());
+ }
+ assertEquals(Sets.newHashSet("/user/hive/warehouse/db1.db/table1.1","/user/hive/warehouse/db1.db/table1.2"), pathImage.get("db1.table1"));
+
+ Map<String, Set<String>> authzPaths = new HashMap<>();
+ authzPaths.put("db2.table1", Sets.newHashSet("/user/hive/warehouse/db1.db/table1.1","/user/hive/warehouse/db1.db/table1.2"));
+ sentryStore.persistFullPathsImage(authzPaths);
+ pathsImage = sentryStore.retrieveFullPathsImage();
+ pathImage = pathsImage.getPathImage();
+ assertEquals(2, pathImage.size());
+ for (Map.Entry<String, Set<String>> entry : pathImage.entrySet()) {
+ assertEquals(2, entry.getValue().size());
+ }
+ assertEquals(Sets.newHashSet("/user/hive/warehouse/db1.db/table1.1","/user/hive/warehouse/db1.db/table1.2"), pathImage.get("db2.table1"));
}
public void testQueryParamBuilder() {