You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2016/12/18 12:57:44 UTC

svn commit: r1774886 - /qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/

Author: orudyy
Date: Sun Dec 18 12:57:44 2016
New Revision: 1774886

URL: http://svn.apache.org/viewvc?rev=1774886&view=rev
Log:
QPID-7548: Remove responsibility from StoreUpgraderPhase to call next upgrader in a chain

Added:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractConfigurationStoreUpgraderAndRecoverer.java
Removed:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/NullUpgrader.java
Modified:
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreUpgrader.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/NonNullUpgrader.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java

Added: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractConfigurationStoreUpgraderAndRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractConfigurationStoreUpgraderAndRecoverer.java?rev=1774886&view=auto
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractConfigurationStoreUpgraderAndRecoverer.java (added)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractConfigurationStoreUpgraderAndRecoverer.java Sun Dec 18 12:57:44 2016
@@ -0,0 +1,70 @@
+package org.apache.qpid.server.store;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.qpid.server.model.ConfiguredObject;
+import org.apache.qpid.server.util.Action;
+
+public class AbstractConfigurationStoreUpgraderAndRecoverer
+{
+    private final Map<String, StoreUpgraderPhase> _upgraders = new HashMap<>();
+
+    List<ConfiguredObjectRecord> upgrade(final DurableConfigurationStore store,
+                                         final List<ConfiguredObjectRecord> records,
+                                         final String rootCategory,
+                                         final String modelVersionAttributeName)
+    {
+        GenericStoreUpgrader upgrader = new GenericStoreUpgrader(rootCategory,
+                                                                 modelVersionAttributeName, store, _upgraders);
+        upgrader.upgrade(records);
+        return upgrader.getRecords();
+    }
+
+    void register(StoreUpgraderPhase upgrader)
+    {
+        _upgraders.put(upgrader.getFromVersion(), upgrader);
+    }
+
+    void applyRecursively(final ConfiguredObject<?> object, final RecursiveAction<ConfiguredObject<?>> action)
+    {
+        applyRecursively(object, action, new HashSet<ConfiguredObject<?>>());
+    }
+
+    void applyRecursively(final ConfiguredObject<?> object,
+                                  final RecursiveAction<ConfiguredObject<?>> action,
+                                  final HashSet<ConfiguredObject<?>> visited)
+    {
+        if(!visited.contains(object))
+        {
+            visited.add(object);
+            action.performAction(object);
+            if (action.applyToChildren(object))
+            {
+                for (Class<? extends ConfiguredObject> childClass : object.getModel().getChildTypes(object.getCategoryClass()))
+                {
+                    Collection<? extends ConfiguredObject> children = object.getChildren(childClass);
+                    if (children != null)
+                    {
+                        for (ConfiguredObject<?> child : children)
+                        {
+                            applyRecursively(child, action, visited);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+
+
+    interface RecursiveAction<C> extends Action<C>
+    {
+        boolean applyToChildren(C object);
+    }
+
+
+}

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java?rev=1774886&r1=1774885&r2=1774886&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/BrokerStoreUpgraderAndRecoverer.java Sun Dec 18 12:57:44 2016
@@ -43,15 +43,13 @@ import org.apache.qpid.server.model.Cont
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.SystemConfig;
 import org.apache.qpid.server.model.VirtualHostAlias;
-import org.apache.qpid.server.util.Action;
 
-public class BrokerStoreUpgraderAndRecoverer implements ContainerStoreUpgraderAndRecoverer<Broker>
+public class BrokerStoreUpgraderAndRecoverer extends AbstractConfigurationStoreUpgraderAndRecoverer implements ContainerStoreUpgraderAndRecoverer<Broker>
 {
     private static final Logger LOGGER = LoggerFactory.getLogger(BrokerStoreUpgraderAndRecoverer.class);
 
     public static final String VIRTUALHOSTS = "virtualhosts";
     private final SystemConfig<?> _systemConfig;
-    private final Map<String, StoreUpgraderPhase> _upgraders = new HashMap<String, StoreUpgraderPhase>();
 
     // Note: don't use externally defined constants in upgraders in case they change, the values here MUST stay the same
     // no matter what changes are made to the code in the future
@@ -69,11 +67,6 @@ public class BrokerStoreUpgraderAndRecov
         register(new Upgrader_6_0_to_6_1());
     }
 
-    private void register(StoreUpgraderPhase upgrader)
-    {
-        _upgraders.put(upgrader.getFromVersion(), upgrader);
-    }
-
     private static final class Upgrader_1_0_to_1_1 extends StoreUpgraderPhase
     {
         private Upgrader_1_0_to_1_1()
@@ -87,7 +80,7 @@ public class BrokerStoreUpgraderAndRecov
             if (record.getType().equals("Broker"))
             {
                 record = upgradeRootRecord(record);
-                record = createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
+                createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
             }
             else if (record.getType().equals("VirtualHost") && record.getAttributes().containsKey("storeType"))
             {
@@ -97,13 +90,11 @@ public class BrokerStoreUpgraderAndRecov
                 getUpdateMap().put(record.getId(), record);
             }
 
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -121,17 +112,13 @@ public class BrokerStoreUpgraderAndRecov
             if (record.getType().equals("Broker"))
             {
                 record = upgradeRootRecord(record);
-                record = createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
+                createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
             }
-
-            getNextUpgrader().configuredObject(record);
-
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -165,17 +152,13 @@ public class BrokerStoreUpgraderAndRecov
             else if (record.getType().equals("Broker"))
             {
                 record = upgradeRootRecord(record);
-                record = createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
+                createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
             }
-
-            getNextUpgrader().configuredObject(record);
-
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -215,17 +198,14 @@ public class BrokerStoreUpgraderAndRecov
             else if (record.getType().equals("Broker"))
             {
                 record = upgradeRootRecord(record);
-                record = createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
+                createVirtualHostsRecordsFromBrokerRecordForModel_1_x(record, this);
             }
 
-            getNextUpgrader().configuredObject(record);
-
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -255,18 +235,16 @@ public class BrokerStoreUpgraderAndRecov
             }
             else if (record.getType().equals("Broker"))
             {
-                record = upgradeRootRecord(record);
+                upgradeRootRecord(record);
             }
             else if("KeyStore".equals(record.getType()))
             {
-                record = upgradeKeyStoreRecordIfTypeTheSame(record, "FileKeyStore");
+                upgradeKeyStoreRecordIfTypeTheSame(record, "FileKeyStore");
             }
             else if("TrustStore".equals(record.getType()))
             {
-                record = upgradeKeyStoreRecordIfTypeTheSame(record, "FileTrustStore");
+                upgradeKeyStoreRecordIfTypeTheSame(record, "FileTrustStore");
             }
-
-            getNextUpgrader().configuredObject(record);
         }
 
         private ConfiguredObjectRecord upgradeKeyStoreRecordIfTypeTheSame(ConfiguredObjectRecord record, String expectedType)
@@ -311,13 +289,11 @@ public class BrokerStoreUpgraderAndRecov
                                                                                  attributes,
                                                                                  Collections.singletonMap("Port", parent.getId()));
             getUpdateMap().put(record.getId(), record);
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -377,7 +353,6 @@ public class BrokerStoreUpgraderAndRecov
                     getUpdateMap().put(record.getId(), record);
                 }
             }
-            getNextUpgrader().configuredObject(record);
         }
 
         private void addLogger(final ConfiguredObjectRecord record, String name, String type)
@@ -394,7 +369,6 @@ public class BrokerStoreUpgraderAndRecov
             addNameValueFilter("Qpid", logger, LogLevel.INFO, "org.apache.qpid.*");
             addNameValueFilter("Operational", logger, LogLevel.INFO, "qpid.message.*");
             getUpdateMap().put(logger.getId(), logger);
-            getNextUpgrader().configuredObject(logger);
         }
 
         private void addNameValueFilter(String inclusionRuleName,
@@ -415,8 +389,6 @@ public class BrokerStoreUpgraderAndRecov
                                                                                        Collections.singletonMap("BrokerLogger",
                                                                                                                 loggerRecord.getId()));
             getUpdateMap().put(filterRecord.getId(), filterRecord);
