Add wconfd RPC AddTcpUdpPort. This rpc is now being used by config mod function AddTcpUdpPort.
Removed config lock from AddTcpUdpPort. Added a basic AddTcpUdpPort in config_mock for testing purposes. Signed-off-by: BSRK Aditya <[email protected]> --- lib/config/__init__.py | 15 +++------------ src/Ganeti/WConfd/ConfigModifications.hs | 9 +++++++++ test/py/testutils/config_mock.py | 3 +++ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/lib/config/__init__.py b/lib/config/__init__.py index 991141f..e03db88 100644 --- a/lib/config/__init__.py +++ b/lib/config/__init__.py @@ -1097,19 +1097,10 @@ class ConfigWriter(object): """ return self._UnlockedVerifyConfig() - @ConfigSync() def AddTcpUdpPort(self, port): - """Adds a new port to the available port pool. - - @warning: this method does not "flush" the configuration (via - L{_WriteConfig}); callers should do that themselves once the - configuration is stable - - """ - if not isinstance(port, int): - raise errors.ProgrammerError("Invalid type passed for port") - - self._ConfigData().cluster.tcpudp_port_pool.add(port) + """Adds a new port to the available port pool.""" + utils.SimpleRetry(True, self._wconfd.AddTcpUdpPort, 0.1, 30, args=[port]) + self.OutDate() @ConfigSync(shared=1) def GetPortList(self): diff --git a/src/Ganeti/WConfd/ConfigModifications.hs b/src/Ganeti/WConfd/ConfigModifications.hs index 7a91d1a..3d02dc6 100644 --- a/src/Ganeti/WConfd/ConfigModifications.hs +++ b/src/Ganeti/WConfd/ConfigModifications.hs @@ -521,6 +521,14 @@ allocatePort = do (return ()) return . MaybeForJSON $ maybePort +-- | Adds a new port to the available port pool. +addTcpUdpPort :: Int -> WConfdMonad Bool +addTcpUdpPort port = + let pL = csConfigDataL . configClusterL . clusterTcpudpPortPoolL + f :: Monad m => ConfigState -> m ConfigState + f = mapMOf pL (return . (port:) . filter (/= port)) + in isJust <$> modifyConfigWithLock (const f) (return ()) + -- | Mark the status of instance disks active. markInstanceDisksActive :: InstanceUUID -> WConfdMonad (MaybeForJSON Instance) markInstanceDisksActive iUuid = do @@ -632,6 +640,7 @@ updateDisk disk = do exportedFunctions :: [Name] exportedFunctions = [ 'addInstance , 'addInstanceDisk + , 'addTcpUdpPort , 'allocatePort , 'attachInstanceDisk , 'detachInstanceDisk diff --git a/test/py/testutils/config_mock.py b/test/py/testutils/config_mock.py index aa36af9..43c09ce 100644 --- a/test/py/testutils/config_mock.py +++ b/test/py/testutils/config_mock.py @@ -972,3 +972,6 @@ class ConfigMock(config.ConfigWriter): def RemoveInstance(self, inst_uuid): del self._ConfigData().instances[inst_uuid] + + def AddTcpUdpPort(self, port): + self._ConfigData().cluster.tcpudp_port_pool.add(port) -- 1.7.10.4
