only register valid ports with portmapper

Summary:
UDS don't have port numbers, so trying to register their port with the
portmapper is going to fail. This can cause eden to fail to start when we
enable uds. The current portmapper version we use can't support
this, so let's just skip attempting to register uds servers with the
portmapper.

Reviewed By: xavierd

Differential Revision: D45196379

fbshipit-source-id: 584e6e04129d1ddbcc756ed66c55a03c3955705a
This commit is contained in:
Katie Mancini 2023-04-21 17:43:55 -07:00 committed by Facebook GitHub Bot
parent 6bd256c869
commit b25fc2af3a
2 changed files with 18 additions and 8 deletions

View File

@ -2109,10 +2109,15 @@ folly::Future<NfsServer::NfsMountInfo> makeNfsChannel(
kNfsdSocketName;
}
channel->initialize(makeNfsSocket(std::move(unixSocketPath)), false);
nfsServer->recordPortNumber(
channel->getProgramNumber(),
channel->getProgramVersion(),
channel->getAddr().getPort());
// we can't register uds sockets with our portmapper (portmapper v2
// does not support those).
auto addr = channel->getAddr();
if (addr.isFamilyInet()) {
nfsServer->recordPortNumber(
channel->getProgramNumber(),
channel->getProgramVersion(),
addr.getPort());
}
}
return NfsServer::NfsMountInfo{
std::move(channel), std::move(mountdAddr)};

View File

@ -37,10 +37,15 @@ void NfsServer::initialize(
if (rpcbindd_) {
rpcbindd_->initialize();
}
recordPortNumber(
mountd_.getProgramNumber(),
mountd_.getProgramVersion(),
mountd_.getAddr().getPort());
auto registeredAddr = mountd_.getAddr();
// we can't register uds sockets with our portmapper (portmapper v2
// does not support those).
if (registeredAddr.isFamilyInet()) {
recordPortNumber(
mountd_.getProgramNumber(),
mountd_.getProgramVersion(),
registeredAddr.getPort());
}
}
void NfsServer::initialize(folly::File&& socket) {