-            getNextUpgrader().configuredObject(filterRecord);
-
         }
 
         @Override
@@ -458,7 +430,6 @@ public class BrokerStoreUpgraderAndRecov
                 }
 
             }
-            getNextUpgrader().complete();
         }
 
     }
@@ -480,8 +451,6 @@ public class BrokerStoreUpgraderAndRecov
             {
                 record = upgradeRootRecord(record);
                 _rootRecordId = record.getId();
-
-                getNextUpgrader().configuredObject(record);
             }
             else if (record.getType().equals("TrustStore"))
             {
@@ -505,10 +474,6 @@ public class BrokerStoreUpgraderAndRecov
                     {
                         getDeleteMap().put(record.getId(), record);
                     }
-                    else
-                    {
-                        getNextUpgrader().configuredObject(record);
-                    }
                 }
                 else if (record.getType().equals("AuthenticationProvider") && attributes.containsKey("preferencesproviders"))
                 {
@@ -517,17 +482,12 @@ public class BrokerStoreUpgraderAndRecov
                     updatedAttributes.remove("preferencesproviders");
                     record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
                     getUpdateMap().put(record.getId(), record);
-                    getNextUpgrader().configuredObject(record);
                 }
                 else if (record.getType().equals("PreferencesProvider"))
                 {
                     // removing of f Preferences Provider record for non-JSON configuration store
                     getDeleteMap().put(record.getId(), record);
                 }
