mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#9307 Python: avoid assigning same port number to multiple grpc sessions
* Python: avoid assigning same port number to multiple grpc sessions * Add retry count when checking for port number file * Use grpc to find and use port number * Add test used to start several instances of resinsight at the same time Testing up to 50 instances works well * Python: allow launch_port == 0 to assign port by GRPC in Instance.launch(). Also allow longer wait before failing the port number file reading: it can take some time to launch when launching lots of instances at the same time.
This commit is contained in:
committed by
GitHub
parent
587f700ae4
commit
c2b5ab8d2c
@@ -137,12 +137,14 @@ void RiaGrpcServerImpl::runInThread()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RiaGrpcServerImpl::initialize()
|
||||
{
|
||||
CAF_ASSERT( m_portNumber > 0 && m_portNumber <= (int)std::numeric_limits<quint16>::max() );
|
||||
|
||||
QString serverAddress = QString( "localhost:%1" ).arg( m_portNumber );
|
||||
CAF_ASSERT( m_portNumber >= 0 && m_portNumber <= (int)std::numeric_limits<quint16>::max() );
|
||||
|
||||
ServerBuilder builder;
|
||||
builder.AddListeningPort( serverAddress.toStdString(), grpc::InsecureServerCredentials() );
|
||||
|
||||
// When setting port number to 0, grpc will find and use a valid port number
|
||||
// The port number is assigned to the m_portNumber variable after calling builder.BuildAndStart()
|
||||
QString requestedServerAddress = QString( "localhost:%1" ).arg( m_portNumber );
|
||||
builder.AddListeningPort( requestedServerAddress.toStdString(), grpc::InsecureServerCredentials(), &m_portNumber );
|
||||
|
||||
for ( auto key : RiaGrpcServiceFactory::instance()->allKeys() )
|
||||
{
|
||||
@@ -154,7 +156,14 @@ void RiaGrpcServerImpl::initialize()
|
||||
m_completionQueue = builder.AddCompletionQueue();
|
||||
m_server = builder.BuildAndStart();
|
||||
|
||||
CVF_ASSERT( m_server );
|
||||
QString serverAddress = QString( "localhost:%1" ).arg( m_portNumber );
|
||||
|
||||
if ( !m_server )
|
||||
{
|
||||
RiaLogging::error( QString( "Failed to start server on %1" ).arg( serverAddress ) );
|
||||
return;
|
||||
}
|
||||
|
||||
RiaLogging::info( QString( "Server listening on %1" ).arg( serverAddress ) );
|
||||
|
||||
// Spawn new CallData instances to serve new clients.
|
||||
@@ -383,7 +392,7 @@ int RiaGrpcServer::findAvailablePortNumber( int defaultPortNumber )
|
||||
{
|
||||
int startPort = 50051;
|
||||
|
||||
if ( defaultPortNumber > 0 && defaultPortNumber < (int)std::numeric_limits<quint16>::max() )
|
||||
if ( defaultPortNumber >= 0 && defaultPortNumber < (int)std::numeric_limits<quint16>::max() )
|
||||
{
|
||||
startPort = defaultPortNumber;
|
||||
}
|
||||
@@ -391,8 +400,7 @@ int RiaGrpcServer::findAvailablePortNumber( int defaultPortNumber )
|
||||
int endPort = std::min( startPort + 100, (int)std::numeric_limits<quint16>::max() );
|
||||
|
||||
QTcpServer serverTest;
|
||||
quint16 port = static_cast<quint16>( startPort );
|
||||
for ( ; port <= static_cast<quint16>( endPort ); ++port )
|
||||
for ( quint16 port = static_cast<quint16>( startPort ); port <= static_cast<quint16>( endPort ); ++port )
|
||||
{
|
||||
if ( serverTest.listen( QHostAddress::LocalHost, port ) )
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user