QPID-8415: [Broker-J] Change model version to 8.0
diff --git a/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java b/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
index aad9c23..ee078c3 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/model/BrokerModel.java
@@ -76,9 +76,13 @@
      *     Attribute OAuth2AuthenticationProvider#clientSecret is not mandatory anymore
      *     Introduced statistics QueueManagingVirtualHost#totalConnectionCount and QueueManagingVirtualHost#InboundMessageSizeHighWatermark
      *     BDBHAVirtualHostNode attributes name, groupName, address are made immutable
+     *
+     * 8.0
+     *    Added new broker statistics: processCpuTime, processCpuLoad
+     *    Added new context variables for queues and exchanges to configure behaviour on unknown declared arguments
      */
-    public static final int MODEL_MAJOR_VERSION = 7;
-    public static final int MODEL_MINOR_VERSION = 1;
+    public static final int MODEL_MAJOR_VERSION = 8;
+    public static final int MODEL_MINOR_VERSION = 0;
     public static final String MODEL_VERSION = MODEL_MAJOR_VERSION + "." + MODEL_MINOR_VERSION;
     private static final Model MODEL_INSTANCE = new BrokerModel();
     private final Map<Class<? extends ConfiguredObject>, Class<? extends ConfiguredObject>> _parents =
diff --git a/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java b/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
index cc92f2f..57b989c 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
@@ -68,6 +68,7 @@
         register(new Upgrader_6_0_to_6_1());
         register(new Upgrader_6_1_to_7_0());
         register(new Upgrader_7_0_to_7_1());
+        register(new Upgrader_7_1_to_8_0());
     }
 
     private static final class Upgrader_1_0_to_1_1 extends StoreUpgraderPhase
@@ -708,6 +709,30 @@
         }
     }
 
+    private class Upgrader_7_1_to_8_0 extends StoreUpgraderPhase
+    {
+
+        public Upgrader_7_1_to_8_0()
+        {
+            super("modelVersion", "7.1", "8.0");
+        }
+
+        @Override
+        public void configuredObject(final ConfiguredObjectRecord record)
+        {
+            if("Broker".equals(record.getType()))
+            {
+                upgradeRootRecord(record);
+            }
+        }
+
+        @Override
+        public void complete()
+        {
+
+        }
+    }
+
     private static class VirtualHostEntryUpgrader
     {
         @SuppressWarnings("serial")
diff --git a/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java b/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
index 8b854b9..db16180 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
@@ -77,6 +77,7 @@
         register(new Upgrader_6_0_to_6_1());
         register(new Upgrader_6_1_to_7_0());
         register(new Upgrader_7_0_to_7_1());
+        register(new Upgrader_7_1_to_8_0());
 
         Map<String, UUID> defaultExchangeIds = new HashMap<String, UUID>();
         for (String exchangeName : DEFAULT_EXCHANGES.keySet())
@@ -1062,6 +1063,30 @@
         }
     }
 
