/** * Creates a builder for the new instance of file info. * * @return A builder to construct a new unmodifiable instance * of this class. */ public static Builder builder() { return new Builder(new GridGgfsFileInfo()); }
/** * Creates a builder for the new instance of file info. * * @return A builder to construct a new unmodifiable instance * of this class. */ public static Builder builder() { return new Builder(new GridGgfsFileInfo()); }
/** * Creates a builder for the new instance of file info, * based on the specified origin. * * @param origin An origin for new instance, from which * the data will be copied. * @return A builder to construct a new unmodifiable instance * of this class. */ public static Builder builder(GridGgfsFileInfo origin) { return new Builder(new GridGgfsFileInfo(origin)); }
/** * Creates a builder for the new instance of file info, * based on the specified origin. * * @param origin An origin for new instance, from which * the data will be copied. * @return A builder to construct a new unmodifiable instance * of this class. */ public static Builder builder(GridGgfsFileInfo origin) { return new Builder(new GridGgfsFileInfo(origin)); }
/** {@inheritDoc} */ @Override public GridGgfsFileInfo apply(GridGgfsFileInfo fileInfo) { Map<String, GridGgfsListingEntry> listing = fileInfo.listing(); GridGgfsListingEntry entry = listing.get(fileName); if (entry == null || !entry.fileId().equals(fileId)) return fileInfo; entry = new GridGgfsListingEntry(entry, entry.length() + lenDelta, accessTime == -1 ? entry.accessTime() : accessTime, modificationTime == -1 ? entry.modificationTime() : modificationTime); // Create new map to replace info. listing = new HashMap<>(listing); // Modify listing map in-place since map is serialization-safe. listing.put(fileName, entry); return new GridGgfsFileInfo(listing, fileInfo); }
/** {@inheritDoc} */ @Override public GridGgfsFileInfo apply(GridGgfsFileInfo fileInfo) { Map<String, GridGgfsListingEntry> listing = fileInfo.listing(); GridGgfsListingEntry entry = listing.get(fileName); if (entry == null || !entry.fileId().equals(fileId)) return fileInfo; entry = new GridGgfsListingEntry(entry, entry.length() + lenDelta, accessTime == -1 ? entry.accessTime() : accessTime, modificationTime == -1 ? entry.modificationTime() : modificationTime); // Create new map to replace info. listing = new HashMap<>(listing); // Modify listing map in-place since map is serialization-safe. listing.put(fileName, entry); return new GridGgfsFileInfo(listing, fileInfo); }
/** * Gets file info by its ID. * * @param fileId File ID to get details for. * @return File info. * @throws GridException If failed. */ @Nullable public GridGgfsFileInfo info(@Nullable GridUuid fileId) throws GridException { if (busyLock.enterBusy()) { try { if (fileId == null) return null; GridGgfsFileInfo info = id2InfoPrj.get(fileId); // Force root ID always exist in cache. if (info == null && ROOT_ID.equals(fileId)) id2InfoPrj.putxIfAbsent(ROOT_ID, info = new GridGgfsFileInfo()); return info; } finally { busyLock.leaveBusy(); } } else throw new IllegalStateException("Failed to get file info because Grid is stopping: " + fileId); }
/** * Gets file info by its ID. * * @param fileId File ID to get details for. * @return File info. * @throws GridException If failed. */ @Nullable public GridGgfsFileInfo info(@Nullable GridUuid fileId) throws GridException { if (busyLock.enterBusy()) { try { if (fileId == null) return null; GridGgfsFileInfo info = id2InfoPrj.get(fileId); // Force root ID always exist in cache. if (info == null && ROOT_ID.equals(fileId)) id2InfoPrj.putxIfAbsent(ROOT_ID, info = new GridGgfsFileInfo()); return info; } finally { busyLock.leaveBusy(); } } else throw new IllegalStateException("Failed to get file info because Grid is stopping: " + fileId); }
GridGgfsFileInfo info = new GridGgfsFileInfo();
/** {@inheritDoc} */ @Override public GridGgfsFileInfo apply(GridGgfsFileInfo oldInfo) { GridGgfsFileMap oldMap = oldInfo.fileMap(); GridGgfsFileMap newMap = new GridGgfsFileMap(oldMap); newMap.addRange(range); // Update file length. GridGgfsFileInfo updated = new GridGgfsFileInfo(oldInfo, oldInfo.length() + space); updated.fileMap(newMap); return updated; }
/** {@inheritDoc} */ @Override public GridGgfsFileInfo apply(GridGgfsFileInfo oldInfo) { GridGgfsFileMap oldMap = oldInfo.fileMap(); GridGgfsFileMap newMap = new GridGgfsFileMap(oldMap); newMap.addRange(range); // Update file length. GridGgfsFileInfo updated = new GridGgfsFileInfo(oldInfo, oldInfo.length() + space); updated.fileMap(newMap); return updated; }
/** {@inheritDoc} */ @Override @Nullable public GridGgfsFileInfo apply(GridGgfsFileInfo fileInfo) { assert fileInfo != null : "File info not found for the child: " + entry.fileId(); assert fileInfo.isDirectory(); Map<String, GridGgfsListingEntry> listing = new HashMap<>(fileInfo.listing().size() + (rmv ? 0 : 1)); listing.putAll(fileInfo.listing()); if (rmv) { GridGgfsListingEntry oldEntry = listing.get(fileName); if (oldEntry == null || !oldEntry.fileId().equals(entry.fileId())) throw new GridRuntimeException("Directory listing doesn't contain expected file" + " [listing=" + listing + ", fileName=" + fileName + ", entry=" + entry + ']'); // Modify listing in-place. listing.remove(fileName); } else { // Modify listing in-place. GridGgfsListingEntry oldEntry = listing.put(fileName, entry); if (oldEntry != null && !oldEntry.fileId().equals(entry.fileId())) throw new GridRuntimeException("Directory listing contains unexpected file" + " [listing=" + listing + ", fileName=" + fileName + ", entry=" + entry + ", oldEntry=" + oldEntry + ']'); } return new GridGgfsFileInfo(listing, fileInfo); }
/** {@inheritDoc} */ @Override @Nullable public GridGgfsFileInfo apply(GridGgfsFileInfo fileInfo) { assert fileInfo != null : "File info not found for the child: " + entry.fileId(); assert fileInfo.isDirectory(); Map<String, GridGgfsListingEntry> listing = U.newHashMap(fileInfo.listing().size() + (rmv ? 0 : 1)); listing.putAll(fileInfo.listing()); if (rmv) { GridGgfsListingEntry oldEntry = listing.get(fileName); if (oldEntry == null || !oldEntry.fileId().equals(entry.fileId())) throw new GridRuntimeException("Directory listing doesn't contain expected file" + " [listing=" + listing + ", fileName=" + fileName + ", entry=" + entry + ']'); // Modify listing in-place. listing.remove(fileName); } else { // Modify listing in-place. GridGgfsListingEntry oldEntry = listing.put(fileName, entry); if (oldEntry != null && !oldEntry.fileId().equals(entry.fileId())) throw new GridRuntimeException("Directory listing contains unexpected file" + " [listing=" + listing + ", fileName=" + fileName + ", entry=" + entry + ", oldEntry=" + oldEntry + ']'); } return new GridGgfsFileInfo(listing, fileInfo); }
/** * Set lock on file info. * * @param info File info. * @return New file info with lock set. * @throws GridException In case lock is already set on that file. */ public GridGgfsFileInfo lockInfo(GridGgfsFileInfo info) throws GridException { if (busyLock.enterBusy()) { try { assert info != null; if (info.lockId() != null) throw new GridException("Failed to lock file (file is being concurrently written) [fileId=" + info.id() + ", lockId=" + info.lockId() + ']'); return new GridGgfsFileInfo(info, GridUuid.randomUuid(), info.modificationTime()); } finally { busyLock.leaveBusy(); } } else throw new IllegalStateException("Failed to get lock info because Grid is stopping: " + info); }
/** * Set lock on file info. * * @param info File info. * @return New file info with lock set. * @throws GridException In case lock is already set on that file. */ public GridGgfsFileInfo lockInfo(GridGgfsFileInfo info) throws GridException { if (busyLock.enterBusy()) { try { assert info != null; if (info.lockId() != null) throw new GridException("Failed to lock file (file is being concurrently written) [fileId=" + info.id() + ", lockId=" + info.lockId() + ']'); return new GridGgfsFileInfo(info, GridUuid.randomUuid(), info.modificationTime()); } finally { busyLock.leaveBusy(); } } else throw new IllegalStateException("Failed to get lock info because Grid is stopping: " + info); }
info = status.isDirectory() ? new GridGgfsFileInfo(true, status.properties()) : new GridGgfsFileInfo(status.blockSize(), status.length(), null, null, false, status.properties());
@Override public GridGgfsFileInfo applyx(GridGgfsFileInfo info) throws GridException { GridGgfsFileMap map = new GridGgfsFileMap(info.fileMap()); map.deleteRange(range); if (log.isDebugEnabled()) log.debug("Deleted range from file map [fileId=" + info.id() + ", range=" + range + ", oldMap=" + info.fileMap() + ", newMap=" + map + ']'); GridGgfsFileInfo updated = new GridGgfsFileInfo(info, info.length()); updated.fileMap(map); return updated; } };
@Override public GridGgfsFileInfo applyx(GridGgfsFileInfo info) throws GridException { GridGgfsFileMap map = new GridGgfsFileMap(info.fileMap()); map.updateRangeStatus(range, status); if (log.isDebugEnabled()) log.debug("Updated file map for range [fileId=" + info.id() + ", range=" + range + ", status=" + status + ", oldMap=" + info.fileMap() + ", newMap=" + map + ']'); GridGgfsFileInfo updated = new GridGgfsFileInfo(info, info.length()); updated.fileMap(map); return updated; } };
@Override public GridGgfsFileInfo applyx(GridGgfsFileInfo info) throws GridException { GridGgfsFileMap map = new GridGgfsFileMap(info.fileMap()); map.updateRangeStatus(range, status); if (log.isDebugEnabled()) log.debug("Updated file map for range [fileId=" + info.id() + ", range=" + range + ", status=" + status + ", oldMap=" + info.fileMap() + ", newMap=" + map + ']'); GridGgfsFileInfo updated = new GridGgfsFileInfo(info, info.length()); updated.fileMap(map); return updated; } };
@Override public GridGgfsFileInfo applyx(GridGgfsFileInfo info) throws GridException { GridGgfsFileMap map = new GridGgfsFileMap(info.fileMap()); map.deleteRange(range); if (log.isDebugEnabled()) log.debug("Deleted range from file map [fileId=" + info.id() + ", range=" + range + ", oldMap=" + info.fileMap() + ", newMap=" + map + ']'); GridGgfsFileInfo updated = new GridGgfsFileInfo(info, info.length()); updated.fileMap(map); return updated; } };