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