summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Godfrey <rgodfrey@apache.org>2009-10-05 10:35:40 +0000
committerRobert Godfrey <rgodfrey@apache.org>2009-10-05 10:35:40 +0000
commitf7e01a65f292af81813cbfc7f7bb60ce70139074 (patch)
treed5da0b6b44150e9015375b39b36cf31041568d66
parent8de1fa8dc5fd1ad3e1efd464320f2fd019bdbef4 (diff)
downloadqpid-python-f7e01a65f292af81813cbfc7f7bb60ce70139074.tar.gz
Merged from trunk up to r799240
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/java-broker-0-10@821747 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/bindings/qmf/python/Makefile.am2
-rw-r--r--qpid/cpp/bindings/qmf/ruby/Makefile.am2
-rw-r--r--qpid/cpp/configure.ac1
-rw-r--r--qpid/cpp/docs/api/developer.doxygen.in2
-rw-r--r--qpid/cpp/docs/api/user.doxygen.in2
-rw-r--r--qpid/cpp/examples/CMakeLists.txt3
-rw-r--r--qpid/cpp/examples/makedist.mk2
-rwxr-xr-xqpid/cpp/managementgen/qmfgen/generate.py4
-rwxr-xr-xqpid/cpp/rubygen/amqpgen.rb31
-rwxr-xr-xqpid/cpp/rubygen/framing.0-10/Operations.rb6
-rwxr-xr-xqpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb6
-rwxr-xr-xqpid/cpp/rubygen/framing.0-10/Session.rb12
-rwxr-xr-xqpid/cpp/rubygen/framing.0-10/constants.rb10
-rw-r--r--qpid/cpp/rubygen/framing.0-10/frame_body_lists.rb2
-rwxr-xr-xqpid/cpp/rubygen/framing.0-10/structs.rb6
-rwxr-xr-xqpid/cpp/rubygen/generate23
-rw-r--r--qpid/cpp/src/CMakeLists.txt11
-rw-r--r--qpid/cpp/src/Makefile.am6
-rw-r--r--qpid/cpp/src/qpid/broker/LinkRegistry.cpp17
-rw-r--r--qpid/cpp/src/qpid/broker/LinkRegistry.h1
-rw-r--r--qpid/cpp/src/qpid/cluster/Cluster.cpp37
-rw-r--r--qpid/cpp/src/qpid/cluster/Connection.cpp4
-rw-r--r--qpid/cpp/src/qpid/cluster/ErrorCheck.cpp11
-rw-r--r--qpid/cpp/src/qpid/cluster/Quorum_cman.cpp1
-rw-r--r--qpid/cpp/src/qpid/cluster/UpdateClient.cpp3
-rw-r--r--qpid/cpp/src/qpid/replication/ReplicationExchange.cpp34
-rw-r--r--qpid/cpp/src/qpid/replication/ReplicationExchange.h2
-rw-r--r--qpid/cpp/src/tests/.valgrind.supp17
-rw-r--r--qpid/cpp/src/tests/Makefile.am20
-rw-r--r--qpid/cpp/src/tests/latencytest.cpp38
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java46
-rw-r--r--qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java2
-rw-r--r--qpid/java/doc/broker-0.5-network.diabin3932 -> 5187 bytes
-rw-r--r--qpid/java/doc/broker-0.N-network-phase-1.diabin0 -> 4283 bytes
-rw-r--r--qpid/java/doc/broker-0.N-state.diabin0 -> 2477 bytes
-rw-r--r--qpid/java/doc/client-0.5-network-processing.diabin4267 -> 5331 bytes
-rw-r--r--qpid/java/doc/client-0.N-network-processing.diabin0 -> 4039 bytes
-rw-r--r--qpid/java/doc/common-0.N-network.diabin0 -> 1858 bytes
-rw-r--r--qpid/java/doc/network-driver-protocol-engine-sequence.diabin0 -> 1826 bytes
-rw-r--r--qpid/java/management/eclipse-plugin/icons/back.gifbin0 -> 327 bytes
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/BackAction.java59
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java91
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java18
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java4
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java4
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java5
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java4
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java6
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/users/UserManagementTabControl.java18
-rw-r--r--qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java6
-rw-r--r--qpid/java/module.xml9
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java6
-rw-r--r--qpid/java/test-profiles/010ExcludeList-noPrefetch61
-rw-r--r--qpid/java/test-profiles/010ExcludeList-store64
-rw-r--r--qpid/java/test-profiles/010Excludes (renamed from qpid/java/test-profiles/010ExcludeList)34
-rw-r--r--qpid/java/test-profiles/010PrefetchExcludes4
-rw-r--r--qpid/java/test-profiles/010TransientExcludes10
-rw-r--r--qpid/java/test-profiles/08Excludes (renamed from qpid/java/test-profiles/08ExcludeList)0
-rw-r--r--qpid/java/test-profiles/08StandaloneExcludes (renamed from qpid/java/test-profiles/08ExcludeList-nonvm)0
-rw-r--r--qpid/java/test-profiles/08TransientExcludes (renamed from qpid/java/test-profiles/08ExcludeList-nopersistence)0
-rw-r--r--qpid/java/test-profiles/Excludes (renamed from qpid/java/test-profiles/ExcludeList)0
-rw-r--r--qpid/java/test-profiles/XAExcludes (renamed from qpid/java/test-profiles/XAExcludeList)0
-rw-r--r--qpid/java/test-profiles/cpp.async.excludes5
-rw-r--r--qpid/java/test-profiles/cpp.async.testprofile4
-rw-r--r--qpid/java/test-profiles/cpp.cluster.testprofile2
-rw-r--r--qpid/java/test-profiles/cpp.noprefetch.testprofile2
-rw-r--r--qpid/java/test-profiles/cpp.ssl.excludes (renamed from qpid/java/test-profiles/010ExcludeList-ssl)0
-rw-r--r--qpid/java/test-profiles/cpp.ssl.testprofile3
-rw-r--r--qpid/java/test-profiles/cpp.testprofile3
-rw-r--r--qpid/java/test-profiles/default-longrunning.testprofile1
-rw-r--r--qpid/java/test-profiles/default.testprofile5
-rw-r--r--qpid/java/test-profiles/java-derby.testprofile2
-rw-r--r--qpid/java/test-profiles/java.testprofile2
73 files changed, 507 insertions, 289 deletions
diff --git a/qpid/cpp/bindings/qmf/python/Makefile.am b/qpid/cpp/bindings/qmf/python/Makefile.am
index 42eead1a2e..9bb1b00d50 100644
--- a/qpid/cpp/bindings/qmf/python/Makefile.am
+++ b/qpid/cpp/bindings/qmf/python/Makefile.am
@@ -19,7 +19,7 @@
if HAVE_PYTHON_DEVEL
-INCLUDES = -I$(top_srcdir)/src/qmf -I$(top_srcdir)/src -I$(top_builddir)/src/gen
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src/qmf -I$(top_srcdir)/src -I$(top_builddir)/src
EXTRA_DIST = python.i
diff --git a/qpid/cpp/bindings/qmf/ruby/Makefile.am b/qpid/cpp/bindings/qmf/ruby/Makefile.am
index a550bd73fa..532fdb6875 100644
--- a/qpid/cpp/bindings/qmf/ruby/Makefile.am
+++ b/qpid/cpp/bindings/qmf/ruby/Makefile.am
@@ -19,7 +19,7 @@
if HAVE_RUBY_DEVEL
-INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/qmf -I$(top_srcdir)/src -I$(top_builddir)/src/gen -I$(top_srcdir)/src/gen
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src/qmf -I$(top_srcdir)/src -I$(top_builddir)/src
EXTRA_DIST = ruby.i
BUILT_SOURCES = qmfengine.cpp
diff --git a/qpid/cpp/configure.ac b/qpid/cpp/configure.ac
index 8ce66cf743..6d7ed16871 100644
--- a/qpid/cpp/configure.ac
+++ b/qpid/cpp/configure.ac
@@ -237,7 +237,6 @@ AM_CONDITIONAL([HAVE_PYTHON_DEVEL], [test -f $PYTHON_INC/Python.h && test -n "$S
specdir=`pwd`/$srcdir/../specs
AMQP_FINAL_XML=$specdir/amqp.0-10-qpid-errata.xml
-test -f $AMQP_FINAL_XML || test -d $srcdir/src/gen || AC_MSG_ERROR([Neither AMQP specs nor spec-generated code present; cannot build.])
AC_SUBST(AMQP_FINAL_XML)
AM_CONDITIONAL([GENERATE], [test -f $AMQP_FINAL_XML])
diff --git a/qpid/cpp/docs/api/developer.doxygen.in b/qpid/cpp/docs/api/developer.doxygen.in
index a8dfbb58ff..96d67c027f 100644
--- a/qpid/cpp/docs/api/developer.doxygen.in
+++ b/qpid/cpp/docs/api/developer.doxygen.in
@@ -464,7 +464,7 @@ WARN_LOGFILE = doxygen.log
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = @top_srcdir@/include @top_srcdir@/src @top_builddir@/src/gen
+INPUT = @top_srcdir@/include @top_srcdir@/src @top_builddir@/include @top_builddir@/src
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
diff --git a/qpid/cpp/docs/api/user.doxygen.in b/qpid/cpp/docs/api/user.doxygen.in
index 1e10aebe14..6ade9ab846 100644
--- a/qpid/cpp/docs/api/user.doxygen.in
+++ b/qpid/cpp/docs/api/user.doxygen.in
@@ -456,7 +456,7 @@ WARN_LOGFILE = doxygen.log
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = @top_srcdir@/include @top_builddir@/src/gen/qpid/client @top_builddir@/src/gen/qpid/framing
+INPUT = @top_srcdir@/include @top_builddir@/include
# If the value of the INPUT tag contains directories, you can use the
diff --git a/qpid/cpp/examples/CMakeLists.txt b/qpid/cpp/examples/CMakeLists.txt
index 34dfa340ce..7d0a4d0d21 100644
--- a/qpid/cpp/examples/CMakeLists.txt
+++ b/qpid/cpp/examples/CMakeLists.txt
@@ -24,7 +24,8 @@ endif(COMMAND cmake_policy)
# This will probably need some fiddling to get right for installed kits.
get_directory_property(QPIDC_TOP PARENT_DIRECTORY)
-include_directories(${QPIDC_TOP}/include ${CMAKE_CURRENT_BINARY_DIR}/../src/gen)
+include_directories(${CMAKE_BINARY_DIR}/include)
+include_directories(${CMAKE_SOURCE_DIR}/include)
# Shouldn't need this... but there are still client header inclusions of Boost.
include_directories( ${Boost_INCLUDE_DIR} )
diff --git a/qpid/cpp/examples/makedist.mk b/qpid/cpp/examples/makedist.mk
index 9fd4ee6e28..0a7f18de76 100644
--- a/qpid/cpp/examples/makedist.mk
+++ b/qpid/cpp/examples/makedist.mk
@@ -1,6 +1,6 @@
# Settings to build the examples in automake
AM_CXXFLAGS = $(WARNING_CFLAGS)
-INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/src/gen -I$(top_builddir)/src/gen
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include
CLIENT_LIB=$(top_builddir)/src/libqpidclient.la
CONSOLE_LIB=$(top_builddir)/src/libqmfconsole.la
CLIENTFLAGS=-lqpidclient
diff --git a/qpid/cpp/managementgen/qmfgen/generate.py b/qpid/cpp/managementgen/qmfgen/generate.py
index 44c434216e..4052b8c853 100755
--- a/qpid/cpp/managementgen/qmfgen/generate.py
+++ b/qpid/cpp/managementgen/qmfgen/generate.py
@@ -163,7 +163,7 @@ class Makefile:
stream.write("dist_" + name + "_HEADERS = ")
first = True
for file in self.filelists["h"]:
- if file.find("gen/qmf/" + package) == 0:
+ if file.find("qmf/" + package) == 0:
if first:
first = False
else:
@@ -243,7 +243,7 @@ class CMakeLists(Makefile):
first = True
for file in self.filelists["h"]:
file = self.unNormCase(file)
- if file.find("gen/qmf/" + package) == 0:
+ if file.find("qmf/" + package) == 0:
if first:
first = False
else:
diff --git a/qpid/cpp/rubygen/amqpgen.rb b/qpid/cpp/rubygen/amqpgen.rb
index 802f934c7a..69e65a4056 100755
--- a/qpid/cpp/rubygen/amqpgen.rb
+++ b/qpid/cpp/rubygen/amqpgen.rb
@@ -318,7 +318,7 @@ class AmqpFakeMethod < AmqpMethod
def content() return "1" if @action.is_a? AmqpCommand and @action.segments end
def index() @action.code end
def code() @action.code end
- def synchronous() end # FIXME aconway 2008-04-10: ???
+ def synchronous() end
def on_chassis?(chassis)
@action.received_by?(chassis)
end
@@ -464,9 +464,12 @@ end
# Collect information about generated files.
class GenFiles
- @@files = Set.new
- def GenFiles.add(f) @@files.add f; end
+ @@files = Set.new
+ @@public_api = []
+ def GenFiles.add(f) @@files.add(f); end
def GenFiles.get() @@files; end
+ def GenFiles.public_api(file) @@public_api << file; end
+ def GenFiles.public_api?(file) @@public_api.find { |f| f == file }; end
end
# Base class for code generators.
@@ -476,27 +479,27 @@ class Generator
# Takes directory for output or "-", meaning print file names that
# would be generated.
def initialize (outdir, amqp)
+ @outdir=outdir[0]
+ @apidir=outdir[1]
@amqp=amqp
- @outdir=outdir
+ raise "outdir is not an array" unless outdir.class == Array
@prefix=[''] # For indentation or comments.
@indentstr=' ' # One indent level.
@outdent=2
- Pathname.new(@outdir).mkpath unless @outdir=="-"
end
+ # Declare next file to be public API
+ def public_api(file) GenFiles.public_api(file); end
+
# Create a new file, set @out.
def file(file, &block)
- GenFiles.add file
- if (@outdir != "-")
- @path=Pathname.new "#{@outdir}/#{file}"
+ GenFiles.add(file)
+ dir = GenFiles.public_api?(file) ? @apidir : @outdir
+ if (dir != "-")
+ @path=Pathname.new "#{dir}/#{file}"
@path.parent.mkpath
@out=String.new # Generate in memory first
- if block then yield; endfile; end
- end
- end
-
- def endfile()
- if @outdir != "-"
+ yield if block
if @path.exist? and @path.read == @out
puts "Skipped #{@path} - unchanged" # Dont generate if unchanged
else
diff --git a/qpid/cpp/rubygen/framing.0-10/Operations.rb b/qpid/cpp/rubygen/framing.0-10/Operations.rb
index c217926a66..cd6a363c56 100755
--- a/qpid/cpp/rubygen/framing.0-10/Operations.rb
+++ b/qpid/cpp/rubygen/framing.0-10/Operations.rb
@@ -115,7 +115,7 @@ EOS
end
end
-OperationsGen.new("client",ARGV[0], $amqp).generate()
-OperationsGen.new("server",ARGV[0], $amqp).generate()
-OperationsGen.new("all",ARGV[0], $amqp).generate()
+OperationsGen.new("client",$outdir, $amqp).generate()
+OperationsGen.new("server",$outdir, $amqp).generate()
+OperationsGen.new("all",$outdir, $amqp).generate()
diff --git a/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb b/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb
index 6e3b79e51e..f9b6cac76b 100755
--- a/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb
+++ b/qpid/cpp/rubygen/framing.0-10/OperationsInvoker.rb
@@ -112,6 +112,6 @@ class OperationsInvokerGen < CppGen
end
end
-OperationsInvokerGen.new("client",ARGV[0], $amqp).generate()
-OperationsInvokerGen.new("server",ARGV[0], $amqp).generate()
-OperationsInvokerGen.new("all",ARGV[0], $amqp).generate()
+OperationsInvokerGen.new("client",$outdir, $amqp).generate()
+OperationsInvokerGen.new("server",$outdir, $amqp).generate()
+OperationsInvokerGen.new("all",$outdir, $amqp).generate()
diff --git a/qpid/cpp/rubygen/framing.0-10/Session.rb b/qpid/cpp/rubygen/framing.0-10/Session.rb
index 7b92a17f41..61f0e03a8b 100755
--- a/qpid/cpp/rubygen/framing.0-10/Session.rb
+++ b/qpid/cpp/rubygen/framing.0-10/Session.rb
@@ -136,6 +136,7 @@ class SessionNoKeywordGen < CppGen
end
def generate()
+ public_api("#{@file}.h")
h_file(@file) {
include "qpid/client/#{@version_base}.h"
include "qpid/client/ClientImportExport.h"
@@ -222,6 +223,7 @@ class SessionGen < CppGen
keyword_methods=session_methods(sync_default).reject { |m| m.fields_c.empty? }
max_arity = keyword_methods.map{ |m| m.fields_c.size }.max
+ public_api("qpid/client/arg.h")
h_file("qpid/client/arg.h") {
# Generate keyword tag declarations.
genl "#define BOOST_PARAMETER_MAX_ARITY #{max_arity}"
@@ -231,7 +233,7 @@ class SessionGen < CppGen
genl "BOOST_PARAMETER_KEYWORD(keyword_tags, #{k})"
}}
}
-
+ public_api("#{@fqclass.file}.h")
h_file(@fqclass.file) {
include @fqbase.file
include "qpid/client/arg"
@@ -408,8 +410,8 @@ EOS
end
end
-SessionNoKeywordGen.new(ARGV[0], $amqp, true).generate()
-SessionNoKeywordGen.new(ARGV[0], $amqp, false).generate()
-SessionGen.new(ARGV[0], $amqp, true).generate()
-SessionGen.new(ARGV[0], $amqp, false).generate()
+SessionNoKeywordGen.new($outdir, $amqp, true).generate()
+SessionNoKeywordGen.new($outdir, $amqp, false).generate()
+SessionGen.new($outdir, $amqp, true).generate()
+SessionGen.new($outdir, $amqp, false).generate()
diff --git a/qpid/cpp/rubygen/framing.0-10/constants.rb b/qpid/cpp/rubygen/framing.0-10/constants.rb
index ea74c82f73..5c1c1047f7 100755
--- a/qpid/cpp/rubygen/framing.0-10/constants.rb
+++ b/qpid/cpp/rubygen/framing.0-10/constants.rb
@@ -29,7 +29,8 @@ class ConstantsGen < CppGen
end
def constants_h()
- h_file("#{@dir}/constants") {
+ public_api("#{@dir}/constants.h")
+ h_file("#{@dir}/constants.h") {
namespace(@namespace) {
# Constants for class/method names.
scope("enum AmqpConstant {","};") {
@@ -50,6 +51,7 @@ class ConstantsGen < CppGen
def typecode_h_cpp
path="#{@dir}/TypeCode"
+ public_api(path+".h")
h_file(path) {
include("<iosfwd>")
include("\"qpid/sys/IntegerTypes.h\"")
@@ -104,7 +106,8 @@ EOS
end
def enum_h()
- h_file("#{@dir}/enum") {
+ public_api("#{@dir}/enum.h")
+ h_file("#{@dir}/enum.h") {
# Constants for enum domains.
namespace(@namespace) {
@amqp.domains.each { |d| declare_enum(d.enum) if d.enum }
@@ -161,7 +164,8 @@ EOS
end
def reply_exceptions_h()
- h_file("#{@dir}/reply_exceptions") {
+ public_api("#{@dir}/reply_exceptions.h")
+ h_file("#{@dir}/reply_exceptions.h") {
include "qpid/Exception"
include "qpid/sys/ExceptionHolder"
include "qpid/framing/enum"
diff --git a/qpid/cpp/rubygen/framing.0-10/frame_body_lists.rb b/qpid/cpp/rubygen/framing.0-10/frame_body_lists.rb
index 541fddbca2..4f1b976032 100644
--- a/qpid/cpp/rubygen/framing.0-10/frame_body_lists.rb
+++ b/qpid/cpp/rubygen/framing.0-10/frame_body_lists.rb
@@ -44,6 +44,6 @@ EOS
end
end
-FrameBodyListsGen.new(ARGV[0], $amqp).generate;
+FrameBodyListsGen.new($outdir, $amqp).generate;
diff --git a/qpid/cpp/rubygen/framing.0-10/structs.rb b/qpid/cpp/rubygen/framing.0-10/structs.rb
index 823d062dd5..809e453381 100755
--- a/qpid/cpp/rubygen/framing.0-10/structs.rb
+++ b/qpid/cpp/rubygen/framing.0-10/structs.rb
@@ -383,7 +383,8 @@ EOS
end
end
- h_file("qpid/framing/#{classname}.h") {
+ public_api("qpid/framing/#{classname}.h")
+ h_file("qpid/framing/#{classname}.h") {
if (s.kind_of? AmqpMethod)
gen <<EOS
#include "qpid/framing/AMQMethodBody.h"
@@ -604,9 +605,10 @@ EOS
structs.each { |s| define_struct(s) }
@amqp.methods_.each { |m| define_struct(m) }
#generate a single include file containing the list of structs for convenience
+ public_api("qpid/framing/amqp_structs.h")
h_file("qpid/framing/amqp_structs.h") { structs.each { |s| genl "#include \"qpid/framing/#{s.cppname}.h\"" } }
end
end
-StructGen.new(ARGV[0], $amqp).generate()
+StructGen.new($outdir, $amqp).generate()
diff --git a/qpid/cpp/rubygen/generate b/qpid/cpp/rubygen/generate
index 0ce1fec46a..89b9b99520 100755
--- a/qpid/cpp/rubygen/generate
+++ b/qpid/cpp/rubygen/generate
@@ -25,15 +25,14 @@ require 'amqpgen'
#
if ARGV.size < 3
puts <<EOS
-Usage: #{ARGV[0]} OUTDIR SPEC.xml [ ... ] TEMPLATE.rb [ ... ]
-or: #{ARGV[0]} OUTDIR SPEC.xml [ ... ] all [ makefragment.mk |
- makefragment.cmake ]
+Usage: #{ARGV[0]} SRCDIR APIDIR SPEC.xml [ ... ] TEMPLATE.rb [ ... ]
+or: #{ARGV[0]} SRCDIR APIDIR SPEC.xml [ ... ] all [ makefragment.mk | makefragment.cmake ]
Parse all SPEC.xml files to create an AMQP model, run each TEMPLATE
-putting the resulting files under OUTDIR. Prints a list of files
-generated to standard output.
+putting the resulting files under SRCDIR, public API files in APIdir.
+Prints a list of files generated to standard output.
-If OUTDIR is '-' then just prints file list without generating files.
+If SRCDIR and APIDIR are '-' then just prints file list without generating files.
EOS
exit 1
end
@@ -58,15 +57,16 @@ gendir=File.dirname(__FILE__)
if ARGV.any? { |arg| arg=="all" }
templates=Dir["#{gendir}/*/*.rb"]
else
- templates=ARGV.grep(/\.rb$/)
+templates=ARGV.grep(/\.rb$/)
ARGV.each { |arg|
d=File.join gendir,arg
templates += Dir["#{d}/*.rb"] if File.directory? d
}
end
-$outdir=ARGV[0]
+$outdir=[ ARGV[0], ARGV[1] ]
$models=parse_specs(ARGV.grep(/\.xml$/))
+
templates.each { |t|
ver=Pathname.new(t).dirname.basename.to_s.split('.')[-1]
$amqp=$models[ver]
@@ -84,17 +84,18 @@ def make_continue(lines) lines.join(" \\\n "); end
makefile=ARGV.grep(/.mk$/)[0]
cmakefile=ARGV.grep(/.cmake$/)[0]
if cmakefile || makefile
+ srcdir,apidir=$outdir
dir=Dir.getwd
Dir.chdir File.dirname(__FILE__)
generator_files=Dir["**/*.rb"] << File.basename(__FILE__)
Dir.chdir dir
rgen_generator=generator_files.map{ |f| "$(rgen_dir)/#{f}" }
cmake_rgen_generator=generator_files.map{ |f| "${rgen_dir}/#{f}" }
- rgen_srcs=GenFiles.get.map{ |f| "#{$outdir}/#{f}" }
+ rgen_srcs=GenFiles.get.map{ |f| "#{GenFiles.public_api?(f) ? apidir : srcdir}/#{f}" }
rgen_subdirs={}
rgen_srcs.each { |src|
- if src.match(%r{#{$outdir}/qpid/([^/]+)/})
- subdir=$1
+ if src.match(%r{(#{srcdir}|#{apidir})/qpid/([^/]+)/})
+ subdir=$2
rgen_subdirs[subdir] ||= []
rgen_subdirs[subdir] << src
end
diff --git a/qpid/cpp/src/CMakeLists.txt b/qpid/cpp/src/CMakeLists.txt
index 65a8e66a98..3739e22cd1 100644
--- a/qpid/cpp/src/CMakeLists.txt
+++ b/qpid/cpp/src/CMakeLists.txt
@@ -67,7 +67,7 @@ if (EXISTS ${AMQP_SPEC})
endforeach (spec_file ${specs})
if (regen_amqp)
message(STATUS "Regenerating AMQP protocol sources")
-execute_process(COMMAND ${RUBY_EXECUTABLE} -I ${rgen_dir} ${rgen_dir}/generate ${CMAKE_CURRENT_BINARY_DIR}/gen ${specs} all rubygen.cmake
+execute_process(COMMAND ${RUBY_EXECUTABLE} -I ${rgen_dir} ${rgen_dir}/generate ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/../include ${specs} all rubygen.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
else (regen_amqp)
message(STATUS "No need to generate AMQP protocol sources")
@@ -86,7 +86,7 @@ execute_process(COMMAND ${RUBY_EXECUTABLE} -I ${rgen_dir} ${rgen_dir}/generate $
endforeach (spec_file ${mgmt_specs})
if (regen_mgmt)
message(STATUS "Regenerating Qpid Management Framework sources")
-execute_process(COMMAND ${PYTHON_EXECUTABLE} ${mgen_dir}/qmf-gen -c managementgen.cmake -b -q -o ${CMAKE_CURRENT_BINARY_DIR}/gen/qmf ${mgmt_specs}
+execute_process(COMMAND ${PYTHON_EXECUTABLE} ${mgen_dir}/qmf-gen -c managementgen.cmake -b -q -o ${CMAKE_CURRENT_BINARY_DIR}/qmf ${mgmt_specs}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
else (regen_mgmt)
message(STATUS "No need to generate Qpid Management Framework sources")
@@ -194,9 +194,10 @@ endif (MSVC)
include_directories( ${Boost_INCLUDE_DIR} )
-include_directories( . )
-include_directories( ../include )
-include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/gen)
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR} )
+include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/../include )
+include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
+include_directories( ${CMAKE_CURRENT_BINARY_DIR}/../include )
link_directories( ${Boost_LIBRARY_DIRS} )
diff --git a/qpid/cpp/src/Makefile.am b/qpid/cpp/src/Makefile.am
index 1b1b9aadfb..1d5e52408a 100644
--- a/qpid/cpp/src/Makefile.am
+++ b/qpid/cpp/src/Makefile.am
@@ -82,7 +82,7 @@ specs=$(amqp_0_10_xml) $(top_srcdir)/xml/cluster.xml
# Ruby generator.
rgen_dir=$(top_srcdir)/rubygen
-rgen_cmd=ruby -I $(rgen_dir) $(rgen_dir)/generate gen $(specs) all $(srcdir)/rubygen.mk
+rgen_cmd=ruby -I $(rgen_dir) $(rgen_dir)/generate . ../include $(specs) all $(srcdir)/rubygen.mk
$(rgen_srcs) $(srcdir)/rubygen.mk: rgen.timestamp
rgen.timestamp: $(rgen_generator) $(specs)
@@ -91,7 +91,7 @@ $(rgen_generator):
# Management generator.
mgen_dir=$(top_srcdir)/managementgen
-mgen_cmd=$(mgen_dir)/qmf-gen -m $(srcdir)/managementgen.mk -q -b -o gen/qmf \
+mgen_cmd=$(mgen_dir)/qmf-gen -m $(srcdir)/managementgen.mk -q -b -o qmf \
$(top_srcdir)/../specs/management-schema.xml \
$(srcdir)/qpid/acl/management-schema.xml \
$(srcdir)/qpid/cluster/management-schema.xml
@@ -109,7 +109,7 @@ include $(srcdir)/managementgen.mk
## Compiler flags
AM_CXXFLAGS = $(WARNING_CFLAGS)
AM_LDFLAGS = -version-info $(LIBTOOL_VERSION_INFO_ARG)
-INCLUDES = -Igen -I$(srcdir)/gen -I$(top_srcdir)/include
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(srcdir) -I=$(builddir)
#
# Destination for intalled programs and tests defined here
diff --git a/qpid/cpp/src/qpid/broker/LinkRegistry.cpp b/qpid/cpp/src/qpid/broker/LinkRegistry.cpp
index fce3a88cd1..3672f71515 100644
--- a/qpid/cpp/src/qpid/broker/LinkRegistry.cpp
+++ b/qpid/cpp/src/qpid/broker/LinkRegistry.cpp
@@ -36,8 +36,21 @@ namespace _qmf = qmf::org::apache::qpid::broker;
#define LINK_MAINT_INTERVAL 2
-LinkRegistry::LinkRegistry (Broker* _broker) : broker(_broker), parent(0), store(0), passive(false), passiveChanged(false),
- realm(broker ? broker->getOptions().realm : "")
+// TODO: This constructor is only used by the store unit tests -
+// That probably indicates that LinkRegistry isn't correctly
+// factored: The persistence element and maintenance element
+// should be factored separately
+LinkRegistry::LinkRegistry () :
+ broker(0),
+ parent(0), store(0), passive(false), passiveChanged(false),
+ realm("")
+{
+}
+
+LinkRegistry::LinkRegistry (Broker* _broker) :
+ broker(_broker),
+ parent(0), store(0), passive(false), passiveChanged(false),
+ realm(broker->getOptions().realm)
{
timer.add (intrusive_ptr<TimerTask> (new Periodic(*this)));
}
diff --git a/qpid/cpp/src/qpid/broker/LinkRegistry.h b/qpid/cpp/src/qpid/broker/LinkRegistry.h
index bfdf0d491b..8d1a252f54 100644
--- a/qpid/cpp/src/qpid/broker/LinkRegistry.h
+++ b/qpid/cpp/src/qpid/broker/LinkRegistry.h
@@ -75,6 +75,7 @@ namespace broker {
static std::string createKey(const TcpAddress& address);
public:
+ LinkRegistry (); // Only used in store tests
LinkRegistry (Broker* _broker);
std::pair<boost::shared_ptr<Link>, bool>
declare(std::string& host,
diff --git a/qpid/cpp/src/qpid/cluster/Cluster.cpp b/qpid/cpp/src/qpid/cluster/Cluster.cpp
index 3d46797679..c5ac2ecfdc 100644
--- a/qpid/cpp/src/qpid/cluster/Cluster.cpp
+++ b/qpid/cpp/src/qpid/cluster/Cluster.cpp
@@ -228,7 +228,8 @@ Cluster::~Cluster() {
void Cluster::initialize() {
if (myUrl.empty())
myUrl = Url::getIpAddressesUrl(broker.getPort(broker::Broker::TCP_TRANSPORT));
- QPID_LOG(notice, *this << " joining cluster " << name << " with url=" << myUrl);
+ QPID_LOG(notice, *this << " member " << self << " joining "
+ << name << " with url=" << myUrl);
broker.getKnownBrokers = boost::bind(&Cluster::getUrls, this);
broker.setExpiryPolicy(expiryPolicy);
dispatcher.start();
@@ -240,7 +241,7 @@ void Cluster::initialize() {
// Called in connection thread to insert a client connection.
void Cluster::addLocalConnection(const boost::intrusive_ptr<Connection>& c) {
- QPID_LOG(debug, *this << " add local connection " << c->getId());
+ QPID_LOG(info, *this << " new local connection " << c->getId());
localConnections.insert(c);
assert(c->getId().getMember() == self);
// Announce the connection to the cluster.
@@ -250,7 +251,7 @@ void Cluster::addLocalConnection(const boost::intrusive_ptr<Connection>& c) {
// Called in connection thread to insert an updated shadow connection.
void Cluster::addShadowConnection(const boost::intrusive_ptr<Connection>& c) {
- QPID_LOG(debug, *this << " add shadow connection " << c->getId());
+ QPID_LOG(info, *this << " new shadow connection " << c->getId());
// Safe to use connections here because we're pre-catchup, either
// discarding or stalled, so deliveredFrame is not processing any
// connection events.
@@ -267,7 +268,7 @@ void Cluster::erase(const ConnectionId& id) {
// Called by Connection::deliverClose() in deliverFrameQueue thread.
void Cluster::erase(const ConnectionId& id, Lock&) {
- QPID_LOG(debug, *this << " erasing connection " << id);
+ QPID_LOG(info, *this << " connection closed " << id);
connections.erase(id);
decoder.erase(id);
}
@@ -357,7 +358,7 @@ void Cluster::deliveredEvent(const Event& e) {
// This preserves the connection decoder fragments for an update.
const ClusterUpdateOfferBody* offer = castUpdateOffer(ef.frame.getBody());
if (offer) {
- QPID_LOG(debug, *this << " stall for update offer from " << e.getMemberId()
+ QPID_LOG(info, *this << " stall for update offer from " << e.getMemberId()
<< " to " << MemberId(offer->getUpdatee()));
deliverEventQueue.stop();
}
@@ -440,7 +441,7 @@ void Cluster::processFrame(const EventFrame& e, Lock& l) {
connection->deliveredFrame(e);
}
else
- QPID_LOG(debug, *this << " DROP (no connection): " << e);
+ QPID_LOG(trace, *this << " DROP (no connection): " << e);
}
else // Drop connection frames while state < CATCHUP
QPID_LOG(trace, *this << " DROP (joining): " << e);
@@ -517,7 +518,7 @@ void Cluster::configChange (
broker.setRecovery(nCurrent == 1);
initialized = true;
}
- QPID_LOG(debug, *this << " config change: " << AddrList(current, nCurrent)
+ QPID_LOG(notice, *this << " membership change: " << AddrList(current, nCurrent)
<< AddrList(left, nLeft, "left: "));
std::string addresses;
for (cpg_address* p = current; p < current+nCurrent; ++p)
@@ -553,7 +554,6 @@ void Cluster::configChange(const MemberId&, const std::string& current, Lock& l)
}
else { // Joining established group.
state = JOINER;
- QPID_LOG(info, *this << " joining cluster: " << map);
mcast.mcastControl(ClusterUpdateRequestBody(ProtocolVersion(), myUrl.str()), self);
elders = map.getAlive();
elders.erase(self);
@@ -603,7 +603,7 @@ void Cluster::ready(const MemberId& id, const std::string& url, Lock& l) {
memberUpdate(l);
if (state == CATCHUP && id == self) {
setReady(l);
- QPID_LOG(notice, *this << " caught up, active cluster member");
+ QPID_LOG(notice, *this << " caught up, active cluster member.");
}
}
@@ -635,7 +635,7 @@ void Cluster::updateOffer(const MemberId& updater, uint64_t updateeInt, const Uu
assert(state == JOINER);
setClusterId(uuid, l);
state = UPDATEE;
- QPID_LOG(info, *this << " receiving update from " << updater);
+ QPID_LOG(notice, *this << " receiving update from " << updater);
checkUpdateIn(l);
}
else {
@@ -662,7 +662,6 @@ void Cluster::retractOffer(const MemberId& updater, uint64_t updateeInt, Lock& l
if (updater == self) {
assert(state == OFFER);
if (url) { // My offer was first.
- QPID_LOG(info, *this << " retracting offer to " << updatee);
if (updateThread.id())
updateThread.join(); // Join the previous updateThread to avoid leaks.
updateThread = Thread(new RetractClient(*url, connectionSettings(settings)));
@@ -679,7 +678,7 @@ void Cluster::updateStart(const MemberId& updatee, const Url& url, Lock& l) {
if (state == LEFT) return;
assert(state == OFFER);
state = UPDATER;
- QPID_LOG(info, *this << " sending update to " << updatee << " at " << url);
+ QPID_LOG(notice, *this << " sending update to " << updatee << " at " << url);
if (updateThread.id())
updateThread.join(); // Join the previous updateThread to avoid leaks.
updateThread = Thread(
@@ -711,13 +710,13 @@ void Cluster::checkUpdateIn(Lock&) {
mcast.mcastControl(ClusterReadyBody(ProtocolVersion(), myUrl.str()), self);
state = CATCHUP;
discarding = false; // ok to set, we're stalled for update.
- QPID_LOG(info, *this << " received update, starting catch-up");
+ QPID_LOG(notice, *this << " update complete, starting catch-up, members: " << map);
deliverEventQueue.start();
}
else if (updateRetracted) { // Update was retracted, request another update
updateRetracted = false;
state = JOINER;
- QPID_LOG(info, *this << " re-try joining after retracted update");
+ QPID_LOG(notice, *this << " update retracted, sending new update request");
mcast.mcastControl(ClusterUpdateRequestBody(ProtocolVersion(), myUrl.str()), self);
deliverEventQueue.start();
}
@@ -729,7 +728,7 @@ void Cluster::updateOutDone() {
}
void Cluster::updateOutDone(Lock& l) {
- QPID_LOG(info, *this << " sent update");
+ QPID_LOG(notice, *this << " update sent");
assert(state == UPDATER);
state = READY;
mcast.release();
@@ -834,9 +833,9 @@ std::ostream& operator<<(std::ostream& o, const Cluster& cluster) {
"INIT", "JOINER", "UPDATEE", "CATCHUP", "READY", "OFFER", "UPDATER", "LEFT"
};
assert(sizeof(STATE)/sizeof(*STATE) == Cluster::LEFT+1);
- o << cluster.self << "(" << STATE[cluster.state];
+ o << "cluster:" << STATE[cluster.state];
if (cluster.settings.checkErrors && cluster.error.isUnresolved()) o << "/error";
- return o << ")";
+ return o;
}
MemberId Cluster::getId() const {
@@ -863,7 +862,7 @@ void Cluster::setClusterId(const Uuid& uuid, Lock&) {
mgmtObject->set_clusterID(clusterId.str());
mgmtObject->set_memberID(stream.str());
}
- QPID_LOG(debug, *this << " cluster-id = " << clusterId);
+ QPID_LOG(debug, *this << " cluster-uuid = " << clusterId);
}
void Cluster::messageExpired(const MemberId&, uint64_t id, Lock&) {
@@ -875,7 +874,7 @@ void Cluster::errorCheck(const MemberId&, uint8_t type, uint64_t frameSeq, Lock&
// ErrorCheck class) then we have processed succesfully past the
// point of the error.
if (state >= CATCHUP && type != ERROR_TYPE_NONE) {
- QPID_LOG(debug, *this << " error " << frameSeq << " did not occur locally.");
+ QPID_LOG(notice, *this << " error " << frameSeq << " did not occur locally.");
mcast.mcastControl(
ClusterErrorCheckBody(ProtocolVersion(), ERROR_TYPE_NONE, frameSeq), self);
}
diff --git a/qpid/cpp/src/qpid/cluster/Connection.cpp b/qpid/cpp/src/qpid/cluster/Connection.cpp
index a898cb5059..03a06e1c09 100644
--- a/qpid/cpp/src/qpid/cluster/Connection.cpp
+++ b/qpid/cpp/src/qpid/cluster/Connection.cpp
@@ -439,13 +439,13 @@ void Connection::accumulatedAck(const qpid::framing::SequenceSet& s) {
void Connection::exchange(const std::string& encoded) {
Buffer buf(const_cast<char*>(encoded.data()), encoded.size());
broker::Exchange::shared_ptr ex = broker::Exchange::decode(cluster.getBroker().getExchanges(), buf);
- QPID_LOG(debug, cluster << " decoded exchange " << ex->getName());
+ QPID_LOG(debug, cluster << " updated exchange " << ex->getName());
}
void Connection::queue(const std::string& encoded) {
Buffer buf(const_cast<char*>(encoded.data()), encoded.size());
broker::Queue::shared_ptr q = broker::Queue::decode(cluster.getBroker().getQueues(), buf);
- QPID_LOG(debug, cluster << " decoded queue " << q->getName());
+ QPID_LOG(debug, cluster << " updated queue " << q->getName());
}
void Connection::sessionError(uint16_t , const std::string& msg) {
diff --git a/qpid/cpp/src/qpid/cluster/ErrorCheck.cpp b/qpid/cpp/src/qpid/cluster/ErrorCheck.cpp
index d498b252f5..0a16d492e4 100644
--- a/qpid/cpp/src/qpid/cluster/ErrorCheck.cpp
+++ b/qpid/cpp/src/qpid/cluster/ErrorCheck.cpp
@@ -57,7 +57,7 @@ void ErrorCheck::error(
QPID_LOG(error, cluster
<< (type == ERROR_TYPE_SESSION ? " channel" : " connection")
<< " error " << frameSeq << " on " << c << ": " << msg
- << " (unresolved: " << unresolved << ")");
+ << " must be resolved with: " << unresolved);
mcast.mcastControl(
ClusterErrorCheckBody(ProtocolVersion(), type, frameSeq), c.getId().getMember());
// If there are already frames queued up by a previous error, review
@@ -87,8 +87,8 @@ ErrorCheck::FrameQueue::iterator ErrorCheck::review(const FrameQueue::iterator&
throw Exception("Aborted by failure that did not occur on all replicas");
}
else { // his error is worse/same as mine.
- QPID_LOG(debug, cluster << " error " << frameSeq
- << " outcome agrees with " << i->getMemberId());
+ QPID_LOG(notice, cluster << " error " << frameSeq
+ << " resolved with " << i->getMemberId());
unresolved.erase(i->getMemberId());
checkResolved();
}
@@ -117,10 +117,11 @@ ErrorCheck::FrameQueue::iterator ErrorCheck::review(const FrameQueue::iterator&
void ErrorCheck::checkResolved() {
if (unresolved.empty()) { // No more potentially conflicted members, we're clear.
type = ERROR_TYPE_NONE;
- QPID_LOG(debug, cluster << " Error " << frameSeq << " resolved.");
+ QPID_LOG(notice, cluster << " error " << frameSeq << " resolved.");
}
else
- QPID_LOG(debug, cluster << " Error " << frameSeq << " still unresolved: " << unresolved);
+ QPID_LOG(notice, cluster << " error " << frameSeq
+ << " must be resolved with " << unresolved);
}
EventFrame ErrorCheck::getNext() {
diff --git a/qpid/cpp/src/qpid/cluster/Quorum_cman.cpp b/qpid/cpp/src/qpid/cluster/Quorum_cman.cpp
index 0bf29f8042..32ed5c1d91 100644
--- a/qpid/cpp/src/qpid/cluster/Quorum_cman.cpp
+++ b/qpid/cpp/src/qpid/cluster/Quorum_cman.cpp
@@ -31,7 +31,6 @@ Quorum::Quorum() : enable(false), cman(0) {}
Quorum::~Quorum() { if (cman) cman_finish(cman); }
void Quorum::init() {
- QPID_LOG(info, "Waiting for cluster quorum");
enable = true;
cman = cman_init(0);
if (cman == 0) throw ErrnoException("Can't connect to cman service");
diff --git a/qpid/cpp/src/qpid/cluster/UpdateClient.cpp b/qpid/cpp/src/qpid/cluster/UpdateClient.cpp
index 143db20ac0..ac418ffbb6 100644
--- a/qpid/cpp/src/qpid/cluster/UpdateClient.cpp
+++ b/qpid/cpp/src/qpid/cluster/UpdateClient.cpp
@@ -124,7 +124,8 @@ void UpdateClient::run() {
}
void UpdateClient::update() {
- QPID_LOG(debug, updaterId << " updating state to " << updateeId << " at " << updateeUrl);
+ QPID_LOG(debug, updaterId << " updating state to " << updateeId
+ << " at " << updateeUrl);
Broker& b = updaterBroker;
b.getExchanges().eachExchange(boost::bind(&UpdateClient::updateExchange, this, _1));
b.getQueues().eachQueue(boost::bind(&UpdateClient::updateNonExclusiveQueue, this, _1));
diff --git a/qpid/cpp/src/qpid/replication/ReplicationExchange.cpp b/qpid/cpp/src/qpid/replication/ReplicationExchange.cpp
index d3ead7501f..c0cc36efe3 100644
--- a/qpid/cpp/src/qpid/replication/ReplicationExchange.cpp
+++ b/qpid/cpp/src/qpid/replication/ReplicationExchange.cpp
@@ -42,12 +42,18 @@ ReplicationExchange::ReplicationExchange(const std::string& name, bool durable,
: Exchange(name, durable, _args, parent, broker), queues(qr), sequence(args.getAsInt64(SEQUENCE_VALUE)), init(false)
{
args.setInt64(SEQUENCE_VALUE, sequence);
+ if (mgmtExchange != 0)
+ mgmtExchange->set_type(typeName);
}
std::string ReplicationExchange::getType() const { return typeName; }
void ReplicationExchange::route(Deliverable& msg, const std::string& /*routingKey*/, const FieldTable* args)
{
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgReceives();
+ mgmtExchange->inc_byteReceives(msg.contentSize());
+ }
if (args) {
int eventType = args->getAsInt(REPLICATION_EVENT_TYPE);
if (eventType) {
@@ -57,7 +63,7 @@ void ReplicationExchange::route(Deliverable& msg, const std::string& /*routingKe
handleEnqueueEvent(args, msg);
return;
case DEQUEUE:
- handleDequeueEvent(args);
+ handleDequeueEvent(args, msg);
return;
default:
throw IllegalArgumentException(QPID_MSG("Illegal value for " << REPLICATION_EVENT_TYPE << ": " << eventType));
@@ -65,6 +71,10 @@ void ReplicationExchange::route(Deliverable& msg, const std::string& /*routingKe
}
} else {
QPID_LOG(warning, "Dropping unexpected message with no headers");
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgDrops();
+ mgmtExchange->inc_byteDrops(msg.contentSize());
+ }
}
}
@@ -79,12 +89,20 @@ void ReplicationExchange::handleEnqueueEvent(const FieldTable* args, Deliverable
headers.erase(REPLICATION_EVENT_TYPE);
msg.deliverTo(queue);
QPID_LOG(debug, "Enqueued replicated message onto " << queueName);
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgRoutes();
+ mgmtExchange->inc_byteRoutes( msg.contentSize());
+ }
} else {
QPID_LOG(error, "Cannot enqueue replicated message. Queue " << queueName << " does not exist");
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgDrops();
+ mgmtExchange->inc_byteDrops(msg.contentSize());
+ }
}
}
-void ReplicationExchange::handleDequeueEvent(const FieldTable* args)
+void ReplicationExchange::handleDequeueEvent(const FieldTable* args, Deliverable& msg)
{
std::string queueName = args->getAsString(REPLICATION_TARGET_QUEUE);
Queue::shared_ptr queue = queues.find(queueName);
@@ -94,11 +112,23 @@ void ReplicationExchange::handleDequeueEvent(const FieldTable* args)
if (queue->acquireMessageAt(position, dequeued)) {
queue->dequeue(0, dequeued);
QPID_LOG(debug, "Processed replicated 'dequeue' event from " << queueName << " at position " << position);
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgRoutes();
+ mgmtExchange->inc_byteRoutes(msg.contentSize());
+ }
} else {
QPID_LOG(warning, "Could not acquire message " << position << " from " << queueName);
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgDrops();
+ mgmtExchange->inc_byteDrops(msg.contentSize());
+ }
}
} else {
QPID_LOG(error, "Cannot process replicated 'dequeue' event. Queue " << queueName << " does not exist");
+ if (mgmtExchange != 0) {
+ mgmtExchange->inc_msgDrops();
+ mgmtExchange->inc_byteDrops(msg.contentSize());
+ }
}
}
diff --git a/qpid/cpp/src/qpid/replication/ReplicationExchange.h b/qpid/cpp/src/qpid/replication/ReplicationExchange.h
index ab36704e06..f0252448f9 100644
--- a/qpid/cpp/src/qpid/replication/ReplicationExchange.h
+++ b/qpid/cpp/src/qpid/replication/ReplicationExchange.h
@@ -59,7 +59,7 @@ class ReplicationExchange : public qpid::broker::Exchange
bool isDuplicate(const qpid::framing::FieldTable* args);
void handleEnqueueEvent(const qpid::framing::FieldTable* args, qpid::broker::Deliverable& msg);
- void handleDequeueEvent(const qpid::framing::FieldTable* args);
+ void handleDequeueEvent(const qpid::framing::FieldTable* args, qpid::broker::Deliverable& msg);
void encode(framing::Buffer& buffer) const;
};
}} // namespace qpid::replication
diff --git a/qpid/cpp/src/tests/.valgrind.supp b/qpid/cpp/src/tests/.valgrind.supp
index 9c4632ba8c..14fe8c18e9 100644
--- a/qpid/cpp/src/tests/.valgrind.supp
+++ b/qpid/cpp/src/tests/.valgrind.supp
@@ -236,3 +236,20 @@
fun:_sasl_load_plugins
fun:sasl_client_init
}
+
+{
+ Seems like a use after delete issue in boost unit_test
+ Memcheck:Addr8
+ fun:_ZN5boost9unit_test14framework_implD1Ev
+ fun:exit
+ fun:(below main)
+}
+
+{
+ Seems like a use after delete issue in boost unit_test
+ Memcheck:Addr4
+ fun:_ZN5boost9unit_test14framework_implD1Ev
+ fun:exit
+ fun:(below main)
+}
+
diff --git a/qpid/cpp/src/tests/Makefile.am b/qpid/cpp/src/tests/Makefile.am
index 9fda235481..16cdfcbd72 100644
--- a/qpid/cpp/src/tests/Makefile.am
+++ b/qpid/cpp/src/tests/Makefile.am
@@ -18,7 +18,8 @@
#
AM_CXXFLAGS = $(WARNING_CFLAGS) -DBOOST_TEST_DYN_LINK
-INCLUDES = -I$(top_srcdir)/include -I$(srcdir)/.. -I$(srcdir)/../gen -I$(top_builddir)/src/gen
+INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_srcdir)/src -I$(top_builddir)/src
+PUBLIC_INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include # Use public API only
abs_builddir=@abs_builddir@
extra_libs =
@@ -160,65 +161,81 @@ sender_LDADD = $(lib_client)
#
check_PROGRAMS+=perftest
perftest_SOURCES=perftest.cpp test_tools.h TestOptions.h ConnectionOptions.h
+perftest_INCLUDES=$(PUBLIC_INCLUDES)
perftest_LDADD=$(lib_client)
check_PROGRAMS+=txtest
+txtest_INCLUDES=$(PUBLIC_INCLUDES)
txtest_SOURCES=txtest.cpp TestOptions.h ConnectionOptions.h
txtest_LDADD=$(lib_client)
check_PROGRAMS+=latencytest
+latencytest_INCLUDES=$(PUBLIC_INCLUDES)
latencytest_SOURCES=latencytest.cpp TestOptions.h ConnectionOptions.h
latencytest_LDADD=$(lib_client)
check_PROGRAMS+=echotest
+echotest_INCLUDES=$(PUBLIC_INCLUDES)
echotest_SOURCES=echotest.cpp TestOptions.h ConnectionOptions.h
echotest_LDADD=$(lib_client)
check_PROGRAMS+=client_test
+client_test_INCLUDES=$(PUBLIC_INCLUDES)
client_test_SOURCES=client_test.cpp TestOptions.h ConnectionOptions.h
client_test_LDADD=$(lib_client)
check_PROGRAMS+=topic_listener
+topic_listener_INCLUDES=$(PUBLIC_INCLUDES)
topic_listener_SOURCES=topic_listener.cpp TestOptions.h ConnectionOptions.h
topic_listener_LDADD=$(lib_client)
check_PROGRAMS+=topic_publisher
+topic_publisher_INCLUDES=$(PUBLIC_INCLUDES)
topic_publisher_SOURCES=topic_publisher.cpp TestOptions.h ConnectionOptions.h
topic_publisher_LDADD=$(lib_client)
check_PROGRAMS+=publish
+publish_INCLUDES=$(PUBLIC_INCLUDES)
publish_SOURCES=publish.cpp TestOptions.h ConnectionOptions.h
publish_LDADD=$(lib_client)
check_PROGRAMS+=consume
+consume_INCLUDES=$(PUBLIC_INCLUDES)
consume_SOURCES=consume.cpp TestOptions.h ConnectionOptions.h
consume_LDADD=$(lib_client)
check_PROGRAMS+=header_test
+header_test_INCLUDES=$(PUBLIC_INCLUDES)
header_test_SOURCES=header_test.cpp TestOptions.h ConnectionOptions.h
header_test_LDADD=$(lib_client)
check_PROGRAMS+=failover_soak
+failover_soak_INCLUDES=$(PUBLIC_INCLUDES)
failover_soak_SOURCES=failover_soak.cpp ForkedBroker.h ForkedBroker.cpp
failover_soak_LDADD=$(lib_client) $(lib_broker)
check_PROGRAMS+=declare_queues
+declare_queues_INCLUDES=$(PUBLIC_INCLUDES)
declare_queues_SOURCES=declare_queues.cpp
declare_queues_LDADD=$(lib_client)
check_PROGRAMS+=replaying_sender
+replaying_sender_INCLUDES=$(PUBLIC_INCLUDES)
replaying_sender_SOURCES=replaying_sender.cpp
replaying_sender_LDADD=$(lib_client)
check_PROGRAMS+=resuming_receiver
+resuming_receiver_INCLUDES=$(PUBLIC_INCLUDES)
resuming_receiver_SOURCES=resuming_receiver.cpp
resuming_receiver_LDADD=$(lib_client)
check_PROGRAMS+=txshift
+txshift_INCLUDES=$(PUBLIC_INCLUDES)
txshift_SOURCES=txshift.cpp TestOptions.h ConnectionOptions.h
txshift_LDADD=$(lib_client)
check_PROGRAMS+=txjob
+txjob_INCLUDES=$(PUBLIC_INCLUDES)
txjob_SOURCES=txjob.cpp TestOptions.h ConnectionOptions.h
txjob_LDADD=$(lib_client)
@@ -231,6 +248,7 @@ DispatcherTest_SOURCES=DispatcherTest.cpp
DispatcherTest_LDADD=$(lib_common) $(SOCKLIBS)
check_PROGRAMS+=qpid_ping
+qpid_ping_INCLUDES=$(PUBLIC_INCLUDES)
qpid_ping_SOURCES=qpid_ping.cpp test_tools.h TestOptions.h ConnectionOptions.h
qpid_ping_LDADD=$(lib_client)
diff --git a/qpid/cpp/src/tests/latencytest.cpp b/qpid/cpp/src/tests/latencytest.cpp
index eef9d72312..e1c47eab05 100644
--- a/qpid/cpp/src/tests/latencytest.cpp
+++ b/qpid/cpp/src/tests/latencytest.cpp
@@ -281,27 +281,39 @@ void Stats::print()
double aux_avg = (totalLatency / count);
if (!opts.cumulative) {
if (!opts.csv) {
- std::cout << "Latency(ms): min=" << minLatency << ", max=" <<
+ if (count) {
+ std::cout << "Latency(ms): min=" << minLatency << ", max=" <<
maxLatency << ", avg=" << aux_avg;
+ } else {
+ std::cout << "Stalled: no samples for interval";
+ }
} else {
- std::cout << value << "," << minLatency << "," << maxLatency <<
+ if (count) {
+ std::cout << value << "," << minLatency << "," << maxLatency <<
"," << aux_avg;
+ } else {
+ std::cout << value << "," << minLatency << "," << maxLatency <<
+ ", Stalled";
+ }
}
} else {
- if (already_have_stats) {
- c_avg = (c_min + aux_avg) / 2;
- if (c_min > minLatency) c_min = minLatency;
- if (c_max < maxLatency) c_max = maxLatency;
+ if (count) {
+ if (already_have_stats) {
+ c_avg = (c_min + aux_avg) / 2;
+ if (c_min > minLatency) c_min = minLatency;
+ if (c_max < maxLatency) c_max = maxLatency;
+ } else {
+ c_avg = aux_avg;
+ c_min = minLatency;
+ c_max = maxLatency;
+ already_have_stats = true;
+ }
+ std::cout << value << "," << c_min << "," << c_max <<
+ "," << c_avg;
} else {
- c_avg = aux_avg;
- c_min = minLatency;
- c_max = maxLatency;
- already_have_stats = true;
+ std::cout << "Stalled: no samples for interval";
}
- std::cout << value << "," << c_min << "," << c_max <<
- "," << c_avg;
}
-
}
void Stats::reset()
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
index 7ce51c8918..0644bd88a8 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession_0_10.java
@@ -52,6 +52,8 @@ import static org.apache.qpid.transport.Option.*;
import javax.jms.*;
import javax.jms.IllegalStateException;
+import java.lang.ref.WeakReference;
+
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;
@@ -72,6 +74,34 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic
private static final Logger _logger = LoggerFactory.getLogger(AMQSession_0_10.class);
private static Timer timer = new Timer("ack-flusher", true);
+ private static class Flusher extends TimerTask
+ {
+
+ private WeakReference<AMQSession_0_10> session;
+ public Flusher(AMQSession_0_10 session)
+ {
+ this.session = new WeakReference<AMQSession_0_10>(session);
+ }
+
+ public void run() {
+ AMQSession_0_10 ssn = session.get();
+ if (ssn == null)
+ {
+ cancel();
+ }
+ else
+ {
+ try
+ {
+ ssn.flushAcknowledgments(true);
+ }
+ catch (Throwable t)
+ {
+ _logger.error("error flushing acks", t);
+ }
+ }
+ }
+ }
/**
@@ -129,20 +159,7 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic
if (maxAckDelay > 0)
{
- flushTask = new TimerTask()
- {
- public void run()
- {
- try
- {
- flushAcknowledgments(true);
- }
- catch (Throwable t)
- {
- _logger.error("error flushing acks", t);
- }
- }
- };
+ flushTask = new Flusher(this);
timer.schedule(flushTask, new Date(), maxAckDelay);
}
}
@@ -319,6 +336,7 @@ public class AMQSession_0_10 extends AMQSession<BasicMessageConsumer_0_10, Basic
if (flushTask != null)
{
flushTask.cancel();
+ flushTask = null;
}
flushAcknowledgments();
getQpidSession().sync();
diff --git a/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java b/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
index 68d9a13cef..1c732d31e6 100644
--- a/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
+++ b/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
@@ -41,7 +41,6 @@ import static org.apache.qpid.transport.Session.State.*;
import static org.apache.qpid.transport.util.Functions.*;
import static org.apache.qpid.util.Serial.*;
import static org.apache.qpid.util.Strings.*;
-import java.util.UUID;
/**
* Session
@@ -232,7 +231,6 @@ public class Session extends SessionInvoker
void attach()
{
initReceiver();
- name = new Binary(toUTF8(UUID.randomUUID().toString()));
sessionAttach(name.getBytes());
// XXX: when the broker and client support full session
// recovery we should use expiry as the requested timeout
diff --git a/qpid/java/doc/broker-0.5-network.dia b/qpid/java/doc/broker-0.5-network.dia
index 425ea2249e..f30decde4b 100644
--- a/qpid/java/doc/broker-0.5-network.dia
+++ b/qpid/java/doc/broker-0.5-network.dia
Binary files differ
diff --git a/qpid/java/doc/broker-0.N-network-phase-1.dia b/qpid/java/doc/broker-0.N-network-phase-1.dia
new file mode 100644
index 0000000000..4ac8213b23
--- /dev/null
+++ b/qpid/java/doc/broker-0.N-network-phase-1.dia
Binary files differ
diff --git a/qpid/java/doc/broker-0.N-state.dia b/qpid/java/doc/broker-0.N-state.dia
new file mode 100644
index 0000000000..5ef83a871b
--- /dev/null
+++ b/qpid/java/doc/broker-0.N-state.dia
Binary files differ
diff --git a/qpid/java/doc/client-0.5-network-processing.dia b/qpid/java/doc/client-0.5-network-processing.dia
index 9bb009d0ab..acacc4f462 100644
--- a/qpid/java/doc/client-0.5-network-processing.dia
+++ b/qpid/java/doc/client-0.5-network-processing.dia
Binary files differ
diff --git a/qpid/java/doc/client-0.N-network-processing.dia b/qpid/java/doc/client-0.N-network-processing.dia
new file mode 100644
index 0000000000..ed2c340969
--- /dev/null
+++ b/qpid/java/doc/client-0.N-network-processing.dia
Binary files differ
diff --git a/qpid/java/doc/common-0.N-network.dia b/qpid/java/doc/common-0.N-network.dia
new file mode 100644
index 0000000000..826ac32e5b
--- /dev/null
+++ b/qpid/java/doc/common-0.N-network.dia
Binary files differ
diff --git a/qpid/java/doc/network-driver-protocol-engine-sequence.dia b/qpid/java/doc/network-driver-protocol-engine-sequence.dia
new file mode 100644
index 0000000000..16cdc7e1dc
--- /dev/null
+++ b/qpid/java/doc/network-driver-protocol-engine-sequence.dia
Binary files differ
diff --git a/qpid/java/management/eclipse-plugin/icons/back.gif b/qpid/java/management/eclipse-plugin/icons/back.gif
new file mode 100644
index 0000000000..d3a10077a5
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/icons/back.gif
Binary files differ
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/BackAction.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/BackAction.java
new file mode 100644
index 0000000000..2998c5db53
--- /dev/null
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/actions/BackAction.java
@@ -0,0 +1,59 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.management.ui.actions;
+
+import org.apache.qpid.management.ui.jmx.MBeanUtility;
+import org.apache.qpid.management.ui.views.MBeanView;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+
+
+public class BackAction extends Action implements IWorkbenchAction
+{
+ private static final String ID = "org.apache.qpid.management.ui.actions.back";
+
+ public BackAction()
+ {
+ setText("Back");
+ setImageDescriptor(org.apache.qpid.management.ui.Activator.getImageDescriptor("/icons/back.gif"));
+ setId(ID);
+ }
+
+ public void run()
+ {
+ MBeanView mbeanview = (MBeanView)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(MBeanView.ID);
+ try
+ {
+ mbeanview.back();
+ }
+ catch (Exception ex)
+ {
+ MBeanUtility.handleException(ex);
+ }
+
+ }
+
+ public void dispose()
+ {
+
+ }
+}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
index 35d1b4a34f..ffb601fdca 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/MBeanView.java
@@ -20,6 +20,8 @@
*/
package org.apache.qpid.management.ui.views;
+import java.util.LinkedList;
+
import javax.management.MBeanServerConnection;
import static org.apache.qpid.management.ui.Constants.*;
@@ -29,6 +31,7 @@ import org.apache.qpid.management.ui.ApplicationRegistry;
import org.apache.qpid.management.ui.ManagedBean;
import org.apache.qpid.management.ui.ManagedServer;
import org.apache.qpid.management.ui.ServerRegistry;
+import org.apache.qpid.management.ui.actions.BackAction;
import org.apache.qpid.management.ui.jmx.JMXManagedObject;
import org.apache.qpid.management.ui.jmx.JMXServerRegistry;
import org.apache.qpid.management.ui.jmx.MBeanUtility;
@@ -71,6 +74,10 @@ public class MBeanView extends ViewPart
private TabFolder _typeTabFolder = null;
private TabFolder _notificationTabFolder = null;
+
+ private LinkedList<Object> _backHistory;
+ private BackAction _backAction;
+
/*
* Listener for the selection events in the navigation view
*/
@@ -90,6 +97,10 @@ public class MBeanView extends ViewPart
_mbean = null;
clearView();
+ //clear the back history, it is only for use when opening subsequent mbeans not in the nav tree
+ _backHistory.clear();
+ _backAction.setEnabled(false);
+
// If a selected node(mbean) gets unregistered from mbean server, mbeanview should
// make the tabfolber for that mbean invisible
if (_selectedNode == null)
@@ -111,22 +122,48 @@ public class MBeanView extends ViewPart
public void openMBean(ManagedBean mbean)
{
+ openMBean(mbean, false);
+ }
+
+ private void openMBean(ManagedBean mbean, boolean undoing)
+ {
if(mbean == null)
{
return;
}
+ //if an mbean is about to be opened (but not returning to using back) from the mbean view,
+ //then record the current viewed area/object as a means of back history
+ if(!undoing)
+ {
+ if(_backHistory.isEmpty())
+ {
+ //ensure the button is enabled if this is to be the first history item
+ _backAction.setEnabled(true);
+ }
+
+ if(_mbean == null)
+ {
+ //queue etc selection area is open, record the tree object
+ _backHistory.addLast(_selectedNode);
+ }
+ else
+ {
+ _backHistory.addLast(_mbean);
+ }
+ }
+
_mbean = mbean;
try
{
clearView();
+
+ setFormTitle();
showMBean(mbean);
_form.layout(true);
_form.getBody().layout(true, true);
-
- setFormTitle();
}
catch(Exception ex)
{
@@ -311,6 +348,11 @@ public class MBeanView extends ViewPart
createNotificationsTabFolder();
ViewUtility.setMBeanView(this);
+
+ _backAction = new BackAction();
+ getViewSite().getActionBars().getToolBarManager().add(_backAction);
+ _backAction.setEnabled(false);
+ _backHistory = new LinkedList<Object>();
}
private void refreshTab(TabItem tab)
@@ -433,10 +475,12 @@ public class MBeanView extends ViewPart
public void mbeanUnregistered(ManagedBean mbean)
{
- //if the mbean is actually open, clear the view
+ //if the mbean is actually open, clear the view and empty the Back history
if(mbean == _mbean)
{
clearView();
+ _backHistory.clear();
+ _backAction.setEnabled(false);
ViewUtility.popupInfoMessage("MBean Unregistered",
"The open MBean was unregistered from the server.");
}
@@ -502,4 +546,45 @@ public class MBeanView extends ViewPart
IActionBars bars = getViewSite().getActionBars();
bars.getStatusLineManager().setMessage(message);
}
+
+ public void back() throws Exception
+ {
+ if(_backHistory.isEmpty())
+ {
+ return;
+ }
+
+ Object previous = _backHistory.removeLast();
+ if(_backHistory.isEmpty())
+ {
+ //if this is the last history item, disable the action button
+ _backAction.setEnabled(false);
+ }
+
+ if(previous instanceof ManagedBean)
+ {
+ openMBean((ManagedBean)previous, true);
+ }
+ else if (previous instanceof TreeObject)
+ {
+ _mbean = null;
+ clearView();
+ setFormTitle();
+
+ TreeObject node = (TreeObject) previous;
+ String mbeanType = node.getType();
+
+ if (NODE_TYPE_TYPEINSTANCE.equals(mbeanType))
+ {
+ generateTypeTabFolder();
+ }
+ else if (NODE_TYPE_MBEANTYPE.equals(mbeanType))
+ {
+ showTypeTabFolder(node.getName());
+ }
+ }
+
+ _form.layout(true);
+ _form.getBody().layout(true, true);
+ }
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
index ddd5b0f451..eb34f6c51c 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/ViewUtility.java
@@ -1003,4 +1003,22 @@ public class ViewUtility
}
}
+ public static void centerChildInParentShell(Shell parent, Shell child)
+ {
+ //get current parent shell size and location
+ int parentLocX = parent.getBounds().x;
+ int parentLocY = parent.getBounds().y;
+ int parentWidth = parent.getBounds().width;
+ int parentHeight = parent.getBounds().height;
+
+ //get current child size
+ int childWidth = child.getSize().x;
+ int childHeight = child.getSize().y;
+
+ //centre the child within/over the parent
+ child.setBounds((parentWidth - childWidth)/2 + parentLocX,
+ (parentHeight - childHeight)/2 + parentLocY,
+ childWidth, childHeight);
+ }
+
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
index dcdd199a7d..35b3e8150c 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/ExchangeOperationsTabControl.java
@@ -24,6 +24,7 @@ import static org.apache.qpid.management.ui.Constants.EXCHANGE_TYPE;
import static org.apache.qpid.management.ui.Constants.DEFAULT_EXCHANGE_TYPE_VALUES;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.management.MBeanServerConnection;
@@ -552,6 +553,7 @@ public class ExchangeOperationsTabControl extends TabControl
}
else
{
+ Collections.sort(queueList);
destinationCombo.setItems(queueList.toArray(new String[0]));
}
destinationCombo.select(0);
@@ -597,6 +599,8 @@ public class ExchangeOperationsTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
index e7ab034094..5146bab74c 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/exchange/HeadersExchangeOperationsTabControl.java
@@ -21,6 +21,7 @@
package org.apache.qpid.management.ui.views.exchange;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.management.MBeanServerConnection;
@@ -527,6 +528,7 @@ public class HeadersExchangeOperationsTabControl extends TabControl
}
else
{
+ Collections.sort(queueList);
destinationCombo.setItems(queueList.toArray(new String[0]));
}
destinationCombo.select(0);
@@ -572,6 +574,8 @@ public class HeadersExchangeOperationsTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java
index 0214607a21..6af90d117c 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/ConfigurationFileTabControl.java
@@ -477,7 +477,10 @@ public class ConfigurationFileTabControl extends TabControl
}
});
+ shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
}
@@ -537,6 +540,8 @@ public class ConfigurationFileTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java
index 5013d8f734..012c22e6de 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/logging/RuntimeTabControl.java
@@ -443,6 +443,8 @@ public class RuntimeTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
}
@@ -504,6 +506,8 @@ public class RuntimeTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java
index 5623c3cb51..d04884102d 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/queue/QueueOperationsTabControl.java
@@ -25,6 +25,7 @@ import static org.apache.qpid.management.ui.Constants.RESULT;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
@@ -829,6 +830,7 @@ public class QueueOperationsTabControl extends TabControl
}
else
{
+ Collections.sort(queueList);
destinationCombo.setItems(queueList.toArray(new String[0]));
}
destinationCombo.select(0);
@@ -880,6 +882,8 @@ public class QueueOperationsTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
@@ -949,6 +953,8 @@ public class QueueOperationsTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/users/UserManagementTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/users/UserManagementTabControl.java
index 3abc83d0d8..b474827493 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/users/UserManagementTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/users/UserManagementTabControl.java
@@ -265,7 +265,17 @@ public class UserManagementTabControl extends TabControl
selectionIndex).getData();
String user = selectedLogger.get(USERNAME).toString();
InputDialog id = new InputDialog(setPasswordButton.getShell(),"Set Password",
- "Please enter the new password for '" + user + "':",null,null);
+ "Please enter the new password for '" + user + "':",null,null){
+ @Override
+ protected Control createDialogArea(Composite parent)
+ {
+ Control control = super.createDialogArea(parent);
+ //set the Text field echo char to '*' to mask the password
+ getText().setEchoChar('*');
+ //return the normal result
+ return control;
+ }
+ };
int returnValue;
while((returnValue = id.open()) == InputDialog.OK)
@@ -686,6 +696,8 @@ public class UserManagementTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
@@ -708,7 +720,7 @@ public class UserManagementTabControl extends TabControl
passwordComposite.setLayout(new GridLayout(2,false));
_toolkit.createLabel(passwordComposite,"Password:").setBackground(shell.getBackground());
- final Text passwordText = new Text(passwordComposite, SWT.BORDER);
+ final Text passwordText = new Text(passwordComposite, SWT.BORDER | SWT.PASSWORD);
passwordText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
Group buttonGroup = new Group(shell, SWT.NONE);
@@ -786,6 +798,8 @@ public class UserManagementTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
diff --git a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java
index dae8d8d067..fef1e9f887 100644
--- a/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java
+++ b/qpid/java/management/eclipse-plugin/src/main/java/org/apache/qpid/management/ui/views/vhost/VHostTabControl.java
@@ -578,6 +578,8 @@ public class VHostTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
@@ -704,6 +706,8 @@ public class VHostTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
@@ -827,6 +831,8 @@ public class VHostTabControl extends TabControl
shell.setDefaultButton(okButton);
shell.pack();
+ ViewUtility.centerChildInParentShell(parent, shell);
+
shell.open();
}
diff --git a/qpid/java/module.xml b/qpid/java/module.xml
index 9bf0270bd6..f31a52f0ff 100644
--- a/qpid/java/module.xml
+++ b/qpid/java/module.xml
@@ -239,6 +239,10 @@
</concat>
<property file="${build.scratch}/test-${profile}.properties"/>
+ <map property="test.excludefiles" value="${test.excludes}">
+ <globmapper from="*" to="${test.profiles}/*"/>
+ </map>
+
<condition property="dontruntest" value="dontruntest" else="runtest">
<contains substring="${module.name}" string="${exclude.modules}" />
@@ -535,9 +539,10 @@
<sysproperty key="broker.clean" value="${broker.clean}"/>
<sysproperty key="broker.version" value="${broker.version}"/>
<sysproperty key="broker.ready" value="${broker.ready}" />
- <sysproperty key="test.excludes" value="${test.excludes}"/>
- <sysproperty key="test.excludesfile" value="${test.excludesfile}"/>
<sysproperty key="test.output" value="${module.results}"/>
+ <syspropertyset>
+ <propertyref prefix="test"/>
+ </syspropertyset>
<sysproperty key="max_prefetch" value ="${max_prefetch}"/>
<sysproperty key="example.plugin.target" value="${project.root}/build/lib/plugins"/>
<sysproperty key="QPID_EXAMPLE_HOME" value="${project.root}/build"/>
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
index 735aa4b1de..91732bc010 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/utils/QpidTestCase.java
@@ -77,11 +77,11 @@ public class QpidTestCase extends TestCase
static
{
- if (Boolean.getBoolean("test.excludes"))
+ if (Boolean.getBoolean("test.exclude"))
{
_logger.info("Some tests should be excluded, building the exclude list");
- String exclusionListURIs = System.getProperties().getProperty("test.excludesfile", "");
- String exclusionListString = System.getProperties().getProperty("test.excludeslist", "");
+ String exclusionListURIs = System.getProperties().getProperty("test.excludefiles", "");
+ String exclusionListString = System.getProperties().getProperty("test.excludelist", "");
List<String> exclusionList = new ArrayList<String>();
for (String uri : exclusionListURIs.split("\\s+"))
diff --git a/qpid/java/test-profiles/010ExcludeList-noPrefetch b/qpid/java/test-profiles/010ExcludeList-noPrefetch
deleted file mode 100644
index dca931b55b..0000000000
--- a/qpid/java/test-profiles/010ExcludeList-noPrefetch
+++ /dev/null
@@ -1,61 +0,0 @@
-org.apache.qpid.test.unit.client.channelclose.ChannelCloseTest#*
-org.apache.qpid.client.ResetMessageListenerTest#*
-org.apache.qpid.test.unit.transacted.TransactedTest#testRollback
-// those tests need durable subscribe states to be persisted
-org.apache.qpid.test.unit.topic.DurableSubscriptionTest#testDurSubRestoredAfterNonPersistentMessageSent
-org.apache.qpid.test.unit.ct.DurableSubscriberTest#testDurSubRestoresMessageSelector
-// This test cannot be run with no-prefetch
-org.apache.qpid.test.unit.xa.TopicTest#testMultiMessagesDurSubCrash
-//These tests are for the java broker
-org.apache.qpid.server.security.acl.SimpleACLTest#*
-org.apache.qpid.server.plugins.PluginTest#*
-// This test is not finished
-org.apache.qpid.test.testcases.TTLTest#*
-// Those tests require failover support
-org.apache.qpid.test.client.QueueBrowserAutoAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserAutoAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserClientAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserClientAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserDupsOkTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserDupsOkTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserNoAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserNoAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserPreAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserPreAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserTransactedTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserTransactedTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.testcases.FailoverTest#*
-org.apache.qpid.test.client.failover.FailoverTest#*
-// Those tests are testing 0.8 specific semantics
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteNoTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxPubSub
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedTxPubSub
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteNoTxPubSub
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteTxPubSub
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteNoTxP2P
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteTxP2P
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteNoTxPubSub
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteTxPubSub
-org.apache.qpid.test.client.FlowControlTest#*
-org.apache.qpid.test.unit.client.connection.ConnectionTest#testDefaultExchanges
-org.apache.qpid.test.unit.client.connection.ConnectionTest#testUnresolvedVirtualHostFailure
-// the 0.10 c++ broker does not implement forget
-org.apache.qpid.test.unit.xa.FaultTest#testForget
-// the 0-10 c++ broker does not implement priority / this test depends on a Java broker extension for queue creation
-org.apache.qpid.server.queue.PriorityTest
-//this test checks explicitly for 0-8 flow control semantics
-org.apache.qpid.test.client.FlowControlTest
-// The default cpp.testprofile does not start the cpp broker with authentication so this test will fail.
-org.apache.qpid.test.unit.client.connection.ConnectionTest#testPasswordFailureConnection
-// c++ broker doesn't do selectors, so this will fail
-org.apache.qpid.test.unit.topic.TopicSessionTest#testNonMatchingMessagesDoNotFillQueue
-// QPID-1225 : Temporary remove this test until the problem has been addressed
-org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
-
-// InVM Broker tests
-org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
-// QPID-1262, QPID-1119 : This test fails occasionally due to potential protocol issue.
-org.apache.qpid.test.client.timeouts.SyncWaitTimeoutDelayTest#*
diff --git a/qpid/java/test-profiles/010ExcludeList-store b/qpid/java/test-profiles/010ExcludeList-store
deleted file mode 100644
index d4bc8b7b71..0000000000
--- a/qpid/java/test-profiles/010ExcludeList-store
+++ /dev/null
@@ -1,64 +0,0 @@
-org.apache.qpid.test.unit.client.channelclose.ChannelCloseTest#*
-org.apache.qpid.client.ResetMessageListenerTest#*
-// those tests should be run with prefetch off
-org.apache.qpid.client.MessageListenerMultiConsumerTest#testRecieveC2Only
-org.apache.qpid.client.MessageListenerMultiConsumerTest#testRecieveBoth
-org.apache.qpid.test.unit.xa.TopicTest#testMultiMessagesDurSubCrash
-org.apache.qpid.test.unit.xa.TopicTest#testMigrateDurableSubscriber
-org.apache.qpid.test.unit.ack.AcknowledgeTest#*
-// those tests need durable subscribe states to be persisted
-org.apache.qpid.test.unit.topic.DurableSubscriptionTest#testDurSubRestoredAfterNonPersistentMessageSent
-org.apache.qpid.test.unit.ct.DurableSubscriberTest#testDurSubRestoresMessageSelector
-//These tests are for the java broker
-org.apache.qpid.server.security.acl.SimpleACLTest#*
-org.apache.qpid.server.plugins.PluginTest#*
-// This test is not finished
-org.apache.qpid.test.testcases.TTLTest#*
-// Those tests require failover support
-org.apache.qpid.test.client.QueueBrowserAutoAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserAutoAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserClientAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserClientAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserDupsOkTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserDupsOkTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserNoAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserNoAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserPreAckTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserPreAckTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.client.QueueBrowserTransactedTest#testFailoverAsQueueBrowserCreated
-org.apache.qpid.test.client.QueueBrowserTransactedTest#testFailoverWithQueueBrowser
-org.apache.qpid.test.testcases.FailoverTest#*
-org.apache.qpid.test.client.failover.FailoverTest#*
-// Those tests are testing 0.8 specific semantics
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteNoTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteTxP2P
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxPubSub
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedTxPubSub
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteNoTxPubSub
-org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsNoRouteTxPubSub
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteNoTxP2P
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteTxP2P
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteNoTxPubSub
-org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFailsNoRouteTxPubSub
-org.apache.qpid.test.client.FlowControlTest#*
-org.apache.qpid.test.unit.client.connection.ConnectionTest#testDefaultExchanges
-org.apache.qpid.test.unit.client.connection.ConnectionTest#testUnresolvedVirtualHostFailure
-// the 0.10 c++ broker does not implement forget
-org.apache.qpid.test.unit.xa.FaultTest#testForget
-// the 0-10 c++ broker does not implement priority / this test depends on a Java broker extension for queue creation
-org.apache.qpid.server.queue.PriorityTest
-//this test checks explicitly for 0-8 flow control semantics
-org.apache.qpid.test.client.FlowControlTest
-// The default cpp.testprofile does not start the cpp broker with authentication so this test will fail.
-org.apache.qpid.test.unit.client.connection.ConnectionTest#testPasswordFailureConnection
-// c++ broker doesn't do selectors, so this will fail
-org.apache.qpid.test.unit.topic.TopicSessionTest#testNonMatchingMessagesDoNotFillQueue
-// QPID-1225 : Temporary remove this test until the problem has been addressed
-org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
-
-// InVM Broker tests
-org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
-// QPID-1262, QPID-1119 : This test fails occasionally due to potential protocol issue.
-org.apache.qpid.test.client.timeouts.SyncWaitTimeoutDelayTest#*
diff --git a/qpid/java/test-profiles/010ExcludeList b/qpid/java/test-profiles/010Excludes
index ca12a4f8a5..69077a97c8 100644
--- a/qpid/java/test-profiles/010ExcludeList
+++ b/qpid/java/test-profiles/010Excludes
@@ -1,24 +1,14 @@
org.apache.qpid.test.unit.client.channelclose.ChannelCloseTest#*
org.apache.qpid.client.ResetMessageListenerTest#*
-// those tests should be run with prefetch off
-org.apache.qpid.client.MessageListenerMultiConsumerTest#testRecieveC2Only
-org.apache.qpid.client.MessageListenerMultiConsumerTest#testRecieveBoth
-org.apache.qpid.test.unit.xa.TopicTest#testMigrateDurableSubscriber
-// those tests need durable subscribe states to be persisted
-org.apache.qpid.test.unit.topic.DurableSubscriptionTest#testDurSubRestoredAfterNonPersistentMessageSent
-// those tests require broker recovery
-org.apache.qpid.test.unit.ct.DurableSubscriberTest#*
-org.apache.qpid.test.unit.xa.TopicTest#testDurSubCrash
-org.apache.qpid.test.unit.xa.TopicTest#testMultiMessagesDurSubCrash
-org.apache.qpid.test.unit.xa.TopicTest#testRecover
-org.apache.qpid.test.unit.xa.QueueTest#testRecover
-org.apache.qpid.test.unit.xa.QueueTest#testSendAndRecover
+
//These tests are for the java broker
org.apache.qpid.server.security.acl.SimpleACLTest#*
org.apache.qpid.server.plugins.PluginTest#*
+
// This test is not finished
org.apache.qpid.test.testcases.TTLTest#*
org.apache.qpid.test.client.failover.FailoverTest#test4MinuteFailover
+
// Those tests are testing 0.8 specific semantics
org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedNoTxP2P
org.apache.qpid.test.testcases.ImmediateMessageTest#test_QPID_517_ImmediateFailsConsumerDisconnectedTxP2P
@@ -35,29 +25,37 @@ org.apache.qpid.test.testcases.MandatoryMessageTest#test_QPID_508_MandatoryFails
org.apache.qpid.test.client.FlowControlTest#*
org.apache.qpid.test.unit.client.connection.ConnectionTest#testDefaultExchanges
org.apache.qpid.test.unit.client.connection.ConnectionTest#testUnresolvedVirtualHostFailure
+
// the 0.10 c++ broker does not implement forget
org.apache.qpid.test.unit.xa.FaultTest#testForget
+
// the 0-10 c++ broker does not implement priority / this test depends on a Java broker extension for queue creation
org.apache.qpid.server.queue.PriorityTest
+
//this test checks explicitly for 0-8 flow control semantics
org.apache.qpid.test.client.FlowControlTest
+
// 0-10 c++ broker doesn't implement virtual hosts, or those wackhy exchanges
org.apache.qpid.test.unit.client.connection.ConnectionTest#testUnresolvedVirtualHostFailure
org.apache.qpid.test.unit.client.connection.ConnectionTest#testDefaultExchanges
+
// 0-10 c++ broker in cpp.testprofile is started with no auth so won't pass this test
org.apache.qpid.test.unit.client.connection.ConnectionTest#testPasswordFailureConnection
+
// c++ broker doesn't do selectors, so this will fail
org.apache.qpid.test.unit.topic.TopicSessionTest#testNonMatchingMessagesDoNotFillQueue
-// QPID-1225 : Temporary remove this test until the problem has been addressed
-org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
+
// InVM Broker tests
org.apache.qpid.test.client.timeouts.SyncWaitDelayTest#*
+
// QPID-1262, QPID-1119 : This test fails occasionally due to potential protocol issue.
org.apache.qpid.test.client.timeouts.SyncWaitTimeoutDelayTest#*
+
// c++ broker doesn't support priorities, TTL or message bouncing
org.apache.qpid.server.exchange.ReturnUnroutableMandatoryMessageTest#*
org.apache.qpid.server.queue.PriorityTest#*
org.apache.qpid.server.queue.TimeToLiveTest#*
+
// QPID-1727 , QPID-1726 :c++ broker does not support flow to disk on transient queues. Also it requries a persistent store impl. for Apache
org.apache.qpid.test.client.QueueBrowsingFlowToDiskTest#*
@@ -70,12 +68,12 @@ org.apache.qpid.test.unit.client.connection.CloseAfterConnectionFailureTest#*
//QPID-1818 : 0-10 Client code path does not correctly restore a transacted session after failover.
org.apache.qpid.server.persistent.NoLocalAfterRecoveryTest#*
-// QPID-1823: this takes ages to run
-org.apache.qpid.client.SessionCreateTest#*
-
// QPID-1730: the C++ server has a totally different logging mechanism. We should split this file differently
org.apache.qpid.server.AlertingTest#*
// The C++ server has a totally different persistence mechanism
org.apache.qpid.server.store.PersistentStoreTest#*
+// QPID-1225 : Temporary remove this test until the problem has been addressed
+org.apache.qpid.server.security.acl.SimpleACLTest#testClientPublishInvalidQueueSuccess
+
diff --git a/qpid/java/test-profiles/010PrefetchExcludes b/qpid/java/test-profiles/010PrefetchExcludes
new file mode 100644
index 0000000000..6b0014b917
--- /dev/null
+++ b/qpid/java/test-profiles/010PrefetchExcludes
@@ -0,0 +1,4 @@
+// those tests should be run with prefetch off
+org.apache.qpid.client.MessageListenerMultiConsumerTest#testRecieveC2Only
+org.apache.qpid.client.MessageListenerMultiConsumerTest#testRecieveBoth
+org.apache.qpid.test.unit.xa.TopicTest#testMigrateDurableSubscriber
diff --git a/qpid/java/test-profiles/010TransientExcludes b/qpid/java/test-profiles/010TransientExcludes
new file mode 100644
index 0000000000..90b4251807
--- /dev/null
+++ b/qpid/java/test-profiles/010TransientExcludes
@@ -0,0 +1,10 @@
+// those tests need durable subscribe states to be persisted
+org.apache.qpid.test.unit.topic.DurableSubscriptionTest#testDurSubRestoredAfterNonPersistentMessageSent
+
+// those tests require broker recovery
+org.apache.qpid.test.unit.ct.DurableSubscriberTest#*
+org.apache.qpid.test.unit.xa.TopicTest#testDurSubCrash
+org.apache.qpid.test.unit.xa.TopicTest#testMultiMessagesDurSubCrash
+org.apache.qpid.test.unit.xa.TopicTest#testRecover
+org.apache.qpid.test.unit.xa.QueueTest#testRecover
+org.apache.qpid.test.unit.xa.QueueTest#testSendAndRecover
diff --git a/qpid/java/test-profiles/08ExcludeList b/qpid/java/test-profiles/08Excludes
index 0866694854..0866694854 100644
--- a/qpid/java/test-profiles/08ExcludeList
+++ b/qpid/java/test-profiles/08Excludes
diff --git a/qpid/java/test-profiles/08ExcludeList-nonvm b/qpid/java/test-profiles/08StandaloneExcludes
index e697201bfd..e697201bfd 100644
--- a/qpid/java/test-profiles/08ExcludeList-nonvm
+++ b/qpid/java/test-profiles/08StandaloneExcludes
diff --git a/qpid/java/test-profiles/08ExcludeList-nopersistence b/qpid/java/test-profiles/08TransientExcludes
index f81e9c213c..f81e9c213c 100644
--- a/qpid/java/test-profiles/08ExcludeList-nopersistence
+++ b/qpid/java/test-profiles/08TransientExcludes
diff --git a/qpid/java/test-profiles/ExcludeList b/qpid/java/test-profiles/Excludes
index a3a61b51db..a3a61b51db 100644
--- a/qpid/java/test-profiles/ExcludeList
+++ b/qpid/java/test-profiles/Excludes
diff --git a/qpid/java/test-profiles/XAExcludeList b/qpid/java/test-profiles/XAExcludes
index 1bb26c5f27..1bb26c5f27 100644
--- a/qpid/java/test-profiles/XAExcludeList
+++ b/qpid/java/test-profiles/XAExcludes
diff --git a/qpid/java/test-profiles/cpp.async.excludes b/qpid/java/test-profiles/cpp.async.excludes
new file mode 100644
index 0000000000..72d79fb754
--- /dev/null
+++ b/qpid/java/test-profiles/cpp.async.excludes
@@ -0,0 +1,5 @@
+// the C++ broker doesn't implement selectors, so they are not persisted with the subscription
+org.apache.qpid.test.unit.ct.DurableSubscriberTest#testDurSubRestoresMessageSelector
+
+// the C++ broker doesn't guarantee the order of messages on recovery
+org.apache.qpid.test.unit.xa.TopicTest#testMultiMessagesDurSubCrash
diff --git a/qpid/java/test-profiles/cpp.async.testprofile b/qpid/java/test-profiles/cpp.async.testprofile
index 5b6834e8c0..f06b56fbad 100644
--- a/qpid/java/test-profiles/cpp.async.testprofile
+++ b/qpid/java/test-profiles/cpp.async.testprofile
@@ -1,5 +1,3 @@
include=cpp
-
+profile.excludes=010PrefetchExcludes
broker.modules=--load-module ${broker.module.store}
-
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/010ExcludeList-store
diff --git a/qpid/java/test-profiles/cpp.cluster.testprofile b/qpid/java/test-profiles/cpp.cluster.testprofile
index 49ddc98f4f..143e0d88d0 100644
--- a/qpid/java/test-profiles/cpp.cluster.testprofile
+++ b/qpid/java/test-profiles/cpp.cluster.testprofile
@@ -2,7 +2,7 @@ include=cpp
broker.modules=--load-module ${broker.module.cluster} --cluster-name cpp-java-test-cluster
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/XAExcludeList ${test.profiles}/010ExcludeList
+profile.excludes=XAExcludes 010PrefetchExcludes 010TransientExcludes
profile.clustered=true
profile.failoverMsgCount=10
diff --git a/qpid/java/test-profiles/cpp.noprefetch.testprofile b/qpid/java/test-profiles/cpp.noprefetch.testprofile
index 4c8c827e30..b2b9bc6de3 100644
--- a/qpid/java/test-profiles/cpp.noprefetch.testprofile
+++ b/qpid/java/test-profiles/cpp.noprefetch.testprofile
@@ -1,3 +1,3 @@
include=cpp
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/010ExcludeList-noPrefetch
+profile.excludes=010TransientExcludes
max_prefetch=0
diff --git a/qpid/java/test-profiles/010ExcludeList-ssl b/qpid/java/test-profiles/cpp.ssl.excludes
index bf21ab9cc7..bf21ab9cc7 100644
--- a/qpid/java/test-profiles/010ExcludeList-ssl
+++ b/qpid/java/test-profiles/cpp.ssl.excludes
diff --git a/qpid/java/test-profiles/cpp.ssl.testprofile b/qpid/java/test-profiles/cpp.ssl.testprofile
index 08d4fd895a..9f2581a83a 100644
--- a/qpid/java/test-profiles/cpp.ssl.testprofile
+++ b/qpid/java/test-profiles/cpp.ssl.testprofile
@@ -2,9 +2,6 @@ include=cpp
broker.modules=--load-module ${broker.module.ssl} --ssl-cert-name localhost.localdomain --ssl-cert-password-file ${test.profiles}/test_resources/ssl/pfile --ssl-cert-db ${test.profiles}/test_resources/ssl/server_db/ --ssl-require-client-authentication --ssl-port @SSL_PORT
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/010ExcludeList ${test.profiles}/010ExcludeList-ssl
-test.excludeslist=org.apache.qpid.test.client.failover.FailoverTest#*
-
profile.use_ssl=true
broker.ready= Listening for SSL connections
diff --git a/qpid/java/test-profiles/cpp.testprofile b/qpid/java/test-profiles/cpp.testprofile
index 414e364ecc..1d5416fe19 100644
--- a/qpid/java/test-profiles/cpp.testprofile
+++ b/qpid/java/test-profiles/cpp.testprofile
@@ -14,4 +14,5 @@ broker.args=
broker=${broker.executable} -p @PORT --data-dir ${build.data}/@PORT -t --auth no --no-module-dir ${broker.modules} ${broker.args}
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/010ExcludeList
+profile.excludes=010PrefetchExcludes 010TransientExcludes
+test.excludes=Excludes 010Excludes ${profile}.excludes ${profile.excludes}
diff --git a/qpid/java/test-profiles/default-longrunning.testprofile b/qpid/java/test-profiles/default-longrunning.testprofile
deleted file mode 100644
index bf24e4f9da..0000000000
--- a/qpid/java/test-profiles/default-longrunning.testprofile
+++ /dev/null
@@ -1 +0,0 @@
-test.includesfile=${test.profiles}/08LongRunningList
diff --git a/qpid/java/test-profiles/default.testprofile b/qpid/java/test-profiles/default.testprofile
index 80d2e6a8a4..5a08b79e10 100644
--- a/qpid/java/test-profiles/default.testprofile
+++ b/qpid/java/test-profiles/default.testprofile
@@ -20,8 +20,9 @@ test.port=15672
test.port.ssl=15671
test.port.alt=15673
-test.excludes=true
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/XAExcludeList ${test.profiles}/08ExcludeList ${test.profiles}/08ExcludeList-nopersistence
+test.exclude=true
+profile.excludes=08TransientExcludes
+test.excludes=Excludes XAExcludes 08Excludes ${profile}.excludes ${profile.excludes}
test.fork=no
test.mem=512M
test=*Test
diff --git a/qpid/java/test-profiles/java-derby.testprofile b/qpid/java/test-profiles/java-derby.testprofile
index 1786e96712..52b63ae799 100644
--- a/qpid/java/test-profiles/java-derby.testprofile
+++ b/qpid/java/test-profiles/java-derby.testprofile
@@ -4,4 +4,4 @@ broker.clean=${test.profiles}/clean-dir ${build.data} ${project.root}/build/work
broker.ready=Qpid Broker Ready
broker.config=${project.root}/build/etc/config-systests-derby.xml
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/XAExcludeList ${test.profiles}/08ExcludeList-nonvm
+profile.excludes=08StandaloneExcludes
diff --git a/qpid/java/test-profiles/java.testprofile b/qpid/java/test-profiles/java.testprofile
index d1e4c12bc1..f920124735 100644
--- a/qpid/java/test-profiles/java.testprofile
+++ b/qpid/java/test-profiles/java.testprofile
@@ -3,4 +3,4 @@ broker=${project.root}/build/bin/qpid-server -p @PORT -m @MPORT -c @CONFIG_FILE
broker.clean=${test.profiles}/clean-dir ${build.data} ${project.root}/build/work/derbyDB
broker.ready=Qpid Broker Ready
-test.excludesfile=${test.profiles}/ExcludeList ${test.profiles}/XAExcludeList ${test.profiles}/08ExcludeList-nonvm ${test.profiles}/08ExcludeList-nopersistence
+profile.excludes=08TransientExcludes 08StandaloneExcludes