You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2014/02/07 16:24:53 UTC

svn commit: r1565688 [4/4] - in /qpid/branches/java-broker-amqp-1-0-management: ./ cpp/bindings/qmf2/ruby/ cpp/bindings/qpid/perl/ cpp/bindings/qpid/ruby/ cpp/include/qpid/ cpp/src/ cpp/src/qpid/broker/ cpp/src/qpid/client/windows/ cpp/src/qpid/ha/ cpp...

Modified: qpid/branches/java-broker-amqp-1-0-management/java/pom.xml
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/java/pom.xml?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/java/pom.xml (original)
+++ qpid/branches/java-broker-amqp-1-0-management/java/pom.xml Fri Feb  7 15:24:50 2014
@@ -16,47 +16,56 @@
   limitations under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
     <version>12</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.apache.qpid</groupId>
-  <artifactId>qpid-project</artifactId>
-  <version>0.26-SNAPSHOT</version>
+  <artifactId>qpid-parent</artifactId>
+  <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
-  <!-- ###### TODO ######
-    - Add the Excludes files, log4j config, etc test resources to a module (qpid-test-utils?) which can be
-      used (extracted?) by the others to prevent them having to reference outside their directly for the files.
-        - Fix what the systests/perftests do to copy the test-profiles dir to the necessary location.
-        - Fix the log4j configuration property to work with all the modules.
-    - Fix the version numbers in all the modules.
-    - Decide on a final name for this parent module, qpid-project isnt necessarily appropriate given it doesnt encompass the whole project.
-    - Test deploying the modules to a local Nexus instance (by overriding the repo properties locally).
-      - Ensure we dont deploy modules we aren't already doing so, it will make changing them later less of a pain for everyone.
-    - Figure out dependency setup for optional bdbstore tests.
-    - Add the other test profiles, e.g. derby and other protocols.
-    - Generate HTML reports of the test results
-      - Decide on how to handle the surefire report target re-running the tests (there is a report-only task that doesnt, provided as a workaround)
-    - Add LICENCE, NOTICE, README files to the binary assemblies.
-    - Complete setting properties for all the dependency version numbers from the modules.
-    - Use dependancy management sections to control the version numbers?
-    - Align the XML in the pom files consistently, fix whitepsace errors.
-
-    === Once the Ant build is removed ===
-    - Move all the resources to be in the /src/foo/resources folders.
-    - Make qpidversion.properties in common be a filtered resource instead of generated.
-      - Get rid of the antrun-plugin execution in common, directly invoke the required java elements.
-      - Do the above in the generate-sources-common profile instead of current default config.
-    - Get rid of the antrun-plugin execution in broker-core, directly invoke the required java elements.
-    - Fix the tests not to be dependant on the working dir being the java dir.
-    - Fix the tests not to be dependant on the test config/output dirs being children of qpid.home.
-      - Remove the QBTC output file mechanics, rely on Surefire to do it?
-    - JUnit test profiles instead of Exludes files?
-  -->
+  <name>Qpid</name>
+  <url>http://qpid.apache.org</url>
+  <description>Apache Qpid™ makes messaging tools that speak AMQP and support many languages and platforms.  AMQP is an open internet protocol for reliably sending and receiving messages. It makes it possible for everyone to build a diverse, coherent messaging ecosystem.</description>
+
+  <issueManagement>
+    <system>JIRA</system>
+    <url>https://issues.apache.org/jira/browse/QPID</url>
+  </issueManagement>
+
+  <ciManagement>
+    <system>Jenkins</system>
+    <url>https://builds.apache.org/view/M-R/view/Qpid/</url>
+  </ciManagement>
+
+  <mailingLists>
+    <mailingList>
+      <name>Apache Qpid Users</name>
+      <subscribe>users-subscribe@qpid.apache.org</subscribe>
+      <unsubscribe>users-unsubscribe@qpid.apache.org</unsubscribe>
+      <post>users@qpid.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/qpid-users/</archive>
+    </mailingList>
+    <mailingList>
+      <name>Apache Qpid Developers</name>
+      <subscribe>dev-subscribe@qpid.apache.org</subscribe>
+      <unsubscribe>dev-unsubscribe@qpid.apache.org</unsubscribe>
+      <post>dev@qpid.apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/qpid-dev/</archive>
+    </mailingList>
+  </mailingLists>
+
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/qpid/trunk/qpid/java</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/qpid/trunk/qpid/java</developerConnection>
+    <url>http://svn.apache.org/viewvc/qpid/trunk/qpid/java</url>
+  </scm>
+
   <prerequisites>
     <maven>3.0.0</maven>
   </prerequisites>
@@ -64,12 +73,39 @@
   <properties>
     <!-- dependency version numbers -->
     <dojo-version>1.9.1</dojo-version>
+    <log4j-version>1.2.16</log4j-version>
+    <slf4j-version>1.6.4</slf4j-version>
+    <jetty-version>8.1.14.v20131031</jetty-version>
+    <jackson-version>1.9.1</jackson-version>
+    <bdb-version>5.0.97</bdb-version>
+    <gson-version>2.0</gson-version>
+    <guava-version>14.0.1</guava-version>
+    <bonecp-version>0.7.1.RELEASE</bonecp-version>
+    <commons-beanutils-version>1.8.3</commons-beanutils-version>
+    <commons-cli-version>1.2</commons-cli-version>
+    <commons-codec-version>1.6</commons-codec-version>
+    <commons-collections-version>3.2.1</commons-collections-version>
+    <commons-configuration-version>1.8</commons-configuration-version>
+    <commons-digester-version>1.8.1</commons-digester-version>
+    <commons-lang-version>2.6</commons-lang-version>
+    <commons-logging-version>1.1.1</commons-logging-version>
+    <geronimo-jms-version>1.0</geronimo-jms-version>
+    <geronimo-gta-version>1.1.1</geronimo-gta-version>
+    <geronimo-servlet-version>1.0</geronimo-servlet-version>
+    <geronimo-j2ee-connector-version>2.0.0</geronimo-j2ee-connector-version>
+    <geronimo-ejb-version>1.0.1</geronimo-ejb-version>
+    <geronimo-kernel-version>2.2.1</geronimo-kernel-version>
+    <xalan-version>2.7.0</xalan-version>
+    <bcel-version>5.2</bcel-version>
+    <velocity-version>1.4</velocity-version>
+    <derby-version>10.8.2.2</derby-version>
+    <jython-version>2.5.3</jython-version>
+    <csvjdbc-version>1.0.8</csvjdbc-version>
+    <jfreechart-version>1.0.13</jfreechart-version>
 
     <!-- test dependency version numbers -->
     <junit-version>3.8.1</junit-version>
     <mockito-version>1.9.0</mockito-version>
