You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2014/02/04 12:13:44 UTC

svn commit: r1564254 [1/3] - in /qpid/branches/java-broker-bdb-ha: ./ qpid/ qpid/cpp/ qpid/cpp/bindings/qpid/dotnet/ qpid/cpp/design_docs/ qpid/cpp/src/ qpid/cpp/src/qpid/ qpid/cpp/src/qpid/acl/ qpid/cpp/src/qpid/amqp_0_10/ qpid/cpp/src/qpid/broker/ qp...

Author: kwall
Date: Tue Feb  4 11:13:42 2014
New Revision: 1564254

URL: http://svn.apache.org/r1564254
Log:
NO-JIRA: Merge changes from the trunk in revisions 1562452:1564250 using

svn merge -r 1562452:1564250 https://svn.apache.org/repos/asf/qpid/trunk

Added:
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandlerObserver.h
      - copied unchanged from r1564250, qpid/trunk/qpid/cpp/src/qpid/broker/SessionHandlerObserver.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/ErrorListener.h
      - copied unchanged from r1564250, qpid/trunk/qpid/cpp/src/qpid/ha/ErrorListener.h
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/java-broker/images/JMX-Connect-MBeans.png
      - copied unchanged from r1564250, qpid/trunk/qpid/doc/book/src/java-broker/images/JMX-Connect-MBeans.png
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/java-broker/images/JMX-Connect-Remote.png
      - copied unchanged from r1564250, qpid/trunk/qpid/doc/book/src/java-broker/images/JMX-Connect-Remote.png
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageInstance.java
      - copied unchanged from r1564250, qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/message/MessageInstance.java
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/geronimo-servlet_3.0_spec-1.0.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/geronimo-servlet_3.0_spec-1.0.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-continuation-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-continuation-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-http-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-http-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-io-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-io-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-security-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-security-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-server-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-server-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-servlet-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-servlet-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-util-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-util-8.1.14.v20131031.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-websocket-8.1.14.v20131031.xml
      - copied unchanged from r1564250, qpid/trunk/qpid/java/lib/poms/jetty-websocket-8.1.14.v20131031.xml
Removed:
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/geronimo-servlet_2.5_spec-1.2.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-continuation-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-http-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-io-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-security-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-server-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-servlet-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-util-7.6.10.v20130312.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/lib/poms/jetty-websocket-7.6.10.v20130312.xml
Modified:
    qpid/branches/java-broker-bdb-ha/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/cpp/AMQP_1.0
    qpid/branches/java-broker-bdb-ha/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1
    qpid/branches/java-broker-bdb-ha/qpid/cpp/design_docs/broker-acl-work.txt
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/Exception.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclData.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclValidator.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/AclModule.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/DtxTimeout.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/HeadersExchange.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/QueueFactory.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/posix/BrokerDefaults.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/StorePlugin.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/jrnl/wrfc.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/linearstore/StorePlugin.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/store/ms-clfs/MSSqlClfsProvider.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/MemoryMappedFile.h
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/posix/MemoryMappedFile.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/windows/MemoryMappedFile.cpp
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/tests/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/tests/acl.py
    qpid/branches/java-broker-bdb-ha/qpid/cpp/src/tests/run_paged_queue_tests
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/cpp-broker/Security.xml
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/java-broker/Java-Broker-Configuring-And-Managing-JMX.xml
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/java-broker/Java-Broker-Ports.xml
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/java-broker/commonEntities.xml
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/jms-client-0-8/JMS-Client-Examples.xml
    qpid/branches/java-broker-bdb-ha/qpid/doc/book/src/jms-client-0-8/JMS-Client-Understanding.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/java/amqp-1-0-client-websocket/pom.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/AbstractExchange.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultExchange.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/Exchange.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntry.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/QueueEntryImpl.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/test/java/org/apache/qpid/server/exchange/TopicExchangeTest.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-core/src/test/java/org/apache/qpid/server/queue/MockQueueEntry.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSessionDelegate.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/Subscription_0_10.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/   (props changed)
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ExchangeDestination.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/pom.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/websocket/pom.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/build.deps
    qpid/branches/java-broker-bdb-ha/qpid/java/ivy.nexus.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/ivy.retrieve.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/jca/build.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/jca/example/build-geronimo-properties.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/jca/pom.xml
    qpid/branches/java-broker-bdb-ha/qpid/java/systests/src/main/java/org/apache/qpid/server/store/MessageStoreTest.java
    qpid/branches/java-broker-bdb-ha/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py
    qpid/branches/java-broker-bdb-ha/qpid/tools/src/py/qpidstore/janal.py

Propchange: qpid/branches/java-broker-bdb-ha/
------------------------------------------------------------------------------
  Merged /qpid/trunk:r1562453-1564250

Propchange: qpid/branches/java-broker-bdb-ha/qpid/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid:r1562453-1564250

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/AMQP_1.0
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/AMQP_1.0?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/AMQP_1.0 (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/AMQP_1.0 Tue Feb  4 11:13:42 2014
@@ -164,7 +164,8 @@ warning is logged.
 If the node is an exchange, then an outgoing link (i.e. messages to
 travel out from broker) will cause a temporary, link-scoped queue to
 be created on the broker and bound to the exchange. [See section on
-'Topics' below]
+'Topics' below]. The name of the queue will be of the form
+<container-id>_<link-name>.
 
 Outgoing links may have a filter set on their source. The filters
 currently supported by the broker are 'legacy-amqp-direct-binding',
@@ -272,7 +273,9 @@ trigger the establishment of the link. T
 of ensuring their expectations will be met.
 
 The 'shared' capability allows subscriptions from an exchange to be
