You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2010/04/06 16:52:47 UTC

svn commit: r931170 - in /qpid/trunk/qpid/cpp: examples/messaging/ include/qpid/messaging/ src/qpid/client/amqp0_10/ src/qpid/messaging/ src/tests/

Author: gsim
Date: Tue Apr  6 14:52:47 2010
New Revision: 931170

URL: http://svn.apache.org/viewvc?rev=931170&view=rev
Log:
QPID-664: added param to control synchronous send and acknowledge

Modified:
    qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp
    qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp
    qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp
    qpid/trunk/qpid/cpp/include/qpid/messaging/Sender.h
    qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h
    qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp
    qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h
    qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
    qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h
    qpid/trunk/qpid/cpp/src/qpid/messaging/Sender.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/SenderImpl.h
    qpid/trunk/qpid/cpp/src/qpid/messaging/Session.cpp
    qpid/trunk/qpid/cpp/src/qpid/messaging/SessionImpl.h
    qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp

Modified: qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/map_sender.cpp Tue Apr  6 14:52:47 2010
@@ -56,8 +56,7 @@ int main(int argc, char** argv) {
         content["uuid"] = Uuid(true);
         encode(content, message);
 	
-        sender.send(message);
-        session.sync();
+        sender.send(message, true);
 
         connection.close();
         return 0;

Modified: qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/queue_sender.cpp Tue Apr  6 14:52:47 2010
@@ -48,8 +48,7 @@ int main(int argc, char** argv) {
 	}
 	
 	// And send a final message to indicate termination.    	
-        sender.send(Message("That's all, folks!"));
-        session.sync();
+        sender.send(Message("That's all, folks!"), true);
         return 0;
     } catch(const std::exception& error) {
         std::cout << error.what() << std::endl;

Modified: qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp (original)
+++ qpid/trunk/qpid/cpp/examples/messaging/topic_sender.cpp Tue Apr  6 14:52:47 2010
@@ -66,8 +66,7 @@ int main(int argc, char** argv) {
 	// And send a final message to indicate termination.
         Message message("That's all, folks!");
         message.setSubject("control");
-        sender.send(message);
-        session.sync();
+        sender.send(message, true);
         connection.close();
         return 0;
     } catch(const std::exception& error) {

Modified: qpid/trunk/qpid/cpp/include/qpid/messaging/Sender.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/messaging/Sender.h?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/messaging/Sender.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/messaging/Sender.h Tue Apr  6 14:52:47 2010
@@ -45,9 +45,14 @@ class Sender : public qpid::messaging::H
     QPID_CLIENT_EXTERN Sender& operator=(const Sender&);
 
     /**
-     * Sends a message; will block if the pending == capacity
+     * Sends a message
+     * 
+     * @param message the message to send
+     * @param sync if true the call will block until the server
+     * confirms receipt of the messages; if false will only block for
+     * available capacity (i.e. pending == capacity)
      */
-    QPID_CLIENT_EXTERN void send(const Message& message);
+    QPID_CLIENT_EXTERN void send(const Message& message, bool sync=false);
     QPID_CLIENT_EXTERN void close();
 
     /**

Modified: qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h (original)
+++ qpid/trunk/qpid/cpp/include/qpid/messaging/Session.h Tue Apr  6 14:52:47 2010
@@ -71,8 +71,11 @@ class Session : public qpid::messaging::
     /**
      * Acknowledges all outstanding messages that have been received
      * by the application on this session.
+     * 
+     * @param sync if true, blocks until the acknowledgement has been
+     * processed by the server
      */
-    QPID_CLIENT_EXTERN void acknowledge();
+    QPID_CLIENT_EXTERN void acknowledge(bool sync=false);
     /**
      * Rejects the specified message. This will prevent the message
      * being redelivered.

Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.cpp Tue Apr  6 14:52:47 2010
@@ -34,7 +34,7 @@ SenderImpl::SenderImpl(SessionImpl& _par
     parent(&_parent), name(_name), address(_address), state(UNRESOLVED),
     capacity(50), window(0), flushed(false), unreliable(AddressResolution::is_unreliable(address)) {}
 
-void SenderImpl::send(const qpid::messaging::Message& message) 
+void SenderImpl::send(const qpid::messaging::Message& message, bool sync) 
 {
     if (unreliable) {
         UnreliableSend f(*this, &message);
@@ -43,6 +43,7 @@ void SenderImpl::send(const qpid::messag
         Send f(*this, &message);
         while (f.repeat) parent->execute(f);
     }
+    if (sync) parent->sync();
 }
 
 void SenderImpl::close()

Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SenderImpl.h Tue Apr  6 14:52:47 2010
@@ -48,7 +48,7 @@ class SenderImpl : public qpid::messagin
 
     SenderImpl(SessionImpl& parent, const std::string& name, 
                const qpid::messaging::Address& address);
-    void send(const qpid::messaging::Message&);
+    void send(const qpid::messaging::Message&, bool sync);
     void close();
     void setCapacity(uint32_t);
     uint32_t getCapacity();

Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.cpp Tue Apr  6 14:52:47 2010
@@ -75,13 +75,14 @@ void SessionImpl::rollback()
     execute<Rollback>();
 }
 
-void SessionImpl::acknowledge()
+void SessionImpl::acknowledge(bool sync_)
 {
     //Should probably throw an exception on failure here, or indicate
     //it through a return type at least. Failure means that the
     //message may be redelivered; i.e. the application cannot delete
     //any state necessary for preventing reprocessing of the message
     execute<Acknowledge>();
+    if (sync_) sync();
 }
 
 void SessionImpl::reject(qpid::messaging::Message& m)

Modified: qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/client/amqp0_10/SessionImpl.h Tue Apr  6 14:52:47 2010
@@ -58,7 +58,7 @@ class SessionImpl : public qpid::messagi
     SessionImpl(ConnectionImpl&, bool transactional);
     void commit();
     void rollback();
-    void acknowledge();
+    void acknowledge(bool sync);
     void reject(qpid::messaging::Message&);
     void close();
     void sync();

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/Sender.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/Sender.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/Sender.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/Sender.cpp Tue Apr  6 14:52:47 2010
@@ -32,7 +32,7 @@ Sender::Sender(SenderImpl* impl) { PI::c
 Sender::Sender(const Sender& s) : qpid::messaging::Handle<SenderImpl>() { PI::copy(*this, s); }
 Sender::~Sender() { PI::dtor(*this); }
 Sender& Sender::operator=(const Sender& s) { return PI::assign(*this, s); }
-void Sender::send(const Message& message) { impl->send(message); }
+void Sender::send(const Message& message, bool sync) { impl->send(message, sync); }
 void Sender::close() { impl->close(); }
 void Sender::setCapacity(uint32_t c) { impl->setCapacity(c); }
 uint32_t Sender::getCapacity() { return impl->getCapacity(); }

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/SenderImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/SenderImpl.h?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/SenderImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/SenderImpl.h Tue Apr  6 14:52:47 2010
@@ -33,7 +33,7 @@ class SenderImpl : public virtual qpid::
 {
   public:
     virtual ~SenderImpl() {}
-    virtual void send(const Message& message) = 0;
+    virtual void send(const Message& message, bool sync) = 0;
     virtual void close() = 0;
     virtual void setCapacity(uint32_t) = 0;
     virtual uint32_t getCapacity() = 0;

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/Session.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/Session.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/Session.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/Session.cpp Tue Apr  6 14:52:47 2010
@@ -38,7 +38,7 @@ Session::~Session() { PI::dtor(*this); }
 Session& Session::operator=(const Session& s) { return PI::assign(*this, s); }
 void Session::commit() { impl->commit(); }
 void Session::rollback() { impl->rollback(); }
-void Session::acknowledge() { impl->acknowledge(); }
+void Session::acknowledge(bool sync) { impl->acknowledge(sync); }
 void Session::reject(Message& m) { impl->reject(m); }
 void Session::close() { impl->close(); }
 

Modified: qpid/trunk/qpid/cpp/src/qpid/messaging/SessionImpl.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/messaging/SessionImpl.h?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/messaging/SessionImpl.h (original)
+++ qpid/trunk/qpid/cpp/src/qpid/messaging/SessionImpl.h Tue Apr  6 14:52:47 2010
@@ -40,7 +40,7 @@ class SessionImpl : public virtual qpid:
     virtual ~SessionImpl() {}
     virtual void commit() = 0;
     virtual void rollback() = 0;
-    virtual void acknowledge() = 0;
+    virtual void acknowledge(bool sync) = 0;
     virtual void reject(Message&) = 0;
     virtual void close() = 0;
     virtual void sync() = 0;

Modified: qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp?rev=931170&r1=931169&r2=931170&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp (original)
+++ qpid/trunk/qpid/cpp/src/tests/MessagingSessionTests.cpp Tue Apr  6 14:52:47 2010
@@ -231,6 +231,18 @@ QPID_AUTO_TEST_CASE(testSimpleSendReceiv
     BOOST_CHECK_EQUAL(in.getContent(), out.getContent());
 }
 
+QPID_AUTO_TEST_CASE(testSyncSendReceive)
+{
+    QueueFixture fix;
+    Sender sender = fix.session.createSender(fix.queue);
+    Message out("test-message");
+    sender.send(out, true);
+    Receiver receiver = fix.session.createReceiver(fix.queue);
+    Message in = receiver.fetch(Duration::IMMEDIATE);
+    fix.session.acknowledge(true);
+    BOOST_CHECK_EQUAL(in.getContent(), out.getContent());
+}
+
 QPID_AUTO_TEST_CASE(testSendReceiveHeaders)
 {
     QueueFixture fix;



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org