@Override public void addPath(String authzObj, String path) { List<String> pathTree = PathsUpdate.parsePath(path); if(pathTree == null) { return; } LOGGER.debug("#### HMS Path Update [" + "OP : addPath, " + "authzObj : " + authzObj.toLowerCase() + ", " + "path : " + path + "]"); PathsUpdate update = createHMSUpdate(); update.newPathChange(authzObj.toLowerCase()).addToAddPaths(pathTree); notifySentryAndApplyLocal(update); }
@Override public void doTask() throws Exception { Database db = hmsHandler.get_database(dbName); List<String> dbPath = PathsUpdate.parsePath(db.getLocationUri()); if (dbPath != null) { synchronized (update) { Preconditions.checkArgument(dbName.equalsIgnoreCase(db.getName())); update.newPathChange(dbName).addToAddPaths(dbPath); } } List<String> allTblStr = hmsHandler.get_all_tables(dbName); for (int i = 0; i < allTblStr.size(); i += maxTablesPerCall) { List<String> tablesToFetch = allTblStr.subList(i, Math.min( i + maxTablesPerCall, allTblStr.size())); Callable<CallResult> tableTask = new TableTask(db, tablesToFetch, update); synchronized (results) { results.add(threadPool.submit(tableTask)); } } } }
@Override public void doTask() throws Exception { List<Partition> tblParts = hmsHandler.get_partitions_by_names(dbName, tblName, partNames); if (LOGGER.isDebugEnabled()) { LOGGER.debug("#### Fetching partitions " + "[" + dbName + "." + tblName + "]" + "[" + partNames + "]"); } for (Partition part : tblParts) { List<String> partPath = PathsUpdate.parsePath(part.getSd() .getLocation()); if (partPath != null) { synchronized (tblPathChange) { tblPathChange.addToAddPaths(partPath); } } } } }
+ "path : " + location + ", " + "notification event ID: " + event.getEventId() + "]"); update.newPathChange(authzObj).addToAddPaths(splitPath(pathTree)); paths.add(pathTree);
@Override public void renameAuthzObject(String oldName, String oldPath, String newName, String newPath) { if (oldName != null) { oldName = oldName.toLowerCase(); } if (newName != null) { newName = newName.toLowerCase(); } PathsUpdate update = createHMSUpdate(); LOGGER.debug("#### HMS Path Update [" + "OP : renameAuthzObject, " + "oldName : " + oldName + "," + "newPath : " + oldPath + "," + "newName : " + newName + "," + "newPath : " + newPath + "]"); List<String> newPathTree = PathsUpdate.parsePath(newPath); if( newPathTree != null ) { update.newPathChange(newName).addToAddPaths(newPathTree); } List<String> oldPathTree = PathsUpdate.parsePath(oldPath); if( oldPathTree != null ) { update.newPathChange(oldName).addToDelPaths(oldPathTree); } notifySentryAndApplyLocal(update); }
PathsUpdate.parsePath(tbl.getSd().getLocation()); if (tblPath != null) { tblPathChange.addToAddPaths(tblPath);
private void updateAuthzPathsMapping(String oldAuthzObj, String oldPathTree, String newAuthzObj, String newPathTree, NotificationEvent event) throws Exception { if (oldPathTree != null) { UniquePathsUpdate update = new UniquePathsUpdate(event, false); update.newPathChange(oldAuthzObj).addToDelPaths(splitPath(oldPathTree)); sentryStore.deleteAuthzPathsMapping(oldAuthzObj, Collections.singleton(oldPathTree), update); } else if (newPathTree != null) { UniquePathsUpdate update = new UniquePathsUpdate(event, false); update.newPathChange(newAuthzObj).addToAddPaths(splitPath(newPathTree)); sentryStore.addAuthzPathsMapping(newAuthzObj, Collections.singleton(newPathTree), update); } }
UniquePathsUpdate update = new UniquePathsUpdate(event, false); update.newPathChange(oldAuthzObj).addToDelPaths(splitPath(oldPathTree)); update.newPathChange(newAuthzObj).addToAddPaths(splitPath(newPathTree)); if (oldLocation.equals(newLocation)) { UniquePathsUpdate update = new UniquePathsUpdate(event, false); update.newPathChange(oldAuthzObj).addToDelPaths(splitPath(oldPathTree)); update.newPathChange(oldAuthzObj).addToAddPaths(splitPath(newPathTree)); sentryStore.updateAuthzPathsMapping(oldAuthzObj, oldPathTree, newPathTree, update);
addUpdate.newPathChange("db1.table").addToAddPaths(Arrays.asList("db1", "tbl1")); addUpdate.newPathChange("db1.table").addToAddPaths(Arrays.asList("db1", "tbl2")); sentryStore.addAuthzPathsMapping("db1.table", Sets.newHashSet("db1/tbl1", "db1/tbl2"), addUpdate); newAddUpdate.newPathChange("db2.table").addToAddPaths(Arrays.asList("db2", "tbl1")); newAddUpdate.newPathChange("db2.table").addToAddPaths(Arrays.asList("db2", "tbl2")); sentryStore.addAuthzPathsMapping("db2.table", Sets.newHashSet("db2/tbl1", "db2/tbl2"), newAddUpdate); String[]prefixes = {"/"};
update1.newPathChange("db1").addToAddPaths(Arrays.asList("/hive/db1")); update2.newPathChange("db2").addToAddPaths(Arrays.asList("/hive/db2"));
@Test public void testIsAuthzPathsMappingEmpty() throws Exception { // Add "db1.table1" authzObj UniquePathsUpdate addUpdate = new UniquePathsUpdate("u1",1, false); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl1")); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl2")); // Persist an empty image so that we can add paths to it. sentryStore.persistFullPathsImage(new HashMap<String, Collection<String>>(), 0); assertEquals(sentryStore.isAuthzPathsMappingEmpty(), true); sentryStore.addAuthzPathsMapping("db1.table", Sets.newHashSet("db1/tbl1", "db1/tbl2"), addUpdate); String[]prefixes = {"/"}; PathsUpdate pathsUpdate = sentryStore.retrieveFullPathsImageUpdate(prefixes); TPathsDump pathsDump = pathsUpdate.toThrift().getPathsDump(); Map<Integer, TPathEntry>nodeMap = pathsDump.getNodeMap(); TPathEntry root = nodeMap.get(pathsDump.getRootId()); Map<String, Collection<String>> pathImage = new HashMap<>(); buildPathsImageMap(nodeMap, root, "", pathImage, false); assertEquals("/", root.getPathElement()); assertEquals(4, nodeMap.size());//Tree size assertEquals(1, pathImage.size()); assertEquals(2, pathImage.get("db1.table").size()); assertEquals(2, sentryStore.getMPaths().size()); assertEquals(sentryStore.isAuthzPathsMappingEmpty(), false); sentryStore.clearAllTables(); assertEquals(sentryStore.isAuthzPathsMappingEmpty(), true); }
.addToDelPaths(Arrays.asList("another-warehouse", "db3.db", "table1.1")); renameUpdate.newPathChange("db1.newTable1") .addToAddPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); sentryStore.renameAuthzPathsMapping("db3.table1", "db1.newTable1", "/another-warehouse/db3.db/table1.1", "user/hive/warehouse/db1.db/newTable1", renameUpdate); .addToDelPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); update.newPathChange("db1.newTable1") .addToAddPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable2")); sentryStore.updateAuthzPathsMapping("db1.newTable2", "user/hive/warehouse/db1.db/newTable1",
.addToDelPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "table1")); renameUpdate.newPathChange("db1.newTable1") .addToAddPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); sentryStore.renameAuthzPathsMapping("db1.table1", "db1.newTable1", "user/hive/warehouse/db1.db/table1", "user/hive/warehouse/db1.db/newTable1", renameUpdate);
UniquePathsUpdate addUpdate = new UniquePathsUpdate("u1",1, false); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl1")); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl2"));
.addToDelPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "table1")); renameUpdate.newPathChange("db1.newTable1") .addToAddPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); sentryStore.renameAuthzPathsMapping("db1.table1", "db1.newTable1", "user/hive/warehouse/db1.db/table1", "user/hive/warehouse/db1.db/newTable1", renameUpdate); .addToDelPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); renameUpdate.newPathChange("db1.newTable2") .addToAddPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); sentryStore.renameAuthzObj("db1.newTable1", "db1.newTable2", renameUpdate); pathsUpdate = sentryStore.retrieveFullPathsImageUpdate(prefixes); .addToDelPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable1")); update.newPathChange("db1.newTable1") .addToAddPaths(Arrays.asList("user", "hive", "warehouse", "db1.db", "newTable2")); sentryStore.updateAuthzPathsMapping("db1.newTable2", "user/hive/warehouse/db1.db/newTable1",
UniquePathsUpdate addUpdate = new UniquePathsUpdate("u1", 1, false); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl1")); addUpdate.newPathChange("db1.table"). addToAddPaths(Arrays.asList("db1", "tbl2"));