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