This application demonstrates how to set, get, modify, and delete ACES on files using the Java APIs.
Before running this application, ensure that you have access to a cluster running filesystem. To build and run this application:
export CLASSPATH=`hadoop classpath`javac FileAceTest.javaFileAceTest.class file.java.io.*java.net.*java.util.*The application performs the actions described in the following sections.
$MAPR_HOME/conf directory on the
client. After connecting to the filesystem, the application returns a handle to the
filesystem.
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
//MapRFileSystem fs = getMapRFileSystem();Path testDir = new Path(rootDir + "FileAceTest");
mkDir(fs, testDir);
Path testFile = new Path(testDir + "/testFile");
createFile(fs, testFile);MapRFileAce ace = new MapRFileAce(MapRFileAce.AccessType.READFILE);
ace.setBooleanExpression("u:m7user1");
aces.add(ace);
ace = new MapRFileAce(MapRFileAce.AccessType.READDIR);
ace.setBooleanExpression("u:m7user1|u:root");
aces.add(ace);
((MapRFileSystem)fs).setAces(testDir, aces);
((MapRFileSystem)fs).setAces(testFile, aces);List<MapRFileAce> newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
for (int i = 0; i < newDirAces.size(); ++i) {
System.out.println(newDirAces.get(i).getAccessType() + ": " +
newDirAces.get(i).getBooleanExpression());
}
List<MapRFileAce> newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
for (int i = 0; i < newFileAces.size(); ++i) {
System.out.println(newFileAces.get(i).getAccessType() + ": " +
newFileAces.get(i).getBooleanExpression());
}aces = new ArrayList<MapRFileAce>();
ace = new MapRFileAce(MapRFileAce.AccessType.READDIR);
ace.setBooleanExpression("u:m7user1|u:root|u:m7user2");
aces.add(ace);
ace = new MapRFileAce(MapRFileAce.AccessType.WRITEFILE);
ace.setBooleanExpression("u:m7user2");
aces.add(ace);
((MapRFileSystem)fs).modifyAces(testDir, aces);
((MapRFileSystem)fs).modifyAces(testFile, aces);newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
for (int i = 0; i < newDirAces.size(); ++i) {
System.out.println(newDirAces.get(i).getAccessType() + ": " +
newDirAces.get(i).getBooleanExpression());
}
newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
for (int i = 0; i < newFileAces.size(); ++i) {
System.out.println(newFileAces.get(i).getAccessType() + ": " +
newFileAces.get(i).getBooleanExpression());
}((MapRFileSystem)fs).deleteAces(testDir);
((MapRFileSystem)fs).deleteAces(testFile);newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
if (newDirAces == null || newDirAces.size() == 0)
System.out.println("AceCount: 0");
else
System.out.println("AceCount: " + newDirAces.size());
System.out.println("");
newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
if (newFileAces == null || newFileAces.size() == 0)
System.out.println("AceCount: 0");
else
System.out.println("AceCount: " + newFileAces.size());import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.conf.*;
import com.mapr.fs.MapRFileAce;
import com.mapr.fs.MapRFileSystem;
public class FileAceTest {
public FileSystem fs = null;
public static void mkDir(FileSystem fs, Path path) throws IOException {
boolean res = fs.mkdirs(path);
if (!res) {
throw new IOException("mkdir failed, path: " + path);
}
}
public static void createFile(FileSystem fs, Path path) throws Exception {
byte buf[] = new byte[1024];
FSDataOutputStream ostr = fs.create(path,
true, // overwrite
512, // buffersize
(short) 1, // replication
(long)(64*1024*1024) // chunksize
);
ostr.write(buf);
ostr.close();
}
public static void rmR(FileSystem fs, Path path) throws IOException {
boolean res = fs.delete(path, true /*recursive*/);
if (!res) {
throw new IOException("rmR failed, path: " + path);
}
}
public static void main(String args[]) throws Exception {
String rootDir = "maprfs:///";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path testDir = new Path(rootDir + "FileAceTest");
mkDir(fs, testDir);
Path testFile = new Path(testDir + "/testFile");
createFile(fs, testFile);
ArrayList<MapRFileAce> aces = new ArrayList<MapRFileAce>();
// Set
System.out.println("SETTING ACES");
MapRFileAce ace = new MapRFileAce(MapRFileAce.AccessType.READFILE);
ace.setBooleanExpression("u:m7user1");
aces.add(ace);
ace = new MapRFileAce(MapRFileAce.AccessType.READDIR);
ace.setBooleanExpression("u:m7user1|u:root");
aces.add(ace);
((MapRFileSystem)fs).setAces(testDir, aces);
((MapRFileSystem)fs).setAces(testFile, aces);
// Get
System.out.println("GETTING ACES");
List<MapRFileAce> newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
for (int i = 0; i < newDirAces.size(); ++i) {
System.out.println(newDirAces.get(i).getAccessType() + ": " +
newDirAces.get(i).getBooleanExpression());
}
System.out.println("");
List<MapRFileAce> newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
for (int i = 0; i < newFileAces.size(); ++i) {
System.out.println(newFileAces.get(i).getAccessType() + ": " +
newFileAces.get(i).getBooleanExpression());
}
// Modify
System.out.println("MODIFYING ACES");
aces = new ArrayList<MapRFileAce>();
ace = new MapRFileAce(MapRFileAce.AccessType.READDIR);
ace.setBooleanExpression("u:m7user1|u:root|u:m7user2");
aces.add(ace);
ace = new MapRFileAce(MapRFileAce.AccessType.WRITEFILE);
ace.setBooleanExpression("u:m7user2");
aces.add(ace);
((MapRFileSystem)fs).modifyAces(testDir, aces);
((MapRFileSystem)fs).modifyAces(testFile, aces);
// Get
System.out.println("GETTING ACES");
newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
for (int i = 0; i < newDirAces.size(); ++i) {
System.out.println(newDirAces.get(i).getAccessType() + ": " +
newDirAces.get(i).getBooleanExpression());
}
System.out.println("");
newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
for (int i = 0; i < newFileAces.size(); ++i) {
System.out.println(newFileAces.get(i).getAccessType() + ": " +
newFileAces.get(i).getBooleanExpression());
}
// Delete
System.out.println("DELETING ACES");
((MapRFileSystem)fs).deleteAces(testDir);
((MapRFileSystem)fs).deleteAces(testFile);
// Get
System.out.println("GETTING ACES");
newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
if (newDirAces == null || newDirAces.size() == 0)
System.out.println("AceCount: 0");
else
System.out.println("AceCount: " + newDirAces.size());
System.out.println("");
newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
if (newFileAces == null || newFileAces.size() == 0)
System.out.println("AceCount: 0");
else
System.out.println("AceCount: " + newFileAces.size());
// Get
System.out.println("GETTING ACES");
newDirAces = ((MapRFileSystem)fs).getAces(testDir);
System.out.println("Path: " + testDir);
for (int i = 0; i < newDirAces.size(); ++i) {
System.out.println(newDirAces.get(i).getAccessType() + ": " +
newDirAces.get(i).getBooleanExpression());
}
System.out.println("");
newFileAces = ((MapRFileSystem)fs).getAces(testFile);
System.out.println("Path: " + testFile);
for (int i = 0; i < newFileAces.size(); ++i) {
System.out.println(newFileAces.get(i).getAccessType() + ": " +
newFileAces.get(i).getBooleanExpression());
}
// Remove path
rmR(fs, testDir);
}
}