Search in sources :

Example 1 with NfsExports

use of org.apache.hadoop.nfs.NfsExports in project hadoop by apache.

the class RpcProgramMountd method handleInternal.

@Override
public void handleInternal(ChannelHandlerContext ctx, RpcInfo info) {
    RpcCall rpcCall = (RpcCall) info.header();
    final MNTPROC mntproc = MNTPROC.fromValue(rpcCall.getProcedure());
    int xid = rpcCall.getXid();
    byte[] data = new byte[info.data().readableBytes()];
    info.data().readBytes(data);
    XDR xdr = new XDR(data);
    XDR out = new XDR();
    InetAddress client = ((InetSocketAddress) info.remoteAddress()).getAddress();
    if (mntproc == MNTPROC.NULL) {
        out = nullOp(out, xid, client);
    } else if (mntproc == MNTPROC.MNT) {
        // Only do port monitoring for MNT
        if (!doPortMonitoring(info.remoteAddress())) {
            out = MountResponse.writeMNTResponse(Nfs3Status.NFS3ERR_ACCES, out, xid, null);
        } else {
            out = mnt(xdr, out, xid, client);
        }
    } else if (mntproc == MNTPROC.DUMP) {
        out = dump(out, xid, client);
    } else if (mntproc == MNTPROC.UMNT) {
        out = umnt(xdr, out, xid, client);
    } else if (mntproc == MNTPROC.UMNTALL) {
        umntall(out, xid, client);
    } else if (mntproc == MNTPROC.EXPORT) {
        // Currently only support one NFS export
        List<NfsExports> hostsMatchers = new ArrayList<NfsExports>();
        if (hostsMatcher != null) {
            hostsMatchers.add(hostsMatcher);
            out = MountResponse.writeExportList(out, xid, exports, hostsMatchers);
        } else {
            // This means there are no valid exports provided.
            RpcAcceptedReply.getInstance(xid, RpcAcceptedReply.AcceptState.PROC_UNAVAIL, new VerifierNone()).write(out);
        }
    } else {
        // Invalid procedure
        RpcAcceptedReply.getInstance(xid, RpcAcceptedReply.AcceptState.PROC_UNAVAIL, new VerifierNone()).write(out);
    }
    ChannelBuffer buf = ChannelBuffers.wrappedBuffer(out.asReadOnlyWrap().buffer());
    RpcResponse rsp = new RpcResponse(buf, info.remoteAddress());
    RpcUtil.sendRpcResponse(ctx, rsp);
}
Also used : InetSocketAddress(java.net.InetSocketAddress) XDR(org.apache.hadoop.oncrpc.XDR) RpcResponse(org.apache.hadoop.oncrpc.RpcResponse) ChannelBuffer(org.jboss.netty.buffer.ChannelBuffer) RpcCall(org.apache.hadoop.oncrpc.RpcCall) VerifierNone(org.apache.hadoop.oncrpc.security.VerifierNone) NfsExports(org.apache.hadoop.nfs.NfsExports) ArrayList(java.util.ArrayList) List(java.util.List) InetAddress(java.net.InetAddress)

Aggregations

InetAddress (java.net.InetAddress)1 InetSocketAddress (java.net.InetSocketAddress)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 NfsExports (org.apache.hadoop.nfs.NfsExports)1 RpcCall (org.apache.hadoop.oncrpc.RpcCall)1 RpcResponse (org.apache.hadoop.oncrpc.RpcResponse)1 XDR (org.apache.hadoop.oncrpc.XDR)1 VerifierNone (org.apache.hadoop.oncrpc.security.VerifierNone)1 ChannelBuffer (org.jboss.netty.buffer.ChannelBuffer)1