Search in sources :

Example 1 with XAttrSetFlag

use of org.apache.hadoop.fs.XAttrSetFlag in project hadoop by apache.

the class FSDirErasureCodingOp method setErasureCodingPolicyXAttr.

private static List<XAttr> setErasureCodingPolicyXAttr(final FSNamesystem fsn, final INodesInPath srcIIP, ErasureCodingPolicy ecPolicy) throws IOException {
    FSDirectory fsd = fsn.getFSDirectory();
    assert fsd.hasWriteLock();
    Preconditions.checkNotNull(srcIIP, "INodes cannot be null");
    Preconditions.checkNotNull(ecPolicy, "EC policy cannot be null");
    String src = srcIIP.getPath();
    final INode inode = srcIIP.getLastINode();
    if (inode == null) {
        throw new FileNotFoundException("Path not found: " + srcIIP.getPath());
    }
    if (!inode.isDirectory()) {
        throw new IOException("Attempt to set an erasure coding policy " + "for a file " + src);
    }
    final XAttr ecXAttr;
    DataOutputStream dOut = null;
    try {
        ByteArrayOutputStream bOut = new ByteArrayOutputStream();
        dOut = new DataOutputStream(bOut);
        WritableUtils.writeString(dOut, ecPolicy.getName());
        ecXAttr = XAttrHelper.buildXAttr(XATTR_ERASURECODING_POLICY, bOut.toByteArray());
    } finally {
        IOUtils.closeStream(dOut);
    }
    // check whether the directory already has an erasure coding policy
    // directly on itself.
    final Boolean hasEcXAttr = getErasureCodingPolicyXAttrForINode(fsn, inode) == null ? false : true;
    final List<XAttr> xattrs = Lists.newArrayListWithCapacity(1);
    xattrs.add(ecXAttr);
    final EnumSet<XAttrSetFlag> flag = hasEcXAttr ? EnumSet.of(XAttrSetFlag.REPLACE) : EnumSet.of(XAttrSetFlag.CREATE);
    FSDirXAttrOp.unprotectedSetXAttrs(fsd, srcIIP, xattrs, flag);
    return xattrs;
}
Also used : XAttrSetFlag(org.apache.hadoop.fs.XAttrSetFlag) DataOutputStream(java.io.DataOutputStream) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) XAttr(org.apache.hadoop.fs.XAttr)

Aggregations

ByteArrayOutputStream (java.io.ByteArrayOutputStream)1 DataOutputStream (java.io.DataOutputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1 XAttr (org.apache.hadoop.fs.XAttr)1 XAttrSetFlag (org.apache.hadoop.fs.XAttrSetFlag)1