类org.apache.hadoop.fs.XAttr源码实例Demo

下面列出了怎么用org.apache.hadoop.fs.XAttr的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: big-c   文件: NameNodeRpcServer.java

@Override // ClientProtocol
public void setXAttr(String src, XAttr xAttr, EnumSet<XAttrSetFlag> flag)
    throws IOException {
  checkNNStartup();
  CacheEntry cacheEntry = RetryCache.waitForCompletion(retryCache);
  if (cacheEntry != null && cacheEntry.isSuccess()) {
    return; // Return previous response
  }
  boolean success = false;
  try {
    namesystem.setXAttr(src, xAttr, flag, cacheEntry != null);
    success = true;
  } finally {
    RetryCache.setState(cacheEntry, success);
  }
}
 
源代码2 项目: hadoop   文件: XAttrHelper.java

/**
 * Build xattr map from <code>XAttr</code> list, the key is 
 * xattr name with prefix, and value is xattr value. 
 */
public static Map<String, byte[]> buildXAttrMap(List<XAttr> xAttrs) {
  if (xAttrs == null) {
    return null;
  }
  Map<String, byte[]> xAttrMap = Maps.newHashMap();
  for (XAttr xAttr : xAttrs) {
    String name = getPrefixName(xAttr);
    byte[] value = xAttr.getValue();
    if (value == null) {
      value = new byte[0];
    }
    xAttrMap.put(name, value);
  }
  
  return xAttrMap;
}
 
源代码3 项目: big-c   文件: XAttrPermissionFilter.java

static void checkPermissionForApi(FSPermissionChecker pc, XAttr xAttr,
    boolean isRawPath)
    throws AccessControlException {
  final boolean isSuperUser = pc.isSuperUser();
  if (xAttr.getNameSpace() == XAttr.NameSpace.USER || 
      (xAttr.getNameSpace() == XAttr.NameSpace.TRUSTED && isSuperUser)) {
    return;
  }
  if (xAttr.getNameSpace() == XAttr.NameSpace.RAW &&
      isRawPath && isSuperUser) {
    return;
  }
  if (XAttrHelper.getPrefixName(xAttr).
      equals(SECURITY_XATTR_UNREADABLE_BY_SUPERUSER)) {
    if (xAttr.getValue() != null) {
      throw new AccessControlException("Attempt to set a value for '" +
          SECURITY_XATTR_UNREADABLE_BY_SUPERUSER +
          "'. Values are not allowed for this xattr.");
    }
    return;
  }
  throw new AccessControlException("User doesn't have permission for xattr: "
      + XAttrHelper.getPrefixName(xAttr));
}
 
源代码4 项目: big-c   文件: FSEditLogOp.java

private static void appendXAttrsToXml(ContentHandler contentHandler,
    List<XAttr> xAttrs) throws SAXException {
  for (XAttr xAttr: xAttrs) {
    contentHandler.startElement("", "", "XATTR", new AttributesImpl());
    XMLUtils.addSaxString(contentHandler, "NAMESPACE",
        xAttr.getNameSpace().toString());
    XMLUtils.addSaxString(contentHandler, "NAME", xAttr.getName());
    if (xAttr.getValue() != null) {
      try {
        XMLUtils.addSaxString(contentHandler, "VALUE",
            XAttrCodec.encodeValue(xAttr.getValue(), XAttrCodec.HEX));
      } catch (IOException e) {
        throw new SAXException(e);
      }
    }
    contentHandler.endElement("", "", "XATTR");
  }
}
 
源代码5 项目: big-c   文件: XAttrPermissionFilter.java

