/** * Constructs file information. * * @param info File information to copy data from. * @param props File properties to set. */ GridGgfsFileInfo(GridGgfsFileInfo info, @Nullable Map<String, String> props) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, props, info.fileMap(), info.lockId, true, info.accessTime, info.modificationTime, info.evictExclude()); }
/** * Constructs file information. * * @param info File information to copy data from. * @param lockId Lock ID. * @param modificationTime Last modification time. */ GridGgfsFileInfo(GridGgfsFileInfo info, @Nullable GridUuid lockId, long modificationTime) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, info.props, info.fileMap(), lockId, true, info.accessTime, modificationTime, info.evictExclude()); }
/** * Constructs file information. * * @param info File information to copy data from. * @param props File properties to set. */ GridGgfsFileInfo(GridGgfsFileInfo info, @Nullable Map<String, String> props) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, props, info.fileMap(), info.lockId, true, info.accessTime, info.modificationTime, info.evictExclude()); }
/** * Constructs file information. * * @param info File information to copy data from. * @param lockId Lock ID. * @param modificationTime Last modification time. */ GridGgfsFileInfo(GridGgfsFileInfo info, @Nullable GridUuid lockId, long modificationTime) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, info.props, info.fileMap(), lockId, true, info.accessTime, modificationTime, info.evictExclude()); }
/** * Constructs file info. * * @param listing New directory listing. * @param old Old file info. */ GridGgfsFileInfo(Map<String, GridGgfsListingEntry> listing, GridGgfsFileInfo old) { this(old.isDirectory(), old.id, old.blockSize, old.len, old.affKey, listing, old.props, old.fileMap(), old.lockId, false, old.accessTime, old.modificationTime, old.evictExclude()); }
/** * Constructs file information. * * @param info File information to copy data from. * @param len Size of a file. */ GridGgfsFileInfo(GridGgfsFileInfo info, long len) { this(info.isDirectory(), info.id, info.blockSize, len, info.affKey, info.listing, info.props, info.fileMap(), info.lockId, true, info.accessTime, info.modificationTime, info.evictExclude()); }
/** * Constructs file info. * * @param listing New directory listing. * @param old Old file info. */ GridGgfsFileInfo(Map<String, GridGgfsListingEntry> listing, GridGgfsFileInfo old) { this(old.isDirectory(), old.id, old.blockSize, old.len, old.affKey, listing, old.props, old.fileMap(), old.lockId, false, old.accessTime, old.modificationTime, old.evictExclude()); }
/** * Constructs file information. * * @param info File information to copy data from. * @param len Size of a file. */ GridGgfsFileInfo(GridGgfsFileInfo info, long len) { this(info.isDirectory(), info.id, info.blockSize, len, info.affKey, info.listing, info.props, info.fileMap(), info.lockId, true, info.accessTime, info.modificationTime, info.evictExclude()); }
/** * Constructs file info. * * @param info File info. * @param accessTime Last access time. * @param modificationTime Last modification time. */ GridGgfsFileInfo(GridGgfsFileInfo info, long accessTime, long modificationTime) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, info.props, info.fileMap(), info.lockId, false, accessTime, modificationTime, info.evictExclude()); }
/** * A copy constructor, which takes all data from the specified * object field-by-field. * * @param info An object to copy data info. */ public GridGgfsFileInfo(GridGgfsFileInfo info) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, info.props, info.fileMap(), info.lockId, true, info.accessTime, info.modificationTime, info.evictExclude()); }
/** * Constructs file info. * * @param info File info. * @param accessTime Last access time. * @param modificationTime Last modification time. */ GridGgfsFileInfo(GridGgfsFileInfo info, long accessTime, long modificationTime) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, info.props, info.fileMap(), info.lockId, false, accessTime, modificationTime, info.evictExclude()); }
/** * A copy constructor, which takes all data from the specified * object field-by-field. * * @param info An object to copy data info. */ public GridGgfsFileInfo(GridGgfsFileInfo info) { this(info.isDirectory(), info.id, info.blockSize, info.len, info.affKey, info.listing, info.props, info.fileMap(), info.lockId, true, info.accessTime, info.modificationTime, info.evictExclude()); }
/** {@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); }
return null; assert info.isDirectory();
@Override public GridGgfsSecondaryOutputStreamDescriptor onSuccess(Map<GridGgfsPath, GridGgfsFileInfo> infos) throws Exception { GridGgfsFileInfo info = infos.get(path); if (info.isDirectory()) throw new GridGgfsException("Failed to open output stream to the file in the " + "secondary file system because the path points to a directory: " + path); out = fs.append(path, bufSize, false, null); // Synchronize file ending. long len = info.length(); int blockSize = info.blockSize(); int remainder = (int)(len % blockSize); if (remainder > 0) { int blockIdx = (int)(len / blockSize); GridGgfsReader reader = fs.open(path, bufSize); try { ggfsCtx.data().dataBlock(info, path, blockIdx, reader).get(); } finally { reader.close(); } } // Set lock and return. info = lockInfo(info); metaCache.putx(info.id(), info); return new GridGgfsSecondaryOutputStreamDescriptor(infos.get(path.parent()).id(), info, out); }
/** * Calculates size of directory or file for given ID. * * @param fileId File ID. * @param sum Summary object that will collect information. * @throws GridException If failed. */ private void summary0(GridUuid fileId, GridGgfsPathSummary sum) throws GridException { assert sum != null; GridGgfsFileInfo info = meta.info(fileId); if (info != null) { if (info.isDirectory()) { if (!ROOT_ID.equals(info.id())) sum.directoriesCount(sum.directoriesCount() + 1); for (GridGgfsListingEntry entry : info.listing().values()) summary0(entry.fileId(), sum); } else { sum.filesCount(sum.filesCount() + 1); sum.totalLength(sum.totalLength() + info.length()); } } }
/** * Calculates size of directory or file for given ID. * * @param fileId File ID. * @param sum Summary object that will collect information. * @throws GridException If failed. */ private void summary0(GridUuid fileId, GridGgfsPathSummary sum) throws GridException { assert sum != null; GridGgfsFileInfo info = meta.info(fileId); if (info != null) { if (info.isDirectory()) { if (!ROOT_ID.equals(info.id())) sum.directoriesCount(sum.directoriesCount() + 1); for (GridGgfsListingEntry entry : info.listing().values()) summary0(entry.fileId(), sum); } else { sum.filesCount(sum.filesCount() + 1); sum.totalLength(sum.totalLength() + info.length()); } } }
@Override public GridGgfsSecondaryOutputStreamDescriptor onSuccess(Map<GridGgfsPath, GridGgfsFileInfo> infos) throws Exception { GridGgfsFileInfo info = infos.get(path); if (info.isDirectory()) throw new GridGgfsException("Failed to open output stream to the file in the " + "secondary file system because the path points to a directory: " + path); out = fs.append(path, bufSize, false, null); // Synchronize file ending. long len = info.length(); int blockSize = info.blockSize(); int remainder = (int)(len % blockSize); if (remainder > 0) { int blockIdx = (int)(len / blockSize); GridGgfsReader reader = fs.open(path, bufSize); try { ggfsCtx.data().dataBlock(info, path, blockIdx, reader).get(); } finally { reader.close(); } } // Set lock and return. info = lockInfo(info); metaCache.putx(info.id(), info); return new GridGgfsSecondaryOutputStreamDescriptor(infos.get(path.parent()).id(), info, out); }
throw new GridGgfsFileNotFoundException("Failed to lock parent directory (not found): " + parentId); if (!parentInfo.isDirectory()) throw new GridGgfsInvalidPathException("Parent file is not a directory: " + parentInfo);