summaryrefslogtreecommitdiff
path: root/qpid/doc/book/src/java-broker/Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control.xml
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/doc/book/src/java-broker/Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control.xml')
-rw-r--r--qpid/doc/book/src/java-broker/Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control.xml176
1 files changed, 0 insertions, 176 deletions
diff --git a/qpid/doc/book/src/java-broker/Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control.xml b/qpid/doc/book/src/java-broker/Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control.xml
deleted file mode 100644
index 8de3f7f0d3..0000000000
--- a/qpid/doc/book/src/java-broker/Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control.xml
+++ /dev/null
@@ -1,176 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-
- 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.
-
--->
-
-<section id="Qpid-Producer-Flow-Control">
- <title>Producer Flow Control</title>
-
- <section role="h2" id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-GeneralInformation">
- <title>General Information</title>
- <para>
- The Java Broker supports a flow control mechanism to which can be used to prevent either a single queue
- or an entire virtualhost exceeding configured limits. These two mechanisms are described
- next.
- </para>
- </section>
- <section role="h2" id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-ServerConfiguration">
- <title>Server Configuration</title>
- <section role="h3">
- <title>Configuring a Queue to use flow control</title>
- <para>
- Flow control is enabled on a producer when it sends a message to a Queue
- which is "overfull". The producer flow control will be rescinded when all
- Queues on which a producer is blocking become "underfull". A Queue is defined
- as overfull when the size (in bytes) of the messages on the queue exceeds the
- <emphasis>capacity</emphasis> of the Queue. A Queue becomes "underfull" when its
- size becomes less than the <emphasis>resume capacity</emphasis>.
- </para>
- <para>
- The capacity and resume capacity can be specified when the queue is created. This
- can be done using the Flow Control Settings within the Queue creation dialogue.
- </para>
- <section role="h4">
- <title>Broker Log Messages</title>
- <para>
- There are four Broker log messages that may occur if flow control through queue capacity limits is enabled.
- Firstly, when a capacity limited queue becomes overfull, a log message similar to the following is produced
- </para>
- <programlisting>
-MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1003 : Overfull : Size : 1,200 bytes, Capacity : 1,000
- </programlisting>
- <para>Then for each channel which becomes blocked upon the overful queue a log message similar to the following is produced:</para>
- <programlisting>
-MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1005 : Flow Control Enforced (Queue MyQueue)
- </programlisting>
- <para>When enough messages have been consumed from the queue that it becomes underfull, then the following log is generated: </para>
- <programlisting>
-MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1004 : Underfull : Size : 600 bytes, Resume Capacity : 800
- </programlisting>
- <para>And for every channel which becomes unblocked you will see a message similar to: </para>
- <programlisting>
-MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1006 : Flow Control Removed
- </programlisting>
- <para>Obviously the details of connection, virtual host, queue, size, capacity, etc would depend on the configuration in use.</para>
-
-
- </section><!-- Broker Log Messages -->
- </section><!-- Configuring a Queue to use flow control -->
-
- <section role="h3">
- <title>Disk quota-based flow control</title>
- <para>
- Flow control can also be triggered when a configured disk quota is exceeded. This is supported by the BDB and
- Derby virtualhosts.
- </para>
- <para>
- This functionality blocks all producers on reaching the disk overflow limit. When consumers
- consume the messages, causing disk space usage to falls below the underflow limit, the
- producers are unblocked and continue working as normal.
- </para>
- <para>
- Two limits can be configured:
- </para>
- <para>
- overfull limit - the maximum space on disk (in bytes).
- </para>
- <para>
- underfull limit - when the space on disk drops below this limit, producers are allowed to resume publishing.
- </para>
-
- <para>
- The overfull and underful limit can be specified when a new virtualhost is created or an exiting
- virtualhost is edited. This can be done using the Store Overflow and Store Underfull settings
- within the virtual host creation and edit dialogue. If editing an existing virtualhost, the virtualhost
- must be restarted for the new values to take effect.
- </para>
-
- <para>
- The disk quota functionality is based on "best effort" principle. This means the broker
- cannot guarantee that the disk space limit will not be exceeded. If several concurrent
- transactions are started before the limit is reached, which collectively cause the limit
- to be exceeded, the broker may allow all of them to be committed.
- </para>
-
- <section role="h4">
- <title>Broker Log Messages for quota flow control</title>
- <para>
- There are two broker log messages that may occur if flow control through disk quota limits is enabled.
- When the virtual host is blocked due to exceeding of the disk quota limit the following message
- appears in the broker log
- <programlisting>
-[vh(/test)/ms(BDBMessageStore)] MST-1008 : Store overfull, flow control will be enforced
- </programlisting>
- When virtual host is unblocked after cleaning the disk space the following message appears in the broker log
- <programlisting>
-[vh(/test)/ms(BDBMessageStore)] MST-1009 : Store overfull condition cleared
- </programlisting>
- </para>
- </section>
- </section><!-- Disk quota-based flow control -->
- </section><!-- Server configuration -->
-
-
- <section role="h2" id="Java-Broker-Runtime-Disk-Space-Management-Producer-Flow-Control-ClientImpact">
- <title>Client impact and configuration</title>
- <para>
- If a producer sends to a queue which is overfull, the broker will respond by
- instructing the client not to send any more messages. The impact of this is
- that any future attempts to send will block until the broker rescinds the flow control order.
- </para>
- <para>
- While blocking the client will periodically log the fact that it is blocked waiting on flow control.
- </para>
- <programlisting>
-WARN Message send delayed by 5s due to broker enforced flow control
-WARN Message send delayed by 10s due to broker enforced flow control
- </programlisting>
- <para>
- After a set period the send will timeout and throw a JMSException to the calling code.
- </para>
- <para>
- If such a JMSException is thrown, the message will not be sent to the broker,
- however the underlying Session may still be active - in particular if the
- Session is transactional then the current transaction will not be automatically
- rolled back. Users may choose to either attempt to resend the message, or to
- roll back any transactional work and close the Session.
- </para>
- <para>
- Both the timeout delay and the periodicity of the warning messages can be set
- using Java system properties.
- </para>
- <para>
- The amount of time (in milliseconds) to wait before timing out
- is controlled by the property qpid.flow_control_wait_failure.
- </para>
- <para>
- The frequency at which the log message informing that the producer is flow
- controlled is sent is controlled by the system property qpid.flow_control_wait_notify_period.
- </para>
- <para>
- Adding the following to the command line to start the client would result in a timeout of one minute,
- with warning messages every ten seconds:
- </para>
- <programlisting>
--Dqpid.flow_control_wait_failure=60000
--Dqpid.flow_control_wait_notify_period=10000
- </programlisting>
- </section> <!-- Client impact and configuration -->
-</section>