static List<XAttr> filterXAttrsForApi(FSPermissionChecker pc,
    List<XAttr> xAttrs, boolean isRawPath) {
  assert xAttrs != null : "xAttrs can not be null";
  if (xAttrs.isEmpty()) {
    return xAttrs;
  }
  
  List<XAttr> filteredXAttrs = Lists.newArrayListWithCapacity(xAttrs.size());
  final boolean isSuperUser = pc.isSuperUser();
  for (XAttr xAttr : xAttrs) {
    if (xAttr.getNameSpace() == XAttr.NameSpace.USER) {
      filteredXAttrs.add(xAttr);
    } else if (xAttr.getNameSpace() == XAttr.NameSpace.TRUSTED && 
        isSuperUser) {
      filteredXAttrs.add(xAttr);
    } else if (xAttr.getNameSpace() == XAttr.NameSpace.RAW &&
        isSuperUser && isRawPath) {
      filteredXAttrs.add(xAttr);
    } else if (XAttrHelper.getPrefixName(xAttr).
        equals(SECURITY_XATTR_UNREADABLE_BY_SUPERUSER)) {
      filteredXAttrs.add(xAttr);
    }
  }
  
  return filteredXAttrs;
}
 
源代码6 项目: hadoop   文件: FSEditLogOp.java

private static void appendXAttrsToXml(ContentHandler contentHandler,
    List<XAttr> xAttrs) throws SAXException {
  for (XAttr xAttr: xAttrs) {
    contentHandler.startElement("", "", "XATTR", new AttributesImpl());
    XMLUtils.addSaxString(contentHandler, "NAMESPACE",
        xAttr.getNameSpace().toString());
    XMLUtils.addSaxString(contentHandler, "NAME", xAttr.getName());
    if (xAttr.getValue() != null) {
      try {
        XMLUtils.addSaxString(contentHandler, "VALUE",
            XAttrCodec.encodeValue(xAttr.getValue(), XAttrCodec.HEX));
      } catch (IOException e) {
        throw new SAXException(e);
      }
    }
    contentHandler.endElement("", "", "XATTR");
  }
}
 
源代码7 项目: hadoop   文件: FSEditLogOp.java

private static List<XAttr> readXAttrsFromXml(Stanza st)
    throws InvalidXmlException {
  if (!st.hasChildren("XATTR")) {
    return null;
  }

  List<Stanza> stanzas = st.getChildren("XATTR");
  List<XAttr> xattrs = Lists.newArrayListWithCapacity(stanzas.size());
  for (Stanza a: stanzas) {
    XAttr.Builder builder = new XAttr.Builder();
    builder.setNameSpace(XAttr.NameSpace.valueOf(a.getValue("NAMESPACE"))).
        setName(a.getValue("NAME"));
    String v = a.getValueOrNull("VALUE");
    if (v != null) {
      try {
        builder.setValue(XAttrCodec.decodeValue(v));
      } catch (IOException e) {
        throw new InvalidXmlException(e.toString());
      }
    }
    xattrs.add(builder.build());
  }
  return xattrs;
}
 
源代码8 项目: hadoop   文件: FSDirectory.java

/**
 * Set the FileEncryptionInfo for an INode.
 */
void setFileEncryptionInfo(String src, FileEncryptionInfo info)
    throws IOException {
  // Make the PB for the xattr
  final HdfsProtos.PerFileEncryptionInfoProto proto =
      PBHelper.convertPerFileEncInfo(info);
  final byte[] protoBytes = proto.toByteArray();
  final XAttr fileEncryptionAttr =
      XAttrHelper.buildXAttr(CRYPTO_XATTR_FILE_ENCRYPTION_INFO, protoBytes);
  final List<XAttr> xAttrs = Lists.newArrayListWithCapacity(1);
  xAttrs.add(fileEncryptionAttr);

  writeLock();
  try {
    FSDirXAttrOp.unprotectedSetXAttrs(this, src, xAttrs,
                                      EnumSet.of(XAttrSetFlag.CREATE));
  } finally {
    writeUnlock();
  }
}
 
源代码9 项目: hadoop   文件: FSImageFormatPBINode.java

