HDFS-12339. NFS Gateway on Shutdown Gives Unregistration Failure. Does Not Unregister with rpcbind Portmapper. Contributed by Mukul Kumar Singh.

This commit is contained in:
Anu Engineer 2017-09-23 12:27:34 -07:00
parent 40ef9fa171
commit ecc85620e8
4 changed files with 33 additions and 8 deletions

View File

@ -109,6 +109,17 @@ abstract public class MountdBase {
} }
} }
public void stop() {
if (udpBoundPort > 0) {
rpcProgram.unregister(PortmapMapping.TRANSPORT_UDP, udpBoundPort);
udpBoundPort = 0;
}
if (tcpBoundPort > 0) {
rpcProgram.unregister(PortmapMapping.TRANSPORT_TCP, tcpBoundPort);
tcpBoundPort = 0;
}
}
/** /**
* Priority of the mountd shutdown hook. * Priority of the mountd shutdown hook.
*/ */
@ -117,8 +128,7 @@ abstract public class MountdBase {
private class Unregister implements Runnable { private class Unregister implements Runnable {
@Override @Override
public synchronized void run() { public synchronized void run() {
rpcProgram.unregister(PortmapMapping.TRANSPORT_UDP, udpBoundPort); stop();
rpcProgram.unregister(PortmapMapping.TRANSPORT_TCP, tcpBoundPort);
} }
} }

View File

@ -78,6 +78,13 @@ public abstract class Nfs3Base {
nfsBoundPort = tcpServer.getBoundPort(); nfsBoundPort = tcpServer.getBoundPort();
} }
public void stop() {
if (nfsBoundPort > 0) {
rpcProgram.unregister(PortmapMapping.TRANSPORT_TCP, nfsBoundPort);
nfsBoundPort = 0;
}
rpcProgram.stopDaemons();
}
/** /**
* Priority of the nfsd shutdown hook. * Priority of the nfsd shutdown hook.
*/ */
@ -86,8 +93,7 @@ public abstract class Nfs3Base {
private class NfsShutdownHook implements Runnable { private class NfsShutdownHook implements Runnable {
@Override @Override
public synchronized void run() { public synchronized void run() {
rpcProgram.unregister(PortmapMapping.TRANSPORT_TCP, nfsBoundPort); stop();
rpcProgram.stopDaemons();
} }
} }
} }

View File

@ -57,7 +57,7 @@ public class Nfs3 extends Nfs3Base {
start(register); start(register);
} }
static void startService(String[] args, static Nfs3 startService(String[] args,
DatagramSocket registrationSocket) throws IOException { DatagramSocket registrationSocket) throws IOException {
StringUtils.startupShutdownMessage(Nfs3.class, args, LOG); StringUtils.startupShutdownMessage(Nfs3.class, args, LOG);
NfsConfiguration conf = new NfsConfiguration(); NfsConfiguration conf = new NfsConfiguration();
@ -67,8 +67,14 @@ public class Nfs3 extends Nfs3Base {
final Nfs3 nfsServer = new Nfs3(conf, registrationSocket, final Nfs3 nfsServer = new Nfs3(conf, registrationSocket,
allowInsecurePorts); allowInsecurePorts);
nfsServer.startServiceInternal(true); nfsServer.startServiceInternal(true);
return nfsServer;
} }
public void stop() {
super.stop();
mountd.stop();
}
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
startService(args, null); startService(args, null);
} }

View File

@ -40,6 +40,7 @@ public class PrivilegedNfsGatewayStarter implements Daemon {
static final Log LOG = LogFactory.getLog(PrivilegedNfsGatewayStarter.class); static final Log LOG = LogFactory.getLog(PrivilegedNfsGatewayStarter.class);
private String[] args = null; private String[] args = null;
private DatagramSocket registrationSocket = null; private DatagramSocket registrationSocket = null;
private Nfs3 nfs3Server = null;
@Override @Override
public void init(DaemonContext context) throws Exception { public void init(DaemonContext context) throws Exception {
@ -68,12 +69,14 @@ public class PrivilegedNfsGatewayStarter implements Daemon {
@Override @Override
public void start() throws Exception { public void start() throws Exception {
Nfs3.startService(args, registrationSocket); nfs3Server = Nfs3.startService(args, registrationSocket);
} }
@Override @Override
public void stop() throws Exception { public void stop() throws Exception {
// Nothing to do. if (nfs3Server != null) {
nfs3Server.stop();
}
} }
@Override @Override