[
https://issues.apache.org/jira/browse/ARTEMIS-4639?focusedWorklogId=904311&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-904311
]
ASF GitHub Bot logged work on ARTEMIS-4639:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 08/Feb/24 17:35
Start Date: 08/Feb/24 17:35
Worklog Time Spent: 10m
Work Description: gemmellr commented on code in PR #4814:
URL: https://github.com/apache/activemq-artemis/pull/4814#discussion_r1483352682
##########
artemis-protocols/artemis-openwire-protocol/src/test/java/org/apache/activemq/artemis/core/protocol/openwire/amq/OpenWireProtocolManagerTest.java:
##########
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.core.protocol.openwire.amq;
+
+import java.util.concurrent.Executors;
+
+import io.netty.buffer.Unpooled;
+import org.apache.activemq.artemis.api.core.client.TopologyMember;
+import org.apache.activemq.artemis.core.buffers.impl.ChannelBufferWrapper;
+import org.apache.activemq.artemis.core.client.impl.TopologyMemberImpl;
+import org.apache.activemq.artemis.core.persistence.StorageManager;
+import
org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager;
+import org.apache.activemq.artemis.core.protocol.openwire.OpenWireConnection;
+import
org.apache.activemq.artemis.core.protocol.openwire.OpenWireProtocolManager;
+import org.apache.activemq.artemis.core.security.SecurityStore;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ServerSession;
+import org.apache.activemq.artemis.core.server.cluster.ClusterManager;
+import org.apache.activemq.artemis.spi.core.remoting.Connection;
+import org.apache.activemq.artemis.utils.ActiveMQThreadFactory;
+import org.apache.activemq.artemis.utils.RandomUtil;
+import org.apache.activemq.artemis.utils.actors.ArtemisExecutor;
+import org.apache.activemq.command.ConnectionId;
+import org.apache.activemq.command.ConnectionInfo;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class OpenWireProtocolManagerTest {
+
+ @Test
+ public void testNullPrimaryOnNodeUp() throws Exception {
+
+ ArtemisExecutor executor =
ArtemisExecutor.delegate(Executors.newSingleThreadExecutor(ActiveMQThreadFactory.defaultThreadFactory(getClass().getName())));
+
+ ClusterManager clusterManager = Mockito.mock(ClusterManager.class);
+ ActiveMQServer server = Mockito.mock(ActiveMQServer.class);
+ StorageManager storageManager = new NullStorageManager();
+ Mockito.when(server.getStorageManager()).thenReturn(storageManager);
+
Mockito.when(server.newOperationContext()).thenReturn(storageManager.newContext(executor));
+ Mockito.when(server.getClusterManager()).thenReturn(clusterManager);
+
Mockito.when(clusterManager.getDefaultConnection(Mockito.any())).thenReturn(null);
+ SecurityStore securityStore = Mockito.mock(SecurityStore.class);
+ Mockito.when(server.getSecurityStore()).thenReturn(securityStore);
+ Mockito.when(securityStore.authenticate(Mockito.any(), Mockito.any(),
Mockito.any(), Mockito.any())).thenReturn(null);
+ ServerSession serverSession = Mockito.mock(ServerSession.class);
+ Mockito.when(serverSession.getName()).thenReturn("session");
+
Mockito.doReturn(serverSession).when(server).createSession(Mockito.anyString(),
Mockito.any(), Mockito.any(), Mockito.anyInt(), Mockito.any(),
Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.anyBoolean(),
+
Mockito.anyBoolean(), Mockito.any(), Mockito.any(), Mockito.anyBoolean(),
Mockito.any(), Mockito.any(), Mockito.anyString(), Mockito.any(),
Mockito.anyBoolean());
+
+ OpenWireProtocolManager openWireProtocolManager = new
OpenWireProtocolManager(null, server,null, null);
+ openWireProtocolManager.setSecurityDomain("securityDomain");
+ openWireProtocolManager.setSupportAdvisory(false);
+ Connection connection = Mockito.mock(Connection.class);
+ Mockito.doReturn(new
ChannelBufferWrapper(Unpooled.buffer(1024))).when(connection).createTransportBuffer(Mockito.anyInt());
+ OpenWireConnection openWireConnection = new
OpenWireConnection(connection, server, openWireProtocolManager,
openWireProtocolManager.wireFormat(), executor);
+ ConnectionInfo connectionInfo = new ConnectionInfo(new
ConnectionId("1:1"));
+ connectionInfo.setClientId(RandomUtil.randomString());
+ openWireProtocolManager.addConnection(openWireConnection,
connectionInfo);
+
+ TopologyMember topologyMember = new
TopologyMemberImpl(RandomUtil.randomString(), null, null, null, null);
+ openWireProtocolManager.nodeUP(topologyMember, false);
+ executor.shutdown();
Review Comment:
This still wont happen if something pops earlier. Needs at least a
try-finally. Or you could use e.g ArtemisTestCase as a parent and use the
runAfter[Ex] method as you creating the executor.
##########
artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImplMockTest.java:
##########
@@ -85,6 +93,22 @@ public void testRemvalOfLocalParameters() throws Exception {
}
+ @Test
+ public void testNullPrimaryOnNodeUp() throws Exception {
+ TransportConfiguration tc = new TransportConfiguration();
+ tc.setFactoryClassName("mock");
+ tc.getParams().put(TransportConstants.LOCAL_ADDRESS_PROP_NAME,
"localAddress");
+ tc.getParams().put(TransportConstants.LOCAL_PORT_PROP_NAME, "localPort");
+
+ ArtemisExecutor executor =
ArtemisExecutor.delegate(Executors.newSingleThreadExecutor(ActiveMQThreadFactory.defaultThreadFactory(getClass().getName())));
+
+ ClusterConnectionImpl cci = new ClusterConnectionImpl(null, new
TransportConfiguration[]{tc}, null, null, null, 0, 0L, 0L, 0L, 0, 0L, 0, 0, 0L,
0L, false, null, 0, 0, () -> executor, new MockServer(), null, null, null, 0,
new FakeNodeManager(UUIDGenerator.getInstance().generateStringUUID()), null,
null, true, 0, 0);
+
+ TopologyMember topologyMember = new
TopologyMemberImpl(RandomUtil.randomString(), null, null, null, null);
+ cci.nodeUP(topologyMember, false);
+ executor.shutdownNow();
Review Comment:
Similarly (besides it already having a parent with the util method)
Issue Time Tracking
-------------------
Worklog Id: (was: 904311)
Time Spent: 0.5h (was: 20m)
> Artemis Cluster and NullpointerException in "sending topology"
> --------------------------------------------------------------
>
> Key: ARTEMIS-4639
> URL: https://issues.apache.org/jira/browse/ARTEMIS-4639
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: Broker, Clustering
> Affects Versions: 2.32.0
> Reporter: Jean-Pascal Briquet
> Assignee: Justin Bertram
> Priority: Major
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> A {{NullPointerException}} may appear while the "sending topology" operation
> is being executed.
> *Configuration:*
> Artemis clustering enabled with static connectors using the option
> {{{}allow-direct-connections-only="true"{}}}.
> *Broker logs:*
> {noformat}
> 2024-02-06 22:06:14,259 WARN [org.apache.activemq.artemis.core.client]
> AMQ212030: error sending topology
> java.lang.NullPointerException: Cannot invoke
> "org.apache.activemq.artemis.api.core.TransportConfiguration.newTransportConfig(String)"
> because the return value of
> "org.apache.activemq.artemis.api.core.client.TopologyMember.getLive()" is null
> at
> org.apache.activemq.artemis.core.server.cluster.impl.ClusterConnectionImpl.nodeUP(ClusterConnectionImpl.java:755)
> ~[artemis-server-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.core.client.impl.Topology$1.run(Topology.java:284)
> ~[artemis-core-client-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
> ~[artemis-commons-2.30.0.jar:?]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
> ~[artemis-commons-2.30.0.jar:?]
> at
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
> ~[artemis-commons-2.30.0.jar:?]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> [?:?]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> [?:?]
> at
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
> [artemis-commons-2.30.0.jar:?]
> 2024-02-06 22:06:14,260 WARN [org.apache.activemq.artemis.core.client]
> AMQ212030: error sending topology
> java.lang.NullPointerException: Cannot invoke
> "org.apache.activemq.artemis.api.core.TransportConfiguration.getParams()"
> because "liveConnector" is null
> at
> org.apache.activemq.artemis.core.client.impl.TopologyMemberImpl.toURI(TopologyMemberImpl.java:133)
> ~[artemis-core-client-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireProtocolManager.generateMembersURI(OpenWireProtocolManager.java:536)
> ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireProtocolManager.newConnectionControl(OpenWireProtocolManager.java:521)
> ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireProtocolManager.updateClientClusterInfo(OpenWireProtocolManager.java:288)
> ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.core.protocol.openwire.OpenWireProtocolManager.nodeUP(OpenWireProtocolManager.java:236)
> ~[artemis-openwire-protocol-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.core.client.impl.Topology$1.run(Topology.java:284)
> ~[artemis-core-client-2.30.0.jar:2.30.0]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:57)
> ~[artemis-commons-2.30.0.jar:?]
> at
> org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:32)
> ~[artemis-commons-2.30.0.jar:?]
> at
> org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:68)
> ~[artemis-commons-2.30.0.jar:?]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> [?:?]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> [?:?]
> at
> org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
> [artemis-commons-2.30.0.jar:?]{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)