-shared by multiple receivers.
+shared by multiple receivers. Where this is specified the subscription
+queue created takes the name of the link (and does not include the
+container id).
 
 The 'durable' capability will be added if the queue or exchange
 refered to by the source or target is durable. The 'queue' capability

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1 (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/bindings/qpid/dotnet/configure-windows.ps1 Tue Feb  4 11:13:42 2014
@@ -55,6 +55,10 @@
 #     - If a directory "looks like" is has already had CMake run in it
 #       then this script skips running CMake again.
 #
+# * User chooses to include Proton or not.
+#
+#     - Proton is included by having variable PROTON_ROOT reference the
+#       directory where proton was installed.
 #
 # Prerequisites
 #
@@ -143,6 +147,7 @@ $ErrorActionPreference='Stop'
 #
 $global:txtPath = '$env:PATH'
 $global:txtQR   = '$env:QPID_BUILD_ROOT'
+$global:txtPR   = '$env:PROTON_ROOT'
 $global:txtWH   = 'Write-Host'
 
 #############################
@@ -218,6 +223,37 @@ function SanityCheckBoostPath ($path=0)
 
 
 #############################
+# SanityCheckProtonInstallPath
+#   A path is a "proton install path" if it contains
+#   both bin and include subdirectories.
+#
+function SanityCheckProtonInstallPath ($path=0)
+{
+    $result = $true
+    $displayPath = ""
+
+    if ($path -ne $null) {
+        $displayPath = $path
+
+        $toTest = ('include', 'bin')
+        foreach ($pattern in $toTest) {
+            $target = Join-Path $path $pattern
+            if (!(Test-Path -path $target)) {
+                $result = $false
+            }
+        }
+    } else {
+        $result = $false
+    }
+
+    if (! $result) {
+        Write-Host "The path ""$displayPath"" does not appear to be a Proton install root path."
+    }
+    $result
+}
+
+
+#############################
 # SanityCheckBuildPath
 #   A path is a "build path" if it contains
 #   various subdirectories.
@@ -264,14 +300,16 @@ function WriteDotnetBindingSlnLauncherPs
         [string] $nBits,
         [string] $outfileName,
         [string] $studioVersion,
-        [string] $studioSubdir
+        [string] $studioSubdir,
+        [string] $protonRoot
     )
 
     $out = @("#
 # Launch $slnName in $studioVersion $vsPlatform ($nBits-bit) environment
 #
-$global:txtPath  = ""$boostRoot\lib;$global:txtPath""
+$global:txtPath  = ""$protonRoot\bin;$boostRoot\lib;$global:txtPath""
 $global:txtQR    = ""$buildRoot""
+$global:txtPR    = ""$protonRoot""
 $global:txtWH      ""Launch $slnName in $studioVersion $vsPlatform ($nBits-bit) environment.""
 $cppDir\bindings\qpid\dotnet\$vsSubdir\$slnName
 ")
@@ -328,7 +366,8 @@ function WriteDotnetBindingEnvSetupBat
         [string] $outfileName,
         [string] $studioVersion,
         [string] $studioSubdir,
-		[string] $cmakeLine
+		[string] $cmakeLine,
+        [string] $protonRoot
     )
 
     $out = @("@ECHO OFF
@@ -344,8 +383,9 @@ REM The solution was generated with cmak
 REM $cmakeLine
 ECHO %PATH% | FINDSTR /I boost > NUL
 IF %ERRORLEVEL% EQU 0 ECHO WARNING: Boost is defined in your path multiple times!
-SET PATH=$boostRoot\lib;%PATH%
+SET PATH=$protonRoot\bin;$boostRoot\lib;%PATH%
 SET QPID_BUILD_ROOT=$buildRoot
+SET PROTON_ROOT=$protonRoot
 ECHO Environment set for $slnName $studioVersion $vsPlatform $nBits-bit development.
 ")
     Write-Host "        $buildRoot\$outfileName"
@@ -441,7 +481,7 @@ function SelectVisualStudioVersion {
 SelectVisualStudioVersion
 
 #############################
-# User dialog to get optional 32-bit boost and build paths
+# User dialog to get optional 32-bit boost, proton, and build paths
 #
 $boost32 = Select-Folder -message "Select 32-bit BOOST_ROOT folder for $global:vsVersion build. Press CANCEL to skip 32-bit processing."
 
@@ -456,6 +496,18 @@ if ($defined32) {
 $make32 = $false
 if ($defined32) {
 
+    $proton32folder = Select-Folder -message "Select 32-bit Proton install folder for $global:vsVersion build."
+
+    $found = ($proton32folder -ne $null) -and ($proton32folder -ne '')
+    if ($found) {
+		$found = SanityCheckProtonInstallPath $proton32folder
+    }
+    if ($found) {
+        $proton32cmake = """-DPROTON_ROOT=$proton32folder"""
+    } else {
+        $proton32cmake = ""
+    }
+
     $build32 = Select-Folder -message "Select 32-bit QPID_BUILD_ROOT folder for $global:vsVersion build." -path $projRoot
 
     $found = ($build32 -ne $null) -and ($build32 -ne '')
@@ -472,7 +524,7 @@ if ($defined32) {
 }
 
 #############################
-# User dialog to get optional 64-bit boost and build paths
+# User dialog to get optional 64-bit boost, proton,  and build paths
 #
 $boost64 = Select-Folder -message "Select 64-bit BOOST_ROOT folder for $global:vsVersion build. Press CANCEL to skip 64-bit processing."
 
@@ -486,6 +538,18 @@ if ($defined64) {
 
 $make64 = $false
 if ($defined64) {
+    $proton64folder = Select-Folder -message "Select 64-bit Proton install folder for $global:vsVersion build."
+
+    $found = ($proton64folder -ne $null) -and ($proton64folder -ne '')
+    if ($found) {
+		$found = SanityCheckProtonInstallPath $proton64folder
+    }
+    if ($found) {
+        $proton64cmake = """-DPROTON_ROOT=$proton64folder"""
+    } else {
+        $proton64cmake = ""
+    }
+
     $build64 = Select-Folder -message "Select 64-bit QPID_BUILD_ROOT folder for $global:vsVersion build." -path $projRoot
 
     $found = ($build64 -ne $null) -and ($build64 -ne '')
@@ -508,10 +572,9 @@ if ($defined64) {
 #
 if ($make32) {
     cd "$build32"
-    Write-Host "Running 32-bit CMake in $build32 ..."
-	$global:cmakeCommandLine32 = "CMake -G ""$global:cmakeGenerator"" ""-DBUILD_DOCS=No"" ""-DCMAKE_INSTALL_PREFIX=install_x86"" ""-DBoost_COMPILER=$global:cmakeCompiler"" ""-DBOOST_ROOT=$boost32"" $cppDir"
-	Write-Host "$global:cmakeCommadLine32"
-    CMake -G "$global:cmakeGenerator" "-DBUILD_DOCS=No" "-DCMAKE_INSTALL_PREFIX=install_x86" "-DBoost_COMPILER=$global:cmakeCompiler" "-DBOOST_ROOT=$boost32" $cppDir
+	$global:cmakeCommandLine32 = "CMake -G ""$global:cmakeGenerator"" ""-DBUILD_DOCS=No"" ""-DCMAKE_INSTALL_PREFIX=install_$build32"" ""-DBoost_COMPILER=$global:cmakeCompiler"" ""-DBOOST_ROOT=$boost32"" $proton32cmake $cppDir"
+    Write-Host "Running 32-bit CMake in $build32 : $global:cmakeCommandLine32"
+    CMake -G "$global:cmakeGenerator" "-DBUILD_DOCS=No" "-DCMAKE_INSTALL_PREFIX=install_$build32" "-DBoost_COMPILER=$global:cmakeCompiler" "-DBOOST_ROOT=$boost32" $proton32cmake $cppDir
 } else {
     Write-Host "Skipped 32-bit CMake."
 }
@@ -522,9 +585,10 @@ if ($make32) {
 if ($make64) {
     cd "$build64"
     Write-Host "Running 64-bit CMake in $build64"
-	$global:cmakeCommandLine64 = "CMake -G ""$global:cmakeGenerator Win64"" ""-DBUILD_DOCS=No"" ""-DCMAKE_INSTALL_PREFIX=install_x64"" ""-DBoost_COMPILER=$global:cmakeCompiler"" ""-DBOOST_ROOT=$boost64"" $cppDir"
-	Write-Host "$global:cmakeCommadLine64"
-    CMake -G "$global:cmakeGenerator Win64" "-DBUILD_DOCS=No" "-DCMAKE_INSTALL_PREFIX=install_x64" "-DBoost_COMPILER=$global:cmakeCompiler" "-DBOOST_ROOT=$boost64" $cppDir
+	$global:cmakeCommandLine64 = "CMake -G ""$global:cmakeGenerator Win64"" ""-DBUILD_DOCS=No"" ""-DCMAKE_INSTALL_PREFIX=install_$build64"" ""-DBoost_COMPILER=$global:cmakeCompiler"" ""-DBOOST_ROOT=$boost64"" $proton64cmake $cppDir"
+	Write-Host $global:cmakeCommandLine64
+    Write-Host ""
+    CMake -G "$global:cmakeGenerator Win64" "-DBUILD_DOCS=No" "-DCMAKE_INSTALL_PREFIX=install_$build64" "-DBoost_COMPILER=$global:cmakeCompiler" "-DBOOST_ROOT=$boost64" $proton64cmake $cppDir
 } else {
     Write-Host "Skipped 64-bit CMake."
 }
@@ -549,7 +613,8 @@ if ($defined32) {
                                            -nBits "32" `
                                      -outfileName "start-devenv-messaging-$global:vsSubdir-x86-32bit.ps1" `
                                    -studioVersion "$global:vsVersion" `
-                                    -studioSubdir "$global:vsSubdir"
+                                    -studioSubdir "$global:vsSubdir" `
+                                      -protonRoot "$proton32folder"
 
 
     ###########
@@ -577,7 +642,8 @@ if ($defined32) {
                                   -outfileName "setenv-messaging-$global:vsSubdir-x86-32bit.bat" `
                                 -studioVersion "$global:vsVersion" `
                                  -studioSubdir "$global:vsSubdir" `
-								    -cmakeLine "$global:cmakeCommandLine32"
+								    -cmakeLine "$global:cmakeCommandLine32" `
+                                   -protonRoot "$proton32folder"
 
 } else {
     Write-Host "Skipped writing 32-bit scripts."
@@ -615,7 +681,8 @@ if ($defined64) {
                                      -psScriptName "start-devenv-messaging-$global:vsSubdir-x64-64bit.ps1" `
                                       -outfileName "start-devenv-messaging-$global:vsSubdir-x64-64bit.bat" `
                                     -studioVersion "$global:vsVersion" `
-                                     -studioSubdir "$global:vsSubdir"
+                                     -studioSubdir "$global:vsSubdir" `
+                                       -protonRoot "$proton64folder"
 
     ###########
     # Batch script (that you CALL from a command prompt)
@@ -629,7 +696,8 @@ if ($defined64) {
                                   -outfileName "setenv-messaging-$global:vsSubdir-x64-64bit.bat" `
                                 -studioVersion "$global:vsVersion" `
                                  -studioSubdir "$global:vsSubdir" `
-								    -cmakeLine "$global:cmakeCommandLine64"
+								    -cmakeLine "$global:cmakeCommandLine64" `
+                                   -protonRoot "$proton64folder"
 
 } else {
     Write-Host "Skipped writing 64-bit scripts."

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/design_docs/broker-acl-work.txt
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/design_docs/broker-acl-work.txt?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/design_docs/broker-acl-work.txt (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/design_docs/broker-acl-work.txt Tue Feb  4 11:13:42 2014
@@ -28,16 +28,20 @@ in memory and on disk.
 
 * Add property limit settings to CREATE QUEUE Acl rules.
 
-User Option     Acl Limit Property      Units
---------------- ----------------------  ---------------
-qpid.max_size   queuemaxsizelowerlimit  bytes
-                queuemaxsizeupperlimit  bytes
-qpid.max_count  queuemaxcountlowerlimit messages
-                queuemaxcountupperlimit messages
-qpid.file_size  filemaxsizelowerlimit   pages (64Kb per page)
-                filemaxsizeupperlimit   pages (64Kb per page)
-qpid.file_count filemaxcountlowerlimit  files
-                filemaxcountupperlimit  files
+User Option     	Acl Limit Property      Units
+--------------- 	----------------------  ---------------
+qpid.max_size   	queuemaxsizelowerlimit  bytes
+                	queuemaxsizeupperlimit  bytes
+qpid.max_count  	queuemaxcountlowerlimit messages
+                	queuemaxcountupperlimit messages
+qpid.file_size  	filemaxsizelowerlimit   pages (64Kb per page)
+                	filemaxsizeupperlimit   pages (64Kb per page)
+qpid.file_count 	filemaxcountlowerlimit  files
+                	filemaxcountupperlimit  files
+qpid.max_pages_loaded	pageslowerlimit		pages
+			pagesupperlimit		pages
+qpid.page_factor	pagefactorlowerlimit	integer (multiple of the platform-defined page size)
+			pagefactorlowerlimit	integer (multiple of the platform-defined page size)
 
 
 * Change rule match behavior to accomodate limit settings

Propchange: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src:r1562453-1564250

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.cpp Tue Feb  4 11:13:42 2014
@@ -26,7 +26,7 @@
 
 namespace qpid {
 
-DataDir::DataDir (std::string path) :
+DataDir::DataDir (const std::string& path) :
     enabled (!path.empty ()),
     dirPath (path)
 {

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/DataDir.h Tue Feb  4 11:13:42 2014
@@ -42,11 +42,11 @@ class DataDir
 
   public:
 
-	QPID_COMMON_EXTERN DataDir (std::string path);
+	QPID_COMMON_EXTERN DataDir (const std::string& path);
 	QPID_COMMON_EXTERN ~DataDir ();
 
-    bool isEnabled() { return enabled; }
-    const std::string& getPath() { return dirPath; }
+    bool isEnabled() const { return enabled; }
+    const std::string& getPath() const { return dirPath; }
 };
  
 } // namespace qpid

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/Exception.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/Exception.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/Exception.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/Exception.cpp Tue Feb  4 11:13:42 2014
@@ -45,16 +45,20 @@ Exception::Exception(const std::string& 
 
 Exception::~Exception() throw() {}
 
-std::string Exception::getPrefix() const { return ""; }
+std::string Exception::getPrefix() const { return std::string(); }
 
 std::string Exception::getMessage() const { return message; }
 
+namespace { const std::string COLON(": "); }
+
 const char* Exception::what() const throw() {
     // Construct the what string the first time it is needed.
     if (whatStr.empty()) {
-        whatStr = getPrefix();
-        if (!whatStr.empty()) whatStr +=  ": ";
-        whatStr += message;
+        if (message.compare(0, getPrefix().size(), getPrefix()) == 0 || // Already has prefix
+            getPrefix().empty())                                        // No prefix
+            whatStr = message;
+        else
+            whatStr = getPrefix() + COLON + message;
     }
     return whatStr.c_str();
 }

Propchange: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qpid/acl:r1562453-1564250

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclData.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclData.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclData.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclData.cpp Tue Feb  4 11:13:42 2014
@@ -160,6 +160,16 @@ bool AclData::lookupMatchRule(
                 //  as rule's index.
                 propertyMapItr lookupParamItr;
                 switch (rulePropMapItr->first) {
+                case acl::SPECPROP_MAXPAGESLOWERLIMIT:
+                case acl::SPECPROP_MAXPAGESUPPERLIMIT:
+                    lookupParamItr = params->find(PROP_MAXPAGES);
+                    break;
+
+                case acl::SPECPROP_MAXPAGEFACTORLOWERLIMIT:
+                case acl::SPECPROP_MAXPAGEFACTORUPPERLIMIT:
+                    lookupParamItr = params->find(PROP_MAXPAGEFACTOR);
+                    break;
+
                 case acl::SPECPROP_MAXQUEUECOUNTUPPERLIMIT:
                 case acl::SPECPROP_MAXQUEUECOUNTLOWERLIMIT:
                     lookupParamItr = params->find(PROP_MAXQUEUECOUNT);
@@ -201,6 +211,8 @@ bool AclData::lookupMatchRule(
                     case acl::SPECPROP_MAXQUEUESIZEUPPERLIMIT:
                     case acl::SPECPROP_MAXFILECOUNTUPPERLIMIT:
                     case acl::SPECPROP_MAXFILESIZEUPPERLIMIT:
+                    case acl::SPECPROP_MAXPAGESUPPERLIMIT:
+                    case acl::SPECPROP_MAXPAGEFACTORUPPERLIMIT:
                         limitChecked &=
                             compareInt(
                                 rulePropMapItr->first,
@@ -213,6 +225,8 @@ bool AclData::lookupMatchRule(
                     case acl::SPECPROP_MAXQUEUESIZELOWERLIMIT:
                     case acl::SPECPROP_MAXFILECOUNTLOWERLIMIT:
                     case acl::SPECPROP_MAXFILESIZELOWERLIMIT:
+                    case acl::SPECPROP_MAXPAGESLOWERLIMIT:
+                    case acl::SPECPROP_MAXPAGEFACTORLOWERLIMIT:
                         limitChecked &=
                             compareInt(
                                 rulePropMapItr->first,

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclValidator.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclValidator.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclValidator.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/acl/AclValidator.cpp Tue Feb  4 11:13:42 2014
@@ -110,6 +110,22 @@ namespace acl {
                                     boost::shared_ptr<PropertyType>(
                                         new IntPropertyType(0,std::numeric_limits<int64_t>::max()))));
 
+        validators.insert(Validator(acl::SPECPROP_MAXPAGESLOWERLIMIT,
+                          boost::shared_ptr<PropertyType>(
+                            new IntPropertyType(0,std::numeric_limits<int64_t>::max()))));
+
+        validators.insert(Validator(acl::SPECPROP_MAXPAGESUPPERLIMIT,
+                          boost::shared_ptr<PropertyType>(
+                            new IntPropertyType(0,std::numeric_limits<int64_t>::max()))));
+
+        validators.insert(Validator(acl::SPECPROP_MAXPAGEFACTORLOWERLIMIT,
+                          boost::shared_ptr<PropertyType>(
+                            new IntPropertyType(0,std::numeric_limits<int64_t>::max()))));
+
+        validators.insert(Validator(acl::SPECPROP_MAXPAGEFACTORUPPERLIMIT,
+                          boost::shared_ptr<PropertyType>(
+                            new IntPropertyType(0,std::numeric_limits<int64_t>::max()))));
+
         std::string policyTypes[] = {"ring", "self-destruct", "reject"};
         std::vector<std::string> v(policyTypes, policyTypes + sizeof(policyTypes) / sizeof(std::string));
         validators.insert(Validator(acl::SPECPROP_POLICYTYPE,

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/amqp_0_10/SessionHandler.cpp Tue Feb  4 11:13:42 2014
@@ -94,8 +94,7 @@ void SessionHandler::handleIn(AMQFrame& 
         }
     }
     catch(const SessionException& e) {
-        QPID_LOG(error, "Execution exception: " << e.what());
-        executionException(e.code, e.what()); // Let subclass handle this first.
+        executionException(e.code, e.what());
         framing::AMQP_AllProxy::Execution  execution(channel);
         AMQMethodBody* m = f.getMethod();
         SequenceNumber commandId;
@@ -105,16 +104,13 @@ void SessionHandler::handleIn(AMQFrame& 
         sendDetach();
     }
     catch(const ChannelException& e){
-        QPID_LOG(error, "Channel exception: " << e.what());
-        channelException(e.code, e.what()); // Let subclass handle this first.
+        channelException(e.code, e.what());
         peer.detached(name, e.code);
     }
     catch(const ConnectionException& e) {
-        QPID_LOG(error, "Connection exception: " << e.what());
         connectionException(e.code, e.getMessage());
     }
     catch(const std::exception& e) {
-        QPID_LOG(error, "Unexpected exception: " << e.what());
         connectionException(connection::CLOSE_CODE_FRAMING_ERROR, e.what());
     }
 }
@@ -186,13 +182,14 @@ void SessionHandler::detach(const std::s
 }
 
 void SessionHandler::detached(const std::string& /*name*/, uint8_t code) {
-    // Special case for detached: Don't check if we are
-    // attached. Checking can lead to an endless game of "detached
-    // tennis" on federated brokers.
     awaitingDetached = false;
+    // Special case for detached: Don't throw if we are not attached.  Doing so
+    // can lead to an endless game of "detached tennis" on federated brokers.
+    if (!getState()) return;    // Already detached.
     if (code != session::DETACH_CODE_NORMAL) {
         sendReady = receiveReady = false;
-        channelException(convert(code), "session.detached from peer.");
+        channelException(convert(code), Msg() << "Channel " << channel.get()
+                         << " received session.detached from peer");
     } else {
         handleDetach();
     }

Propchange: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/
------------------------------------------------------------------------------
  Merged /qpid/trunk/qpid/cpp/src/qpid/broker:r1562453-1564250

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/AclModule.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/AclModule.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/AclModule.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/AclModule.h Tue Feb  4 11:13:42 2014
@@ -77,6 +77,9 @@ namespace acl {
         PROP_SCHEMAPACKAGE,
         PROP_SCHEMACLASS,
         PROP_POLICYTYPE,
+        PROP_PAGING,
+        PROP_MAXPAGES,
+        PROP_MAXPAGEFACTOR,
         PROP_MAXQUEUESIZE,
         PROP_MAXQUEUECOUNT,
         PROP_MAXFILESIZE,
@@ -100,6 +103,7 @@ namespace acl {
         SPECPROP_SCHEMAPACKAGE   = PROP_SCHEMAPACKAGE,
         SPECPROP_SCHEMACLASS     = PROP_SCHEMACLASS,
         SPECPROP_POLICYTYPE      = PROP_POLICYTYPE,
+        SPECPROP_PAGING          = PROP_PAGING,
 
         SPECPROP_MAXQUEUESIZELOWERLIMIT,
         SPECPROP_MAXQUEUESIZEUPPERLIMIT,
@@ -108,7 +112,11 @@ namespace acl {
         SPECPROP_MAXFILESIZELOWERLIMIT,
         SPECPROP_MAXFILESIZEUPPERLIMIT,
         SPECPROP_MAXFILECOUNTLOWERLIMIT,
-        SPECPROP_MAXFILECOUNTUPPERLIMIT };
+        SPECPROP_MAXFILECOUNTUPPERLIMIT,
+        SPECPROP_MAXPAGESLOWERLIMIT,
+        SPECPROP_MAXPAGESUPPERLIMIT,
+        SPECPROP_MAXPAGEFACTORLOWERLIMIT, 
+        SPECPROP_MAXPAGEFACTORUPPERLIMIT };
 
 // AclResult  shared between ACL spec and ACL authorise interface
     enum AclResult {
@@ -229,6 +237,9 @@ namespace acl {
             if (str.compare("schemapackage") == 0) return PROP_SCHEMAPACKAGE;
             if (str.compare("schemaclass")   == 0) return PROP_SCHEMACLASS;
             if (str.compare("policytype")    == 0) return PROP_POLICYTYPE;
+            if (str.compare("paging")        == 0) return PROP_PAGING;
+            if (str.compare("maxpages")      == 0) return PROP_MAXPAGES;
+            if (str.compare("maxpagefactor") == 0) return PROP_MAXPAGEFACTOR;
             if (str.compare("maxqueuesize")  == 0) return PROP_MAXQUEUESIZE;
             if (str.compare("maxqueuecount") == 0) return PROP_MAXQUEUECOUNT;
             if (str.compare("maxfilesize")   == 0) return PROP_MAXFILESIZE;
@@ -249,6 +260,9 @@ namespace acl {
             case PROP_SCHEMAPACKAGE: return "schemapackage";
             case PROP_SCHEMACLASS:   return "schemaclass";
             case PROP_POLICYTYPE:    return "policytype";
+            case PROP_PAGING:        return "paging";
+            case PROP_MAXPAGES:      return "maxpages";
+            case PROP_MAXPAGEFACTOR: return "maxpagefactor";
             case PROP_MAXQUEUESIZE:  return "maxqueuesize";
             case PROP_MAXQUEUECOUNT: return "maxqueuecount";
             case PROP_MAXFILESIZE:   return "maxfilesize";
@@ -270,6 +284,7 @@ namespace acl {
             if (str.compare("schemapackage") == 0) return SPECPROP_SCHEMAPACKAGE;
             if (str.compare("schemaclass")   == 0) return SPECPROP_SCHEMACLASS;
             if (str.compare("policytype")    == 0) return SPECPROP_POLICYTYPE;
+            if (str.compare("paging")        == 0) return SPECPROP_PAGING;
             if (str.compare("queuemaxsizelowerlimit")   == 0) return SPECPROP_MAXQUEUESIZELOWERLIMIT;
             if (str.compare("queuemaxsizeupperlimit")   == 0) return SPECPROP_MAXQUEUESIZEUPPERLIMIT;
             if (str.compare("queuemaxcountlowerlimit")  == 0) return SPECPROP_MAXQUEUECOUNTLOWERLIMIT;
@@ -278,6 +293,10 @@ namespace acl {
             if (str.compare("filemaxsizeupperlimit")    == 0) return SPECPROP_MAXFILESIZEUPPERLIMIT;
             if (str.compare("filemaxcountlowerlimit")   == 0) return SPECPROP_MAXFILECOUNTLOWERLIMIT;
             if (str.compare("filemaxcountupperlimit")   == 0) return SPECPROP_MAXFILECOUNTUPPERLIMIT;
+            if (str.compare("pageslowerlimit")          == 0) return SPECPROP_MAXPAGESLOWERLIMIT;
+            if (str.compare("pagesupperlimit")          == 0) return SPECPROP_MAXPAGESUPPERLIMIT;
+            if (str.compare("pagefactorlowerlimit")     == 0) return SPECPROP_MAXPAGEFACTORLOWERLIMIT;
+            if (str.compare("pagefactorupperlimit")     == 0) return SPECPROP_MAXPAGEFACTORUPPERLIMIT;
             // Allow old names in ACL file as aliases for newly-named properties
             if (str.compare("maxqueuesize")             == 0) return SPECPROP_MAXQUEUESIZEUPPERLIMIT;
             if (str.compare("maxqueuecount")            == 0) return SPECPROP_MAXQUEUECOUNTUPPERLIMIT;
@@ -297,6 +316,7 @@ namespace acl {
                 case SPECPROP_SCHEMAPACKAGE: return "schemapackage";
                 case SPECPROP_SCHEMACLASS:   return "schemaclass";
                 case SPECPROP_POLICYTYPE:    return "policytype";
+                case SPECPROP_PAGING:        return "paging";
                 case SPECPROP_MAXQUEUESIZELOWERLIMIT:  return "queuemaxsizelowerlimit";
                 case SPECPROP_MAXQUEUESIZEUPPERLIMIT:  return "queuemaxsizeupperlimit";
                 case SPECPROP_MAXQUEUECOUNTLOWERLIMIT: return "queuemaxcountlowerlimit";
@@ -305,6 +325,10 @@ namespace acl {
                 case SPECPROP_MAXFILESIZEUPPERLIMIT:   return "filemaxsizeupperlimit";
                 case SPECPROP_MAXFILECOUNTLOWERLIMIT:  return "filemaxcountlowerlimit";
                 case SPECPROP_MAXFILECOUNTUPPERLIMIT:  return "filemaxcountupperlimit";
+                case SPECPROP_MAXPAGESLOWERLIMIT:      return "pageslowerlimit";
+                case SPECPROP_MAXPAGESUPPERLIMIT:      return "pagesupperlimit";
+                case SPECPROP_MAXPAGEFACTORLOWERLIMIT: return "pagefactorlowerlimit";
+                case SPECPROP_MAXPAGEFACTORUPPERLIMIT: return "pagefactorupperlimit";
                 default: assert(false); // should never get here
             }
             return "";
@@ -381,6 +405,9 @@ namespace acl {
             p4->insert(PROP_EXCLUSIVE);
             p4->insert(PROP_AUTODELETE);
             p4->insert(PROP_POLICYTYPE);
+            p4->insert(PROP_PAGING);
+            p4->insert(PROP_MAXPAGES);
+            p4->insert(PROP_MAXPAGEFACTOR);
             p4->insert(PROP_MAXQUEUESIZE);
             p4->insert(PROP_MAXQUEUECOUNT);
 

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.cpp Tue Feb  4 11:13:42 2014
@@ -217,7 +217,9 @@ Broker::Broker(const Broker::Options& co
     store(new NullMessageStore),
     acl(0),
     dataDir(conf.noDataDir ? std::string() : conf.dataDir),
-    pagingDir(conf.pagingDir),
+    pagingDir(!conf.pagingDir.empty() ? conf.pagingDir :
+              dataDir.isEnabled() ? dataDir.getPath() + Options::DEFAULT_PAGED_QUEUE_DIR :
+              std::string() ),
     queues(this),
     exchanges(this),
     links(this),
@@ -385,11 +387,6 @@ Broker::Broker(const Broker::Options& co
     }
 }
 
-std::string Broker::getPagingDirectoryPath()
-{
-    return pagingDir.isEnabled() ? pagingDir.getPath() : dataDir.getPath();
-}
-
 void Broker::declareStandardExchange(const std::string& name, const std::string& type)
 {
     bool storeEnabled = store.get() != NULL;
@@ -1304,6 +1301,9 @@ std::pair<boost::shared_ptr<Queue>, bool
         params.insert(make_pair(acl::PROP_EXCLUSIVE, owner ? _TRUE : _FALSE));
         params.insert(make_pair(acl::PROP_AUTODELETE, settings.autodelete ? _TRUE : _FALSE));
         params.insert(make_pair(acl::PROP_POLICYTYPE, settings.getLimitPolicy()));
+        params.insert(make_pair(acl::PROP_PAGING, settings.paging ? _TRUE : _FALSE));
+        params.insert(make_pair(acl::PROP_MAXPAGES, boost::lexical_cast<string>(settings.maxPages)));
+        params.insert(make_pair(acl::PROP_MAXPAGEFACTOR, boost::lexical_cast<string>(settings.pageFactor)));
         params.insert(make_pair(acl::PROP_MAXQUEUECOUNT, boost::lexical_cast<string>(settings.maxDepth.getCount())));
         params.insert(make_pair(acl::PROP_MAXQUEUESIZE, boost::lexical_cast<string>(settings.maxDepth.getSize())));
         params.insert(make_pair(acl::PROP_MAXFILECOUNT, boost::lexical_cast<string>(settings.maxFileCount)));

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/Broker.h Tue Feb  4 11:13:42 2014
@@ -38,6 +38,7 @@
 #include "qpid/broker/System.h"
 #include "qpid/broker/ConsumerFactory.h"
 #include "qpid/broker/ConnectionObservers.h"
+#include "qpid/broker/SessionHandlerObserver.h"
 #include "qpid/broker/BrokerObservers.h"
 #include "qpid/management/Manageable.h"
 #include "qpid/sys/ConnectionCodec.h"
@@ -86,6 +87,7 @@ class Broker : public sys::Runnable, pub
     struct Options : public qpid::Options {
         static const std::string DEFAULT_DATA_DIR_LOCATION;
         static const std::string DEFAULT_DATA_DIR_NAME;
+        static const std::string DEFAULT_PAGED_QUEUE_DIR;
 
         QPID_BROKER_EXTERN Options(const std::string& name="Broker Options");
 
@@ -178,6 +180,7 @@ class Broker : public sys::Runnable, pub
     DataDir dataDir;
     DataDir pagingDir;
     ConnectionObservers connectionObservers;
+    SessionHandlerObservers sessionHandlerObservers;
     BrokerObservers brokerObservers;
 
     QueueRegistry queues;
@@ -237,11 +240,11 @@ class Broker : public sys::Runnable, pub
     ExchangeRegistry& getExchanges() { return exchanges; }
     LinkRegistry& getLinks() { return links; }
     DtxManager& getDtxManager() { return dtxManager; }
-    DataDir& getDataDir() { return dataDir; }
+    const DataDir& getDataDir() { return dataDir; }
+    const DataDir& getPagingDir() { return pagingDir; }
     Options& getOptions() { return config; }
     ProtocolRegistry& getProtocolRegistry() { return protocolRegistry; }
     ObjectFactoryRegistry& getObjectFactoryRegistry() { return objectFactory; }
-    std::string getPagingDirectoryPath();
 
     void setExpiryPolicy(const boost::intrusive_ptr<ExpiryPolicy>& e) { expiryPolicy = e; }
     boost::intrusive_ptr<ExpiryPolicy> getExpiryPolicy() { return expiryPolicy; }
@@ -360,6 +363,7 @@ class Broker : public sys::Runnable, pub
 
     ConsumerFactories&  getConsumerFactories() { return consumerFactories; }
     ConnectionObservers& getConnectionObservers() { return connectionObservers; }
+    SessionHandlerObservers& getSessionHandlerObservers() { return sessionHandlerObservers; }
     BrokerObservers& getBrokerObservers() { return brokerObservers; }
 
     /** Properties to be set on outgoing link connections */

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/DtxTimeout.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/DtxTimeout.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/DtxTimeout.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/DtxTimeout.cpp Tue Feb  4 11:13:42 2014
@@ -21,6 +21,7 @@
 #include "qpid/broker/DtxTimeout.h"
 #include "qpid/broker/DtxManager.h"
 #include "qpid/sys/Time.h"
+#include "qpid/log/Statement.h"
 
 using namespace qpid::broker;
 
@@ -31,5 +32,6 @@ DtxTimeout::DtxTimeout(uint32_t _timeout
 
 void DtxTimeout::fire()
 {
+    QPID_LOG(debug, "DTX transaction timeouted, XID=" << xid << ", timeout=" << timeout);
     mgr.timedout(xid);
 }

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/HeadersExchange.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/HeadersExchange.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/HeadersExchange.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/HeadersExchange.cpp Tue Feb  4 11:13:42 2014
@@ -302,7 +302,12 @@ void HeadersExchange::route(Deliverable&
     if (p.get()) {
         for (std::vector<BoundKey>::const_iterator i = p->begin(); i != p->end(); ++i) {
             if (match(i->args, msg.getMessage())) {
-                b->push_back(i->binding);
+                /* check if a binding tothe same queue has not been already added to b */
+                std::vector<boost::shared_ptr<qpid::broker::Exchange::Binding> >::iterator bi = b->begin();
+                while ((bi != b->end()) && ((*bi)->queue != i->binding->queue))
+                    ++bi;
+                if (bi == b->end())
+                    b->push_back(i->binding);
             }
         }
     }

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.cpp Tue Feb  4 11:13:42 2014
@@ -91,13 +91,16 @@ PagedQueue::PagedQueue(const std::string
     : name(name_), pageSize(file.getPageSize()*factor), maxLoaded(m), protocols(p), offset(0), loaded(0), version(0),
       expiryPolicy(e)
 {
-    path = file.open(name, directory);
-    QPID_LOG(debug, "PagedQueue[" << path << "]");
+    if (directory.empty()) {
+        throw qpid::Exception(QPID_MSG("Cannot create paged queue: No paged queue directory specified"));
+    }
+    file.open(name, directory);
+    QPID_LOG(debug, "PagedQueue[" << name << "]");
 }
 
 PagedQueue::~PagedQueue()
 {
-    file.close(path);
+    file.close();
 }
 
 size_t PagedQueue::size()
@@ -133,7 +136,7 @@ bool PagedQueue::deleted(const QueueCurs
 void PagedQueue::publish(const Message& added)
 {
     if (encodedSize(added) > pageSize) {
-        QPID_LOG(error, "Message is larger than page size for queue " << name << ", backed by " << path);
+        QPID_LOG(error, "Message is larger than page size for queue " << name);
         throw qpid::framing::PreconditionFailedException(QPID_MSG("Message is larger than page size for queue " << name));
     }
     Used::reverse_iterator i = used.rbegin();
@@ -143,7 +146,7 @@ void PagedQueue::publish(const Message& 
     }
     //used is empty or last page is full, need to add a new page
     if (!newPage(added.getSequence()).add(added)) {
-        QPID_LOG(error, "Could not add message to paged queue " << name << ", backed by " << path);
+        QPID_LOG(error, "Could not add message to paged queue " << name);
         throw qpid::Exception(QPID_MSG("Could not add message to paged queue " << name));
     }
 }
@@ -388,14 +391,14 @@ void PagedQueue::load(Page& page)
     }
     page.load(file, protocols, expiryPolicy);
     ++loaded;
-    QPID_LOG(debug, "PagedQueue[" << path << "] loaded page, " << loaded << " pages now loaded");
+    QPID_LOG(debug, "PagedQueue[" << name << "] loaded page, " << loaded << " pages now loaded");
 }
 
 void PagedQueue::unload(Page& page)
 {
     page.unload(file);
     --loaded;
-    QPID_LOG(debug, "PagedQueue[" << path << "] unloaded page, " << loaded << " pages now loaded");
+    QPID_LOG(debug, "PagedQueue[" << name << "] unloaded page, " << loaded << " pages now loaded");
 }
 
 

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/PagedQueue.h Tue Feb  4 11:13:42 2014
@@ -79,7 +79,6 @@ class PagedQueue : public Messages {
 
     qpid::sys::MemoryMappedFile file;
     std::string name;
-    std::string path;
     const size_t pageSize;
     const uint maxLoaded;
     ProtocolRegistry& protocols;

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/QueueFactory.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/QueueFactory.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/QueueFactory.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/QueueFactory.cpp Tue Feb  4 11:13:42 2014
@@ -76,8 +76,10 @@ boost::shared_ptr<Queue> QueueFactory::c
             QPID_LOG(warning, "Cannot create paged queue without broker context");
         } else if (!qpid::sys::MemoryMappedFile::isSupported()) {
             QPID_LOG(warning, "Cannot create paged queue; memory mapped file support not available on this platform");
+        } else if ( !broker->getPagingDir().isEnabled() ) {
+            QPID_LOG(warning, "Cannot create paged queue; no paging directory enabled");
         } else {
-            queue->messages = std::auto_ptr<Messages>(new PagedQueue(name, broker->getPagingDirectoryPath(),
+            queue->messages = std::auto_ptr<Messages>(new PagedQueue(name, broker->getPagingDir().getPath(),
                                                                      settings.maxPages ? settings.maxPages : 4,
                                                                      settings.pageFactor ? settings.pageFactor : 1,
                                                                      broker->getProtocolRegistry(), broker->getExpiryPolicy()));

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.cpp Tue Feb  4 11:13:42 2014
@@ -33,11 +33,35 @@ using namespace framing;
 using namespace std;
 using namespace qpid::sys;
 
+namespace {
+class DefaultErrorListener : public SessionHandler::ErrorListener {
+  public:
+    void connectionException(framing::connection::CloseCode code, const std::string& msg) {
+        QPID_LOG(error, "Connection exception: " << framing::createConnectionException(code, msg).what());
+    }
+    void channelException(framing::session::DetachCode code, const std::string& msg) {
+        QPID_LOG(error, "Channel exception: " << framing::createChannelException(code, msg).what());
+    }
+    void executionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(error, "Execution exception: " << framing::createSessionException(code, msg).what());
+    }
+    void incomingExecutionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(debug, "Incoming execution exception: " << framing::createSessionException(code, msg).what());
+    }
+    void detach() {}
+
+  private:
+};
+}
+
 SessionHandler::SessionHandler(amqp_0_10::Connection& c, ChannelId ch)
     : qpid::amqp_0_10::SessionHandler(&c.getOutput(), ch),
       connection(c),
-      proxy(out)
-{}
+      proxy(out),
+      errorListener(boost::shared_ptr<ErrorListener>(new DefaultErrorListener()))
+{
+    c.getBroker().getSessionHandlerObservers().newSessionHandler(*this);
+}
 
 SessionHandler::~SessionHandler()
 {

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/SessionHandler.h Tue Feb  4 11:13:42 2014
@@ -21,7 +21,7 @@
  * under the License.
  *
  */
-
+#include "qpid/broker/BrokerImportExport.h"
 #include "qpid/amqp_0_10/SessionHandler.h"
 #include "qpid/broker/SessionHandler.h"
 #include "qpid/framing/AMQP_ClientProxy.h"
@@ -76,8 +76,8 @@ class SessionHandler : public qpid::amqp
     SessionState* getSession() { return session.get(); }
     const SessionState* getSession() const { return session.get(); }
 
-    amqp_0_10::Connection& getConnection();
-    const amqp_0_10::Connection& getConnection() const;
+    QPID_BROKER_EXTERN amqp_0_10::Connection& getConnection();
+    QPID_BROKER_EXTERN const amqp_0_10::Connection& getConnection() const;
 
     framing::AMQP_ClientProxy& getProxy() { return proxy; }
     const framing::AMQP_ClientProxy& getProxy() const { return proxy; }
@@ -86,7 +86,7 @@ class SessionHandler : public qpid::amqp
     void attached(const std::string& name);//used by 'pushing' inter-broker bridges
     void attachAs(const std::string& name);//used by 'pulling' inter-broker bridges
 
-    void setErrorListener(boost::shared_ptr<ErrorListener> e) { errorListener = e; }
+    QPID_BROKER_EXTERN void setErrorListener(boost::shared_ptr<ErrorListener> e) { errorListener = e; }
 
     // Called by SessionAdapter
     void incomingExecutionException(framing::execution::ErrorCode, const std::string& msg);

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/posix/BrokerDefaults.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/posix/BrokerDefaults.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/posix/BrokerDefaults.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/posix/BrokerDefaults.cpp Tue Feb  4 11:13:42 2014
@@ -27,6 +27,7 @@ namespace broker {
 
 const std::string Broker::Options::DEFAULT_DATA_DIR_LOCATION("/tmp");
 const std::string Broker::Options::DEFAULT_DATA_DIR_NAME("/.qpidd");
+const std::string Broker::Options::DEFAULT_PAGED_QUEUE_DIR("/pq");
 
 std::string
 Broker::Options::getHome() {

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/broker/windows/BrokerDefaults.cpp Tue Feb  4 11:13:42 2014
@@ -27,6 +27,7 @@ namespace broker {
 
 const std::string Broker::Options::DEFAULT_DATA_DIR_LOCATION("\\TEMP");
 const std::string Broker::Options::DEFAULT_DATA_DIR_NAME("\\QPIDD.DATA");
+const std::string Broker::Options::DEFAULT_PAGED_QUEUE_DIR("\\PQ");
 
 std::string
 Broker::Options::getHome() {

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/BrokerReplicator.cpp Tue Feb  4 11:13:42 2014
@@ -172,34 +172,29 @@ Variant::Map asMapVoid(const Variant& va
 }
 } // namespace
 
-// Listens for errors on the bridge session.
-class BrokerReplicator::ErrorListener : public SessionHandler::ErrorListener {
+// Report errors on the broker replication session.
+class BrokerReplicator::ErrorListener : public broker::SessionHandler::ErrorListener {
   public:
-    ErrorListener(const std::string& lp, BrokerReplicator& br) :
-        logPrefix(lp), brokerReplicator(br) {}
+    ErrorListener(const std::string& logPrefix_) : logPrefix(logPrefix_) {}
 
-    void connectionException(framing::connection::CloseCode, const std::string& msg) {
-        QPID_LOG(error, logPrefix << "Connection error: " << msg);
+    void connectionException(framing::connection::CloseCode code, const std::string& msg) {
+        QPID_LOG(error, logPrefix << framing::createConnectionException(code, msg).what());
     }
-    void channelException(framing::session::DetachCode, const std::string& msg) {
-        QPID_LOG(error, logPrefix << "Channel error: " << msg);
+    void channelException(framing::session::DetachCode code, const std::string& msg) {
+        QPID_LOG(error, logPrefix << framing::createChannelException(code, msg).what());
     }
-    void executionException(framing::execution::ErrorCode, const std::string& msg) {
-        QPID_LOG(error, logPrefix << "Execution error: " << msg);
+    void executionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(error, logPrefix << framing::createSessionException(code, msg).what());
     }
-
-    void incomingExecutionException(
-        framing::execution::ErrorCode, const std::string& msg) {
-        QPID_LOG(error, logPrefix << "Incoming execution error: " << msg);
+    void incomingExecutionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(error, logPrefix << "Incoming " << framing::createSessionException(code, msg).what());
     }
-
     void detach() {
         QPID_LOG(debug, logPrefix << "Session detached.");
     }
 
   private:
     std::string logPrefix;
-    BrokerReplicator& brokerReplicator;
 };
 
 /** Keep track of queues or exchanges during the update process to solve 2
@@ -328,8 +323,7 @@ void BrokerReplicator::initialize() {
         boost::bind(&BrokerReplicator::connected, shared_from_this(), _1, _2)
     );
     assert(result.second);
-    result.first->setErrorListener(
-        boost::shared_ptr<ErrorListener>(new ErrorListener(logPrefix, *this)));
+    result.first->setErrorListener(boost::shared_ptr<ErrorListener>(new ErrorListener(logPrefix)));
     broker.getConnectionObservers().add(shared_from_this());
 }
 

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.cpp Tue Feb  4 11:13:42 2014
@@ -33,6 +33,7 @@
 #include "qpid/broker/BrokerObserver.h"
 #include "qpid/broker/Connection.h"
 #include "qpid/broker/Queue.h"
+#include "qpid/broker/SessionHandlerObserver.h"
 #include "qpid/framing/FieldTable.h"
 #include "qpid/framing/FieldValue.h"
 #include "qpid/log/Statement.h"
@@ -87,12 +88,54 @@ class ExpectedBackupTimerTask : public s
     Primary& primary;
 };
 
+class PrimaryErrorListener : public broker::SessionHandler::ErrorListener {
+  public:
+    PrimaryErrorListener(const std::string& logPrefix_) : logPrefix(logPrefix_) {}
+
+    void connectionException(framing::connection::CloseCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << framing::createConnectionException(code, msg).what());
+    }
+    void channelException(framing::session::DetachCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << framing::createChannelException(code, msg).what());
+    }
+    void executionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << framing::createSessionException(code, msg).what());
+    }
+    void incomingExecutionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << "Incoming " << framing::createSessionException(code, msg).what());
+    }
+    void detach() {
+        QPID_LOG(debug, logPrefix << "Session detached.");
+    }
+
+  private:
+    std::string logPrefix;
+};
+
+class PrimarySessionHandlerObserver : public broker::SessionHandlerObserver {
+  public:
+    PrimarySessionHandlerObserver(const std::string& logPrefix)
+        : errorListener(new PrimaryErrorListener(logPrefix)) {}
+    void newSessionHandler(broker::SessionHandler& sh) {
+        BrokerInfo info;
+        // Suppress error logging for backup connections
+        // TODO aconway 2014-01-31: Be more selective, suppress only expected errors?
+        if (ha::ConnectionObserver::getBrokerInfo(sh.getConnection(), info)) {
+            sh.setErrorListener(errorListener);
+        }
+    }
+  private:
+    boost::shared_ptr<PrimaryErrorListener> errorListener;
+};
+
+
 } // namespace
 
 Primary::Primary(HaBroker& hb, const BrokerInfo::Set& expect) :
     haBroker(hb), membership(hb.getMembership()),
     logPrefix("Primary: "), active(false),
     replicationTest(hb.getSettings().replicateDefault.get()),
+    sessionHandlerObserver(new PrimarySessionHandlerObserver(logPrefix)),
     queueLimits(logPrefix)
 {
     // Note that at this point, we are still rejecting client connections.
@@ -124,6 +167,8 @@ Primary::Primary(HaBroker& hb, const Bro
     }
     brokerObserver.reset(new PrimaryBrokerObserver(*this));
     haBroker.getBroker().getBrokerObservers().add(brokerObserver);
+    haBroker.getBroker().getSessionHandlerObservers().add(sessionHandlerObserver);
+
     checkReady();               // Outside lock
 
     // Allow client connections
@@ -134,6 +179,7 @@ Primary::Primary(HaBroker& hb, const Bro
 Primary::~Primary() {
     if (timerTask) timerTask->cancel();
     haBroker.getBroker().getBrokerObservers().remove(brokerObserver);
+    haBroker.getBroker().getSessionHandlerObservers().remove(sessionHandlerObserver);
     haBroker.getObserver()->reset();
 }
 

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/Primary.h Tue Feb  4 11:13:42 2014
@@ -42,6 +42,7 @@ class Queue;
 class Connection;
 class ConnectionObserver;
 class BrokerObserver;
+class SessionHandlerObserver;
 class TxBuffer;
 class DtxBuffer;
 }
@@ -152,6 +153,7 @@ class Primary : public Role
     BackupMap backups;
     boost::shared_ptr<broker::ConnectionObserver> connectionObserver;
     boost::shared_ptr<broker::BrokerObserver> brokerObserver;
+    boost::shared_ptr<broker::SessionHandlerObserver> sessionHandlerObserver;
     boost::intrusive_ptr<sys::TimerTask> timerTask;
     ReplicaMap replicas;
     TxMap txMap;

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.cpp Tue Feb  4 11:13:42 2014
@@ -98,7 +98,8 @@ PrimaryTxObserver::PrimaryTxObserver(
     replicationTest(hb.getSettings().replicateDefault.get()),
     txBuffer(tx),
     id(true),
-    exchangeName(TRANSACTION_REPLICATOR_PREFIX+id.str())
+    exchangeName(TRANSACTION_REPLICATOR_PREFIX+id.str()),
+    empty(true)
 {
     logPrefix = "Primary transaction "+shortStr(id)+": ";
 
@@ -149,6 +150,7 @@ void PrimaryTxObserver::enqueue(const Qu
     if (replicationTest.useLevel(*q) == ALL) { // Ignore unreplicated queues.
         QPID_LOG(trace, logPrefix << "Enqueue: " << LogMessageId(*q, m));
         checkState(SENDING, "Too late for enqueue");
+        empty = false;
         enqueues[q] += m.getReplicationId();
         txQueue->deliver(TxEnqueueEvent(q->getName(), m.getReplicationId()).message());
         txQueue->deliver(m);
@@ -162,12 +164,9 @@ void PrimaryTxObserver::dequeue(
     checkState(SENDING, "Too late for dequeue");
     if (replicationTest.useLevel(*q) == ALL) { // Ignore unreplicated queues.
         QPID_LOG(trace, logPrefix << "Dequeue: " << LogMessageId(*q, pos, id));
+        empty = false;
         txQueue->deliver(TxDequeueEvent(q->getName(), id).message());
     }
-    else {
-        QPID_LOG(warning, logPrefix << "Dequeue skipped, queue not replicated: "
-                 << LogMessageId(*q, pos, id));
-    }
 }
 
 namespace {
@@ -221,8 +220,10 @@ void PrimaryTxObserver::commit() {
 }
 
 void PrimaryTxObserver::rollback() {
-    QPID_LOG(debug, logPrefix << "Rollback");
     Mutex::ScopedLock l(lock);
+    // Don't bleat about rolling back empty transactions, this happens all the time
+    // when a session closes and rolls back its outstanding transaction.
+    if (!empty) QPID_LOG(debug, logPrefix << "Rollback");
     if (state != ENDED) {
         txQueue->deliver(TxRollbackEvent().message());
         end(l);
@@ -287,7 +288,6 @@ void PrimaryTxObserver::txPrepareFailEve
 void PrimaryTxObserver::cancel(const ReplicatingSubscription& rs) {
     Mutex::ScopedLock l(lock);
     types::Uuid backup = rs.getBrokerInfo().getSystemId();
-    QPID_LOG(debug, logPrefix << "Backup disconnected: " << backup);
     // Normally the backup should be completed before it is cancelled.
     if (completed(backup, l)) error(backup, "Unexpected disconnect:", l);
     // Break the pointer cycle if backups have completed and we are done with txBuffer.

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/PrimaryTxObserver.h Tue Feb  4 11:13:42 2014
@@ -55,8 +55,9 @@ class Primary;
  * A TxReplicator on the backup replicates the tx-queue and creates
  * a TxBuffer on the backup equivalent to the one on the primary.
  *
- * Also observes the tx-queue for prepare-complete messages and
- * subscription cancellations.
+ * Creates an exchange to receive prepare-ok/prepare-fail messages from backups.
+ *
+ * Monitors for tx-queue subscription cancellations.
  *
  * THREAD SAFE: called in user connection thread for TX events,
  * and in backup connection threads for prepare-completed events
@@ -122,6 +123,7 @@ class PrimaryTxObserver : public broker:
     QueueIdsMap enqueues;
     UuidSet backups;            // All backups of transaction.
     UuidSet incomplete;         // Incomplete backups (not yet responded to prepare)
+    bool empty;                 // True if the transaction is empty - no enqueues/dequeues.
 };
 
 }} // namespace qpid::ha

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.cpp Tue Feb  4 11:13:42 2014
@@ -73,17 +73,26 @@ void QueueReplicator::copy(ExchangeRegis
     registry.eachExchange(boost::bind(&pushIfQr, boost::ref(result), _1));
 }
 
+// Debug log expected exceptions on queue replicator, check incoming execution
+// exceptions for "deleted on primary" conditions.
 class QueueReplicator::ErrorListener : public SessionHandler::ErrorListener {
   public:
     ErrorListener(const boost::shared_ptr<QueueReplicator>& qr)
         : queueReplicator(qr), logPrefix(qr->logPrefix) {}
 
-    void connectionException(framing::connection::CloseCode, const std::string&) {}
-    void channelException(framing::session::DetachCode, const std::string&) {}
-    void executionException(framing::execution::ErrorCode, const std::string&) {}
-
-    void incomingExecutionException(ErrorCode e, const std::string& msg) {
-        queueReplicator->incomingExecutionException(e, msg);
+    void connectionException(framing::connection::CloseCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << framing::createConnectionException(code, msg).what());
+    }
+    void channelException(framing::session::DetachCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << framing::createChannelException(code, msg).what());
+    }
+    void executionException(framing::execution::ErrorCode code, const std::string& msg) {
+        QPID_LOG(debug, logPrefix << framing::createSessionException(code, msg).what());
+    }
+    void incomingExecutionException(ErrorCode code, const std::string& msg) {
+        if (!queueReplicator->deletedOnPrimary(code, msg))
+            QPID_LOG(error, logPrefix << "Incoming "
+                     << framing::createSessionException(code, msg).what());
     }
     void detach() {
         QPID_LOG(debug, logPrefix << "Session detached");
@@ -197,20 +206,25 @@ void QueueReplicator::disconnect() {
 
 // Called from Queue::destroyed()
 void QueueReplicator::destroy() {
+    QPID_LOG(debug, logPrefix << "Destroyed");
     boost::shared_ptr<Bridge> bridge2; // To call outside of lock
     {
         Mutex::ScopedLock l(lock);
         if (!queue) return;     // Already destroyed
-        QPID_LOG(debug, logPrefix << "Destroyed");
         bridge2 = bridge;       // call close outside the lock.
-        // Need to drop shared pointers to avoid pointer cycles keeping this in memory.
-        queue.reset();
-        bridge.reset();
-        getBroker()->getExchanges().destroy(getName());
+        destroy(l);
     }
     if (bridge2) bridge2->close(); // Outside of lock, avoid deadlock.
 }
 
+void QueueReplicator::destroy(Mutex::ScopedLock&) {
+    // Need to drop shared pointers to avoid pointer cycles keeping this in memory.
+    queue.reset();
+    bridge.reset();
+    getBroker()->getExchanges().destroy(getName());
+}
+
+
 // Called in a broker connection thread when the bridge is created.
 // Note: called with the Link lock held.
 void QueueReplicator::initializeBridge(Bridge& bridge, SessionHandler& sessionHandler_) {
@@ -306,18 +320,19 @@ void QueueReplicator::idEvent(const stri
     nextId = decodeStr<IdEvent>(data).id;
 }
 
-void QueueReplicator::incomingExecutionException(ErrorCode e, const std::string& msg) {
+bool QueueReplicator::deletedOnPrimary(ErrorCode e, const std::string& msg) {
     if (e == ERROR_CODE_NOT_FOUND || e == ERROR_CODE_RESOURCE_DELETED) {
         // If the queue is destroyed at the same time we are subscribing, we may
         // get a not-found or resource-deleted exception before the
         // BrokerReplicator gets the queue-delete event. Shut down the bridge by
         // calling destroy(), we can let the BrokerReplicator delete the queue
         // when the queue-delete arrives.
-        QPID_LOG(debug, logPrefix << "Deleted on primary: " << msg);
+        QPID_LOG(debug, logPrefix << "Deleted on primary: "
+                 << framing::createSessionException(e, msg).what());
         destroy();
+        return true;
     }
-    else
-        QPID_LOG(error, logPrefix << "Incoming execution exception: " << msg);
+    return false;
 }
 
 // Unused Exchange methods.

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/QueueReplicator.h Tue Feb  4 11:13:42 2014
@@ -46,11 +46,13 @@ class HaBroker;
 class Settings;
 
 /**
- * Exchange created on a backup broker to replicate a queue on the primary.
+ * Exchange created on a backup broker to receive replicated messages and
+ * replication events from a queue on the primary. It subscribes to the primary
+ * queue via a ReplicatingSubscription on the primary by passing special
+ * arguments to the subscribe command.
  *
- * Puts replicated messages on the local queue, handles dequeue events.
- * Creates a ReplicatingSubscription on the primary by passing special
- * arguments to the consume command.
+ * It puts replicated messages on the local replica queue and handles dequeue
+ * events by removing local messages.
  *
  * THREAD SAFE: Called in different connection threads.
  */
@@ -74,7 +76,7 @@ class QueueReplicator : public broker::E
 
     void disconnect();      // Called when we are disconnected from the primary.
 
-    std::string getType() const;
+    virtual std::string getType() const;
 
     void route(broker::Deliverable&);
 
@@ -101,7 +103,9 @@ class QueueReplicator : public broker::E
     void initialize();          // Called as part of create()
 
     virtual void deliver(const broker::Message&);
+
     virtual void destroy();             // Called when the queue is destroyed.
+    virtual void destroy(sys::Mutex::ScopedLock&);
 
     sys::Mutex lock;
     HaBroker& haBroker;
@@ -124,8 +128,7 @@ class QueueReplicator : public broker::E
     void dequeueEvent(const std::string& data, sys::Mutex::ScopedLock&);
     void idEvent(const std::string& data, sys::Mutex::ScopedLock&);
 
-    void incomingExecutionException(framing::execution::ErrorCode e,
-                                    const std::string& msg);
+    bool deletedOnPrimary(framing::execution::ErrorCode e, const std::string& msg);
 
     std::string logPrefix;
     std::string bridgeName;

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.cpp Tue Feb  4 11:13:42 2014
@@ -87,7 +87,7 @@ TxReplicator::TxReplicator(
     QueueReplicator(hb, txQueue, link),
     store(hb.getBroker().hasStore() ? &hb.getBroker().getStore() : 0),
     channel(link->nextChannel()),
-    ended(false),
+    empty(true), ended(false),
     dequeueState(hb.getBroker().getQueues())
 {
     string id(getTxId(txQueue->getName()));
@@ -151,6 +151,7 @@ void TxReplicator::enqueue(const string&
     decodeStr(data, e);
     QPID_LOG(trace, logPrefix << "Enqueue: " << e);
     enq = e;
+    empty = false;
 }
 
 void TxReplicator::dequeue(const string& data, sys::Mutex::ScopedLock&) {
@@ -163,6 +164,7 @@ void TxReplicator::dequeue(const string&
     // prepared, then they are all receieved before the prepare event.
     // We collect the events here so we can do a single scan of the queue in prepare.
     dequeueState.add(e);
+    empty = false;
 }
 
 void TxReplicator::DequeueState::add(const TxDequeueEvent& event) {
@@ -227,7 +229,9 @@ void TxReplicator::commit(const string&,
 
 void TxReplicator::rollback(const string&, sys::Mutex::ScopedLock& l) {
     if (!txBuffer) return;
-    QPID_LOG(debug, logPrefix << "Rollback");
+    // Don't bleat about rolling back empty transactions, this happens all the time
+    // when a session closes and rolls back its outstanding transaction.
+    if (!empty) QPID_LOG(debug, logPrefix << "Rollback");
     if (context.get()) store->abort(*context);
     txBuffer->rollback();
     end(l);
@@ -255,15 +259,12 @@ void TxReplicator::end(sys::Mutex::Scope
 }
 
 // Called when the tx queue is deleted.
-void TxReplicator::destroy() {
-    {
-        sys::Mutex::ScopedLock l(lock);
-        if (!ended) {
-            QPID_LOG(error, logPrefix << "Destroyed prematurely, rollback.");
-            rollback(string(), l);
-        }
+void TxReplicator::destroy(sys::Mutex::ScopedLock& l) {
+    if (!ended) {
+        if (!empty) QPID_LOG(error, logPrefix << "Destroyed prematurely, rollback");
+        rollback(string(), l);
     }
-    QueueReplicator::destroy();
+    QueueReplicator::destroy(l);
 }
 
 }} // namespace qpid::ha

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/ha/TxReplicator.h Tue Feb  4 11:13:42 2014
@@ -67,7 +67,8 @@ class TxReplicator : public QueueReplica
 
     // QueueReplicator overrides
     void route(broker::Deliverable& deliverable);
-    void destroy();
+    using QueueReplicator::destroy;
+    void destroy(sys::Mutex::ScopedLock&);
 
   protected:
 

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/StorePlugin.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/StorePlugin.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/StorePlugin.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/StorePlugin.cpp Tue Feb  4 11:13:42 2014
@@ -45,7 +45,7 @@ struct StorePlugin : public Plugin {
         Broker* broker = dynamic_cast<Broker*>(&target);
         if (!broker) return;
         store.reset(new MessageStoreImpl(broker));
-        DataDir& dataDir = broker->getDataDir ();
+        const DataDir& dataDir = broker->getDataDir ();
         if (options.storeDir.empty ())
         {
             if (!dataDir.isEnabled ())

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/jrnl/wrfc.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/jrnl/wrfc.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/jrnl/wrfc.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/legacystore/jrnl/wrfc.cpp Tue Feb  4 11:13:42 2014
@@ -125,7 +125,8 @@ wrfc::enq_threshold(const u_int32_t enq_
     u_int32_t fwd_dblks = subm_dblks + enq_dsize_dblks + _enq_cap_offs_dblks;
     u_int16_t findex = _fc_index;
     fcntl* fcp = _curr_fc;
-    bool in_use = false;
+    bool in_use = false; // at least one file contains an enqueued record
+    bool overwrite = false; // reached the original journal file we started with
     while (fwd_dblks && !(findex != _fc_index && fcp->enqcnt()))
     {
         fwd_dblks -= fwd_dblks > _fsize_dblks ? _fsize_dblks : fwd_dblks;
@@ -133,12 +134,13 @@ wrfc::enq_threshold(const u_int32_t enq_
         {
             if (++findex == _lpmp->num_jfiles())
                 findex = 0;
+	    overwrite |= findex == _fc_index;
             fcp = _lpmp->get_fcntlp(findex);
         }
         in_use |= fcp->enqcnt() > 0;
     }
     // Return true if threshold exceeded
-    return findex != _fc_index && in_use;
+    return (findex != _fc_index && in_use) || overwrite;
 }
 
 bool wrfc::wr_reset()

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/linearstore/StorePlugin.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/linearstore/StorePlugin.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/linearstore/StorePlugin.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/linearstore/StorePlugin.cpp Tue Feb  4 11:13:42 2014
@@ -46,7 +46,7 @@ struct StorePlugin : public Plugin {
         Broker* broker = dynamic_cast<Broker*>(&target);
         if (!broker) return;
         store.reset(new MessageStoreImpl(broker));
-        DataDir& dataDir = broker->getDataDir ();
+        const DataDir& dataDir = broker->getDataDir ();
         if (options.storeDir.empty ())
         {
             if (!dataDir.isEnabled ())

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/messaging/amqp/SenderContext.cpp Tue Feb  4 11:13:42 2014
@@ -95,11 +95,17 @@ bool SenderContext::send(const qpid::mes
             return true;
         } else {
             deliveries.push_back(Delivery(nextId++));
-            Delivery& delivery = deliveries.back();
-            delivery.encode(MessageImplAccess::get(message), address, setToOnSend);
-            delivery.send(sender, unreliable);
-            *out = &delivery;
-            return true;
+            try {
+                Delivery& delivery = deliveries.back();
+                delivery.encode(MessageImplAccess::get(message), address, setToOnSend);
+                delivery.send(sender, unreliable);
+                *out = &delivery;
+                return true;
+            } catch (const std::exception& e) {
+                deliveries.pop_back();
+                --nextId;
+                throw SendError(e.what());
+            }
         }
     } else {
         return false;

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/store/ms-clfs/MSSqlClfsProvider.cpp
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/store/ms-clfs/MSSqlClfsProvider.cpp?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/store/ms-clfs/MSSqlClfsProvider.cpp (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/store/ms-clfs/MSSqlClfsProvider.cpp Tue Feb  4 11:13:42 2014
@@ -370,7 +370,7 @@ MSSqlClfsProvider::earlyInitialize(Plugi
         // Check the store dir option; if not specified, need to
         // grab the broker's data dir.
         if (options.storeDir.empty()) {
-            DataDir& dir = store->getBroker()->getDataDir();
+            const DataDir& dir = store->getBroker()->getDataDir();
             if (dir.isEnabled()) {
                 options.storeDir = dir.getPath();
             }

Modified: qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/MemoryMappedFile.h
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/MemoryMappedFile.h?rev=1564254&r1=1564253&r2=1564254&view=diff
==============================================================================
--- qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/MemoryMappedFile.h (original)
+++ qpid/branches/java-broker-bdb-ha/qpid/cpp/src/qpid/sys/MemoryMappedFile.h Tue Feb  4 11:13:42 2014
@@ -38,11 +38,11 @@ class MemoryMappedFile {
     /**
      * Opens a file that can be mapped by region into memory
      */
-    QPID_COMMON_EXTERN std::string open(const std::string& name, const std::string& directory);
+    QPID_COMMON_EXTERN void open(const std::string& name, const std::string& directory);
     /**
      * Closes and removes the file that can be mapped by region into memory
      */
-    QPID_COMMON_EXTERN void close(const std::string& path);
+    QPID_COMMON_EXTERN void close();
     /**
      * Returns the page size
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org