package diskCacheV111.services.space; import org.springframework.dao.DataAccessException; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import java.util.List; import diskCacheV111.util.AccessLatency; import diskCacheV111.util.PnfsId; import diskCacheV111.util.RetentionPolicy; import diskCacheV111.util.VOInfo; import org.dcache.util.SqlGlob; @ParametersAreNonnullByDefault public interface SpaceManagerDatabase { File selectFileForUpdate(PnfsId pnfsId) throws DataAccessException; File selectFileForUpdate(long id) throws DataAccessException; void removeFile(long fileId) throws DataAccessException; void updateFile(File f) throws DataAccessException; long insertFile(long reservationId, @Nullable String voGroup, @Nullable String voRole, long sizeInBytes, @Nullable PnfsId pnfsId, FileState state) throws DataAccessException, SpaceException; void expire(SpaceCriterion criterion); Space insertSpace(@Nullable String voGroup, @Nullable String voRole, RetentionPolicy retentionPolicy, AccessLatency accessLatency, long linkGroupId, long sizeInBytes, long lifetime, @Nullable String description, SpaceState state, long used, long allocated) throws DataAccessException; Space selectSpaceForUpdate(long id) throws DataAccessException; Space updateSpace(Space space) throws DataAccessException; Space getSpace(long id) throws DataAccessException; long updateLinkGroup(String linkGroupName, long freeSpace, long updateTime, boolean onlineAllowed, boolean nearlineAllowed, boolean replicaAllowed, boolean outputAllowed, boolean custodialAllowed, VOInfo[] linkGroupVOs) throws DataAccessException; LinkGroup getLinkGroup(long id) throws DataAccessException; LinkGroup getLinkGroupByName(String name) throws DataAccessException; /** * Returns the file reservation bound to the pnfsid, or null * if such a reservation is not found. */ File findFile(PnfsId pnfsId) throws DataAccessException; /** Return a new link group criterion. */ LinkGroupCriterion linkGroups(); /** Return link groups matching criterion. */ List<LinkGroup> get(LinkGroupCriterion criterion); /** Return a new space reservation criterion. */ SpaceCriterion spaces(); /** Return space reservations matching criterion. */ List<Space> get(SpaceCriterion criterion, @Nullable Integer limit); /** Return space tokens of spaces matchin criterion. */ List<Long> getSpaceTokensOf(SpaceCriterion criterion); /** Return the number of space reservations matching criterion. */ int count(SpaceCriterion criterion); /** Delete all spaces matching criterion. */ int remove(SpaceCriterion spaceCriterion); /** Return a new file criterion. */ FileCriterion files(); /** Get files matching the criterion. */ List<File> get(FileCriterion criterion, @Nullable Integer limit); /** Return the number of files matching the criterion. */ int count(FileCriterion criterion); /** Delete all files matching criterion. */ int remove(FileCriterion criterion); /** Selection criterion for link groups. */ interface LinkGroupCriterion { LinkGroupCriterion whereUpdateTimeAfter(long latestLinkGroupUpdateTime); LinkGroupCriterion allowsAccessLatency(@Nullable AccessLatency al); LinkGroupCriterion allowsRetentionPolicy(@Nullable RetentionPolicy rp); LinkGroupCriterion whereNameMatches(SqlGlob name); LinkGroupCriterion hasAvailable(long sizeInBytes); } /** Selection criterion for space reservations. */ interface SpaceCriterion { SpaceCriterion whereStateIsIn(SpaceState... state); SpaceCriterion whereRetentionPolicyIs(RetentionPolicy rp); SpaceCriterion whereAccessLatencyIs(AccessLatency al); SpaceCriterion whereDescriptionMatches(SqlGlob desc); SpaceCriterion whereRoleMatches(SqlGlob role); SpaceCriterion whereGroupMatches(SqlGlob group); SpaceCriterion whereTokenIs(long token); SpaceCriterion thatNeverExpire(); SpaceCriterion whereLinkGroupIs(long id); SpaceCriterion whereGroupIs(String group); SpaceCriterion whereRoleIs(String role); SpaceCriterion whereDescriptionIs(String description); SpaceCriterion thatExpireBefore(long millis); SpaceCriterion thatHaveNoFiles(); } /** Selection criterion for file reservations. */ interface FileCriterion { FileCriterion whereGroupMatches(SqlGlob group); FileCriterion whereRoleMatches(SqlGlob role); FileCriterion whereSpaceTokenIs(Long token); FileCriterion whereStateIsIn(FileState... states); FileCriterion wherePnfsIdIs(PnfsId pnfsId); FileCriterion in(SpaceCriterion spaceCriterion); FileCriterion whereCreationTimeIsBefore(long millis); } }