/** * Deletes a set of paths belongs to given authzObj from the authzObj -> [Paths] mapping. * * @param pm PersistenceManager * @param authzObj an authzObj * @param paths a set of paths need to be deleted from the authzObj -> [Paths] mapping. * @throws SentryNoSuchObjectException if cannot find the existing authzObj or path. */ private void deleteAuthzPathsMappingCore(PersistenceManager pm, String authzObj, Iterable<String> paths) { long currentSnapshotID = getCurrentAuthzPathsSnapshotID(pm); if (currentSnapshotID <= EMPTY_PATHS_SNAPSHOT_ID) { LOGGER.error("No paths snapshot ID is found. Cannot delete authzoObj: {}", authzObj); } MAuthzPathsMapping mAuthzPathsMapping = getMAuthzPathsMappingCore(pm, currentSnapshotID, authzObj); if (mAuthzPathsMapping != null) { mAuthzPathsMapping.deletePersistent(pm, paths); } else { LOGGER.error("nonexistent authzObj: {} on current paths snapshot ID #{}", authzObj, currentSnapshotID); } }
/** * Renames the existing authzObj to a new one in the authzObj -> [Paths] mapping. * And updates its existing path with a new path, while keeps the rest of its paths * untouched if there is any. * * @param pm PersistenceManager * @param oldObj the existing authzObj * @param newObj the new name to be changed to * @param oldPath a existing path of the given authzObj * @param newPath a new path to be changed to * @throws SentryNoSuchObjectException if cannot find the existing authzObj or path. */ private void renameAuthzPathsMappingCore(PersistenceManager pm, String oldObj, String newObj, String oldPath, String newPath) { long currentSnapshotID = getCurrentAuthzPathsSnapshotID(pm); if (currentSnapshotID <= EMPTY_PATHS_SNAPSHOT_ID) { LOGGER.error("No paths snapshot ID is found. Cannot rename authzoObj: {}", oldObj); } MAuthzPathsMapping mAuthzPathsMapping = getMAuthzPathsMappingCore(pm, currentSnapshotID, oldObj); if (mAuthzPathsMapping != null) { mAuthzPathsMapping.deletePersistent(pm,Collections.singleton(oldPath)); mAuthzPathsMapping.setAuthzObjName(newObj); mAuthzPathsMapping.addPathToPersist(Collections.singleton(newPath)); mAuthzPathsMapping.makePersistent(pm); } else { LOGGER.error("nonexistent authzObj: {} on current paths snapshot ID #{}", oldObj, currentSnapshotID); } }
/** * Updates authzObj -> [Paths] mapping to replace an existing path with a new one * given an authzObj. * * @param pm PersistenceManager * @param authzObj an authzObj * @param oldPath the existing path maps to the given authzObj * @param newPath a non-empty path to replace the existing one * @throws SentryNoSuchObjectException if no such path found * in the authzObj -> [Paths] mapping. */ private void updateAuthzPathsMappingCore(PersistenceManager pm, String authzObj, String oldPath, String newPath) { long currentSnapshotID = getCurrentAuthzPathsSnapshotID(pm); if (currentSnapshotID <= EMPTY_PATHS_SNAPSHOT_ID) { LOGGER.error("No paths snapshot ID is found. Cannot update authzoObj: {}", authzObj); } MAuthzPathsMapping mAuthzPathsMapping = getMAuthzPathsMappingCore(pm, currentSnapshotID, authzObj); if (mAuthzPathsMapping == null) { mAuthzPathsMapping = new MAuthzPathsMapping(currentSnapshotID, getNextAuthzObjectID(pm), authzObj, Collections.singleton(newPath)); } else { mAuthzPathsMapping.deletePersistent(pm, Collections.singleton(oldPath)); mAuthzPathsMapping.addPathToPersist(Collections.singleton(newPath)); } mAuthzPathsMapping.makePersistent(pm); }