private static XAttrFeatureProto.Builder buildXAttrs(XAttrFeature f,
    final SaverContext.DeduplicationMap<String> stringMap) {
  XAttrFeatureProto.Builder b = XAttrFeatureProto.newBuilder();
  for (XAttr a : f.getXAttrs()) {
    XAttrCompactProto.Builder xAttrCompactBuilder = XAttrCompactProto.
        newBuilder();
    int nsOrd = a.getNameSpace().ordinal();
    Preconditions.checkArgument(nsOrd < 8, "Too many namespaces.");
    int v = ((nsOrd & XATTR_NAMESPACE_MASK) << XATTR_NAMESPACE_OFFSET)
        | ((stringMap.getId(a.getName()) & XATTR_NAME_MASK) <<
            XATTR_NAME_OFFSET);
    v |= (((nsOrd >> 2) & XATTR_NAMESPACE_EXT_MASK) <<
        XATTR_NAMESPACE_EXT_OFFSET);
    xAttrCompactBuilder.setName(v);
    if (a.getValue() != null) {
      xAttrCompactBuilder.setValue(PBHelper.getByteString(a.getValue()));
    }
    b.addXAttrs(xAttrCompactBuilder.build());
  }
  
  return b;
}
 
源代码10 项目: hadoop   文件: NameNodeRpcServer.java

@Override // ClientProtocol
public void setXAttr(String src, XAttr xAttr, EnumSet<XAttrSetFlag> flag)
    throws IOException {
  checkNNStartup();
  CacheEntry cacheEntry = RetryCache.waitForCompletion(retryCache);
  if (cacheEntry != null && cacheEntry.isSuccess()) {
    return; // Return previous response
  }
  boolean success = false;
  try {
    namesystem.setXAttr(src, xAttr, flag, cacheEntry != null);
    success = true;
  } finally {
    RetryCache.setState(cacheEntry, success);
  }
}
 
源代码11 项目: hadoop   文件: XAttrPermissionFilter.java

static void checkPermissionForApi(FSPermissionChecker pc, XAttr xAttr,
    boolean isRawPath)
    throws AccessControlException {
  final boolean isSuperUser = pc.isSuperUser();
  if (xAttr.getNameSpace() == XAttr.NameSpace.USER || 
      (xAttr.getNameSpace() == XAttr.NameSpace.TRUSTED && isSuperUser)) {
    return;
  }
  if (xAttr.getNameSpace() == XAttr.NameSpace.RAW &&
      isRawPath && isSuperUser) {
    return;
  }
  if (XAttrHelper.getPrefixName(xAttr).
      equals(SECURITY_XATTR_UNREADABLE_BY_SUPERUSER)) {
    if (xAttr.getValue() != null) {
      throw new AccessControlException("Attempt to set a value for '" +
          SECURITY_XATTR_UNREADABLE_BY_SUPERUSER +
          "'. Values are not allowed for this xattr.");
    }
    return;
  }
  throw new AccessControlException("User doesn't have permission for xattr: "
      + XAttrHelper.getPrefixName(xAttr));
}
 
源代码12 项目: hadoop   文件: XAttrPermissionFilter.java

static List<XAttr> filterXAttrsForApi(FSPermissionChecker pc,
    List<XAttr> xAttrs, boolean isRawPath) {
  assert xAttrs != null : "xAttrs can not be null";
  if (xAttrs.isEmpty()) {
    return xAttrs;
  }
  
  List<XAttr> filteredXAttrs = Lists.newArrayListWithCapacity(xAttrs.size());
  final boolean isSuperUser = pc.isSuperUser();
  for (XAttr xAttr : xAttrs) {
    if (xAttr.getNameSpace() == XAttr.NameSpace.USER) {
      filteredXAttrs.add(xAttr);
    } else if (xAttr.getNameSpace() == XAttr.NameSpace.TRUSTED && 
        isSuperUser) {
      filteredXAttrs.add(xAttr);
    } else if (xAttr.getNameSpace() == XAttr.NameSpace.RAW &&
        isSuperUser && isRawPath) {
      filteredXAttrs.add(xAttr);
    } else if (XAttrHelper.getPrefixName(xAttr).
        equals(SECURITY_XATTR_UNREADABLE_BY_SUPERUSER)) {
      filteredXAttrs.add(xAttr);
    }
  }
  
  return filteredXAttrs;
}
 