-                else
-                {
-                    getNextUpgrader().configuredObject(record);
-                }
             }
         }
 
@@ -563,7 +523,6 @@ public class BrokerStoreUpgraderAndRecov
                 record = new ConfiguredObjectRecordImpl(record.getId(), record.getType(), updatedAttributes, record.getParents());
                 getUpdateMap().put(record.getId(), record);
             }
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
@@ -579,10 +538,8 @@ public class BrokerStoreUpgraderAndRecov
                 ConfiguredObjectRecord allowAllAclRecord =
                         new ConfiguredObjectRecordImpl(allowAllACLId, "AccessControlProvider", attrs, Collections.singletonMap("Broker", _rootRecordId));
                 getUpdateMap().put(allowAllAclRecord.getId(), allowAllAclRecord);
-                getNextUpgrader().configuredObject(allowAllAclRecord);
 
             }
-            getNextUpgrader().complete();
         }
 
     }
@@ -934,46 +891,10 @@ public class BrokerStoreUpgraderAndRecov
         return _systemConfig.getContainer(Broker.class);
     }
 
-    List<ConfiguredObjectRecord> upgrade(final DurableConfigurationStore store,
-                                         final List<ConfiguredObjectRecord> records)
-    {
-        GenericStoreUpgrader upgrader = new GenericStoreUpgrader(Broker.class.getSimpleName(), Broker.MODEL_VERSION, store, _upgraders);
-        upgrader.upgrade(records);
-        return upgrader.getRecords();
-    }
-
-    private void applyRecursively(final ConfiguredObject<?> object, final RecursiveAction<ConfiguredObject<?>> action)
-    {
-        applyRecursively(object, action, new HashSet<ConfiguredObject<?>>());
-    }
-
-    private void applyRecursively(final ConfiguredObject<?> object,
-                                  final RecursiveAction<ConfiguredObject<?>> action,
-                                  final HashSet<ConfiguredObject<?>> visited)
-    {
-        if(!visited.contains(object))
-        {
-            visited.add(object);
-            action.performAction(object);
-            if (action.applyToChildren(object))
-            {
-                for (Class<? extends ConfiguredObject> childClass : object.getModel().getChildTypes(object.getCategoryClass()))
-                {
-                    Collection<? extends ConfiguredObject> children = object.getChildren(childClass);
-                    if (children != null)
-                    {
-                        for (ConfiguredObject<?> child : children)
-                        {
-                            applyRecursively(child, action, visited);
-                        }
-                    }
-                }
-            }
-        }
-    }
 
-    private interface RecursiveAction<C> extends Action<C>
+    public List<ConfiguredObjectRecord> upgrade(final DurableConfigurationStore dcs,
+                                                final List<ConfiguredObjectRecord> records)
     {
-        boolean applyToChildren(C object);
+        return upgrade(dcs, records, Broker.class.getSimpleName(), Broker.MODEL_VERSION);
     }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreUpgrader.java?rev=1774886&r1=1774885&r2=1774886&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreUpgrader.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/DurableConfigurationStoreUpgrader.java Sun Dec 18 12:57:44 2016