-    <log4j-version>1.2.16</log4j-version>
-    <slf4j-version>1.6.4</slf4j-version>
 
     <!-- plugin version numbers -->
     <maven-antrun-plugin-version>1.7</maven-antrun-plugin-version>
@@ -105,7 +141,7 @@
     <java.target>1.6</java.target>
 
     <!-- enforcer plugin config properties -->
-    <supported-test-profiles-regex>(java-mms.0-9-1|java-mms.0-10)</supported-test-profiles-regex>
+    <supported-test-profiles-regex>(java-mms.0-9-1|java-mms.0-10|java-bdb.0-10)</supported-test-profiles-regex>
 
     <!-- test properties -->
     <qpid.home>${basedir}</qpid.home> <!-- override for broker tests -->
@@ -120,30 +156,13 @@
     <profile.excludes>${profile.excludes.java-mms.0-10}</profile.excludes>
   </properties>
 
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <version>${mockito-version}</version>
-      <scope>test</scope>
-    </dependency>
-
-  </dependencies>
-
   <modules>
+    <module>amqp-1-0-common</module>
     <module>amqp-1-0-client</module>
     <module>amqp-1-0-client-jms</module>
     <module>amqp-1-0-client-websocket</module>
-    <module>amqp-1-0-common</module>
-    <module>broker</module>
     <module>broker-core</module>
+    <module>broker</module>
     <module>broker-plugins/access-control</module>
     <module>broker-plugins/amqp-0-8-protocol</module>
     <module>broker-plugins/amqp-0-10-protocol</module>
@@ -177,32 +196,263 @@
     <module>bdbstore/systests</module>
   </modules>
 
