/** * List child files for specified file ID possibly skipping existing transaction. * * @param fileId File to list child files for. * @param skipTx Whether to skip existing transaction. * @return Directory listing for the specified file.* * @throws GridException If failed. */ private Map<String, GridGgfsListingEntry> directoryListing(GridUuid fileId, boolean skipTx) throws GridException { assert fileId != null; GridGgfsFileInfo info = skipTx ? id2InfoPrj.getAllOutTx(Collections.singletonList(fileId)).get(fileId) : id2InfoPrj.get(fileId); return info == null ? Collections.<String, GridGgfsListingEntry>emptyMap() : info.listing(); }
/** * List child files for specified file ID possibly skipping existing transaction. * * @param fileId File to list child files for. * @param skipTx Whether to skip existing transaction. * @return Directory listing for the specified file.* * @throws GridException If failed. */ private Map<String, GridGgfsListingEntry> directoryListing(GridUuid fileId, boolean skipTx) throws GridException { assert fileId != null; GridGgfsFileInfo info = skipTx ? id2InfoPrj.getAllOutTx(Collections.singletonList(fileId)).get(fileId) : id2InfoPrj.get(fileId); return info == null ? Collections.<String, GridGgfsListingEntry>emptyMap() : info.listing(); }
/** * Check whether there are any pending deletes and return collection of pending delete entry IDs. * * @return Collection of entry IDs to be deleted. * @throws GridException If operation failed. */ public Collection<GridUuid> pendingDeletes() throws GridException { if (busyLock.enterBusy()) { try { GridGgfsFileInfo trashInfo = id2InfoPrj.get(TRASH_ID); if (trashInfo != null) { Map<String, GridGgfsListingEntry> listing = trashInfo.listing(); if (listing != null && !listing.isEmpty()) { return F.viewReadOnly(listing.values(), new GridClosure<GridGgfsListingEntry, GridUuid>() { @Override public GridUuid apply(GridGgfsListingEntry e) { return e.fileId(); } }); } } return Collections.emptySet(); } finally { busyLock.leaveBusy(); } } else throw new IllegalStateException("Failed to get pending deletes because Grid is stopping."); }
/** * Check whether there are any pending deletes and return collection of pending delete entry IDs. * * @return Collection of entry IDs to be deleted. * @throws GridException If operation failed. */ public Collection<GridUuid> pendingDeletes() throws GridException { if (busyLock.enterBusy()) { try { GridGgfsFileInfo trashInfo = id2InfoPrj.get(TRASH_ID); if (trashInfo != null) { Map<String, GridGgfsListingEntry> listing = trashInfo.listing(); if (listing != null && !listing.isEmpty()) { return F.viewReadOnly(listing.values(), new GridClosure<GridGgfsListingEntry, GridUuid>() { @Override public GridUuid apply(GridGgfsListingEntry e) { return e.fileId(); } }); } } return Collections.emptySet(); } finally { busyLock.leaveBusy(); } } else throw new IllegalStateException("Failed to get pending deletes because Grid is stopping."); }
/** {@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); }
/** {@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); }
GridGgfsListingEntry listingEntry = parentInfo.listing().get(name);
GridGgfsListingEntry listingEntry = parentInfo.listing().get(name);
for (Map.Entry<String, GridGgfsListingEntry> entry : info.listing().entrySet()) { GridUuid fileId = entry.getValue().fileId();
for (Map.Entry<String, GridGgfsListingEntry> entry : info.listing().entrySet()) { GridUuid fileId = entry.getValue().fileId();
Map<String, GridGgfsListingEntry> listing = info.listing();
Map<String, GridGgfsListingEntry> listing = info.listing();
for (Map.Entry<String, GridGgfsListingEntry> e : info.listing().entrySet()) { GridGgfsPath p = new GridGgfsPath(path, e.getKey());
fileName); GridGgfsListingEntry entry = parentInfo.listing().get(fileName);
/** * 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()); } } }
throw new GridGgfsInvalidPathException("Parent file is not a directory: " + parentInfo); Map<String, GridGgfsListingEntry> parentListing = parentInfo.listing();
throw new GridGgfsInvalidPathException("Parent file is not a directory: " + parentInfo); Map<String, GridGgfsListingEntry> parentListing = parentInfo.listing();