@@ -29,8 +29,6 @@ public interface DurableConfigurationSto
 
     void complete();
 
-    void setNextUpgrader(DurableConfigurationStoreUpgrader upgrader);
-
     Map<UUID, ConfiguredObjectRecord> getUpdatedRecords();
     Map<UUID, ConfiguredObjectRecord> getDeletedRecords();
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java?rev=1774886&r1=1774885&r2=1774886&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/GenericStoreUpgrader.java Sun Dec 18 12:57:44 2016
@@ -22,8 +22,10 @@ package org.apache.qpid.server.store;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.UUID;
 
 import org.slf4j.Logger;
@@ -31,7 +33,6 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.model.BrokerModel;
-import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
 
 public class GenericStoreUpgrader
 {
@@ -78,17 +79,27 @@ public class GenericStoreUpgrader
             LOGGER.info(_rootCategory + " store has model version " + version + ". Number of record(s) " + _records.size());
         }
 
-        DurableConfigurationStoreUpgrader upgrader = buildUpgraderChain(version);
-
-        for(ConfiguredObjectRecord record : _records.values())
+        Map<UUID, ConfiguredObjectRecord> updatedRecords = new HashMap<>();
+        Map<UUID, ConfiguredObjectRecord> records = new HashMap<>(_records);
+        for(DurableConfigurationStoreUpgrader upgrader: buildUpgraderList(version))
         {
-            upgrader.configuredObject(record);
-        }
+            for(ConfiguredObjectRecord record : records.values())
+            {
+                upgrader.configuredObject(record);
+            }
+
+            upgrader.complete();
 
-        upgrader.complete();
+            Set<UUID> deleted = upgrader.getDeletedRecords().keySet();
+            updatedRecords.putAll(upgrader.getUpdatedRecords());
+            updatedRecords.keySet().removeAll(deleted);
 
-        Map<UUID, ConfiguredObjectRecord> deletedRecords = upgrader.getDeletedRecords();
-        Map<UUID, ConfiguredObjectRecord> updatedRecords = upgrader.getUpdatedRecords();
+            records.keySet().removeAll(deleted);
+            records.putAll(updatedRecords);
+        }
+
+        Map<UUID, ConfiguredObjectRecord> deletedRecords = new HashMap<>(_records);
+        deletedRecords.keySet().removeAll(records.keySet());
 
         if (LOGGER.isDebugEnabled())
         {
@@ -104,9 +115,9 @@ public class GenericStoreUpgrader
         _records.putAll(updatedRecords);
     }
 
-    private DurableConfigurationStoreUpgrader buildUpgraderChain(String version)
+    private List<DurableConfigurationStoreUpgrader> buildUpgraderList(String version)
     {
-        DurableConfigurationStoreUpgrader head = null;
+        List<DurableConfigurationStoreUpgrader> result = new LinkedList<>();
         while(!BrokerModel.MODEL_VERSION.equals(version))
         {
             if (LOGGER.isDebugEnabled())
@@ -119,28 +130,10 @@ public class GenericStoreUpgrader
             {
                 throw new IllegalConfigurationException("No phase upgrader for version " + version);
             }
-
-            if(head == null)
-            {
-                head = upgrader;
-            }
-            else
-            {
-                head.setNextUpgrader(upgrader);
-            }
             version = upgrader.getToVersion();
+            result.add(upgrader);
         }
-
-        if(head == null)
-        {
-            head = new NullUpgrader();
-        }
-        else
-        {
-            head.setNextUpgrader(new NullUpgrader());
-        }
-
-        return head;
+        return result;
     }
 
     private String getCurrentVersion()
@@ -155,14 +148,4 @@ public class GenericStoreUpgrader
         return BrokerModel.MODEL_VERSION;
     }
 
