diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2009-10-05 10:35:40 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2009-10-05 10:35:40 +0000 |
commit | f7e01a65f292af81813cbfc7f7bb60ce70139074 (patch) | |
tree | d5da0b6b44150e9015375b39b36cf31041568d66 | |
parent | 8de1fa8dc5fd1ad3e1efd464320f2fd019bdbef4 (diff) | |
download | qpid-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
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 Binary files differindex 425ea2249e..f30decde4b 100644 --- a/qpid/java/doc/broker-0.5-network.dia +++ b/qpid/java/doc/broker-0.5-network.dia diff --git a/qpid/java/doc/broker-0.N-network-phase-1.dia b/qpid/java/doc/broker-0.N-network-phase-1.dia Binary files differnew file mode 100644 index 0000000000..4ac8213b23 --- /dev/null +++ b/qpid/java/doc/broker-0.N-network-phase-1.dia diff --git a/qpid/java/doc/broker-0.N-state.dia b/qpid/java/doc/broker-0.N-state.dia Binary files differnew file mode 100644 index 0000000000..5ef83a871b --- /dev/null +++ b/qpid/java/doc/broker-0.N-state.dia diff --git a/qpid/java/doc/client-0.5-network-processing.dia b/qpid/java/doc/client-0.5-network-processing.dia Binary files differindex 9bb009d0ab..acacc4f462 100644 --- a/qpid/java/doc/client-0.5-network-processing.dia +++ b/qpid/java/doc/client-0.5-network-processing.dia diff --git a/qpid/java/doc/client-0.N-network-processing.dia b/qpid/java/doc/client-0.N-network-processing.dia Binary files differnew file mode 100644 index 0000000000..ed2c340969 --- /dev/null +++ b/qpid/java/doc/client-0.N-network-processing.dia diff --git a/qpid/java/doc/common-0.N-network.dia b/qpid/java/doc/common-0.N-network.dia Binary files differnew file mode 100644 index 0000000000..826ac32e5b --- /dev/null +++ b/qpid/java/doc/common-0.N-network.dia diff --git a/qpid/java/doc/network-driver-protocol-engine-sequence.dia b/qpid/java/doc/network-driver-protocol-engine-sequence.dia Binary files differnew file mode 100644 index 0000000000..16cdc7e1dc --- /dev/null +++ b/qpid/java/doc/network-driver-protocol-engine-sequence.dia diff --git a/qpid/java/management/eclipse-plugin/icons/back.gif b/qpid/java/management/eclipse-plugin/icons/back.gif Binary files differnew file mode 100644 index 0000000000..d3a10077a5 --- /dev/null +++ b/qpid/java/management/eclipse-plugin/icons/back.gif 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 |