@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 removeAllPaths(String authzObj, List<String> childObjects) { LOGGER.debug("#### HMS Path Update [" + "OP : removeAllPaths, " + "authzObj : " + authzObj.toLowerCase() + ", " + "childObjs : " + (childObjects == null ? "[]" : childObjects) + "]"); PathsUpdate update = createHMSUpdate(); if (childObjects != null) { for (String childObj : childObjects) { update.newPathChange(authzObj.toLowerCase() + "." + childObj).addToDelPaths( Lists.newArrayList(PathsUpdate.ALL_PATHS)); } } update.newPathChange(authzObj.toLowerCase()).addToDelPaths( Lists.newArrayList(PathsUpdate.ALL_PATHS)); notifySentryAndApplyLocal(update); }
public TPathChanges deepCopy() { return new TPathChanges(this); }
public Object getFieldValue(_Fields field) { switch (field) { case AUTHZ_OBJ: return getAuthzObj(); case ADD_PATHS: return getAddPaths(); case DEL_PATHS: return getDelPaths(); } throw new IllegalStateException(); }
TPathChanges newPathInfo = null; TPathChanges oldPathInfo = null; if (pathChanges.get(0).getAddPathsSize() == 1 && pathChanges.get(1).getDelPathsSize() == 1) { newPathInfo = pathChanges.get(0); oldPathInfo = pathChanges.get(1); } else if (pathChanges.get(1).getAddPathsSize() == 1 && pathChanges.get(0).getDelPathsSize() == 1) { newPathInfo = pathChanges.get(1); oldPathInfo = pathChanges.get(0); oldPathInfo.getAuthzObj(), oldPathInfo.getDelPaths().get(0), newPathInfo.getAuthzObj(), newPathInfo.getAddPaths().get(0)); return; paths.addPathsToAuthzObject(pathChanges.getAuthzObj(), pathChanges .getAddPaths(), true); List<List<String>> delPaths = pathChanges.getDelPaths(); if (delPaths.size() == 1 && delPaths.get(0).size() == 1 && delPaths.get(0).get(0).equals(PathsUpdate.ALL_PATHS)) { paths.deleteAuthzObject(pathChanges.getAuthzObj()); } else { paths.deletePathsFromAuthzObject(pathChanges.getAuthzObj(), pathChanges .getDelPaths());
@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); }
_elem60 = new TPathChanges(); _elem60.read(iprot); struct.pathChanges.add(_elem60);
@Override public boolean equals(Object that) { if (that == null) return false; if (that instanceof TPathChanges) return this.equals((TPathChanges)that); return false; }
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); } }
@Override public void read(org.apache.thrift.protocol.TProtocol prot, TPathsUpdate struct) throws org.apache.thrift.TException { TTupleProtocol iprot = (TTupleProtocol) prot; struct.hasFullImage = iprot.readBool(); struct.setHasFullImageIsSet(true); struct.seqNum = iprot.readI64(); struct.setSeqNumIsSet(true); { org.apache.thrift.protocol.TList _list63 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32()); struct.pathChanges = new ArrayList<TPathChanges>(_list63.size); for (int _i64 = 0; _i64 < _list63.size; ++_i64) { TPathChanges _elem65; // required _elem65 = new TPathChanges(); _elem65.read(iprot); struct.pathChanges.add(_elem65); } } struct.setPathChangesIsSet(true); BitSet incoming = iprot.readBitSet(1); if (incoming.get(0)) { struct.pathsDump = new TPathsDump(); struct.pathsDump.read(iprot); struct.setPathsDumpIsSet(true); } } }
update.newPathChange(oldAuthzObj).addToDelPaths(splitPath(oldPathTree)); update.newPathChange(newAuthzObj).addToAddPaths(splitPath(newPathTree)); if (oldLocation.equals(newLocation)) { update.newPathChange(oldAuthzObj).addToDelPaths(splitPath(oldPathTree)); update.newPathChange(oldAuthzObj).addToAddPaths(splitPath(newPathTree)); sentryStore.updateAuthzPathsMapping(oldAuthzObj, oldPathTree, newPathTree, 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 removePath(String authzObj, String path) { if ("*".equals(path)) { removeAllPaths(authzObj.toLowerCase(), null); } else { List<String> pathTree = PathsUpdate.parsePath(path); if(pathTree == null) { return; } LOGGER.debug("#### HMS Path Update [" + "OP : removePath, " + "authzObj : " + authzObj.toLowerCase() + ", " + "path : " + path + "]"); PathsUpdate update = createHMSUpdate(); update.newPathChange(authzObj.toLowerCase()).addToDelPaths(pathTree); notifySentryAndApplyLocal(update); } }
public TPathChanges newPathChange(String authzObject) { TPathChanges pathChanges = new TPathChanges(authzObject, new LinkedList<List<String>>(), new LinkedList<List<String>>()); tPathsUpdate.addToPathChanges(pathChanges); return pathChanges; }
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 = {"/"}; delUpdate.newPathChange("db2.table").addToDelPaths(Arrays.asList("db2", "tbl1")); sentryStore.deleteAuthzPathsMapping("db2.table", Sets.newHashSet("db2/tbl1"), delUpdate); pathsUpdate = sentryStore.retrieveFullPathsImageUpdate(prefixes);
@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); } } } } }
/** * Removes a given authzObj and all paths belongs to it from the * authzObj -> [Paths] mapping as well as persist the corresponding * delta path change to Sentry DB. * * @param authzObj the given authzObj to be deleted * @param event the NotificationEvent object from where authzObj and locations were obtained */ private void removeAllPaths(String authzObj, NotificationEvent event) throws Exception { // AuthzObj is case insensitive authzObj = authzObj.toLowerCase(); LOGGER.debug("HMS Path Update [" + "OP : removeAllPaths, " + "authzObj : " + authzObj + ", " + "notification event ID: " + event.getEventId() + "]"); UniquePathsUpdate update = new UniquePathsUpdate(event, false); update.newPathChange(authzObj).addToDelPaths( Lists.newArrayList(PathsUpdate.ALL_PATHS)); sentryStore.deleteAllAuthzPathsMapping(authzObj, update); }
/** * Performs a deep copy on <i>other</i>. */ public TPathsUpdate(TPathsUpdate other) { __isset_bitfield = other.__isset_bitfield; this.hasFullImage = other.hasFullImage; if (other.isSetPathsDump()) { this.pathsDump = new TPathsDump(other.pathsDump); } this.seqNum = other.seqNum; if (other.isSetPathChanges()) { List<TPathChanges> __this__pathChanges = new ArrayList<TPathChanges>(); for (TPathChanges other_element : other.pathChanges) { __this__pathChanges.add(new TPathChanges(other_element)); } this.pathChanges = __this__pathChanges; } }
UniquePathsUpdate renameUpdate = new UniquePathsUpdate("u1", notificationID, false); renameUpdate.newPathChange("db3.table1") .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); UniquePathsUpdate update = new UniquePathsUpdate("u2", notificationID, false); update.newPathChange("db1.newTable1") .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",
+ "path : " + location + ", " + "notification event ID: " + event.getEventId() + "]"); update.newPathChange(authzObj).addToAddPaths(splitPath(pathTree)); paths.add(pathTree);