源代码13 项目: big-c   文件: TestJsonUtil.java

@Test
public void testToXAttrMap() throws IOException {
  String jsonString = 
      "{\"XAttrs\":[{\"name\":\"user.a1\",\"value\":\"0x313233\"}," +
      "{\"name\":\"user.a2\",\"value\":\"0x313131\"}]}";
  ObjectReader reader = new ObjectMapper().reader(Map.class);
  Map<?, ?> json = reader.readValue(jsonString);
  XAttr xAttr1 = (new XAttr.Builder()).setNameSpace(XAttr.NameSpace.USER).
      setName("a1").setValue(XAttrCodec.decodeValue("0x313233")).build();
  XAttr xAttr2 = (new XAttr.Builder()).setNameSpace(XAttr.NameSpace.USER).
      setName("a2").setValue(XAttrCodec.decodeValue("0x313131")).build();
  List<XAttr> xAttrs = Lists.newArrayList();
  xAttrs.add(xAttr1);
  xAttrs.add(xAttr2);
  Map<String, byte[]> xAttrMap = XAttrHelper.buildXAttrMap(xAttrs);
  Map<String, byte[]> parsedXAttrMap = JsonUtil.toXAttrs(json);
  
  Assert.assertEquals(xAttrMap.size(), parsedXAttrMap.size());
  Iterator<Entry<String, byte[]>> iter = xAttrMap.entrySet().iterator();
  while(iter.hasNext()) {
    Entry<String, byte[]> entry = iter.next();
    Assert.assertArrayEquals(entry.getValue(), 
        parsedXAttrMap.get(entry.getKey()));
  }
}
 
源代码14 项目: big-c   文件: FSEditLogOp.java

private static List<XAttr> readXAttrsFromXml(Stanza st)
    throws InvalidXmlException {
  if (!st.hasChildren("XATTR")) {
    return null;
  }

  List<Stanza> stanzas = st.getChildren("XATTR");
  List<XAttr> xattrs = Lists.newArrayListWithCapacity(stanzas.size());
  for (Stanza a: stanzas) {
    XAttr.Builder builder = new XAttr.Builder();
    builder.setNameSpace(XAttr.NameSpace.valueOf(a.getValue("NAMESPACE"))).
        setName(a.getValue("NAME"));
    String v = a.getValueOrNull("VALUE");
    if (v != null) {
      try {
        builder.setValue(XAttrCodec.decodeValue(v));
      } catch (IOException e) {
        throw new InvalidXmlException(e.toString());
      }
    }
    xattrs.add(builder.build());
  }
  return xattrs;
}
 
源代码15 项目: big-c   文件: FSDirXAttrOp.java

/**
 * Set xattr for a file or directory.
 *
 * @param src
 *          - path on which it sets the xattr
 * @param xAttr
 *          - xAttr details to set
 * @param flag
 *          - xAttrs flags
 * @throws IOException
 */
