You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/02/20 16:26:14 UTC

svn commit: r629503 - in /incubator/qpid/trunk/qpid/cpp/src: qpid/client/ tests/

Author: aconway
Date: Wed Feb 20 07:26:05 2008
New Revision: 629503

URL: http://svn.apache.org/viewvc?rev=629503&view=rev
Log:
Added non-optional enum { SYNC, ASYNC }  parameter to newSession.
Updated API doc in client/SessionBase.h

Modified:
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.cpp
    incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.h
    incubator/qpid/trunk/qpid/cpp/src/tests/BrokerFixture.h
    incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/client_test.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/cluster_client.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/latencytest.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/perftest.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/topic_listener.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/topic_publisher.cpp
    incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.cpp Wed Feb 20 07:26:05 2008
@@ -70,12 +70,15 @@
 }
 
 void Connection::openChannel(Channel& channel) {
-    channel.open(newSession());
+    channel.open(newSession(ASYNC));
 }
 
-Session_0_10 Connection::newSession(uint32_t detachedLifetime) {
+Session_0_10 Connection::newSession(SynchronousMode sync,
+                                    uint32_t detachedLifetime)
+{
     shared_ptr<SessionCore> core(
         new SessionCore(impl, ++channelIdCounter, max_frame_size));
+    core->setSync(sync);
     impl->addSession(core);
     core->open(detachedLifetime);
     return Session_0_10(core);

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connection.h Wed Feb 20 07:26:05 2008
@@ -39,7 +39,6 @@
  */
 namespace client {
 
-
 /**
  * \defgroup clientapi Application API for an AMQP client
  */
@@ -135,7 +134,7 @@
      * that the broker may discard the session state. Default is 0,
      * meaning the session cannot be resumed.
      */
-    Session_0_10 newSession(uint32_t detachedLifetime=0);
+    Session_0_10 newSession(SynchronousMode sync, uint32_t detachedLifetime=0);
 
     /**
      * Resume a suspendded session. A session may be resumed

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.cpp Wed Feb 20 07:26:05 2008
@@ -29,8 +29,14 @@
 SessionBase::SessionBase(shared_ptr<SessionCore> core) : impl(core) {}
 void SessionBase::suspend() { impl->suspend(); }
 void SessionBase::close() { impl->close(); }
+
 void SessionBase::setSynchronous(bool isSync) { impl->setSync(isSync); }
+void SessionBase::setSynchronous(SynchronousMode m) { impl->setSync(m); }
 bool SessionBase::isSynchronous() const { return impl->isSync(); }
+SynchronousMode SessionBase::getSynchronous() const {
+    return SynchronousMode(impl->isSync());
+}
+
 Execution& SessionBase::getExecution() { return impl->getExecution(); }
 Uuid SessionBase::getId() const { return impl->getId(); }
 framing::FrameSet::shared_ptr SessionBase::get() { return impl->get(); }

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.h?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/SessionBase.h Wed Feb 20 07:26:05 2008
@@ -45,6 +45,32 @@
 using framing::SequenceNumberSet;
 using framing::Uuid;
 
+/** \defgroup clientapi Synchronous mode of a session.
+ * 
+ * SYNC means that Session functions do not return until the remote
+ * broker has confirmed that the command was executed. 
+ * 
+ * ASYNC means that the client sends commands asynchronously, Session
+ * functions return immediately.
+ *
+ * ASYNC mode gives better performance for high-volume traffic, but
+ * requires some additional caution:
+ * 
+ * Session functions return immediately. If the command causes an
+ * exception on the broker, the exception will be thrown on a
+ * <em>later</em> function call. 
+ *
+ * If you need to notify some extenal agent that some actions have
+ * been taken (e.g. binding queues to exchanages), you must call
+ * Session::sync() first, to ensure that all the commands are complete.
+ *
+ * You can freely switch between modes by calling Session::setSynchronous()
+ * 
+ * @see Session::sync(), Session::setSynchronous()
+ */
+enum SynchronousMode { SYNC=true, ASYNC=false };
+
+
 /**
  * Basic session operations that are not derived from AMQP XML methods.
  */
@@ -61,20 +87,20 @@
     Uuid getId() const;
 
     /**
-     * In synchronous mode, the session sets the sync bit on every
-     * command and waits for the broker's response before returning.
-     * Note this gives lower throughput than non-synchronous mode.
+     * In synchronous mode, wait for the broker's response before
+     * returning. Note this gives lower throughput than asynchronous
+     * mode.
      *
-     * In non-synchronous mode commands are sent without waiting
+     * In asynchronous mode commands are sent without waiting
      * for a respose (you can use the returned Completion object
      * to wait for completion.)
      * 
-     *@param if true set the session to synchronous mode, else
-     * set it to non-synchronous mode.
+     * @see SynchronousMode
      */
-    void setSynchronous(bool isSync);
-
+    void setSynchronous(SynchronousMode mode);
+    void setSynchronous(bool set);
     bool isSynchronous() const;
+    SynchronousMode getSynchronous() const;
 
     /**
      * Suspend the session, can be resumed on a different connection.
@@ -85,8 +111,10 @@
     /** Close the session */
     void close();
 
-    /** Synchronize with the broker. Wait for all commands issued so far in
+    /**
+     * Synchronize with the broker. Wait for all commands issued so far in
      * the session to complete.
+     * @see SynchronousMode
      */
     void sync();
     

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/BrokerFixture.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/BrokerFixture.h?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/BrokerFixture.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/BrokerFixture.h Wed Feb 20 07:26:05 2008
@@ -91,8 +91,8 @@
     qpid::client::LocalQueue lq;
 
     SessionFixtureT() : connection(broker->getPort()),
-                       session(connection.newSession()),
-                       subs(session)
+                        session(connection.newSession(qpid::client::ASYNC)),
+                        subs(session)
     {}
 
     ~SessionFixtureT() {

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/ClientSessionTest.cpp Wed Feb 20 07:26:05 2008
@@ -103,7 +103,7 @@
 };
 
 BOOST_FIXTURE_TEST_CASE(testQueueQuery, ClientSessionFixture) {
-    session =connection.newSession();
+    session =connection.newSession(ASYNC);
     session.queueDeclare(queue="my-queue", alternateExchange="amq.fanout", exclusive=true, autoDelete=true);
     TypedResult<QueueQueryResult> result = session.queueQuery(string("my-queue"));
     BOOST_CHECK_EQUAL(false, result.get().getDurable());
@@ -114,7 +114,7 @@
 
 BOOST_FIXTURE_TEST_CASE(testTransfer, ClientSessionFixture)
 {
-    session=connection.newSession();
+    session=connection.newSession(ASYNC);
     declareSubscribe();
     session.messageTransfer(content=TransferContent("my-message", "my-queue"));
     //get & test the message:
@@ -127,7 +127,7 @@
 
 BOOST_FIXTURE_TEST_CASE(testDispatcher, ClientSessionFixture)
 {
-    session =connection.newSession();
+    session =connection.newSession(ASYNC);
     declareSubscribe();
     size_t count = 100;
     for (size_t i = 0; i < count; ++i) 
@@ -142,7 +142,7 @@
 /* FIXME aconway 2008-01-28: hangs
 BOOST_FIXTURE_TEST_CASE(testDispatcherThread, ClientSessionFixture)
 {
-    session =connection.newSession();
+    session =connection.newSession(ASYNC);
     declareSubscribe();
     size_t count = 10000;
     DummyListener listener(session, "my-dest", count);
@@ -160,7 +160,7 @@
 
 BOOST_FIXTURE_TEST_CASE(_FIXTURE, ClientSessionFixture)
 {
-    session =connection.newSession(0);
+    session =connection.newSession(ASYNC, 0);
     session.suspend();  // session has 0 timeout.
     try {
         connection.resume(session);
@@ -170,7 +170,7 @@
 
 BOOST_FIXTURE_TEST_CASE(testUseSuspendedError, ClientSessionFixture)
 {
-    session =connection.newSession(60);
+    session =connection.newSession(ASYNC, 60);
     session.suspend();
     try {
         session.exchangeQuery(name="amq.fanout");
@@ -180,7 +180,7 @@
 
 BOOST_FIXTURE_TEST_CASE(testSuspendResume, ClientSessionFixture)
 {
-    session =connection.newSession(60);
+    session =connection.newSession(ASYNC, 60);
     declareSubscribe();
     session.suspend();
     // Make sure we are still subscribed after resume.

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/client_test.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/client_test.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/client_test.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/client_test.cpp Wed Feb 20 07:26:05 2008
@@ -92,7 +92,7 @@
 
         //Create and open a session on the connection through which
         //most functionality is exposed:
-        Session_0_10 session = connection.newSession();
+        Session_0_10 session = connection.newSession(ASYNC);
 	if (opts.trace) std::cout << "Opened session." << std::endl;	
 
 

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/cluster_client.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/cluster_client.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/cluster_client.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/cluster_client.cpp Wed Feb 20 07:26:05 2008
@@ -62,14 +62,14 @@
     ClusterConnections cluster;
     BOOST_REQUIRE(cluster.size() > 1);
 
-    Session broker0 = cluster[0]->newSession();
+    Session broker0 = cluster[0]->newSession(ASYNC);
     broker0.exchangeDeclare(exchange="ex");
     broker0.queueDeclare(queue="q");
     broker0.queueBind(exchange="ex", queue="q", routingKey="key");
     broker0.close();
     
     for (size_t i = 1; i < cluster.size(); ++i) {
-        Session s = cluster[i]->newSession();
+        Session s = cluster[i]->newSession(ASYNC);
         s.messageTransfer(content=TransferContent("data", "key", "ex"));
         s.messageSubscribe(queue="q", destination="q");
         s.messageFlow(destination="q", unit=0, value=1);//messages

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/latencytest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/latencytest.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/latencytest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/latencytest.cpp Wed Feb 20 07:26:05 2008
@@ -156,7 +156,7 @@
 Client::Client(const string& q) : queue(q)
 {
     opts.open(connection);
-    session = connection.newSession();       
+    session = connection.newSession(ASYNC);       
 }
 
 void Client::start()

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/perftest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/perftest.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/perftest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/perftest.cpp Wed Feb 20 07:26:05 2008
@@ -196,7 +196,7 @@
 
     Client() {
         opts.open(connection);
-        session = connection.newSession();
+        session = connection.newSession(ASYNC);
     }
 
     ~Client() {

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/topic_listener.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/topic_listener.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/topic_listener.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/topic_listener.cpp Wed Feb 20 07:26:05 2008
@@ -101,7 +101,7 @@
         else {
             Connection connection(args.trace);
             args.open(connection);
-            Session_0_10 session = connection.newSession();
+            Session_0_10 session = connection.newSession(ASYNC);
             if (args.transactional) {
                 session.txSelect();
             }

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/topic_publisher.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/topic_publisher.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/topic_publisher.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/topic_publisher.cpp Wed Feb 20 07:26:05 2008
@@ -107,7 +107,7 @@
         else {
             Connection connection(args.trace);
             args.open(connection);
-            Session_0_10 session = connection.newSession();
+            Session_0_10 session = connection.newSession(ASYNC);
             if (args.transactional) {
                 session.txSelect();
             }

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp?rev=629503&r1=629502&r2=629503&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/txtest.cpp Wed Feb 20 07:26:05 2008
@@ -101,7 +101,7 @@
     Client() 
     {
         opts.open(connection);
-        session = connection.newSession();
+        session = connection.newSession(ASYNC);
     }
 
     ~Client()