private String storagespaceString() { return "storagespace: " + (quota.getStorageSpace() < 0? "-": usage.getStorageSpace() + "/" + quota.getStorageSpace()); }
private void checkStoragespace(final INodeDirectory dir, final long computed) { if (-1 != quota.getStorageSpace() && usage.getStorageSpace() != computed) { NameNode.LOG.error("BUG: Inconsistent storagespace for directory " + dir.getFullPathName() + ". Cached = " + usage.getStorageSpace() + " != Computed = " + computed); } }
/** Verify if the storagespace quota is violated after applying delta. */ private void verifyStoragespaceQuota(long delta) throws DSQuotaExceededException { if (Quota.isViolated(quota.getStorageSpace(), usage.getStorageSpace(), delta)) { throw new DSQuotaExceededException(quota.getStorageSpace(), usage.getStorageSpace() + delta); } }
private static void writeQuota(QuotaCounts quota, DataOutput out) throws IOException { out.writeLong(quota.getNameSpace()); out.writeLong(quota.getStorageSpace()); }
@Override public String toString() { return "name space=" + getNameSpace() + "\nstorage space=" + getStorageSpace() + "\nstorage types=" + getTypeSpaces(); }
/** * @throws QuotaExceededException if namespace, storagespace or storage type * space quota is violated after applying the deltas. */ void verifyQuota(QuotaCounts counts) throws QuotaExceededException { verifyNamespaceQuota(counts.getNameSpace()); verifyStoragespaceQuota(counts.getStorageSpace()); verifyQuotaByStorageType(counts.getTypeSpaces()); }
void setSpaceConsumed(QuotaCounts c) { usage.setNameSpace(c.getNameSpace()); usage.setStorageSpace(c.getStorageSpace()); usage.setTypeSpaces(c.getTypeSpaces()); }
public void setCounts(QuotaCounts c) { this.counts.setNameSpace(c.getNameSpace()); this.counts.setStorageSpace(c.getStorageSpace()); this.counts.setTypeSpaces(c.getTypeSpaces()); }
/** Update the root node's attributes */ private void updateRootAttr(INodeWithAdditionalFields root) { final QuotaCounts q = root.getQuotaCounts(); final long nsQuota = q.getNameSpace(); final long dsQuota = q.getStorageSpace(); FSDirectory fsDir = namesystem.dir; if (nsQuota != -1 || dsQuota != -1) { fsDir.rootDir.getDirectoryWithQuotaFeature().setQuota(nsQuota, dsQuota); } fsDir.rootDir.cloneModificationTime(root); fsDir.rootDir.clonePermissionStatus(root); }
@Override public final ContentSummaryComputationContext computeContentSummary( int snapshotId, ContentSummaryComputationContext summary) { final int s = snapshotId < lastSnapshotId ? snapshotId : lastSnapshotId; // only count storagespace for WithName final QuotaCounts q = computeQuotaUsage( summary.getBlockStoragePolicySuite(), getStoragePolicyID(), false, s); summary.getCounts().addContent(Content.DISKSPACE, q.getStorageSpace()); summary.getCounts().addTypeSpaces(q.getTypeSpaces()); return summary; }
final long ssConsumed = myCounts.getStorageSpace(); final long ssQuota = q.getStorageSpace(); if (Quota.isViolated(ssQuota, ssConsumed)) { LOG.warn("Storagespace quota violation in image for "
private static QuotaUsage getQuotaUsageInt(FSDirectory fsd, INodesInPath iip) throws IOException { fsd.readLock(); try { INode targetNode = iip.getLastINode(); QuotaUsage usage = null; if (targetNode.isDirectory()) { DirectoryWithQuotaFeature feature = targetNode.asDirectory().getDirectoryWithQuotaFeature(); if (feature != null) { QuotaCounts counts = feature.getSpaceConsumed(); QuotaCounts quotas = feature.getQuota(); usage = new QuotaUsage.Builder(). fileAndDirectoryCount(counts.getNameSpace()). quota(quotas.getNameSpace()). spaceConsumed(counts.getStorageSpace()). spaceQuota(quotas.getStorageSpace()). typeConsumed(counts.getTypeSpaces().asArray()). typeQuota(quotas.getTypeSpaces().asArray()).build(); } } return usage; } finally { fsd.readUnlock(); } }
final QuotaCounts oldQuota = dirNode.getQuotaCounts(); final long oldNsQuota = oldQuota.getNameSpace(); final long oldSsQuota = oldQuota.getStorageSpace();
if (deltas.getNameSpace() <= 0 && deltas.getStorageSpace() <= 0 && deltas.getTypeSpaces().allLessOrEqual(0L)) {
@Override public final ContentSummaryComputationContext computeContentSummary( int snapshotId, final ContentSummaryComputationContext summary) { final ContentCounts counts = summary.getCounts(); counts.addContent(Content.FILE, 1); final long fileLen = computeFileSize(snapshotId); counts.addContent(Content.LENGTH, fileLen); counts.addContent(Content.DISKSPACE, storagespaceConsumed(null) .getStorageSpace()); if (getStoragePolicyID() != BLOCK_STORAGE_POLICY_ID_UNSPECIFIED){ BlockStoragePolicy bsp = summary.getBlockStoragePolicySuite(). getPolicy(getStoragePolicyID()); List<StorageType> storageTypes = bsp.chooseStorageTypes(getFileReplication()); for (StorageType t : storageTypes) { if (!t.supportTypeQuota()) { continue; } counts.addTypeSpace(t, fileLen); } } return summary; }
/** * Set the namespace, storagespace and typespace quota for a directory. * * Note: This does not support ".inodes" relative path. */ static void setQuota(FSDirectory fsd, FSPermissionChecker pc, String src, long nsQuota, long ssQuota, StorageType type) throws IOException { if (fsd.isPermissionEnabled()) { pc.checkSuperuserPrivilege(); } fsd.writeLock(); try { INodesInPath iip = fsd.resolvePath(pc, src, DirOp.WRITE); INodeDirectory changed = unprotectedSetQuota(fsd, iip, nsQuota, ssQuota, type); if (changed != null) { final QuotaCounts q = changed.getQuotaCounts(); if (type == null) { fsd.getEditLog().logSetQuota(src, q.getNameSpace(), q.getStorageSpace()); } else { fsd.getEditLog().logSetQuotaByStorageType( src, q.getTypeSpaces().get(type), type); } } } finally { fsd.writeUnlock(); } }
private void loadRootINode(INodeSection.INode p) { INodeDirectory root = loadINodeDirectory(p, parent.getLoaderContext()); final QuotaCounts q = root.getQuotaCounts(); final long nsQuota = q.getNameSpace(); final long dsQuota = q.getStorageSpace(); if (nsQuota != -1 || dsQuota != -1) { dir.rootDir.getDirectoryWithQuotaFeature().setQuota(nsQuota, dsQuota); } final EnumCounters<StorageType> typeQuotas = q.getTypeSpaces(); if (typeQuotas.anyGreaterOrEqual(0)) { dir.rootDir.getDirectoryWithQuotaFeature().setQuota(typeQuotas); } dir.rootDir.cloneModificationTime(root); dir.rootDir.clonePermissionStatus(root); final AclFeature af = root.getFeature(AclFeature.class); if (af != null) { dir.rootDir.addAclFeature(af); } // root dir supports having extended attributes according to POSIX final XAttrFeature f = root.getXAttrFeature(); if (f != null) { dir.rootDir.addXAttrFeature(f); } dir.addRootDirToEncryptionZone(f); } }
public static INodeSection.INodeDirectory.Builder buildINodeDirectory( INodeDirectoryAttributes dir, final SaverContext state) { QuotaCounts quota = dir.getQuotaCounts(); INodeSection.INodeDirectory.Builder b = INodeSection.INodeDirectory .newBuilder().setModificationTime(dir.getModificationTime()) .setNsQuota(quota.getNameSpace()) .setDsQuota(quota.getStorageSpace()) .setPermission(buildPermissionStatus(dir)); if (quota.getTypeSpaces().anyGreaterOrEqual(0)) { b.setTypeQuotas(buildQuotaByStorageTypeEntries(quota)); } AclFeature f = dir.getAclFeature(); if (f != null) { b.setAcl(buildAclEntries(f)); } XAttrFeature xAttrFeature = dir.getXAttrFeature(); if (xAttrFeature != null) { b.setXAttrs(buildXAttrs(xAttrFeature)); } return b; }
ret = fsd.getBlockManager().convertLastBlockToUnderConstruction(file, 0); if (ret != null && delta != null) { Preconditions.checkState(delta.getStorageSpace() >= 0, "appending to" + " a block with size larger than the preferred block size"); fsd.writeLock();
/** * Compute {@link ContentSummary}. */ public final ContentSummary computeAndConvertContentSummary(int snapshotId, ContentSummaryComputationContext summary) throws AccessControlException { computeContentSummary(snapshotId, summary); final ContentCounts counts = summary.getCounts(); final ContentCounts snapshotCounts = summary.getSnapshotCounts(); final QuotaCounts q = getQuotaCounts(); return new ContentSummary.Builder(). length(counts.getLength()). fileCount(counts.getFileCount() + counts.getSymlinkCount()). directoryCount(counts.getDirectoryCount()). quota(q.getNameSpace()). spaceConsumed(counts.getStoragespace()). spaceQuota(q.getStorageSpace()). typeConsumed(counts.getTypeSpaces()). typeQuota(q.getTypeSpaces().asArray()). snapshotLength(snapshotCounts.getLength()). snapshotFileCount(snapshotCounts.getFileCount()). snapshotDirectoryCount(snapshotCounts.getDirectoryCount()). snapshotSpaceConsumed(snapshotCounts.getStoragespace()). erasureCodingPolicy(summary.getErasureCodingPolicyName(this)). build(); }