static HdfsFileStatus setXAttr(
    FSDirectory fsd, String src, XAttr xAttr, EnumSet<XAttrSetFlag> flag,
    boolean logRetryCache)
    throws IOException {
  checkXAttrsConfigFlag(fsd);
  checkXAttrSize(fsd, xAttr);
  FSPermissionChecker pc = fsd.getPermissionChecker();
  XAttrPermissionFilter.checkPermissionForApi(
      pc, xAttr, FSDirectory.isReservedRawName(src));
  byte[][] pathComponents = FSDirectory.getPathComponentsForReservedPath(src);
  src = fsd.resolvePath(pc, src, pathComponents);
  List<XAttr> xAttrs = Lists.newArrayListWithCapacity(1);
  xAttrs.add(xAttr);
  INodesInPath iip;
  fsd.writeLock();
  try {
    iip = fsd.getINodesInPath4Write(src);
    checkXAttrChangeAccess(fsd, iip, xAttr, pc);
    unprotectedSetXAttrs(fsd, src, xAttrs, flag);
  } finally {
    fsd.writeUnlock();
  }
  fsd.getEditLog().logSetXAttrs(src, xAttrs, logRetryCache);
  return fsd.getAuditFileInfo(iip);
}
 
源代码16 项目: big-c   文件: FSDirXAttrOp.java

static List<XAttr> listXAttrs(
    FSDirectory fsd, String src) throws IOException {
  FSDirXAttrOp.checkXAttrsConfigFlag(fsd);
  final FSPermissionChecker pc = fsd.getPermissionChecker();
  final boolean isRawPath = FSDirectory.isReservedRawName(src);
  byte[][] pathComponents = FSDirectory.getPathComponentsForReservedPath(src);
  src = fsd.resolvePath(pc, src, pathComponents);
  final INodesInPath iip = fsd.getINodesInPath(src, true);
  if (fsd.isPermissionEnabled()) {
    /* To access xattr names, you need EXECUTE in the owning directory. */
    fsd.checkParentAccess(pc, iip, FsAction.EXECUTE);
  }
  final List<XAttr> all = FSDirXAttrOp.getXAttrs(fsd, src);
  return XAttrPermissionFilter.
      filterXAttrsForApi(pc, all, isRawPath);
}
 
源代码17 项目: hadoop   文件: TestJsonUtil.java

@Test
public void testToJsonFromXAttrs() throws IOException {
  String jsonString = 
      "{\"XAttrs\":[{\"name\":\"user.a1\",\"value\":\"0x313233\"}," +
      "{\"name\":\"user.a2\",\"value\":\"0x313131\"}]}";
  XAttr xAttr1 = (new XAttr.Builder()).setNameSpace(XAttr.NameSpace.USER).
      setName("a1").setValue(XAttrCodec.decodeValue("0x313233")).build();
  XAttr xAttr2 = (new XAttr.Builder()).setNameSpace(XAttr.NameSpace.USER).
      setName("a2").setValue(XAttrCodec.decodeValue("0x313131")).build();
  List<XAttr> xAttrs = Lists.newArrayList();
  xAttrs.add(xAttr1);
  xAttrs.add(xAttr2);
  
  Assert.assertEquals(jsonString, JsonUtil.toJsonString(xAttrs, 
      XAttrCodec.HEX));
}
 
源代码18 项目: hadoop   文件: TestJsonUtil.java

@Test
public void testToXAttrMap() throws IOException {
  String jsonString = 
      "{\"XAttrs\":[{\"name\":\"user.a1\",\"value\":\"0x313233\"}," +
      "{\"name\":\"user.a2\",\"value\":\"0x313131\"}]}";
  ObjectReader reader = new ObjectMapper().reader(Map.class);
  Map<?, ?> json = reader.readValue(jsonString);
  XAttr xAttr1 = (new XAttr.Builder()).setNameSpace(XAttr.NameSpace.USER).
      setName("a1").setValue(XAttrCodec.decodeValue("0x313233")).build();
  XAttr xAttr2 = (new XAttr.Builder()).setNameSpace(XAttr.NameSpace.USER).
      setName("a2").setValue(XAttrCodec.decodeValue("0x313131")).build();
  List<XAttr> xAttrs = Lists.newArrayList();
  xAttrs.add(xAttr1);
  xAttrs.add(xAttr2);
  Map<String, byte[]> xAttrMap = XAttrHelper.buildXAttrMap(xAttrs);
  Map<String, byte[]> parsedXAttrMap = JsonUtil.toXAttrs(json);
  
  Assert.assertEquals(xAttrMap.size(), parsedXAttrMap.size());
  Iterator<Entry<String, byte[]>> iter = xAttrMap.entrySet().iterator();
  while(iter.hasNext()) {
    Entry<String, byte[]> entry = iter.next();
    Assert.assertArrayEquals(entry.getValue(), 
        parsedXAttrMap.get(entry.getKey()));
  }
}
 
