You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Alan Conway (JIRA)" <qp...@incubator.apache.org> on 2009/02/05 16:11:59 UTC
[jira] Resolved: (QPID-1618) unacked persistent messages don't get
to messageStore of newbie cluster broker.
[ https://issues.apache.org/jira/browse/QPID-1618?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alan Conway resolved QPID-1618.
-------------------------------
Resolution: Fixed
Commited the code change in revision 741123 based on manual testing.
Unit test needs some work:
- use the ClusterFixuture class from cluster_tests to avoid sleeping
- get rid of mktemp/mkstemp warning
- fix strange error in exception_test when the test is run.
> unacked persistent messages don't get to messageStore of newbie cluster broker.
> -------------------------------------------------------------------------------
>
> Key: QPID-1618
> URL: https://issues.apache.org/jira/browse/QPID-1618
> Project: Qpid
> Issue Type: Bug
> Components: C++ Broker
> Affects Versions: M4
> Reporter: michael j. goulish
> Assignee: Alan Conway
> Priority: Critical
> Attachments: qpid_1618.diff
>
>
> When a new broker is added to a cluster, persistent messages that have not yet been ACKed do not get stored in the new brokers messageStore.
> How to reproduce: ( this is overview -- actual scripts follow )
> ========================================================
> 1. kill any MY_CLUSTER brokers from previous test
> 2. remove data dirs from previous test, and recreate
> 3. start node 1 as first member of MY_CLUSTER
> 4 declare the MY_CLUSTER queue -- durable
> 5. connect to it with receiver -- use ack frequency of 10;
> 6. connect with "publish" send only 5 persistent msgs, receiver
> will get them but not ack.
> 7. start second node
> 8. when the state transfer completes kill both nodes.
> (receiver should also perish)
> 9. start up the second node only, as new first member of MY_CLUSTER.
> ( I.e. use 2nd broker's data dir path. )
> 10. start and attach a new receiver
> PREVIOUS RESULT -- nothing. messages were never stored in broker2's
> messageStore.
> RESULT -- new receiver now gets 5 messages.
> durable queue says that "sender confirmed point moved to (5+0)"
> ==============================================
> Scripts for reproducing problem.
> ==============================================
> ###################################################################
> ############# step 1 ##############
> ###################################################################
> #! /bin/bash
> echo "------------------------------------------------"
> echo "Step 1: Kill any brokers already running in the MY_CLUSTER cluster"
> echo "------------------------------------------------"
> kill -9 `pgrep -f MY_STORE`
> echo "There should be no remaining brokers. Here they are: "
> ps -aef | grep qpidd | grep -v grep
> ###################################################################
> ############# step 2 ##############
> ###################################################################
> #! /bin/bash
> echo "------------------------------------------------"
> echo "Step 2: remove and rebuild the store data dirs."
> echo "------------------------------------------------"
> rm -rf ./data
> mkdir -p ./data/1 ./data/2
> ###################################################################
> ############# step 3 ##############
> ###################################################################
> #! /bin/bash
> echo "------------------------------------------------"
> echo "Step 3: Start the first broker in a cluster, using Store in ./data/1 ."
> echo "------------------------------------------------"
> rm broker_1.log
> $QPID_ROOT/cpp/src/qpidd --no-module-dir \
> --load-module $QPID_ROOT/cpp/src/.libs/cluster.so \
> --load-module $STORE_ROOT/cpp/lib/.libs/msgstore.so \
> --cluster-name MY_CLUSTER -p 5813 \
> --auth=no --mgmt-enable=no \
> --log-enable debug --log-to-file ./broker_1.log \
> --data-dir ./data/1
> ###################################################################
> ############# step 4 ##############
> ###################################################################
> #! /bin/bash
> echo "Step 4: Declaring queue."
> $QPID_ROOT/cpp/examples/direct/declare_queues
> # !! NOTE !!
> # edit declare_queues.cpp to do port 5813
> # in call to session.queueDeclare use arg::durable=true
> # and arg::queue="MY_QUEUE",
> # edit exchangeBind call to use:
> # arg::queue = "MY_QUEUE",
> ###################################################################
> ############# step 5 ##############
> ###################################################################
> #! /bin/bash
> echo "Step 5: Starting receiver..."
> $QPID_ROOT/cpp/src/tests/receiver \
> -p 5813 \
> --queue MY_QUEUE \
> --messages 10 \
> --ack-frequency 10
> ###################################################################
> ############# step 6 ##############
> ###################################################################
> #! /bin/bash
> echo "Publish only 5 messages, so the receiver will not yet ack."
> $QPID_ROOT/cpp/src/tests/publish \
> -p 5813 \
> --count 5 \
> --durable yes \
> --destination amq.direct \
> --routing-key routing_key \
> --log-enable debug
> #! /bin/bash
> ###################################################################
> ############# step 7 ##############
> ###################################################################
> rm ./broker_2.log
> echo "------------------------------------------------"
> echo "Step 7: Start second node, using Store in ./data/2 ."
> echo " note! you should see correct store dirs replicated to this broker."
> echo "------------------------------------------------"
> $QPID_ROOT/cpp/src/qpidd --no-module-dir \
> --load-module $QPID_ROOT/cpp/src/.libs/cluster.so \
> --load-module $STORE_ROOT/cpp/lib/.libs/msgstore.so \
> --cluster-name MY_CLUSTER -p 5814 \
> --auth=no --mgmt-enable=no \
> --log-enable debug --log-to-file ./broker_2.log \
> --data-dir ./data/2
> ###################################################################
> ############# step 8 ##############
> ###################################################################
> #! /bin/bash
> echo "When the second node is up and synced, kill both nodes."
> echo " note: receiver should now die also."
> kill -9 `pgrep -f MY_CLUSTER`
> ps -aef | grep qpidd | grep -v grep
> ###################################################################
> ############# step 9 ##############
> ###################################################################
> #! /bin/bash
> echo "------------------------------------------------"
> echo "Step 9: Start second node, using Store in ./data/2 ."
> echo "------------------------------------------------"
> $QPID_ROOT/cpp/src/qpidd --no-module-dir \
> --load-module $QPID_ROOT/cpp/src/.libs/cluster.so \
> --load-module $STORE_ROOT/cpp/lib/.libs/msgstore.so \
> --cluster-name MY_CLUSTER -p 5813 \
> --auth=no --mgmt-enable=yes \
> --log-enable debug --log-to-file ./broker_3.log \
> --data-dir ./data/2
> ###################################################################
> ############# step 10 ##############
> ###################################################################
> #! /bin/bash
> echo " "
> echo "Start final receiver -- it should get unacked messages."
> echo " "
> $QPID_ROOT/cpp/src/tests/receiver \
> -p 5813 \
> --queue MY_QUEUE \
> --messages 10 \
> --ack-frequency 5
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:dev-subscribe@qpid.apache.org