@@ -206,9 +206,8 @@ class DynamicBrokerConfigTest {
206206 def testUpdateRemoteLogManagerDynamicThreadPool (): Unit = {
207207 val origProps = TestUtils .createBrokerConfig(0 , TestUtils .MockZkConnect , port = 8181 )
208208 val config = KafkaConfig (origProps)
209- // When copierThreadPool and expirationThreadPool are not configured, then it defaults to the remoteLogManagerThreadPoolSize
210- assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_THREAD_POOL_SIZE , config.remoteLogManagerConfig.remoteLogManagerCopierThreadPoolSize())
211- assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_THREAD_POOL_SIZE , config.remoteLogManagerConfig.remoteLogManagerExpirationThreadPoolSize())
209+ assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_COPIER_THREAD_POOL_SIZE , config.remoteLogManagerConfig.remoteLogManagerCopierThreadPoolSize())
210+ assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_EXPIRATION_THREAD_POOL_SIZE , config.remoteLogManagerConfig.remoteLogManagerExpirationThreadPoolSize())
212211 assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_READER_THREADS , config.remoteLogManagerConfig.remoteLogReaderThreads())
213212
214213 val serverMock = mock(classOf [KafkaBroker ])
@@ -233,42 +232,48 @@ class DynamicBrokerConfigTest {
233232 assertEquals(7 , config.remoteLogManagerConfig.remoteLogManagerExpirationThreadPoolSize())
234233 verify(remoteLogManager).resizeExpirationThreadPool(7 )
235234
236- // When copier and expiration thread pools are set to -1 dynamically, then it defaults to the remoteLogManagerThreadPoolSize
237- props.put(RemoteLogManagerConfig .REMOTE_LOG_MANAGER_COPIER_THREAD_POOL_SIZE_PROP , " -1" )
238- config.dynamicConfig.validate(props, perBrokerConfig = true )
239- config.dynamicConfig.updateDefaultConfig(props)
240- assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_THREAD_POOL_SIZE , config.remoteLogManagerConfig.remoteLogManagerCopierThreadPoolSize())
241- verify(remoteLogManager).resizeCopierThreadPool(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_THREAD_POOL_SIZE )
242-
243- props.put(RemoteLogManagerConfig .REMOTE_LOG_MANAGER_EXPIRATION_THREAD_POOL_SIZE_PROP , " -1" )
244- config.dynamicConfig.validate(props, perBrokerConfig = false )
245- config.dynamicConfig.updateDefaultConfig(props)
246- assertEquals(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_THREAD_POOL_SIZE , config.remoteLogManagerConfig.remoteLogManagerExpirationThreadPoolSize())
247- verify(remoteLogManager).resizeExpirationThreadPool(RemoteLogManagerConfig .DEFAULT_REMOTE_LOG_MANAGER_THREAD_POOL_SIZE )
248-
249235 props.put(RemoteLogManagerConfig .REMOTE_LOG_READER_THREADS_PROP , " 6" )
250236 config.dynamicConfig.validate(props, perBrokerConfig = true )
251237 config.dynamicConfig.updateDefaultConfig(props)
252238 assertEquals(6 , config.remoteLogManagerConfig.remoteLogReaderThreads())
253239 verify(remoteLogManager).resizeReaderThreadPool(6 )
254240 props.clear()
241+ verifyNoMoreInteractions(remoteLogManager)
242+ }
255243
256- // Test dynamic update with invalid values
257- props.put( RemoteLogManagerConfig . REMOTE_LOG_MANAGER_COPIER_THREAD_POOL_SIZE_PROP , " 0 " )
258- assertThrows( classOf [ ConfigException ], () => config.dynamicConfig.validate(props, perBrokerConfig = true ) )
259- props.clear( )
244+ @ Test
245+ def testRemoteLogDynamicThreadPoolWithInvalidValues () : Unit = {
246+ val origProps = TestUtils .createBrokerConfig( 0 , TestUtils . MockZkConnect , port = 8181 )
247+ val config = KafkaConfig (origProps )
260248
261- props.put(RemoteLogManagerConfig .REMOTE_LOG_MANAGER_EXPIRATION_THREAD_POOL_SIZE_PROP , " -2" )
262- assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props, perBrokerConfig = false ))
263- props.clear()
249+ val serverMock = mock(classOf [KafkaBroker ])
250+ val remoteLogManager = mock(classOf [RemoteLogManager ])
251+ when(serverMock.config).thenReturn(config)
252+ when(serverMock.remoteLogManagerOpt).thenReturn(Some (remoteLogManager))
264253
265- props.put(RemoteLogManagerConfig .REMOTE_LOG_READER_THREADS_PROP , " 2" )
266- assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props, perBrokerConfig = false ))
267- props.clear()
254+ config.dynamicConfig.initialize(None , None )
255+ config.dynamicConfig.addBrokerReconfigurable(new DynamicRemoteLogConfig (serverMock))
268256
269- props.put(RemoteLogManagerConfig .REMOTE_LOG_READER_THREADS_PROP , " -1" )
270- assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props, perBrokerConfig = true ))
271- props.clear()
257+ // Test dynamic update with invalid values
258+ val props = new Properties ()
259+ props.put(RemoteLogManagerConfig .REMOTE_LOG_MANAGER_COPIER_THREAD_POOL_SIZE_PROP , " 0" )
260+ val err = assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props, perBrokerConfig = true ))
261+ assertTrue(err.getMessage.contains(" Value must be at least 1" ))
262+
263+ val props1 = new Properties ()
264+ props1.put(RemoteLogManagerConfig .REMOTE_LOG_MANAGER_EXPIRATION_THREAD_POOL_SIZE_PROP , " -1" )
265+ val err1 = assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props1, perBrokerConfig = false ))
266+ assertTrue(err1.getMessage.contains(" Value must be at least 1" ))
267+
268+ val props2 = new Properties ()
269+ props2.put(RemoteLogManagerConfig .REMOTE_LOG_READER_THREADS_PROP , " 2" )
270+ val err2 = assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props2, perBrokerConfig = false ))
271+ assertTrue(err2.getMessage.contains(" value should be at least half the current value" ))
272+
273+ val props3 = new Properties ()
274+ props3.put(RemoteLogManagerConfig .REMOTE_LOG_READER_THREADS_PROP , " -1" )
275+ val err3 = assertThrows(classOf [ConfigException ], () => config.dynamicConfig.validate(props, perBrokerConfig = true ))
276+ assertTrue(err3.getMessage.contains(" Value must be at least 1" ))
272277 verifyNoMoreInteractions(remoteLogManager)
273278 }
274279
0 commit comments