源代码19 项目: hadoop   文件: TestXAttrsWithHA.java

/**
 * Test that xattrs are properly tracked by the standby
 */
@Test(timeout = 60000)
public void testXAttrsTrackedOnStandby() throws Exception {
  fs.create(path).close();
  fs.setXAttr(path, name1, value1, EnumSet.of(XAttrSetFlag.CREATE));
  fs.setXAttr(path, name2, value2, EnumSet.of(XAttrSetFlag.CREATE));

  HATestUtil.waitForStandbyToCatchUp(nn0, nn1);
  List<XAttr> xAttrs = nn1.getRpcServer().getXAttrs("/file", null);
  assertEquals(2, xAttrs.size());
  cluster.shutdownNameNode(0);
  
  // Failover the current standby to active.
  cluster.shutdownNameNode(0);
  cluster.transitionToActive(1);
  
  Map<String, byte[]> xattrs = fs.getXAttrs(path);
  Assert.assertEquals(xattrs.size(), 2);
  Assert.assertArrayEquals(value1, xattrs.get(name1));
  Assert.assertArrayEquals(value2, xattrs.get(name2));
  
  fs.delete(path, true);
}
 
源代码20 项目: localization_nifi   文件: EventTestUtils.java

public static Event.MetadataUpdateEvent createMetadataUpdateEvent() {
    return new Event.MetadataUpdateEvent.Builder()
            .replication(0)
            .perms(new FsPermission(FsAction.ALL, FsAction.NONE, FsAction.NONE))
            .path("/some/path/metadata")
            .ownerName("owner")
            .acls(Collections.singletonList(new AclEntry.Builder().setName("schema").setPermission(FsAction.ALL).setScope(AclEntryScope.ACCESS).setType(AclEntryType.GROUP).build()))
            .atime(new Date().getTime())
            .groupName("groupName")
            .metadataType(Event.MetadataUpdateEvent.MetadataType.ACLS)
            .mtime(1L)
            .xAttrs(Collections.singletonList(new XAttr.Builder().setName("name").setNameSpace(XAttr.NameSpace.USER).setValue(new byte[0]).build()))
            .xAttrsRemoved(false)
            .build();
}
 
源代码21 项目: big-c   文件: XAttrStorage.java

/**
 * Update xattrs of inode.
 * <p/>
 * Must be called while holding the FSDirectory write lock.
 * 
 * @param inode INode to update
 * @param xAttrs to update xAttrs.
 * @param snapshotId id of the latest snapshot of the inode
 */
public static void updateINodeXAttrs(INode inode, 
    List<XAttr> xAttrs, int snapshotId) throws QuotaExceededException {
  if (xAttrs == null || xAttrs.isEmpty()) {
    if (inode.getXAttrFeature() != null) {
      inode.removeXAttrFeature(snapshotId);
    }
    return;
  }
  // Dedupe the xAttr name and save them into a new interned list
  List<XAttr> internedXAttrs = Lists.newArrayListWithCapacity(xAttrs.size());
  for (XAttr xAttr : xAttrs) {
    final String name = xAttr.getName();
    String internedName = internedNames.get(name);
    if (internedName == null) {
      internedName = name;
      internedNames.put(internedName, internedName);
    }
    XAttr internedXAttr = new XAttr.Builder()
        .setName(internedName)
        .setNameSpace(xAttr.getNameSpace())
        .setValue(xAttr.getValue())
        .build();
    internedXAttrs.add(internedXAttr);
  }
  // Save the list of interned xattrs
  ImmutableList<XAttr> newXAttrs = ImmutableList.copyOf(internedXAttrs);
  if (inode.getXAttrFeature() != null) {
    inode.removeXAttrFeature(snapshotId);
  }
  inode.addXAttrFeature(new XAttrFeature(newXAttrs), snapshotId);
}
 