+    private class Upgrader_7_1_to_8_0 extends StoreUpgraderPhase
+    {
+
+        public Upgrader_7_1_to_8_0()
+        {
+            super("modelVersion", "7.1", "8.0");
+        }
+
+        @Override
+        public void configuredObject(final ConfiguredObjectRecord record)
+        {
+            if("VirtualHost".equals(record.getType()))
+            {
+                upgradeRootRecord(record);
+            }
+        }
+
+        @Override
+        public void complete()
+        {
+
+        }
+    }
+
     public boolean upgradeAndRecover(final DurableConfigurationStore durableConfigurationStore,
                                      final ConfiguredObjectRecord... initialRecords)
     {
diff --git a/broker-core/src/main/resources/initial-config.json b/broker-core/src/main/resources/initial-config.json
index f2a82c1..0d65149 100644
--- a/broker-core/src/main/resources/initial-config.json
+++ b/broker-core/src/main/resources/initial-config.json
@@ -20,7 +20,7 @@
  */
 {
   "name": "${broker.name}",
-  "modelVersion": "7.1",
+  "modelVersion": "8.0",
   "authenticationproviders" : [ {
     "name" : "plain",
     "type" : "Plain",
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/GenericCategoryController.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/GenericCategoryController.java
index 35ff45b..8dafe29 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/GenericCategoryController.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/GenericCategoryController.java
@@ -33,6 +33,8 @@
 import org.apache.qpid.server.management.plugin.ManagementController;
 import org.apache.qpid.server.management.plugin.ManagementException;
 import org.apache.qpid.server.management.plugin.ManagementResponse;
+import org.apache.qpid.server.management.plugin.controller.latest.LatestManagementControllerAdapter;
+import org.apache.qpid.server.model.BrokerModel;
 import org.apache.qpid.server.model.ConfiguredObject;
 
 public abstract class GenericCategoryController implements CategoryController
@@ -52,7 +54,11 @@
     {
         _name = name;
         _managementController = managementController;
-        _nextVersionManagementController = nextVersionManagementController;
+        boolean isNextLatest = nextVersionManagementController != null &&
+                               BrokerModel.MODEL_VERSION.equalsIgnoreCase(nextVersionManagementController.getVersion());
+        _nextVersionManagementController = isNextLatest ?
+                new LatestManagementControllerAdapter(nextVersionManagementController)
+                : nextVersionManagementController;
         _defaultType = defaultType;
         _typeControllers = typeControllers.stream().collect(Collectors.toMap(TypeController::getTypeName, c -> c));
         _nextVersionTypeControllers =
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/LegacyManagementController.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/LegacyManagementController.java
index 4c9f4206..fb8ec3e 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/LegacyManagementController.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/LegacyManagementController.java
@@ -32,8 +32,6 @@
 
     Collection<String> getChildrenCategories(String category);
 
-    Collection<String> getCategories();
-
     Collection<String> getCategoryHierarchy(String rootCategory, String category);
 
     CategoryController getCategoryController(String category);
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerFactory.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerFactory.java
index 82ba07e..be5981c 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerFactory.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/latest/LatestManagementControllerFactory.java
@@ -44,7 +44,7 @@
     @Override
     public String getPreviousVersion()
     {
-        return "7.0";
+        return "7.1";
     }
 
     @Override
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementController.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementController.java
index 44ddf03..5c628a7 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementController.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementController.java
@@ -23,15 +23,11 @@
 import static org.apache.qpid.server.management.plugin.controller.ConverterHelper.getIntParameterFromRequest;
 import static org.apache.qpid.server.management.plugin.controller.ConverterHelper.getParameter;
 
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.stream.Collectors;
 
 import org.apache.qpid.server.management.plugin.ManagementController;
 import org.apache.qpid.server.management.plugin.controller.AbstractLegacyConfiguredObjectController;
-import org.apache.qpid.server.management.plugin.controller.LegacyConfiguredObject;
 
 public class LegacyManagementController extends AbstractLegacyConfiguredObjectController
 {
@@ -44,9 +40,10 @@
     private static final int DEFAULT_DEPTH = 0;
     private static final int DEFAULT_OVERSIZE = 120;
 
-    public LegacyManagementController(final ManagementController nextVersionManagementController)
+    public LegacyManagementController(final ManagementController nextVersionManagementController,
+                                      final String modelVersion)
     {
-        super(LegacyManagementControllerFactory.MODEL_VERSION, nextVersionManagementController);
+        super(modelVersion, nextVersionManagementController);
     }
 
     @Override
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory.java
index 1b26e92..30d022d 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory.java
@@ -55,7 +55,7 @@
                                                            final ManagementController nextVersionManagementController)
     {
 
-        LegacyManagementController controller = new LegacyManagementController(nextVersionManagementController);
+        LegacyManagementController controller = new LegacyManagementController(nextVersionManagementController, MODEL_VERSION);
         controller.initialize();
         return controller;
     }
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory_v7_1.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory_v7_1.java
new file mode 100644
index 0000000..0bd8242
--- /dev/null
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerFactory_v7_1.java
@@ -0,0 +1,61 @@
+/*
+ *
+ * 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.server.management.plugin.controller.v7_0;
+
+import org.apache.qpid.server.management.plugin.HttpManagementConfiguration;
+import org.apache.qpid.server.management.plugin.ManagementController;
+import org.apache.qpid.server.management.plugin.ManagementControllerFactory;
+import org.apache.qpid.server.management.plugin.controller.v7_0.LegacyManagementController;
+import org.apache.qpid.server.plugin.PluggableService;
+
+@PluggableService
+public class LegacyManagementControllerFactory_v7_1 implements ManagementControllerFactory
+{
+    public static final String MODEL_VERSION = "7.1";
+
+    @Override
+    public String getType()
+    {
+        return "org.apache.qpid.server.management.plugin.model.v7_1";
+    }
+
+    @Override
+    public String getVersion()
+    {
+        return MODEL_VERSION;
+    }
+
+    @Override
+    public String getPreviousVersion()
+    {
+        return "7.0";
+    }
+
+    @Override
+    public ManagementController createManagementController(final HttpManagementConfiguration<?> httpManagement,
+                                                           final ManagementController nextVersionManagementController)
+    {
+
+        LegacyManagementController controller = new LegacyManagementController(nextVersionManagementController, MODEL_VERSION);
+        controller.initialize();
+        return controller;
+    }
+}
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryController.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryController.java
index 82ace6d..7aad335 100644
--- a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryController.java
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryController.java
@@ -40,7 +40,7 @@
                              final Set<TypeController> typeControllers)
     {
         super(managementController,
-              new LatestManagementControllerAdapter(managementController.getNextVersionManagementController()),
+              managementController.getNextVersionManagementController(),
               name,
               defaultType,
               typeControllers);
diff --git a/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryControllerFactory_v7_1.java b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryControllerFactory_v7_1.java
new file mode 100644
index 0000000..40e02cd
--- /dev/null
+++ b/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/controller/v7_0/category/LegacyCategoryControllerFactory_v7_1.java
@@ -0,0 +1,34 @@
+/*
+ *
+ * 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.server.management.plugin.controller.v7_0.category;
+
+import org.apache.qpid.server.management.plugin.controller.v7_0.LegacyManagementControllerFactory_v7_1;
+import org.apache.qpid.server.plugin.PluggableService;
+
+@PluggableService
+public class LegacyCategoryControllerFactory_v7_1 extends LegacyCategoryControllerFactory
+{
+    @Override
+    public String getModelVersion()
+    {
+        return LegacyManagementControllerFactory_v7_1.MODEL_VERSION;
+    }
+}
diff --git a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerTest.java b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerTest.java
index 6b0e836..892c9b6 100644
--- a/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerTest.java
+++ b/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/controller/v7_0/LegacyManagementControllerTest.java
@@ -48,7 +48,8 @@
     public void setUp()
     {
         final ManagementController nextVersionManagementController = mock(ManagementController.class);
-        _controller = new LegacyManagementController(nextVersionManagementController);
+        _controller = new LegacyManagementController(nextVersionManagementController,
+                                                     LegacyManagementControllerFactory.MODEL_VERSION);
         _controller.initialize();
     }
 
diff --git a/systests/end-to-end-conversion-tests/src/main/resources/config-end-to-end-conversion-tests.json b/systests/end-to-end-conversion-tests/src/main/resources/config-end-to-end-conversion-tests.json
index 9d512f0..3188fda 100644
--- a/systests/end-to-end-conversion-tests/src/main/resources/config-end-to-end-conversion-tests.json
+++ b/systests/end-to-end-conversion-tests/src/main/resources/config-end-to-end-conversion-tests.json
@@ -20,7 +20,7 @@
  */
 {
   "name" : "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "authenticationproviders" : [ {
     "name" : "anon",
     "type" : "Anonymous"
diff --git a/systests/protocol-tests-amqp-0-10/src/main/resources/config-protocol-tests-0-10.json b/systests/protocol-tests-amqp-0-10/src/main/resources/config-protocol-tests-0-10.json
index 813d127..a4fd9f3 100644
--- a/systests/protocol-tests-amqp-0-10/src/main/resources/config-protocol-tests-0-10.json
+++ b/systests/protocol-tests-amqp-0-10/src/main/resources/config-protocol-tests-0-10.json
@@ -20,7 +20,7 @@
  */
 {
   "name" : "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "authenticationproviders" : [ {
     "name" : "anon",
     "type" : "Anonymous"
diff --git a/systests/protocol-tests-amqp-0-8/src/main/resources/config-protocol-tests-0-8.json b/systests/protocol-tests-amqp-0-8/src/main/resources/config-protocol-tests-0-8.json
index d34fb4e..c74f09d 100644
--- a/systests/protocol-tests-amqp-0-8/src/main/resources/config-protocol-tests-0-8.json
+++ b/systests/protocol-tests-amqp-0-8/src/main/resources/config-protocol-tests-0-8.json
@@ -20,7 +20,7 @@
  */
 {
   "name" : "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "authenticationproviders" : [ {
     "name" : "anon",
     "type" : "Anonymous"
diff --git a/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json b/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json
index 9793fe9..7ccded1 100644
--- a/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json
+++ b/systests/protocol-tests-amqp-1-0/src/main/resources/config-protocol-tests.json
@@ -20,7 +20,7 @@
  */
 {
   "name" : "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "authenticationproviders" : [ {
     "name" : "anon",
     "type" : "Anonymous"
diff --git a/systests/qpid-systests-http-management/src/main/resources/config-http-management-tests.json b/systests/qpid-systests-http-management/src/main/resources/config-http-management-tests.json
index 946e545..0825206 100644
--- a/systests/qpid-systests-http-management/src/main/resources/config-http-management-tests.json
+++ b/systests/qpid-systests-http-management/src/main/resources/config-http-management-tests.json
@@ -20,7 +20,7 @@
  */
 {
   "name": "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "keystores": [
     {
       "name": "systestsKeyStore",
diff --git a/systests/qpid-systests-jms-core/src/main/resources/config-jms-tests.json b/systests/qpid-systests-jms-core/src/main/resources/config-jms-tests.json
index fe06e08..af190a0 100644
--- a/systests/qpid-systests-jms-core/src/main/resources/config-jms-tests.json
+++ b/systests/qpid-systests-jms-core/src/main/resources/config-jms-tests.json
@@ -20,7 +20,7 @@
  */
 {
   "name" : "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "authenticationproviders" : [ {
     "name" : "anon",
     "type" : "Anonymous"
diff --git a/systests/qpid-systests-spawn-admin/src/main/resources/spawn-broker.json b/systests/qpid-systests-spawn-admin/src/main/resources/spawn-broker.json
index 42af64c..7e7eaae 100644
--- a/systests/qpid-systests-spawn-admin/src/main/resources/spawn-broker.json
+++ b/systests/qpid-systests-spawn-admin/src/main/resources/spawn-broker.json
@@ -20,7 +20,7 @@
  */
 {
   "name" : "${broker.name}",
-  "modelVersion" : "7.1",
+  "modelVersion" : "8.0",
   "authenticationproviders" : [ {
     "name" : "plain",
     "type" : "Plain",