-    private class RecordCollectionHandler implements ConfiguredObjectRecordHandler
-    {
-
-        @Override
-        public void handle(final ConfiguredObjectRecord record)
-        {
-            _records.put(record.getId(), record);
-        }
-
-    }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/NonNullUpgrader.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/NonNullUpgrader.java?rev=1774886&r1=1774885&r2=1774886&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/NonNullUpgrader.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/NonNullUpgrader.java Sun Dec 18 12:57:44 2016
@@ -24,34 +24,17 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-public abstract class NonNullUpgrader implements DurableConfigurationStoreUpgrader
+abstract class NonNullUpgrader implements DurableConfigurationStoreUpgrader
 {
-    private DurableConfigurationStoreUpgrader _nextUpgrader;
-    private final Map<UUID, ConfiguredObjectRecord> _updates = new HashMap<UUID, ConfiguredObjectRecord>();
-    private final Map<UUID, ConfiguredObjectRecord> _deletes = new HashMap<UUID, ConfiguredObjectRecord>();
+    private final Map<UUID, ConfiguredObjectRecord> _updates = new HashMap<>();
+    private final Map<UUID, ConfiguredObjectRecord> _deletes = new HashMap<>();
 
-    public final void setNextUpgrader(final DurableConfigurationStoreUpgrader upgrader)
-    {
-        if(_nextUpgrader == null)
-        {
-            _nextUpgrader = upgrader;
-        }
-        else
-        {
-            _nextUpgrader.setNextUpgrader(upgrader);
-        }
-    }
-
-    protected DurableConfigurationStoreUpgrader getNextUpgrader()
-    {
-        return _nextUpgrader;
-    }
-
-    protected Map<UUID, ConfiguredObjectRecord> getUpdateMap()
+    Map<UUID, ConfiguredObjectRecord> getUpdateMap()
     {
         return _updates;
     }
-    protected Map<UUID, ConfiguredObjectRecord> getDeleteMap()
+
+    Map<UUID, ConfiguredObjectRecord> getDeleteMap()
     {
         return _deletes;
     }
@@ -59,8 +42,7 @@ public abstract class NonNullUpgrader im
     @Override
     public final Map<UUID, ConfiguredObjectRecord> getUpdatedRecords()
     {
-        final Map<UUID, ConfiguredObjectRecord> updates = new HashMap<UUID, ConfiguredObjectRecord>(_updates);
-        updates.putAll(_nextUpgrader.getUpdatedRecords());
+        final Map<UUID, ConfiguredObjectRecord> updates = new HashMap<>(_updates);
         updates.keySet().removeAll(getDeletedRecords().keySet());
         return updates;
     }
@@ -68,8 +50,6 @@ public abstract class NonNullUpgrader im
     @Override
     public final Map<UUID, ConfiguredObjectRecord> getDeletedRecords()
     {
-        final Map<UUID, ConfiguredObjectRecord> deletes = new HashMap<UUID, ConfiguredObjectRecord>(_deletes);
-        deletes.putAll(_nextUpgrader.getDeletedRecords());
-        return deletes;
+        return new HashMap<>(_deletes);
     }
 }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java?rev=1774886&r1=1774885&r2=1774886&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/VirtualHostStoreUpgraderAndRecoverer.java Sun Dec 18 12:57:44 2016
@@ -21,10 +21,8 @@
 package org.apache.qpid.server.store;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -46,13 +44,11 @@ import org.apache.qpid.server.model.Virt
 import org.apache.qpid.server.model.VirtualHostNode;
 import org.apache.qpid.server.queue.QueueArgumentsConverter;
 import org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler;
-import org.apache.qpid.server.util.Action;
 import org.apache.qpid.server.virtualhost.QueueManagingVirtualHost;
 