源代码22 项目: hadoop   文件: DFSClient.java

public byte[] getXAttr(String src, String name) throws IOException {
  checkOpen();
  TraceScope scope = getPathTraceScope("getXAttr", src);
  try {
    final List<XAttr> xAttrs = XAttrHelper.buildXAttrAsList(name);
    final List<XAttr> result = namenode.getXAttrs(src, xAttrs);
    return XAttrHelper.getFirstXAttrValue(result);
  } catch(RemoteException re) {
    throw re.unwrapRemoteException(AccessControlException.class,
                                   FileNotFoundException.class,
                                   UnresolvedPathException.class);
  } finally {
    scope.close();
  }
}
 

@Override
public List<XAttr> listXAttrs(String src)
    throws IOException {
  ListXAttrsRequestProto.Builder builder = ListXAttrsRequestProto.newBuilder();
  builder.setSrc(src);
  ListXAttrsRequestProto req = builder.build();
  try {
    return PBHelper.convert(rpcProxy.listXAttrs(null, req));
  } catch (ServiceException e) {
    throw ProtobufHelper.getRemoteException(e);
  }
}
 

@Override
public void setXAttr(String src, XAttr xAttr, EnumSet<XAttrSetFlag> flag)
    throws IOException {
  SetXAttrRequestProto req = SetXAttrRequestProto.newBuilder()
      .setSrc(src)
      .setXAttr(PBHelper.convertXAttrProto(xAttr))
      .setFlag(PBHelper.convert(flag))
      .build();
  try {
    rpcProxy.setXAttr(null, req);
  } catch (ServiceException e) {
    throw ProtobufHelper.getRemoteException(e);
  }
}
 
源代码25 项目: hadoop   文件: XAttrHelper.java

/**
 * Get first xattr from <code>XAttr</code> list
 */
public static XAttr getFirstXAttr(List<XAttr> xAttrs) {
  if (xAttrs != null && !xAttrs.isEmpty()) {
    return xAttrs.get(0);
  }
  
  return null;
}
 
源代码26 项目: big-c   文件: FSDirAttrOp.java

private static void setDirStoragePolicy(
    FSDirectory fsd, INodeDirectory inode, byte policyId,
    int latestSnapshotId) throws IOException {
  List<XAttr> existingXAttrs = XAttrStorage.readINodeXAttrs(inode);
  XAttr xAttr = BlockStoragePolicySuite.buildXAttr(policyId);
  List<XAttr> newXAttrs = FSDirXAttrOp.setINodeXAttrs(fsd, existingXAttrs,
                                                      Arrays.asList(xAttr),
                                                      EnumSet.of(
                                                          XAttrSetFlag.CREATE,
                                                          XAttrSetFlag.REPLACE));
  XAttrStorage.updateINodeXAttrs(inode, newXAttrs, latestSnapshotId);
}
 
源代码27 项目: big-c   文件: FSEditLogOp.java

private static List<XAttr> readXAttrsFromEditLog(DataInputStream in,
    int logVersion) throws IOException {
  if (!NameNodeLayoutVersion.supports(NameNodeLayoutVersion.Feature.XATTRS,
      logVersion)) {
    return null;
  }
  XAttrEditLogProto proto = XAttrEditLogProto.parseDelimitedFrom(in);
  return PBHelper.convertXAttrs(proto.getXAttrsList());
}
 
源代码28 项目: big-c   文件: FSDirXAttrOp.java