-  <repositories>
-    <!-- For the BDB JE dependency of the optional bdbstore plugin modules-->
-    <repository>
-      <id>oracle.releases</id>
-      <url>http://download.oracle.com/maven</url>
-      <layout>default</layout>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </repository>
-    <!-- For the CSVJDBC dependency of the optional perftests-visualistion-jfc module-->
-    <repository>
-      <id>csvjdbc.releases</id>
-      <url>http://csvjdbc.sourceforge.net/maven2</url>
-      <layout>default</layout>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>false</enabled>
-      </snapshots>
-    </repository>
-  </repositories>
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <dependencyManagement>
+    <dependencies>
+
+      <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>${junit-version}</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.mockito</groupId>
+        <artifactId>mockito-all</artifactId>
+        <version>${mockito-version}</version>
+        <scope>test</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>log4j</groupId>
+        <artifactId>log4j</artifactId>
+        <version>${log4j-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-api</artifactId>
+        <version>${slf4j-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.slf4j</groupId>
+        <artifactId>slf4j-log4j12</artifactId>
+        <version>${slf4j-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.eclipse.jetty</groupId>
+        <artifactId>jetty-server</artifactId>
+        <version>${jetty-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.eclipse.jetty</groupId>
+        <artifactId>jetty-websocket</artifactId>
+        <version>${jetty-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.eclipse.jetty</groupId>
+        <artifactId>jetty-servlet</artifactId>
+        <version>${jetty-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.codehaus.jackson</groupId>
+        <artifactId>jackson-core-asl</artifactId>
+        <version>${jackson-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.codehaus.jackson</groupId>
+        <artifactId>jackson-mapper-asl</artifactId>
+        <version>${jackson-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.dojotoolkit</groupId>
+        <artifactId>dojo</artifactId>
+        <version>${dojo-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>com.sleepycat</groupId>
+        <artifactId>je</artifactId>
+        <version>${bdb-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-beanutils</groupId>
+        <artifactId>commons-beanutils-core</artifactId>
+        <version>${commons-beanutils-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-digester</groupId>
+        <artifactId>commons-digester</artifactId>
+        <version>${commons-digester-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-lang</groupId>
+        <artifactId>commons-lang</artifactId>
+        <version>${commons-lang-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-cli</groupId>
+        <artifactId>commons-cli</artifactId>
+        <version>${commons-cli-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-codec</groupId>
+        <artifactId>commons-codec</artifactId>
+        <version>${commons-codec-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-collections</groupId>
+        <artifactId>commons-collections</artifactId>
+        <version>${commons-collections-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-configuration</groupId>
+        <artifactId>commons-configuration</artifactId>
+        <version>${commons-configuration-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>commons-logging</groupId>
+        <artifactId>commons-logging</artifactId>
+        <version>${commons-logging-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.geronimo.specs</groupId>
+        <artifactId>geronimo-jms_1.1_spec</artifactId>
+        <version>${geronimo-jms-version}</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.geronimo.specs</groupId>
+        <artifactId>geronimo-jta_1.1_spec</artifactId>
+        <version>${geronimo-gta-version}</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+          <groupId>org.apache.geronimo.specs</groupId>
+          <artifactId>geronimo-servlet_3.0_spec</artifactId>
+          <version>${geronimo-servlet-version}</version>
+          <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.geronimo.specs</groupId>
+        <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId>
+        <version>${geronimo-j2ee-connector-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.geronimo.specs</groupId>
+        <artifactId>geronimo-ejb_3.0_spec</artifactId>
+        <version>${geronimo-ejb-version}</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.geronimo.framework</groupId>
+        <artifactId>geronimo-kernel</artifactId>
+        <version>${geronimo-kernel-version}</version>
+        <scope>provided</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>xalan</groupId>
+        <artifactId>xalan</artifactId>
+        <version>${xalan-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.bcel</groupId>
+        <artifactId>bcel</artifactId>
+        <version>${bcel-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>velocity</groupId>
+        <artifactId>velocity</artifactId>
+        <version>${velocity-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>velocity</groupId>
+        <artifactId>velocity-dep</artifactId>
+        <version>${velocity-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>org.apache.derby</groupId>
+        <artifactId>derby</artifactId>
+        <version>${derby-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>com.google.guava</groupId>
+        <artifactId>guava</artifactId>
+        <version>${guava-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>com.jolbox</groupId>
+        <artifactId>bonecp</artifactId>
+        <version>${bonecp-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+      <dependency>
+        <groupId>com.google.code.gson</groupId>
+        <artifactId>gson</artifactId>
+        <version>${gson-version}</version>
+        <scope>compile</scope>
+      </dependency>
+
+    </dependencies>
+  </dependencyManagement>
 
   <build>
     <pluginManagement>
@@ -497,41 +747,6 @@
     </plugins>
   </build>
 
-  <description>
-    Apache Qpid™ makes messaging tools that speak AMQP and support many languages and platforms.
-    AMQP is an open internet protocol for reliably sending and receiving messages. It makes it possible for everyone to build a diverse, coherent messaging ecosystem.
-  </description>
-
-  <url>http://qpid.apache.org</url>
-
-  <issueManagement>
-    <system>JIRA</system>
-    <url>https://issues.apache.org/jira/browse/QPID</url>
-  </issueManagement>
-
-  <mailingLists>
-    <mailingList>
-      <name>Apache Qpid Users</name>
-      <subscribe>users-subscribe@qpid.apache.org</subscribe>
-      <unsubscribe>users-unsubscribe@qpid.apache.org</unsubscribe>
-      <post>users@qpid.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/qpid-users/</archive>
-    </mailingList>
-    <mailingList>
-      <name>Apache Qpid Developers</name>
-      <subscribe>dev-subscribe@qpid.apache.org</subscribe>
-      <unsubscribe>dev-unsubscribe@qpid.apache.org</unsubscribe>
-      <post>dev@qpid.apache.org</post>
-      <archive>http://mail-archives.apache.org/mod_mbox/qpid-dev/</archive>
-    </mailingList>
-  </mailingLists>
-
-  <scm>
-    <connection>scm:svn:http://svn.apache.org/repos/asf/qpid/trunk/qpid</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/qpid/trunk/qpid</developerConnection>
-    <url>http://svn.apache.org/viewvc/qpid/</url>
-  </scm>
-
   <reporting>
     <plugins>
       <plugin>
@@ -548,6 +763,21 @@
     </plugins>
   </reporting>
 
+  <repositories>
+    <!-- For the BDB JE dependency of the optional bdbstore plugin modules-->
+    <repository>
+      <id>oracle.releases</id>
+      <url>http://download.oracle.com/maven</url>
+      <layout>default</layout>
+      <releases>
+        <enabled>true</enabled>
+      </releases>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+
   <profiles>
     <profile>
       <!-- Everything in this profile should already be set above by default in case someone sets an explicit non-test
@@ -605,6 +835,35 @@
         </plugins>
       </build>
     </profile>
+
+    <profile>
+      <id>java-bdb.0-10</id>
+      <activation>
+        <property>
+          <name>profile</name>
+          <value>java-bdb.0-10</value>
+        </property>
+      </activation>
+      <properties>
+        <profile>java-bdb.0-10</profile>
+        <profile.excludes>JavaExcludes JavaPersistentExcludes Java010Excludes JavaBDBExcludes</profile.excludes>
+      </properties>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <systemPropertyVariables>
+                <broker.version>v0_10</broker.version>
+                <qpid.broker_default_amqp_protocol_excludes>AMQP_1_0</qpid.broker_default_amqp_protocol_excludes>
+                <broker.persistent>true</broker.persistent>
+                <messagestore.class.name>org.apache.qpid.server.store.berkeleydb.BDBMessageStore</messagestore.class.name>
+              </systemPropertyVariables>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
   </profiles>
 
 </project>

Modified: qpid/branches/java-broker-amqp-1-0-management/java/qpid-test-utils/pom.xml
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/java/qpid-test-utils/pom.xml?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/java/qpid-test-utils/pom.xml (original)
+++ qpid/branches/java-broker-amqp-1-0-management/java/qpid-test-utils/pom.xml Fri Feb  7 15:24:50 2014
@@ -16,48 +16,44 @@
   limitations under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.qpid</groupId>
-    <artifactId>qpid-project</artifactId>
-    <version>0.26-SNAPSHOT</version>
+    <artifactId>qpid-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <artifactId>qpid-test-utils</artifactId>
+  <version>0.28-SNAPSHOT</version>
+  <name>Qpid Test Utilities</name>
+  <description>Testing utilities</description>
 
   <dependencies>
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>${junit-version}</version>
       <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
-      <version>${log4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>${slf4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-log4j12</artifactId>
-      <version>${slf4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <version>1.0</version>
       <scope>provided</scope>
     </dependency>
   </dependencies>

Modified: qpid/branches/java-broker-amqp-1-0-management/java/systests/pom.xml
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/java/systests/pom.xml?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/java/systests/pom.xml (original)
+++ qpid/branches/java-broker-amqp-1-0-management/java/systests/pom.xml Fri Feb  7 15:24:50 2014
@@ -16,14 +16,18 @@
   limitations under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.qpid</groupId>
-    <artifactId>qpid-project</artifactId>
-    <version>0.26-SNAPSHOT</version>
+    <artifactId>qpid-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <artifactId>qpid-systests</artifactId>
+  <version>0.28-SNAPSHOT</version>
+  <name>Qpid System Tests</name>
+  <description>System testing configuration, code and tests</description>
 
   <properties>
     <broker.home.dir>target${file.separator}qpid-broker${file.separator}${project.version}</broker.home.dir>
@@ -51,36 +55,29 @@
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-test-utils</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
-      <version>${log4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>${slf4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <!-- client deps -->
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-client</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <version>1.0</version>
       <scope>provided</scope>
     </dependency>
 
@@ -88,21 +85,17 @@
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-jca</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId>
-      <version>2.0.0</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jta_1.1_spec</artifactId>
-      <version>1.1.1</version>
       <scope>runtime</scope>
     </dependency>
 
@@ -110,125 +103,117 @@
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-core</artifactId>
-      <version>0.26-SNAPSHOT</version>
+      <version>${project.version}</version>
       <type>test-jar</type>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-access-control</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-0-8-protocol</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-0-10-protocol</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-1-0-protocol</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-msg-conv-0-8-to-0-10</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-msg-conv-0-8-to-1-0</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-amqp-msg-conv-0-10-to-1-0</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-derby-store</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-jdbc-provider-bone</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-jdbc-store</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-management-http</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-management-jmx</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-broker-plugins-memory-store</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
-    <!-- optional broker plugin modules
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-bdbstore</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
+      <scope>test</scope>
       <optional>true</optional>
     </dependency>
 
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-bdbstore-jmx</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <optional>true</optional>
+    </dependency>
+
+    <dependency>
+      <groupId>com.sleepycat</groupId>
+      <artifactId>je</artifactId>
+      <scope>test</scope>
       <optional>true</optional>
-    </dependency> -->
+    </dependency>
+
   </dependencies>
    
   <build>

Modified: qpid/branches/java-broker-amqp-1-0-management/java/tools/pom.xml
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/java/tools/pom.xml?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/java/tools/pom.xml (original)
+++ qpid/branches/java-broker-amqp-1-0-management/java/tools/pom.xml Fri Feb  7 15:24:50 2014
@@ -16,42 +16,39 @@
   limitations under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <groupId>org.apache.qpid</groupId>
-    <artifactId>qpid-project</artifactId>
-    <version>0.26-SNAPSHOT</version>
+    <artifactId>qpid-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <artifactId>qpid-tools</artifactId>
+  <version>0.28-SNAPSHOT</version>
+  <name>Qpid Tools</name>
+  <description>Tools</description>
 
   <dependencies>
     <dependency>
       <groupId>org.apache.qpid</groupId>
       <artifactId>qpid-client</artifactId>
-      <version>0.26-SNAPSHOT</version>
-      <scope>compile</scope>
+      <version>${project.version}</version>
     </dependency>
 
     <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
-      <version>${log4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
-      <version>${slf4j-version}</version>
-      <scope>compile</scope>
     </dependency>
 
     <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-jms_1.1_spec</artifactId>
-      <version>1.0</version>
-      <scope>compile</scope>
     </dependency>
   </dependencies>
    

Modified: qpid/branches/java-broker-amqp-1-0-management/tests/src/py/qpid_tests/broker_0_10/dtx.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/tests/src/py/qpid_tests/broker_0_10/dtx.py?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/tests/src/py/qpid_tests/broker_0_10/dtx.py (original)
+++ qpid/branches/java-broker-amqp-1-0-management/tests/src/py/qpid_tests/broker_0_10/dtx.py Fri Feb  7 15:24:50 2014
@@ -594,9 +594,10 @@ class DtxTests(TestBase010):
 
         session.dtx_select()
         session.dtx_start(xid=tx)
-        self.assertEqual(0, session.dtx_get_timeout(xid=tx).timeout)
-        session.dtx_set_timeout(xid=tx, timeout=60)
+        # below test checks for default value of dtx-default-timeout broker option
         self.assertEqual(60, session.dtx_get_timeout(xid=tx).timeout)
+        session.dtx_set_timeout(xid=tx, timeout=200)
+        self.assertEqual(200, session.dtx_get_timeout(xid=tx).timeout)
         self.assertEqual(self.XA_OK, session.dtx_end(xid=tx).status)
         self.assertEqual(self.XA_OK, session.dtx_rollback(xid=tx).status)
 
@@ -628,6 +629,21 @@ class DtxTests(TestBase010):
         self.assertEqual(self.XA_RBTIMEOUT, session.dtx_end(xid=tx).status)
         self.assertEqual(self.XA_RBTIMEOUT, session.dtx_rollback(xid=tx).status)
 
+    def test_set_timeout_too_high(self):
+        """
+        Test the timeout can't be more than --dtx-max-timeout
+        broker option
+        """
+        session = self.session
+        tx = self.xid("dummy")
+
+        session.dtx_select()
+        session.dtx_start(xid=tx)
+        try:
+            session.dtx_set_timeout(xid=tx, timeout=3601)
+        except SessionException, e:
+            self.assertEquals(542, e.args[0].error_code)
+
 
 
     def test_recover(self):

Modified: qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/efp.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/efp.py?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/efp.py (original)
+++ qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/efp.py Fri Feb  7 15:24:50 2014
@@ -26,10 +26,11 @@ class EfpManager(object):
     Top level class to analyze the Qpid Linear Store (QLS) directory for the partitions that make up the
     Empty File Pool (EFP).
     """
-    def __init__(self, directory):
+    def __init__(self, directory, args):
         if not os.path.exists(directory):
             raise qls.err.InvalidQlsDirectoryNameError(directory)
         self.directory = directory
+        self.args = args
         self.partitions = []
     def report(self):
         print 'Found', len(self.partitions), 'partition(s).'

Modified: qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/err.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/err.py?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/err.py (original)
+++ qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/err.py Fri Feb  7 15:24:50 2014
@@ -30,6 +30,16 @@ class QlsRecordError(QlsError):
         QlsError.__init__(self)
         self.file_header = file_header
         self.record = record
+    def get_expected_fro(self):
+        return self.file_header.first_record_offset
+    def get_file_number(self):
+        return self.file_header.file_num
+    def get_queue_name(self):
+        return self.file_header.queue_name
+    def get_record_id(self):
+        return self.record.record_id
+    def get_record_offset(self):
+        return self.record.file_offset
     def __str__(self):
         return 'queue="%s" file_id=0x%x record_offset=0x%x record_id=0x%x' % \
             (self.file_header.queue_name, self.file_header.file_num, self.record.file_offset, self.record.record_id)

Modified: qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/jrnl.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/jrnl.py?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/jrnl.py (original)
+++ qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qls/jrnl.py Fri Feb  7 15:24:50 2014
@@ -23,6 +23,7 @@ import qls.err
 import string
 import struct
 from time import gmtime, strftime
+import zlib
 
 class HighCounter(object):
     def __init__(self):
@@ -39,10 +40,11 @@ class HighCounter(object):
 class JournalRecoveryManager(object):
     TPL_DIR_NAME = 'tpl'
     JRNL_DIR_NAME = 'jrnl'
-    def __init__(self, directory):
+    def __init__(self, directory, args):
         if not os.path.exists(directory):
             raise qls.err.InvalidQlsDirectoryNameError(directory)
         self.directory = directory
+        self.args = args
         self.tpl = None
         self.journals = {}
         self.high_rid_counter = HighCounter()
@@ -54,20 +56,21 @@ class JournalRecoveryManager(object):
     def run(self, args):
         tpl_dir = os.path.join(self.directory, JournalRecoveryManager.TPL_DIR_NAME)
         if os.path.exists(tpl_dir):
-            self.tpl = Journal(tpl_dir, None)
+            self.tpl = Journal(tpl_dir, None, self.args)
             self.tpl.recover(self.high_rid_counter)
             print
         jrnl_dir = os.path.join(self.directory, JournalRecoveryManager.JRNL_DIR_NAME)
-        prepared_list = self.tpl.txn_map.get_prepared_list()
+        prepared_list = self.tpl.txn_map.get_prepared_list() if self.tpl is not None else {}
         if os.path.exists(jrnl_dir):
             for dir_entry in sorted(os.listdir(jrnl_dir)):
-                jrnl = Journal(os.path.join(jrnl_dir, dir_entry), prepared_list)
+                jrnl = Journal(os.path.join(jrnl_dir, dir_entry), prepared_list, self.args)
                 jrnl.recover(self.high_rid_counter)
                 self.journals[jrnl.get_queue_name()] = jrnl
                 print
         self._reconcile_transactions(prepared_list, args.txn)
     def _reconcile_transactions(self, prepared_list, txn_flag):
         print 'Transaction reconciliation report:'
+        print '=================================='
         print len(prepared_list), 'open transaction(s) found in prepared transaction list:'
         for xid in prepared_list.keys():
             commit_flag = prepared_list[xid]
@@ -79,7 +82,7 @@ class JournalRecoveryManager(object):
                 status = '[Prepared, but interrupted during abort phase]'
             print ' ', Utils.format_xid(xid), status
             if prepared_list[xid] is None: # Prepared, but not committed or aborted
-                enqueue_record = self.tpl.get_txn_map_record(xid)
+                enqueue_record = self.tpl.get_txn_map_record(xid)[0][1]
                 dequeue_record = Utils.create_record('QLSd', DequeueRecord.TXN_COMPLETE_COMMIT_FLAG, \
                                                      self.tpl.current_journal_file, self.high_rid_counter.get_next(), \
                                                      enqueue_record.record_id, xid, None)
@@ -141,7 +144,7 @@ class EnqueueMap(object):
                     lock_str = '[LOCKED]'
                 else:
                     lock_str = ''
-                rstr += '\n  %d:%s %s' % (journal_file.file_header.file_num, record, lock_str)
+                rstr += '\n  0x%x:%s %s' % (journal_file.file_header.file_num, record, lock_str)
         else:
             rstr += '.'
         return rstr
@@ -245,7 +248,7 @@ class TransactionMap(object):
             for xid, op_list in self.txn_map.iteritems():
                 rstr += '\n  %s containing %d operations:' % (Utils.format_xid(xid), len(op_list))
                 for journal_file, record, _ in op_list:
-                    rstr += '\n    %d:%s' % (journal_file.file_header.file_num, record)
+                    rstr += '\n    0x%x:%s' % (journal_file.file_header.file_num, record)
         else:
             rstr += '.'
         return rstr
@@ -303,7 +306,7 @@ class Journal(object):
     """
     Instance of a Qpid Linear Store (QLS) journal.
     """
-    def __init__(self, directory, xid_prepared_list):
+    def __init__(self, directory, xid_prepared_list, args):
         self.directory = directory
         self.queue_name = os.path.basename(directory)
         self.files = {}
@@ -315,6 +318,10 @@ class Journal(object):
         self.first_rec_flag = None
         self.statistics = JournalStatistics()
         self.xid_prepared_list = xid_prepared_list # This is None for the TPL instance only
+        self.args = args
+        self.last_record_offset = None # TODO: Move into JournalFile
+        self.num_filler_records_required = None # TODO: Move into JournalFile
+        self.fill_to_offset = None
     def add_record(self, record):
         if isinstance(record, EnqueueRecord) or isinstance(record, DequeueRecord):
             if record.xid_size > 0:
@@ -334,15 +341,18 @@ class Journal(object):
     def get_queue_name(self):
         return self.queue_name
     def recover(self, high_rid_counter):
-        print 'Recovering', self.queue_name #DEBUG
+        print 'Recovering %s' % self.queue_name
         self._analyze_files()
         try:
             while self._get_next_record(high_rid_counter):
                 pass
+            self._check_alignment()
         except qls.err.NoMoreFilesInJournalError:
-            #print '[No more files in journal]' # DEBUG
-            #print #DEBUG
-            pass
+            print 'No more files in journal'
+        except qls.err.FirstRecordOffsetMismatchError as err:
+            print '0x%08x: **** FRO ERROR: queue=\"%s\" fid=0x%x fro actual=0x%08x expected=0x%08x' % \
+            (err.get_expected_fro(), err.get_queue_name(), err.get_file_number(), err.get_record_offset(),
+             err.get_expected_fro())
     def reconcile_transactions(self, prepared_list, txn_flag):
         xid_list = self.txn_map.get_xid_list()
         if len(xid_list) > 0:
@@ -363,11 +373,12 @@ class Journal(object):
                     if txn_flag:
                         self.txn_map.abort(xid)
             else:
-                print '  ', Utils.format_xid(xid), '- Aborting, not in prepared transaction list'
+                print '  ', Utils.format_xid(xid), '- Ignoring, not in prepared transaction list'
                 if txn_flag:
                     self.txn_map.abort(xid)
     def report(self, print_stats_flag):
         print 'Journal "%s":' % self.queue_name
+        print '=' * (11 + len(self.queue_name))
         if print_stats_flag:
             print str(self.statistics)
         print self.enq_map.report_str(True, True)
@@ -375,6 +386,11 @@ class Journal(object):
         JournalFile.report_header()
         for file_num in sorted(self.files.keys()):
             self.files[file_num].report()
+        #TODO: move this to JournalFile, append to file info
+        if self.num_filler_records_required is not None and self.fill_to_offset is not None:
+            print '0x%x:0x%08x: %d filler records required for DBLK alignment to 0x%08x' % \
+                  (self.current_journal_file.file_header.file_num, self.last_record_offset,
+                   self.num_filler_records_required, self.fill_to_offset)
         print
     #--- protected functions ---
     def _analyze_files(self):
@@ -386,21 +402,35 @@ class Journal(object):
                 args = Utils.load_args(file_handle, RecordHeader)
                 file_hdr = FileHeader(*args)
                 file_hdr.init(file_handle, *Utils.load_args(file_handle, FileHeader))
-                if not file_hdr.is_header_valid(file_hdr):
-                    break
-                file_hdr.load(file_handle)
-                if not file_hdr.is_valid():
-                    break
-                Utils.skip(file_handle, file_hdr.file_header_size_sblks * Utils.SBLK_SIZE)
-                self.files[file_hdr.file_num] = JournalFile(file_hdr)
+                if file_hdr.is_header_valid(file_hdr):
+                    file_hdr.load(file_handle)
+                    if file_hdr.is_valid():
+                        Utils.skip(file_handle, file_hdr.file_header_size_sblks * Utils.SBLK_SIZE)
+                        self.files[file_hdr.file_num] = JournalFile(file_hdr)
         self.file_num_list = sorted(self.files.keys())
         self.file_num_itr = iter(self.file_num_list)
+    def _check_alignment(self): # TODO: Move into JournalFile
+        remaining_sblks = self.last_record_offset % Utils.SBLK_SIZE
+        if remaining_sblks == 0:
+            self.num_filler_records_required = 0
+        else:
+            self.num_filler_records_required = (Utils.SBLK_SIZE - remaining_sblks) / Utils.DBLK_SIZE
+            self.fill_to_offset = self.last_record_offset + (self.num_filler_records_required * Utils.DBLK_SIZE)
+            if self.args.show_recs or self.args.show_all_recs:
+                print '0x%x:0x%08x: %d filler records required for DBLK alignment to 0x%08x' % \
+                      (self.current_journal_file.file_header.file_num, self.last_record_offset,
+                       self.num_filler_records_required, self.fill_to_offset)
     def _check_file(self):
-        if self.current_journal_file is not None and not self.current_journal_file.file_header.is_end_of_file():
-            return
-        self._get_next_file()
+        if self.current_journal_file is not None:
+            if not self.current_journal_file.file_header.is_end_of_file():
+                return True
+            if self.current_journal_file.file_header.is_end_of_file():
+                self.last_record_offset = self.current_journal_file.file_header.file_handle.tell()
+        if not self._get_next_file():
+            return False
         fhdr = self.current_journal_file.file_header
         fhdr.file_handle.seek(fhdr.first_record_offset)
+        return True
     def _get_next_file(self):
         if self.current_journal_file is not None:
             file_handle = self.current_journal_file.file_header.file_handle
@@ -413,13 +443,16 @@ class Journal(object):
         except StopIteration:
             pass
         if file_num == 0:
-            raise qls.err.NoMoreFilesInJournalError(self.queue_name)
+            return False
         self.current_journal_file = self.files[file_num]
         self.first_rec_flag = True
-        print self.current_journal_file.file_header
-        #print '[file_num=0x%x]' % self.current_journal_file.file_num #DEBUG
+        if self.args.show_recs or self.args.show_all_recs:
+            print '0x%x:%s' % (self.current_journal_file.file_header.file_num, self.current_journal_file.file_header)
+        return True
     def _get_next_record(self, high_rid_counter):
-        self._check_file()
+        if not self._check_file():
+            return False
+        self.last_record_offset = self.current_journal_file.file_header.file_handle.tell()
         this_record = Utils.load(self.current_journal_file.file_header.file_handle, RecordHeader)
         if not this_record.is_header_valid(self.current_journal_file.file_header):
             return False
@@ -427,32 +460,42 @@ class Journal(object):
             if this_record.file_offset != self.current_journal_file.file_header.first_record_offset:
                 raise qls.err.FirstRecordOffsetMismatchError(self.current_journal_file.file_header, this_record)
             self.first_rec_flag = False
-        high_rid_counter.check(this_record.record_id)
         self.statistics.total_record_count += 1
+        start_journal_file = self.current_journal_file
         if isinstance(this_record, EnqueueRecord):
-            self._handle_enqueue_record(this_record)
-            print this_record
+            ok_flag = self._handle_enqueue_record(this_record, start_journal_file)
+            high_rid_counter.check(this_record.record_id)
+            if self.args.show_recs or self.args.show_all_recs:
+                print '0x%x:%s' % (start_journal_file.file_header.file_num, this_record)
         elif isinstance(this_record, DequeueRecord):
-            self._handle_dequeue_record(this_record)
-            print this_record
+            ok_flag = self._handle_dequeue_record(this_record, start_journal_file)
+            high_rid_counter.check(this_record.record_id)
+            if self.args.show_recs or self.args.show_all_recs:
+                print '0x%x:%s' % (start_journal_file.file_header.file_num, this_record)
         elif isinstance(this_record, TransactionRecord):
-            self._handle_transaction_record(this_record)
-            print this_record
+            ok_flag = self._handle_transaction_record(this_record, start_journal_file)
+            high_rid_counter.check(this_record.record_id)
+            if self.args.show_recs or self.args.show_all_recs:
+                print '0x%x:%s' % (start_journal_file.file_header.file_num, this_record)
         else:
             self.statistics.filler_record_count += 1
+            ok_flag = True
+            if self.args.show_all_recs:
+                print '0x%x:%s' % (start_journal_file.file_header.file_num, this_record)
         Utils.skip(self.current_journal_file.file_header.file_handle, Utils.DBLK_SIZE)
-        return True
-    def _handle_enqueue_record(self, enqueue_record):
-        start_journal_file = self.current_journal_file
+        return ok_flag
+    def _handle_enqueue_record(self, enqueue_record, start_journal_file):
         while enqueue_record.load(self.current_journal_file.file_header.file_handle):
-            self._get_next_file()
-        if not enqueue_record.is_valid(self.current_journal_file):
-            return
+            if not self._get_next_file():
+                enqueue_record.truncated_flag = True
+                return False
+        if not enqueue_record.is_valid(start_journal_file):
+            return False
         if enqueue_record.is_external() and enqueue_record.data != None:
             raise qls.err.ExternalDataError(self.current_journal_file.file_header, enqueue_record)
         if enqueue_record.is_transient():
             self.statistics.transient_record_count += 1
-            return
+            return True
         if enqueue_record.xid_size > 0:
             self.txn_map.add(start_journal_file, enqueue_record)
             self.statistics.transaction_operation_count += 1
@@ -462,13 +505,14 @@ class Journal(object):
             self.enq_map.add(start_journal_file, enqueue_record, False)
         start_journal_file.incr_enq_cnt()
         self.statistics.enqueue_count += 1
-        #print enqueue_record, # DEBUG
-    def _handle_dequeue_record(self, dequeue_record):
-        start_journal_file = self.current_journal_file
+        return True
+    def _handle_dequeue_record(self, dequeue_record, start_journal_file):
         while dequeue_record.load(self.current_journal_file.file_header.file_handle):
-            self._get_next_file()
-        if not dequeue_record.is_valid(self.current_journal_file):
-            return
+            if not self._get_next_file():
+                dequeue_record.truncated_flag = True
+                return False
+        if not dequeue_record.is_valid(start_journal_file):
+            return False
         if dequeue_record.xid_size > 0:
             if self.xid_prepared_list is None: # ie this is the TPL
                 dequeue_record.transaction_prepared_list_flag = True
@@ -484,12 +528,14 @@ class Journal(object):
             except qls.err.RecordIdNotFoundError:
                 dequeue_record.warnings.append('NOT IN EMAP')
         self.statistics.dequeue_count += 1
-        #print dequeue_record, # DEBUG
-    def _handle_transaction_record(self, transaction_record):
+        return True
+    def _handle_transaction_record(self, transaction_record, start_journal_file):
         while transaction_record.load(self.current_journal_file.file_header.file_handle):
-            self._get_next_file()
-        if not transaction_record.is_valid(self.current_journal_file):
-            return
+            if not self._get_next_file():
+                transaction_record.truncated_flag = True
+                return False
+        if not transaction_record.is_valid(start_journal_file):
+            return False
         if transaction_record.magic[-1] == 'a':
             self.statistics.transaction_abort_count += 1
         else:
@@ -501,7 +547,7 @@ class Journal(object):
 #        if transaction_record.magic[-1] == 'c': # commits only
 #            self._txn_obj_list[hdr.xid] = hdr
         self.statistics.transaction_record_count += 1
-        #print transaction_record, # DEBUG
+        return True
     def _load_data(self, record):
         while not record.is_complete:
             record.load(self.current_journal_file.file_handle)
@@ -511,6 +557,7 @@ class JournalFile(object):
         self.file_header = file_header
         self.enq_cnt = 0
         self.deq_cnt = 0
+        self.num_filler_records_required = None
     def incr_enq_cnt(self):
         self.enq_cnt += 1
     def decr_enq_cnt(self, record):
@@ -527,7 +574,8 @@ class JournalFile(object):
         print '-------- ------- ---- ----- ------------'
     def report(self):
         comment = '<uninitialized>' if self.file_header.file_num == 0 else ''
-        print '%8d %7d %4d %4dk %s %s' % (self.file_header.file_num, self.get_enq_cnt(), self.file_header.partition_num,
+        file_num_str = '0x%x' % self.file_header.file_num
+        print '%8s %7d %4d %4dk %s %s' % (file_num_str, self.get_enq_cnt(), self.file_header.partition_num,
                                           self.file_header.efp_data_size_kb,
                                           os.path.basename(self.file_header.file_handle.name), comment)
 
@@ -541,6 +589,9 @@ class RecordHeader(object):
         self.serial = serial
         self.record_id = record_id
         self.warnings = []
+        self.truncated_flag = False
+    def checksum_encode(self):
+        return struct.pack(RecordHeader.FORMAT, self.magic, self.version, self.user_flags, self.serial, self.record_id)
     def load(self, file_handle):
         pass
     @staticmethod
@@ -560,8 +611,6 @@ class RecordHeader(object):
             if self.version != Utils.RECORD_VERSION:
                 raise qls.err.InvalidRecordVersionError(file_header, self, Utils.RECORD_VERSION)
             if self.serial != file_header.serial:
-                #print '[serial mismatch at 0x%x]' % self.file_offset #DEBUG
-                #print #DEBUG
                 return False
         return True
     def _get_warnings(self):
@@ -606,8 +655,8 @@ class RecordTail(object):
                 return False
             self.valid_flag = Utils.inv_str(self.xmagic) == record.magic and \
                               self.serial == record.serial and \
-                              self.record_id == record.record_id
-            # TODO: When we can verify the checksum, add this here
+                              self.record_id == record.record_id and \
+                              Utils.adler32(record.checksum_encode()) == self.checksum
         return self.valid_flag
     def __str__(self):
         """Return a string representation of the this RecordTail instance"""
@@ -660,7 +709,7 @@ class FileHeader(RecordHeader):
         return strftime(fstr, time)
     def __str__(self):
         """Return a string representation of the this FileHeader instance"""
-        return '%s fnum=%d fro=0x%08x p=%d s=%dk t=%s %s' % (RecordHeader.__str__(self), self.file_num,
+        return '%s fnum=0x%x fro=0x%08x p=%d s=%dk t=%s %s' % (RecordHeader.__str__(self), self.file_num,
                                                              self.first_record_offset, self.partition_num,
                                                              self.efp_data_size_kb, self.timestamp_str(),
                                                              self._get_warnings())
@@ -677,6 +726,9 @@ class EnqueueRecord(RecordHeader):
         self.data = None
         self.data_complete = False
         self.record_tail = None
+    def checksum_encode(self):
+        return RecordHeader.checksum_encode(self) + struct.pack(self.FORMAT, self.xid_size, self.data_size) + \
+            self.xid + self.data
     def is_external(self):
         return self.user_flags & EnqueueRecord.EXTERNAL_FLAG_MASK > 0
     def is_transient(self):
@@ -732,6 +784,9 @@ class EnqueueRecord(RecordHeader):
         return fstr
     def __str__(self):
         """Return a string representation of the this EnqueueRecord instance"""
+        if self.truncated_flag:
+            return '%s xid(%d) data(%d) [Truncated, no more files in journal]' % (RecordHeader.__str__(self),
+                                                                                  self.xid_size, self.data_size)
         if self.record_tail is None:
             record_tail_str = ''
         else:
@@ -750,6 +805,9 @@ class DequeueRecord(RecordHeader):
         self.xid = None
         self.xid_complete = False
         self.record_tail = None
+    def checksum_encode(self):
+        return RecordHeader.checksum_encode(self) + struct.pack(self.FORMAT, self.dequeue_record_id, self.xid_size) + \
+            self.xid
     def is_transaction_complete_commit(self):
         return self.user_flags & DequeueRecord.TXN_COMPLETE_COMMIT_FLAG > 0
     def is_valid(self, journal_file):
@@ -790,6 +848,10 @@ class DequeueRecord(RecordHeader):
         return ''
     def __str__(self):
         """Return a string representation of the this DequeueRecord instance"""
+        if self.truncated_flag:
+            return '%s xid(%d) drid=0x%x [Truncated, no more files in journal]' % (RecordHeader.__str__(self),
+                                                                                   self.xid_size,
+                                                                                   self.dequeue_record_id)
         if self.record_tail is None:
             record_tail_str = ''
         else:
@@ -805,6 +867,8 @@ class TransactionRecord(RecordHeader):
         self.xid = None
         self.xid_complete = False
         self.record_tail = None
+    def checksum_encode(self):
+        return RecordHeader.checksum_encode(self) + struct.pack(self.FORMAT, self.xid_size) + self.xid
     def is_valid(self, journal_file):
         if not RecordHeader.is_header_valid(self, journal_file.file_header):
             return False
@@ -832,6 +896,8 @@ class TransactionRecord(RecordHeader):
         return False
     def __str__(self):
         """Return a string representation of the this TransactionRecord instance"""
+        if self.truncated_flag:
+            return '%s xid(%d) [Truncated, no more files in journal]' % (RecordHeader.__str__(self), self.xid_size)
         if self.record_tail is None:
             record_tail_str = ''
         else:
@@ -845,6 +911,9 @@ class Utils(object):
     RECORD_VERSION = 2
     SBLK_SIZE = 4096
     @staticmethod
+    def adler32(data):
+        return zlib.adler32(data) & 0xffffffff
+    @staticmethod
     def create_record(magic, uflags, journal_file, record_id, dequeue_record_id, xid, data):
         record_class = _CLASSES.get(magic[-1])
         record = record_class(0, magic, Utils.RECORD_VERSION, uflags, journal_file.file_header.serial, record_id)
@@ -866,7 +935,7 @@ class Utils(object):
             record.data_complete = True
         record.record_tail = RecordTail(None)
         record.record_tail.xmagic = Utils.inv_str(magic)
-        record.record_tail.checksum = 0 # TODO: when we can calculate checksums, add this here
+        record.record_tail.checksum = Utils.adler32(record.checksum_encode())
         record.record_tail.serial = record.serial
         record.record_tail.record_id = record.record_id
         return record
@@ -878,7 +947,7 @@ class Utils(object):
         # << DEBUG >>
         begin = data.find('msg')
         end = data.find('\0', begin)
-        return 'data="%s"' % data[begin:end]
+        return 'data(%d)="%s"' % (dsize, data[begin:end])
         # << END DEBUG
         if Utils._is_printable(data):
             datastr = Utils._split_str(data)
@@ -941,7 +1010,8 @@ class Utils(object):
     @staticmethod
     def skip(file_handle, boundary):
         """Read and discard disk bytes until the next multiple of boundary"""
-        file_handle.read(Utils._rem_bytes_in_block(file_handle, boundary))
+        if not file_handle.closed:
+            file_handle.read(Utils._rem_bytes_in_block(file_handle, boundary))
     #--- protected functions ---
     @staticmethod
     def _hex_str(in_str, begin, end):

Modified: qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid-ha
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid-ha?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid-ha (original)
+++ qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid-ha Fri Feb  7 15:24:50 2014
@@ -133,12 +133,10 @@ class SetCmd(Command):
         Command.__init__(self, "set", "Set HA configuration settings")
         self.add("--brokers-url", "<url>", "string", "URL with address of each broker in the cluster. Used by brokers to connect to each other.")
         self.add("--public-url", "<url>", "string", "URL advertised to clients to connect to the cluster. May be a list or a VIP.")
-        self.add("--backups", "<n>", "int", "Expect <n> backups to be running"),
 
     def do_execute(self, qmf_broker, ha_broker, opts, args):
         if (opts.brokers_url): qmf_broker._method("setBrokersUrl", {"url":opts.brokers_url}, HA_BROKER)
         if (opts.public_url): qmf_broker._method("setPublicUrl", {"url":opts.public_url}, HA_BROKER)
-        if (opts.backups): qmf_broker._method("setExpectedBackups", {"expectedBackups":opts.backups}, HA_BROKER)
 
 SetCmd()
 
@@ -151,7 +149,6 @@ class QueryCmd(Command):
         for x in [("Status:", hb.status),
                   ("Brokers URL:", hb.brokersUrl),
                   ("Public URL:", hb.publicUrl),
-                  ("Expected Backups:", hb.expectedBackups),
                   ("Replicate: ", hb.replicateDefault)
                   ]:
             print "%-20s %s"%(x[0], x[1])

Modified: qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid_qls_analyze.py
URL: http://svn.apache.org/viewvc/qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid_qls_analyze.py?rev=1565688&r1=1565687&r2=1565688&view=diff
==============================================================================
--- qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid_qls_analyze.py (original)
+++ qpid/branches/java-broker-amqp-1-0-management/tools/src/py/qpid_qls_analyze.py Fri Feb  7 15:24:50 2014
@@ -37,8 +37,8 @@ class QqpdLinearStoreAnalyzer(object):
         self.args = None
         self._process_args()
         self.qls_dir = os.path.abspath(self.args.qls_dir)
-        self.efp_manager = efp.EfpManager(self.qls_dir)
-        self.jrnl_recovery_mgr = jrnl.JournalRecoveryManager(self.qls_dir)
+        self.efp_manager = efp.EfpManager(self.qls_dir, self.args)
+        self.jrnl_recovery_mgr = jrnl.JournalRecoveryManager(self.qls_dir, self.args)
     def _analyze_efp(self):
         self.efp_manager.run(self.args)
     def _analyze_journals(self):
@@ -49,6 +49,10 @@ class QqpdLinearStoreAnalyzer(object):
                             help='Qpid Linear Store (QLS) directory to be analyzed')
         parser.add_argument('--efp', action='store_true',
                             help='Analyze the Emtpy File Pool (EFP) and show stats')
+        parser.add_argument('--show-recs', action='store_true',
+                            help='Show material records found during recovery')
+        parser.add_argument('--show-all-recs', action='store_true',
+                            help='Show all records (including fillers) found during recovery')
         parser.add_argument('--stats', action='store_true',
                             help='Print journal record stats')
         parser.add_argument('--txn', action='store_true',



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