[ 
https://issues.apache.org/jira/browse/ARTEMIS-5889?focusedWorklogId=1006233&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-1006233
 ]

ASF GitHub Bot logged work on ARTEMIS-5889:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 19/Feb/26 20:57
            Start Date: 19/Feb/26 20:57
    Worklog Time Spent: 10m 
      Work Description: tabish121 commented on code in PR #6240:
URL: https://github.com/apache/artemis/pull/6240#discussion_r2830128018


##########
artemis-server/src/test/java/org/apache/activemq/artemis/core/server/routing/ConnectionRouterManagerTest.java:
##########
@@ -118,4 +121,194 @@ public void deploy2LocalOnlyWithSamePolicy() throws 
Exception {
       
connectionRouterConfiguration.setName("partition-local-consistent-hash-bis");
       underTest.deployConnectionRouter(connectionRouterConfiguration);
    }
+
+   @Test
+   public void deployPolicyAndRemoveWithUpdate() throws Exception {
+
+      ManagementService mockManagementService = 
Mockito.mock(ManagementService.class);
+      
Mockito.when(mockServer.getManagementService()).thenReturn(mockManagementService);
+
+      List<ConnectionRouterConfiguration> configurations = new ArrayList<>();
+
+      Configuration mockConfiguration = Mockito.mock(Configuration.class);
+      
Mockito.when(mockConfiguration.getConnectionRouters()).thenReturn(configurations);
+
+      ConnectionRouterConfiguration connectionRouterConfiguration = new 
ConnectionRouterConfiguration();
+      
connectionRouterConfiguration.setName("partition-local-consistent-hash-1").setKeyType(KeyType.CLIENT_ID).setLocalTargetFilter(String.valueOf(2));
+      NamedPropertyConfiguration policyConfig1 = new 
NamedPropertyConfiguration()
+         .setName(ConsistentHashModuloPolicy.NAME)
+         
.setProperties(Collections.singletonMap(ConsistentHashModuloPolicy.MODULO, 
String.valueOf(2)));
+      connectionRouterConfiguration.setPolicyConfiguration(policyConfig1);
+
+      configurations.add(connectionRouterConfiguration);
+
+      underTest.deploy(mockConfiguration);
+
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).registerConnectionRouter(Mockito.any());
+      Mockito.verifyNoMoreInteractions(mockManagementService);
+
+      configurations.clear();
+
+      underTest.update(mockConfiguration);
+
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).unregisterConnectionRouter(connectionRouterConfiguration.getName());
+      Mockito.verifyNoMoreInteractions(mockManagementService);
+
+      underTest.stop();
+
+      Mockito.verifyNoMoreInteractions(mockManagementService);
+   }
+
+   @Test
+   public void deployPolicyAndAddNewPolicyWithUpdate() throws Exception {
+
+      ManagementService mockManagementService = 
Mockito.mock(ManagementService.class);
+      
Mockito.when(mockServer.getManagementService()).thenReturn(mockManagementService);
+
+      List<ConnectionRouterConfiguration> configurations = new ArrayList<>();
+
+      Configuration mockConfiguration = Mockito.mock(Configuration.class);
+      
Mockito.when(mockConfiguration.getConnectionRouters()).thenReturn(configurations);
+
+      ConnectionRouterConfiguration connectionRouterConfiguration1 = new 
ConnectionRouterConfiguration();
+      
connectionRouterConfiguration1.setName("partition-local-consistent-hash-1").setKeyType(KeyType.CLIENT_ID).setLocalTargetFilter(String.valueOf(2));
+      NamedPropertyConfiguration policyConfig1 = new 
NamedPropertyConfiguration()
+         .setName(ConsistentHashModuloPolicy.NAME)
+         
.setProperties(Collections.singletonMap(ConsistentHashModuloPolicy.MODULO, 
String.valueOf(2)));
+      connectionRouterConfiguration1.setPolicyConfiguration(policyConfig1);
+
+      configurations.add(connectionRouterConfiguration1);
+
+      underTest.deploy(mockConfiguration);
+
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).registerConnectionRouter(Mockito.any());
+      Mockito.verifyNoMoreInteractions(mockManagementService);
+      Mockito.clearInvocations(mockManagementService);
+
+      ConnectionRouterConfiguration connectionRouterConfiguration2 = new 
ConnectionRouterConfiguration();
+      
connectionRouterConfiguration2.setName("partition-local-consistent-hash-2").setKeyType(KeyType.CLIENT_ID).setLocalTargetFilter(String.valueOf(2));
+      NamedPropertyConfiguration policyConfig2 = new 
NamedPropertyConfiguration()
+         .setName(ConsistentHashModuloPolicy.NAME)
+         
.setProperties(Collections.singletonMap(ConsistentHashModuloPolicy.MODULO, 
String.valueOf(2)));
+      connectionRouterConfiguration2.setPolicyConfiguration(policyConfig2);
+
+      configurations.add(connectionRouterConfiguration2);
+
+      underTest.update(mockConfiguration);
+
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).registerConnectionRouter(Mockito.any());
+      Mockito.verifyNoMoreInteractions(mockManagementService);
+
+      underTest.stop();
+
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).unregisterConnectionRouter(connectionRouterConfiguration1.getName());
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).unregisterConnectionRouter(connectionRouterConfiguration2.getName());
+   }
+
+   @Test
+   public void deployPolicyAndUpdateIt() throws Exception {
+
+      ManagementService mockManagementService = 
Mockito.mock(ManagementService.class);
+      
Mockito.when(mockServer.getManagementService()).thenReturn(mockManagementService);
+
+      List<ConnectionRouterConfiguration> configurations = new ArrayList<>();
+
+      Configuration mockConfiguration = Mockito.mock(Configuration.class);
+      
Mockito.when(mockConfiguration.getConnectionRouters()).thenReturn(configurations);
+
+      ConnectionRouterConfiguration connectionRouterConfiguration = new 
ConnectionRouterConfiguration();
+      
connectionRouterConfiguration.setName("partition-local-consistent-hash-1").setKeyType(KeyType.CLIENT_ID).setLocalTargetFilter(String.valueOf(2));
+      NamedPropertyConfiguration policyConfig = new 
NamedPropertyConfiguration()
+         .setName(ConsistentHashModuloPolicy.NAME)
+         
.setProperties(Collections.singletonMap(ConsistentHashModuloPolicy.MODULO, 
String.valueOf(2)));
+      connectionRouterConfiguration.setPolicyConfiguration(policyConfig);
+
+      configurations.add(connectionRouterConfiguration);
+
+      underTest.deploy(mockConfiguration);
+
+      Mockito.verify(mockManagementService, 
Mockito.times(1)).registerConnectionRouter(Mockito.any());
+      Mockito.verifyNoMoreInteractions(mockManagementService);
+      Mockito.clearInvocations(mockManagementService);
+
+      // Modify some configuration but use the same router name, this should 
remove the previous one
+      // and add back a new instance
+      ConnectionRouterConfiguration connectionRouterConfigurationUpdate = new 
ConnectionRouterConfiguration();
+      
connectionRouterConfigurationUpdate.setName("partition-local-consistent-hash-1").setKeyType(KeyType.CLIENT_ID).setLocalTargetFilter(String.valueOf(2));
+      NamedPropertyConfiguration policyConfigUpdated = new 
NamedPropertyConfiguration()
+         .setName(ConsistentHashModuloPolicy.NAME)
+         
.setProperties(Collections.singletonMap(ConsistentHashModuloPolicy.MODULO, 
String.valueOf(3)));

Review Comment:
   I've added additional testing and fixed an issue with state handling of the 
started flag in ConnectionRouterManager





Issue Time Tracking
-------------------

    Worklog Id:     (was: 1006233)
    Time Spent: 1h 10m  (was: 1h)

> support connectionRouter config reload
> --------------------------------------
>
>                 Key: ARTEMIS-5889
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-5889
>             Project: Artemis
>          Issue Type: Improvement
>          Components: Configuration
>    Affects Versions: 2.50.0
>            Reporter: Gary Tully
>            Assignee: Timothy A. Bish
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 10m
>  Remaining Estimate: 0h
>
> The connectionRouter config is not currently reloadable, no action is taken 
> on config refresh. 
> the typical CUD operations should be supported like for the recent reload of 
> acceptors.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to