/**
 * Filter XAttrs from a list of existing XAttrs. Removes matched XAttrs from
 * toFilter and puts them into filtered. Upon completion,
 * toFilter contains the filter XAttrs that were not found, while
 * fitleredXAttrs contains the XAttrs that were found.
 *
 * @param existingXAttrs Existing XAttrs to be filtered
 * @param toFilter XAttrs to filter from the existing XAttrs
 * @param filtered Return parameter, XAttrs that were filtered
 * @return List of XAttrs that does not contain filtered XAttrs
 */
@VisibleForTesting
static List<XAttr> filterINodeXAttrs(
    final List<XAttr> existingXAttrs, final List<XAttr> toFilter,
    final List<XAttr> filtered)
  throws AccessControlException {
  if (existingXAttrs == null || existingXAttrs.isEmpty() ||
      toFilter == null || toFilter.isEmpty()) {
    return existingXAttrs;
  }

  // Populate a new list with XAttrs that pass the filter
  List<XAttr> newXAttrs =
      Lists.newArrayListWithCapacity(existingXAttrs.size());
  for (XAttr a : existingXAttrs) {
    boolean add = true;
    for (ListIterator<XAttr> it = toFilter.listIterator(); it.hasNext()
        ;) {
      XAttr filter = it.next();
      Preconditions.checkArgument(
          !KEYID_XATTR.equalsIgnoreValue(filter),
          "The encryption zone xattr should never be deleted.");
      if (UNREADABLE_BY_SUPERUSER_XATTR.equalsIgnoreValue(filter)) {
        throw new AccessControlException("The xattr '" +
            SECURITY_XATTR_UNREADABLE_BY_SUPERUSER + "' can not be deleted.");
      }
      if (a.equalsIgnoreValue(filter)) {
        add = false;
        it.remove();
        filtered.add(filter);
        break;
      }
    }
    if (add) {
      newXAttrs.add(a);
    }
  }

  return newXAttrs;
}
 
源代码29 项目: big-c   文件: FSDirXAttrOp.java

/**
 * Remove an xattr for a file or directory.
 *
 * @param src
 *          - path to remove the xattr from
 * @param xAttr
 *          - xAttr to remove
 * @throws IOException
 */
static HdfsFileStatus removeXAttr(
    FSDirectory fsd, String src, XAttr xAttr, boolean logRetryCache)
    throws IOException {
  FSDirXAttrOp.checkXAttrsConfigFlag(fsd);
  FSPermissionChecker pc = fsd.getPermissionChecker();
  XAttrPermissionFilter.checkPermissionForApi(
      pc, xAttr, FSDirectory.isReservedRawName(src));
  byte[][] pathComponents = FSDirectory.getPathComponentsForReservedPath(
      src);

  List<XAttr> xAttrs = Lists.newArrayListWithCapacity(1);
  xAttrs.add(xAttr);
  INodesInPath iip;
  fsd.writeLock();
  try {
    src = fsd.resolvePath(pc, src, pathComponents);
    iip = fsd.getINodesInPath4Write(src);
    checkXAttrChangeAccess(fsd, iip, xAttr, pc);

    List<XAttr> removedXAttrs = unprotectedRemoveXAttrs(fsd, src, xAttrs);
    if (removedXAttrs != null && !removedXAttrs.isEmpty()) {
      fsd.getEditLog().logRemoveXAttrs(src, removedXAttrs, logRetryCache);
    } else {
      throw new IOException(
          "No matching attributes found for remove operation");
    }
  } finally {
    fsd.writeUnlock();
  }
  return fsd.getAuditFileInfo(iip);
}
 
源代码30 项目: big-c   文件: FSEditLog.java

void logSetXAttrs(String src, List<XAttr> xAttrs, boolean toLogRpcIds) {
  final SetXAttrOp op = SetXAttrOp.getInstance();
  op.src = src;
  op.xAttrs = xAttrs;
  logRpcIds(op, toLogRpcIds);
  logEdit(op);
}
 
 类所在包
 同包方法