Commit 26f5c0f6 authored by Tigran Mkrtchyan's avatar Tigran Mkrtchyan
Browse files

nfsv41: switch to slf4j logging framework

changed NFS code to use slf4j.
The RPC part is still based on JUL.

Acked-By: Paul
parent c1f9d191
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<jmxConfigurator />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %X{mdc.client} %logger{24} - %msg%n</Pattern>
</layout>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
......@@ -191,6 +191,16 @@
<artifactId>postgresql</artifactId>
<version>8.4-701.jdbc3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.11</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>0.9.18</version>
</dependency>
<!--
LOCAL JARS
......
......@@ -4,25 +4,15 @@
package org.dcache.chimera.nfs;
import org.dcache.chimera.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dcache.chimera.FileSystemProvider;
import org.dcache.chimera.FsInode;
import org.dcache.chimera.FsInodeType;
import org.dcache.chimera.FsInode_CONST;
import org.dcache.chimera.FsInode_ID;
import org.dcache.chimera.FsInode_NAMEOF;
import org.dcache.chimera.FsInode_PARENT;
import org.dcache.chimera.FsInode_PATHOF;
import org.dcache.chimera.FsInode_PGET;
import org.dcache.chimera.FsInode_PSET;
import org.dcache.chimera.FsInode_TAG;
import org.dcache.chimera.FsInode_TAGS;
public class NFSHandle {
private static final Logger _log = Logger.getLogger(NFSHandle.class.getName());
private static final Logger _log = LoggerFactory.getLogger(NFSHandle.class);
private NFSHandle() {
// no instance allowed
......@@ -34,7 +24,7 @@ public class NFSHandle {
String strHandle = new String(handle);
_log.log(Level.FINEST, "Processing FH: {0}", strHandle );
_log.debug("Processing FH: {}", strHandle );
StringTokenizer st = new StringTokenizer(strHandle, "[:]");
......@@ -125,8 +115,7 @@ public class NFSHandle {
}
} catch (IllegalArgumentException iae) {
_log.log(Level.INFO, "Failed to generate an inode from file handle : {0} : {1}",
new Object[] {strHandle, iae});
_log.info("Failed to generate an inode from file handle : {} : {}", strHandle, iae);
inode = null;
}
......
......@@ -21,8 +21,6 @@ import org.dcache.chimera.nfs.v3.xdr.time_how;
import org.dcache.chimera.nfs.v3.xdr.wcc_attr;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import org.dcache.chimera.FsInode;
import org.dcache.chimera.ChimeraFsException;
import org.dcache.chimera.UnixPermission;
......@@ -32,6 +30,8 @@ import org.dcache.chimera.nfs.v3.xdr.wcc_data;
import org.dcache.xdr.RpcAuthType;
import org.dcache.xdr.RpcAuthTypeUnix;
import org.dcache.xdr.RpcCall;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HimeraNfsUtils {
......@@ -39,7 +39,7 @@ public class HimeraNfsUtils {
private static final int MODE_MASK = 0770000;
private static final Logger _log = Logger.getLogger(HimeraNfsUtils.class.getName());
private static final Logger _log = LoggerFactory.getLogger(HimeraNfsUtils.class);
private HimeraNfsUtils() {
// no instance allowed
......
......@@ -20,8 +20,6 @@ package org.dcache.chimera.nfs.v3;
import java.io.File;
import java.net.InetAddress;
import java.util.logging.Logger;
import java.util.logging.Level;
import org.acplt.oncrpc.OncRpcPortmapClient;
import org.acplt.oncrpc.OncRpcProtocols;
......@@ -34,24 +32,26 @@ import org.dcache.chimera.nfs.v3.xdr.nfs3_prot;
import org.dcache.xdr.OncRpcSvc;
import org.dcache.xdr.OncRpcProgram;
import org.dcache.xdr.portmap.OncRpcEmbeddedPortmap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
private final static Logger _log = Logger.getLogger(Main.class.getName());
private final static Logger _log = LoggerFactory.getLogger(Main.class);
static final int DEFAULT_PORT = 2049;
public static void main(String[] args) throws Exception {
if (args.length != 1) {
_log.severe("Usage: Main <config>");
_log.error("Usage: Main <config>");
System.exit(1);
}
XMLconfig config = new XMLconfig(new File(args[0]));
FileSystemProvider fs = new JdbcFs(config);
_log.log(Level.CONFIG, "starting NFSv3 on: {0}", DEFAULT_PORT);
_log.info("starting NFSv3 on: {}", DEFAULT_PORT);
new OncRpcEmbeddedPortmap(2000);
......@@ -59,27 +59,27 @@ public class Main {
portmap.getOncRpcClient().setTimeout(2000);
if (!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V3, OncRpcProtocols.ONCRPC_TCP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv1 service within portmap.");
_log.error("Failed to register mountv1 service within portmap.");
}
if (!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V3, OncRpcProtocols.ONCRPC_UDP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv1 service within portmap.");
_log.error( "Failed to register mountv1 service within portmap.");
}
if (!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V1, OncRpcProtocols.ONCRPC_TCP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv3 service within portmap.");
_log.error("Failed to register mountv3 service within portmap.");
}
if (!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V1, OncRpcProtocols.ONCRPC_UDP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv3 service within portmap.");
_log.error("Failed to register mountv3 service within portmap.");
}
if (!portmap.setPort(nfs3_prot.NFS_PROGRAM, nfs3_prot.NFS_V3, OncRpcProtocols.ONCRPC_TCP, 2049)) {
_log.log(Level.SEVERE, "Failed to register NFSv3 service within portmap.");
_log.error("Failed to register NFSv3 service within portmap.");
}
if (!portmap.setPort(nfs3_prot.NFS_PROGRAM, nfs3_prot.NFS_V3, OncRpcProtocols.ONCRPC_UDP, 2049)) {
_log.log(Level.SEVERE, "Failed to register NFSv3 service within portmap.");
_log.error("Failed to register NFSv3 service within portmap.");
}
ExportFile exports = new ExportFile(new File("/etc/exports"));
......
......@@ -24,8 +24,6 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dcache.chimera.ChimeraFsException;
import org.dcache.chimera.FileSystemProvider;
import org.dcache.chimera.FsInode;
......@@ -34,10 +32,12 @@ import org.dcache.chimera.nfs.ExportFile;
import org.dcache.chimera.nfs.FsExport;
import org.dcache.xdr.RpcAuthType;
import org.dcache.xdr.RpcCall;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MountServer extends mount_protServerStub {
private static final Logger _log = Logger.getLogger(MountServer.class.getName());
private static final Logger _log = LoggerFactory.getLogger(MountServer.class);
private final ExportFile _exportFile;
private final Map<String, Set<String>> _mounts = new HashMap<String, Set<String>>();
private final FileSystemProvider _fs;
......@@ -61,11 +61,11 @@ public class MountServer extends mount_protServerStub {
java.io.File f = new java.io.File(arg1.value);
String mountPoint = f.getAbsolutePath();
_log.log(Level.FINE, "Mount request for: {0}", mountPoint);
_log.debug("Mount request for: {}", mountPoint);
if (!isAllowed(call$.getTransport().getRemoteSocketAddress().getAddress(), mountPoint)) {
m.fhs_status = mountstat3.MNT3ERR_ACCES;
_log.warning("Mount deny for: " + call$.getTransport().getRemoteSocketAddress().getHostName() + " " + mountPoint);
_log.info("Mount deny for: {}:{}", call$.getTransport().getRemoteSocketAddress().getHostName(), mountPoint);
return m;
}
......@@ -75,9 +75,9 @@ public class MountServer extends mount_protServerStub {
FsInode rootInode = null;
try {
_log.log(Level.FINEST, "asking chimera for the root inode");
_log.debug("asking chimera for the root inode");
rootInode = _fs.path2inode(mountPoint);
_log.log(Level.FINEST, "root inode: {0}", rootInode);
_log.debug("root inode: {}", rootInode);
} catch (ChimeraFsException e1) {
throw new ChimeraNFSException(mountstat3.MNT3ERR_NOENT, "Path not found");
}
......@@ -168,7 +168,7 @@ public class MountServer extends mount_protServerStub {
for (String path : _exportFile.getExports()) {
System.out.println("path: " + path);
FsExport export = _exportFile.getExport(path);
eList.value = new exportnode();
......
......@@ -5,16 +5,16 @@
*/
package org.dcache.chimera.nfs.v3.xdr;
import org.dcache.xdr.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*/
public abstract class mount_protServerStub implements RpcDispatchable {
private final static Logger _log = Logger.getLogger(mount_protServerStub.class.getName());
private final static Logger _log = LoggerFactory.getLogger(mount_protServerStub.class);
public void dispatchOncRpcCall(RpcCall call)
throws OncRpcException, IOException {
......@@ -25,14 +25,14 @@ public abstract class mount_protServerStub implements RpcDispatchable {
if ( version == 3 ) {
switch ( procedure ) {
case 0: {
_log.log(Level.FINEST, "MOUNTPROC3_NULL_3");
_log.debug("MOUNTPROC3_NULL_3");
call.retrieveCall(XdrVoid.XDR_VOID);
MOUNTPROC3_NULL_3(call);
call.reply( XdrVoid.XDR_VOID);
break;
}
case 1: {
_log.log(Level.FINEST, "MOUNTPROC3_MNT_3");
_log.debug("MOUNTPROC3_MNT_3");
dirpath args$ = new dirpath();
call.retrieveCall(args$);
mountres3 result$ = MOUNTPROC3_MNT_3(call, args$);
......@@ -102,7 +102,7 @@ public abstract class mount_protServerStub implements RpcDispatchable {
break;
}
case 5: {
_log.log(Level.INFO, "processing message MOUNTPROC_EXPORT_1");
_log.debug("processing message MOUNTPROC_EXPORT_1");
call.retrieveCall(XdrVoid.XDR_VOID);
exports result$ = MOUNTPROC_EXPORT_1(call);
call.reply( result$);
......
package org.dcache.chimera.nfs.v4;
import java.util.List;
import org.dcache.chimera.nfs.v4.xdr.nfsstat4;
import org.dcache.chimera.nfs.ChimeraNFSException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dcache.chimera.FileSystemProvider;
import org.dcache.chimera.FsInode;
import org.dcache.chimera.nfs.ChimeraNFSException;
import org.dcache.chimera.nfs.ExportFile;
import org.dcache.chimera.nfs.v4.xdr.nfs_resop4;
import org.dcache.chimera.nfs.v4.xdr.nfsstat4;
import org.dcache.chimera.posix.AclHandler;
import org.dcache.chimera.posix.UnixUser;
import org.dcache.xdr.RpcCall;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class CompoundContext {
private static final Logger _log = Logger.getLogger(CompoundContext.class.getName());
private static final Logger _log = LoggerFactory.getLogger(CompoundContext.class);
private FsInode _rootInode = null;
private FsInode _currentInode = null;
......@@ -104,7 +105,7 @@ public class CompoundContext {
*/
public void currentInode(FsInode inode) throws ChimeraNFSException {
_currentInode = inode;
_log.log(Level.FINEST, "current Inode: {0}", _currentInode.toString() );
_log.debug("current Inode: {}", _currentInode.toString() );
}
public FsInode rootInode() {
......@@ -113,7 +114,7 @@ public class CompoundContext {
public void rootInode(FsInode inode) {
_rootInode = inode;
_log.log(Level.FINEST, "root Inode: {0}", _rootInode.toFullString() );
_log.debug("root Inode: {}", _rootInode.toFullString() );
}
/**
......@@ -127,7 +128,7 @@ public class CompoundContext {
throw new ChimeraNFSException(nfsstat4.NFS4ERR_RESTOREFH, "no saved file handle");
}
_currentInode = _savedInode;
_log.log(Level.FINEST, "restored Inode: {0}", _currentInode.toString() );
_log.debug("restored Inode: {}", _currentInode.toString() );
}
public FsInode savedInode() throws ChimeraNFSException {
......@@ -148,7 +149,7 @@ public class CompoundContext {
throw new ChimeraNFSException(nfsstat4.NFS4ERR_NOFILEHANDLE, "no file handle");
}
_savedInode = _currentInode;
_log.log(Level.FINEST, "saved Inode: {0}", _savedInode.toString() );
_log.debug("saved Inode: {}", _savedInode.toString() );
}
/**
......
......@@ -9,6 +9,8 @@ import org.dcache.chimera.nfs.v4.xdr.*;
import org.dcache.xdr.OncRpcException;
import org.dcache.xdr.XdrBuffer;
import org.dcache.xdr.XdrEncodingStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.InetAddress;
......@@ -19,8 +21,6 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
......@@ -36,7 +36,7 @@ public class DeviceManager implements NFSv41DeviceManager {
*/
private static final deviceid4 MDS_ID = deviceidOf(0);
private static final Logger _log = Logger.getLogger(DeviceManager.class.getName());
private static final Logger _log = LoggerFactory.getLogger(DeviceManager.class);
/* hack for multiple pools */
private final Random _deviceIdGenerator = new Random();
......@@ -64,7 +64,7 @@ public class DeviceManager implements NFSv41DeviceManager {
++id; /* 0 is reserved */
deviceId = deviceidOf(id);
_log.log(Level.FINEST, "generating new device: {0} ({1}) for stateid {2}",
_log.debug("generating new device: {} ({}) for stateid {}",
new Object[]{deviceId, id, stateid});
//hard coded for now
......@@ -90,7 +90,7 @@ public class DeviceManager implements NFSv41DeviceManager {
*/
public device_addr4 getDeviceInfo(NFS4Client client, deviceid4 deviceId) {
_log.log(Level.FINEST, "lookup for device: {0}", deviceId );
_log.debug("lookup for device: {}", deviceId );
/* in case of MDS access we return the same interface which client already connected to */
if(deviceId.equals(MDS_ID)) {
return deviceAddrOf(client.getLocalAddress());
......@@ -115,7 +115,7 @@ public class DeviceManager implements NFSv41DeviceManager {
*/
public void layoutReturn(NFS4Client client, stateid4 stateid) {
// I'am fine
_log.log(Level.FINEST, "release device for stateid {0}", stateid );
_log.debug( "release device for stateid {}", stateid );
}
/**
......
......@@ -17,13 +17,6 @@
package org.dcache.chimera.nfs.v4;
import org.dcache.xdr.*;
import java.io.File;
import java.net.InetAddress;
import java.util.logging.Logger;
import java.util.logging.Level;
import org.acplt.oncrpc.OncRpcPortmapClient;
import org.acplt.oncrpc.OncRpcProtocols;
import org.dcache.chimera.FileSystemProvider;
......@@ -35,12 +28,19 @@ import org.dcache.chimera.nfs.v3.xdr.mount_prot;
import org.dcache.chimera.nfs.v4.mover.DSOperationFactory;
import org.dcache.chimera.nfs.v4.xdr.nfs4_prot;
import org.dcache.chimera.posix.UnixPermissionHandler;
import org.dcache.xdr.OncRpcProgram;
import org.dcache.xdr.OncRpcSvc;
import org.dcache.xdr.portmap.OncRpcEmbeddedPortmap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.net.InetAddress;
public class Main {
private final static Logger _log = Logger.getLogger(Main.class.getName());
private final static Logger _log = LoggerFactory.getLogger(Main.class);
static final int DEFAULT_PORT_MDS = 2049;
static final int DEFAULT_PORT_DS = 2052;
......@@ -62,7 +62,7 @@ public class Main {
if( mds ) {
port = DEFAULT_PORT_MDS;
service = new OncRpcSvc(port);
_log.log(Level.CONFIG, "starting MDS on: {0}", port);
_log.info("starting MDS on: {}", port);
new OncRpcEmbeddedPortmap(2000);
......@@ -70,20 +70,20 @@ public class Main {
.getByName("127.0.0.1"));
portmap.getOncRpcClient().setTimeout(2000);
if ( !portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V3, OncRpcProtocols.ONCRPC_TCP, 2049) ) {
_log.log(Level.SEVERE, "Failed to register mountv1 service within portmap.");
_log.error("Failed to register mountv1 service within portmap.");
}
if (!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V3, OncRpcProtocols.ONCRPC_UDP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv1 service within portmap.");
_log.error("Failed to register mountv1 service within portmap.");
}
if(!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V1, OncRpcProtocols.ONCRPC_TCP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv3 service within portmap.");
_log.error("Failed to register mountv3 service within portmap.");
}
if(!portmap.setPort(mount_prot.MOUNT_PROGRAM, mount_prot.MOUNT_V1, OncRpcProtocols.ONCRPC_UDP, 2049)) {
_log.log(Level.SEVERE, "Failed to register mountv3 service within portmap.");
_log.error("Failed to register mountv3 service within portmap.");
}
if( !portmap.setPort(nfs4_prot.NFS4_PROGRAM, nfs4_prot.NFS_V4, OncRpcProtocols.ONCRPC_TCP, 2049) ) {
_log.log(Level.SEVERE, "Failed to register NFSv4 service within portmap.");
_log.error("Failed to register NFSv4 service within portmap.");
}
ExportFile exports = new ExportFile(new File("/etc/exports"));
......@@ -98,7 +98,7 @@ public class Main {
}else{
port = DEFAULT_PORT_DS;
service = new OncRpcSvc(port);
_log.log(Level.INFO, "starting DS on: {0}", port );
_log.info("starting DS on: {}", port );
NFSServerV41 ds = new NFSServerV41(new DSOperationFactory(), new DeviceManager(),
UnixPermissionHandler.getInstance(), fs, null);
service.register( new OncRpcProgram(nfs4_prot.NFS4_PROGRAM, nfs4_prot.NFS_V4), ds);
......
......@@ -7,10 +7,11 @@ package org.dcache.chimera.nfs.v4;
* with great help of William A.(Andy) Adamson
*/
import org.apache.log4j.Logger;
import org.dcache.chimera.nfs.ChimeraNFSException;
import org.dcache.chimera.nfs.v4.xdr.nfsstat4;
import org.dcache.chimera.nfs.v4.xdr.stateid4;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.InetSocketAddress;
import java.util.ArrayList;
......@@ -77,7 +78,7 @@ public class NFS4Client {
private int _seqid = 0;
private static final Logger _log = Logger.getLogger(NFS4Client.class.getName());
private static final Logger _log = LoggerFactory.getLogger(NFS4Client.class);
private Map<stateid4, NFS4State> _clinetStates = new HashMap<stateid4, NFS4State>();
......@@ -132,7 +133,7 @@ public class NFS4Client {
_srv_id = (BOOTID);
_srv_id = (_srv_id << 32) + CLIENTID.incrementAndGet();
_log.debug("New client id: " + Long.toHexString(_srv_id));
_log.debug("New client id: {}", Long.toHexString(_srv_id));
}
......
......@@ -13,8 +13,10 @@ import org.dcache.chimera.nfs.ChimeraNFSException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.MDC;
import org.dcache.chimera.FileSystemProvider;
import org.dcache.chimera.nfs.ExportFile;
......@@ -26,7 +28,7 @@ public class NFSServerV41 extends nfs4_prot_NFS4_PROGRAM_ServerStub {
private final FileSystemProvider _fs;
private final ExportFile _exportFile;
private static final Logger _log = Logger.getLogger(NFSServerV41.class.getName());
private static final Logger _log = LoggerFactory.getLogger(NFSServerV41.class);
private final NFSv4OperationFactory _operationFactory;
private final NFSv41DeviceManager _deviceManager;
private final AclHandler _aclHandler;
......@@ -44,6 +46,7 @@ public class NFSServerV41 extends nfs4_prot_NFS4_PROGRAM_ServerStub {
@Override
public void NFSPROC4_NULL_4(RpcCall call$) {
_log.debug("NFS PING client: {}", call$.getTransport().getRemoteSocketAddress());
}
@Override
......@@ -54,9 +57,12 @@ public class NFSServerV41 extends nfs4_prot_NFS4_PROGRAM_ServerStub {
try {
_log.log(Level.FINE, "NFS COMPOUND client: {0}, tag: {1}",
new Object[]{call$.getTransport().getRemoteSocketAddress(),
new String(arg1.tag.value.value)});
_log.debug("NFS COMPOUND client: {}, tag: [{}]",
call$.getTransport().getRemoteSocketAddress(),
new String(arg1.tag.value.value));
MDC.put(NfsMdc.TAG, new String(arg1.tag.value.value) );
MDC.put(NfsMdc.CLIENT, call$.getTransport().getRemoteSocketAddress().getHostName());
List<nfs_resop4> v = new ArrayList<nfs_resop4>(arg1.argarray.length);
if (arg1.minorversion.value > 1) {
......@@ -75,9 +81,9 @@ public class NFSServerV41 extends nfs4_prot_NFS4_PROGRAM_ServerStub {
}
try {
_log.log(Level.FINE, "CURFH: {0}", context.currentInode().toFullString());
_log.debug("CURFH: {}", context.currentInode().toFullString());
} catch (ChimeraNFSException he) {
_log.fine("CURFH: NULL");
_log.debug("CURFH: NULL");
}
v = context.processedOperations();
......@@ -92,17 +98,22 @@ public class NFSServerV41 extends nfs4_prot_NFS4_PROGRAM_ServerStub {
}
res.tag = arg1.tag;
_log.log(Level.FINE, "OP: {1} status: {1}", new Object[]{res.tag, res.status});
_log.debug( "OP: [{}] status: {}", res.tag, res.status);
} catch (ChimeraNFSException e) {
_log.log(Level.INFO, "NFS operation failed: {0}", e.getMessage());
_log.info("NFS operation failed: {}", e.getMessage());
res.resarray = new nfs_resop4[0];
res.status = e.getStatus();
res.tag = arg1.tag;
} catch (Exception e) {
_log.log(Level.SEVERE, "Unhandled exception:", e);
_log.error("Unhandled exception:", e);
res.resarray = new nfs_resop4[0];
res.status = nfsstat4.NFS4ERR_SERVERFAULT;
res.tag = arg1.tag;
}finally{
MDC.remove(NfsMdc.TAG);
MDC.remove(NfsMdc.CLIENT);
MDC.remove(NfsMdc.SESSION);
}
return res;
......