[
https://issues.apache.org/jira/browse/ARTEMIS-2057?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16595071#comment-16595071
]
ASF GitHub Bot commented on ARTEMIS-2057:
-----------------------------------------
Github user gemmellr commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2272#discussion_r213342991
--- Diff:
artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPSessionCallbackTest.java
---
@@ -0,0 +1,185 @@
+/*
+ * 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.protocol.amqp.broker;
+
+import static
org.apache.activemq.artemis.protocol.amqp.proton.AmqpSupport.AMQP_CREDITS_DEFAULT;
+import static
org.apache.activemq.artemis.protocol.amqp.proton.AmqpSupport.AMQP_LOW_CREDITS_DEFAULT;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.never;
+
+import java.util.concurrent.Executor;
+
+import org.apache.activemq.artemis.api.core.SimpleString;
+import org.apache.activemq.artemis.core.paging.PagingManager;
+import org.apache.activemq.artemis.core.paging.PagingStore;
+import org.apache.activemq.artemis.core.persistence.OperationContext;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import
org.apache.activemq.artemis.protocol.amqp.proton.AMQPConnectionContext;
+import org.apache.activemq.artemis.spi.core.remoting.Connection;
+import org.apache.qpid.proton.engine.Receiver;
+import org.junit.Rule;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.mockito.quality.Strictness;
+
+public class AMQPSessionCallbackTest {
+
+ @Rule public MockitoRule rule =
MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS);
+
+ @Mock private AMQPConnectionCallback protonSPI;
+ @Mock private ProtonProtocolManager manager;
+ @Mock private AMQPConnectionContext connection;
+ @Mock private Connection transportConnection;
+ @Mock private Executor executor;
+ @Mock private OperationContext operationContext;
+ @Mock private Receiver receiver;
+ @Mock private ActiveMQServer server;
+ @Mock private PagingManager pagingManager;
+ @Mock private PagingStore pagingStore;
+
+ /**
+ * Test that the AMQPSessionCallback grants no credit when not at
threshold
+ */
+ @Test
+ public void
testOfferProducerWithNoAddressDoesNMotTopOffCreditAboveThresholdN() {
+ // Mock returns to get at the runnable that grants credit.
+ Mockito.when(manager.getServer()).thenReturn(server);
+ Mockito.when(server.getPagingManager()).thenReturn(pagingManager);
+
+ // Capture credit runnable and invoke to trigger credit top off
+ ArgumentCaptor<Runnable> argument =
ArgumentCaptor.forClass(Runnable.class);
+ AMQPSessionCallback session = new AMQPSessionCallback(
+ protonSPI, manager, connection, transportConnection, executor,
operationContext);
+
+ // Credit is below threshold
--- End diff --
Above threshold?
> AMQP: Credit window can grow beyond max credit configuration
> ------------------------------------------------------------
>
> Key: ARTEMIS-2057
> URL: https://issues.apache.org/jira/browse/ARTEMIS-2057
> Project: ActiveMQ Artemis
> Issue Type: Improvement
> Components: AMQP
> Affects Versions: 2.6.2
> Reporter: Timothy Bish
> Assignee: Timothy Bish
> Priority: Blocker
> Fix For: 2.6.3
>
>
> The broker currently grants credit based on the 'amqpCredit' configuration
> which default to 1000 using a check on the "remote credit" view which
> includes messages currently queued into proton but not processed by the
> protocol head yet. This accounting can lead to a runaway credit situation if
> the sender is particularly fast or a significant number of small messages are
> batched into one TCP frame and the broker isn't able to clear the backlog
> from the proton queue fast enough such that the queue grows to the point that
> the granting algorithm starts granting "amqpCredit" number of credits on each
> new messages it processes from proton.
> Another smaller issue is that the granting of credit allows for a client to
> have an outstanding balance of more than the configured "amqpCredits" which
> may not be what was originally intended by that option and doesn't match what
> many of the clients do when topping off credit at a low water mark.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)