-public class VirtualHostStoreUpgraderAndRecoverer
+public class VirtualHostStoreUpgraderAndRecoverer extends AbstractConfigurationStoreUpgraderAndRecoverer
 {
     private final VirtualHostNode<?> _virtualHostNode;
-    private Map<String, StoreUpgraderPhase> _upgraders = new HashMap<String, StoreUpgraderPhase>();
 
     @SuppressWarnings("serial")
     private static final Map<String, String> DEFAULT_EXCHANGES = Collections.unmodifiableMap(new HashMap<String, String>()
@@ -86,11 +82,6 @@ public class VirtualHostStoreUpgraderAnd
         _defaultExchangeIds = Collections.unmodifiableMap(defaultExchangeIds);
     }
 
-    private void register(StoreUpgraderPhase upgrader)
-    {
-        _upgraders.put(upgrader.getFromVersion(), upgrader);
-    }
-
     /*
      * Removes filters from queue bindings to exchanges other than topic exchanges.  In older versions of the broker
      * such bindings would have been ignored, starting from the point at which the config version changed, these
@@ -164,7 +155,7 @@ public class VirtualHostStoreUpgraderAnd
                 UUID id = record.getId();
                 if ("org.apache.qpid.server.model.VirtualHost".equals(type))
                 {
-                    record = upgradeRootRecord(record);
+                    upgradeRootRecord(record);
                 }
                 else if(type.equals(Binding.class.getName()) && hasSelectorArguments(attributes) && !isTopicExchange(record))
                 {
@@ -176,10 +167,7 @@ public class VirtualHostStoreUpgraderAnd
                     entry.setValue(record);
 
                 }
-                getNextUpgrader().configuredObject(record);
             }
-
-            getNextUpgrader().complete();
         }
 
     }
@@ -204,7 +192,7 @@ public class VirtualHostStoreUpgraderAnd
 
             if ("VirtualHost".equals(type))
             {
-                newRecord = upgradeRootRecord(newRecord);
+                upgradeRootRecord(newRecord);
             }
         }
 
@@ -223,12 +211,7 @@ public class VirtualHostStoreUpgraderAnd
                     getDeleteMap().put(entry.getKey(), entry.getValue());
                     iterator.remove();
                 }
-                else
-                {
-                    getNextUpgrader().configuredObject(record);
-                }
             }
-            getNextUpgrader().complete();
         }
 
         private boolean unknownExchange(final UUID exchangeId)
@@ -273,7 +256,7 @@ public class VirtualHostStoreUpgraderAnd
         {
             if("VirtualHost".equals(record.getType()))
             {
-                record = upgradeRootRecord(record);
+                upgradeRootRecord(record);
             }
             else if("Queue".equals(record.getType()))
             {
@@ -289,13 +272,11 @@ public class VirtualHostStoreUpgraderAnd
                 getUpdateMap().put(record.getId(), record);
             }
 
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -320,7 +301,7 @@ public class VirtualHostStoreUpgraderAnd
         {
             if("VirtualHost".equals(record.getType()))
             {
-                record = upgradeRootRecord(record);
+                upgradeRootRecord(record);
             }
             else if(Queue.class.getSimpleName().equals(record.getType()))
             {
@@ -346,14 +327,11 @@ public class VirtualHostStoreUpgraderAnd
                 record = new ConfiguredObjectRecordImpl(record.getId(),record.getType(),newAttributes, record.getParents());
                 getUpdateMap().put(record.getId(), record);
             }
-
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -396,9 +374,8 @@ public class VirtualHostStoreUpgraderAnd
             }
             else if("Queue".equals(record.getType()))
             {
-                record = updateQueueRecordIfNecessary(record);
+                updateQueueRecordIfNecessary(record);
             }
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
@@ -432,11 +409,8 @@ public class VirtualHostStoreUpgraderAnd
                 ConfiguredObjectRecord record = new ConfiguredObjectRecordImpl(id, Exchange.class.getSimpleName(), attributes, Collections.singletonMap(_virtualHostRecord.getType(), _virtualHostRecord.getId()));
                 getUpdateMap().put(id, record);
 
-                getNextUpgrader().configuredObject(record);
-
             }
 
-            getNextUpgrader().complete();
         }
 
         private ConfiguredObjectRecord updateQueueRecordIfNecessary(ConfiguredObjectRecord record)
@@ -508,15 +482,13 @@ public class VirtualHostStoreUpgraderAnd
 
             if("VirtualHost".equals(record.getType()))
             {
-                record = upgradeRootRecord(record);
+                upgradeRootRecord(record);
             }
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -533,15 +505,13 @@ public class VirtualHostStoreUpgraderAnd
 
             if("VirtualHost".equals(record.getType()))
             {
-                record = upgradeRootRecord(record);
+                upgradeRootRecord(record);
             }
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -559,15 +529,13 @@ public class VirtualHostStoreUpgraderAnd
 
             if("VirtualHost".equals(record.getType()))
             {
-                record = upgradeRootRecord(record);
+                upgradeRootRecord(record);
             }
-            getNextUpgrader().configuredObject(record);
         }
 
         @Override
         public void complete()
         {
-            getNextUpgrader().complete();
         }
 
     }
@@ -575,7 +543,6 @@ public class VirtualHostStoreUpgraderAnd
     public boolean upgradeAndRecover(final DurableConfigurationStore durableConfigurationStore,
                                      final ConfiguredObjectRecord... initialRecords)
     {
-        String virtualHostCategory = VirtualHost.class.getSimpleName();
         final List<ConfiguredObjectRecord> records = new ArrayList<>();
         boolean isNew = durableConfigurationStore.openConfigurationStore(new ConfiguredObjectRecordHandler()
         {
@@ -586,10 +553,10 @@ public class VirtualHostStoreUpgraderAnd
             }
         }, initialRecords);
 
-        GenericStoreUpgrader upgraderHandler = new GenericStoreUpgrader(virtualHostCategory, VirtualHost.MODEL_VERSION, durableConfigurationStore, _upgraders);
-        upgraderHandler.upgrade(records);
-
-        List<ConfiguredObjectRecord> upgradedRecords = upgraderHandler.getRecords();
+        List<ConfiguredObjectRecord> upgradedRecords = upgrade(durableConfigurationStore,
+                                                               records,
+                                                               VirtualHost.class.getSimpleName(),
+                                                               VirtualHost.MODEL_VERSION);
         recover(durableConfigurationStore, upgradedRecords, isNew);
         return isNew;
     }
@@ -617,9 +584,15 @@ public class VirtualHostStoreUpgraderAnd
                 configChangeListener = new StoreConfigurationChangeListener(durableConfigurationStore);
         if(_virtualHostNode.getVirtualHost() != null)
         {
-            applyRecursively(_virtualHostNode.getVirtualHost(), new Action<ConfiguredObject<?>>()
+            applyRecursively(_virtualHostNode.getVirtualHost(), new RecursiveAction<ConfiguredObject<?>>()
             {
                 @Override
+                public boolean applyToChildren(final ConfiguredObject<?> object)
+                {
+                    return object.isDurable();
+                }
+
+                @Override
                 public void performAction(final ConfiguredObject<?> object)
                 {
                     object.addChangeListener(configChangeListener);
@@ -633,9 +606,15 @@ public class VirtualHostStoreUpgraderAnd
             {
                 if(child instanceof VirtualHost)
                 {
-                    applyRecursively(child, new Action<ConfiguredObject<?>>()
+                    applyRecursively(child, new RecursiveAction<ConfiguredObject<?>>()
                     {
                         @Override
+                        public boolean applyToChildren(final ConfiguredObject<?> object)
+                        {
+                            return object.isDurable();
+                        }
+
+                        @Override
                         public void performAction(final ConfiguredObject<?> object)
                         {
                             if(object.isDurable())
@@ -667,32 +646,5 @@ public class VirtualHostStoreUpgraderAnd
             }
         }
     }
-
-    private void applyRecursively(final ConfiguredObject<?> object, final Action<ConfiguredObject<?>> action)
-    {
-        applyRecursively(object, action, new HashSet<ConfiguredObject<?>>());
-    }
-
-    private void applyRecursively(final ConfiguredObject<?> object,
-                                  final Action<ConfiguredObject<?>> action,
-                                  final HashSet<ConfiguredObject<?>> visited)
-    {
-        if(!visited.contains(object))
-        {
-            visited.add(object);
-            action.performAction(object);
-            for(Class<? extends ConfiguredObject> childClass : object.getModel().getChildTypes(object.getCategoryClass()))
-            {
-                Collection<? extends ConfiguredObject> children = object.getChildren(childClass);
-                if(children != null)
-                {
-                    for(ConfiguredObject<?> child : children)
-                    {
-                        applyRecursively(child, action, visited);
-                    }
-                }
-            }
-        }
-    }
 
 }



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