Federico Simoncelli has uploaded a new change for review.

Change subject: core: send domains map on connectStoragePool
......................................................................

core: send domains map on connectStoragePool

Change-Id: Ic16034c6757959e5d0445814a8acc2221a74f6aa
Signed-off-by: Federico Simoncelli <fsimo...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java
D 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
D 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
M packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
19 files changed, 190 insertions(+), 168 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/22712/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
index d6e5cae..5733fdc 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitVdsOnUpCommand.java
@@ -224,9 +224,7 @@
         VDSError error = null;
         try {
             VDSReturnValue vdsReturnValue = 
runVdsCommand(VDSCommandType.ConnectStoragePool,
-                    new ConnectStoragePoolVDSCommandParameters(vds.getId(), 
storagePoolId,
-                            vds.getVdsSpmId(), masterDomain.getId(),
-                            storagePool.getmaster_domain_version()));
+                    new ConnectStoragePoolVDSCommandParameters(vds, 
storagePool));
             if (!vdsReturnValue.getSucceeded()) {
                 error = vdsReturnValue.getVdsError();
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
index 3787421..462c0b6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ActivateStorageDomainCommand.java
@@ -74,7 +74,7 @@
         freeLock();
 
         log.infoFormat("ActivateStorage Domain. Before Connect all hosts to 
pool. Time:{0}", new Date());
-        connectAllHostsToPool();
+        connectAllHostsToPool(); // TBD: really needed?
         runVdsCommand(VDSCommandType.ActivateStorageDomain,
                 new 
ActivateStorageDomainVDSCommandParameters(getStoragePool().getId(), 
getStorageDomain().getId()));
         log.infoFormat("ActivateStorage Domain. After Connect all hosts to 
pool. Time:{0}", new Date());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java
index 7a9279e..78fc213 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AfterDeactivateSingleAsyncOperation.java
@@ -5,10 +5,9 @@
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VdsSpmStatus;
-import 
org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters;
+import 
org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -29,18 +28,9 @@
             log.infoFormat("After deactivate treatment vds: {0},pool {1}", 
getVdss().get(iterationId).getName(),
                     getStoragePool().getName());
             if (!_isLastMaster) {
-                Backend.getInstance()
-                        .getResourceManager()
-                        .RunVdsCommand(
-                                VDSCommandType.RefreshStoragePool,
-                                new 
RefreshStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(),
-                                        getStoragePool().getId(),
-                                        
!_newMasterStorageDomainId.equals(Guid.Empty) ? _newMasterStorageDomainId
-                                                : DbFacade.getInstance()
-                                                        .getStorageDomainDao()
-                                                        
.getMasterStorageDomainIdForPool(
-                                                                
getStoragePool().getId()), getStoragePool()
-                                                .getmaster_domain_version()));
+                Backend.getInstance().getResourceManager().RunVdsCommand(
+                        VDSCommandType.ConnectStoragePool,
+                        new 
ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), 
getStoragePool(), true));
             }
 
             if (getVdss().get(iterationId).getSpmStatus() == 
VdsSpmStatus.None) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
index 49f5246..a77dfa2 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ConntectVDSToPoolAndDomains.java
@@ -11,7 +11,7 @@
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.vdsbroker.ResourceManager;
 
-public class ConntectVDSToPoolAndDomains extends 
ActivateDeactivateSingleAsyncOperation {
+public class ConntectVDSToPoolAndDomains extends 
ActivateDeactivateSingleAsyncOperation {  // To be removed probably
 
     private static Log log = 
LogFactory.getLog(ConntectVDSToPoolAndDomains.class);
 
@@ -29,9 +29,7 @@
             if (isConnectSucceeded) {
                 ResourceManager.getInstance().runVdsCommand(
                         VDSCommandType.ConnectStoragePool,
-                        new 
ConnectStoragePoolVDSCommandParameters(vds.getId(), getStoragePool().getId(), 
vds
-                                .getVdsSpmId(), getStorageDomain().getId(), 
getStoragePool()
-                                .getmaster_domain_version()));
+                        new ConnectStoragePoolVDSCommandParameters(vds, 
getStoragePool()));
             } else {
                 log.errorFormat("Failed to connect host {0} to domain {1}",
                         vds.getName(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java
index d8ebc39..5bea460 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/ReconstructMasterDomainCommand.java
@@ -22,7 +22,6 @@
 import 
org.ovirt.engine.core.common.vdscommands.DisconnectStoragePoolVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.IrsBaseVDSCommandParameters;
 import 
org.ovirt.engine.core.common.vdscommands.ReconstructMasterVDSCommandParameters;
-import 
org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.ResetIrsVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
@@ -231,19 +230,13 @@
                             if (isPerformConnectOps && 
connectVdsToNewMaster(vds)) {
                                 try {
                                     runVdsCommand(
-                                            VDSCommandType.RefreshStoragePool,
-                                            new 
RefreshStoragePoolVDSCommandParameters(vds.getId(),
-                                                    getStoragePool().getId(),
-                                                    _newMasterStorageDomainId,
-                                                    
getStoragePool().getmaster_domain_version()));
+                                            VDSCommandType.ConnectStoragePool, 
 // FIXME: _newMasterStorageDomainId
+                                            new 
ConnectStoragePoolVDSCommandParameters(vds, getStoragePool(), true));
                                 } catch (VdcBLLException ex) {
                                     if (VdcBllErrors.StoragePoolUnknown == 
ex.getVdsError().getCode()) {
                                         VDSReturnValue returnVal = 
runVdsCommand(
                                                 
VDSCommandType.ConnectStoragePool,
-                                                new 
ConnectStoragePoolVDSCommandParameters(vds.getId(),
-                                                        
getStoragePool().getId(), vds.getVdsSpmId(),
-                                                        
_newMasterStorageDomainId, getStoragePool()
-                                                                
.getmaster_domain_version()));
+                                                new 
ConnectStoragePoolVDSCommandParameters(vds, getStoragePool()));
                                         if (!returnVal.getSucceeded()) {
                                             log.errorFormat("Post reconstruct 
actions (connectPool) did not complete on host {0} in the pool. error {1}",
                                                     vds.getId(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java
index 27c7fad..c54f359 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshPoolSingleAsyncOperation.java
@@ -8,10 +8,8 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import 
org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
-import 
org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -27,20 +25,11 @@
     @Override
     public void execute(int iterationId) {
         try {
-            Guid masterDomainIdFromDb =
-                    DbFacade.getInstance()
-                            .getStorageDomainDao()
-                            
.getMasterStorageDomainIdForPool(getStoragePool().getId());
-
             if (getStorageDomain().getStorageDomainType() == 
StorageDomainType.Master) {
                 try {
-                    Backend.getInstance()
-                            .getResourceManager()
-                            .RunVdsCommand(
-                                    VDSCommandType.ConnectStoragePool,
-                                    new 
ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(),
-                                            getStoragePool().getId(), 
getVdss().get(iterationId).getVdsSpmId(),
-                                            masterDomainIdFromDb, 
getStoragePool().getmaster_domain_version()));
+                    Backend.getInstance().getResourceManager().RunVdsCommand(
+                            VDSCommandType.ConnectStoragePool,
+                            new 
ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), 
getStoragePool()));
                 } catch (java.lang.Exception e) {
                     log.errorFormat("Could not connect vds {0} to pool {1} - 
moving host to non-operational", getVdss()
                             .get(iterationId).getName(), 
getStoragePool().getName());
@@ -49,13 +38,9 @@
                     }
                 }
             } else {
-                Backend.getInstance()
-                        .getResourceManager()
-                        .RunVdsCommand(
-                                VDSCommandType.RefreshStoragePool,
-                                new 
RefreshStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(),
-                                        getStoragePool().getId(), 
masterDomainIdFromDb, getStoragePool()
-                                                .getmaster_domain_version()));
+                Backend.getInstance().getResourceManager().RunVdsCommand(
+                        VDSCommandType.ConnectStoragePool,
+                        new 
ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), 
getStoragePool(), true));
                 log.infoFormat("Refreshed vds {0} in pool {1}", 
getVdss().get(iterationId).getName(),
                         getStoragePool().getName());
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java
index 2826022..9a69e25 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RefreshStoragePoolAndDisconnectAsyncOperation.java
@@ -4,10 +4,8 @@
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
-import 
org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters;
+import 
org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
 import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
-import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
@@ -20,17 +18,9 @@
     @Override
     public void execute(int iterationId) {
         try {
-            Guid masterDomainIdFromDb =
-                    DbFacade.getInstance()
-                            .getStorageDomainDao()
-                            
.getMasterStorageDomainIdForPool(getStoragePool().getId());
-            Backend.getInstance()
-                    .getResourceManager()
-                    .RunVdsCommand(
-                            VDSCommandType.RefreshStoragePool,
-                            new 
RefreshStoragePoolVDSCommandParameters(getVdss().get(iterationId).getId(),
-                                    getStoragePool().getId(), 
masterDomainIdFromDb, getStoragePool()
-                                            .getmaster_domain_version()));
+            Backend.getInstance().getResourceManager().RunVdsCommand(
+                    VDSCommandType.ConnectStoragePool,
+                    new 
ConnectStoragePoolVDSCommandParameters(getVdss().get(iterationId), 
getStoragePool(), true));
             
StorageHelperDirector.getInstance().getItem(getStorageDomain().getStorageType())
                     .disconnectStorageFromDomainByVdsId(getStorageDomain(), 
getVdss().get(iterationId).getId());
         } catch (RuntimeException e) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
index 5816e5e..566d517 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/FeatureSupported.java
@@ -195,4 +195,8 @@
     public static boolean hotPlugDiskSnapshot(Version version) {
         return supportedInConfig(ConfigValues.HotPlugDiskSnapshotSupported, 
version);
     }
+
+    public static boolean storagePoolNoMetadata(Version version) {
+        return supportedInConfig(ConfigValues.StoragePoolNoMetadata, version);
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index 1cb083d..36037be 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1557,5 +1557,9 @@
     @DefaultValueAttribute("true")
     GlusterSupportForceCreateVolume,
 
+    @TypeConverterAttribute(Boolean.class)
+    @DefaultValueAttribute("true")
+    StoragePoolNoMetadata,
+
     Invalid;
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java
index 185fb46..2a60ff9 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/ConnectStoragePoolVDSCommandParameters.java
@@ -1,44 +1,63 @@
 package org.ovirt.engine.core.common.vdscommands;
 
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.compat.Guid;
 
-public class ConnectStoragePoolVDSCommandParameters extends 
DisconnectStoragePoolVDSCommandParameters {
-    public ConnectStoragePoolVDSCommandParameters(Guid vdsId, Guid 
storagePoolId, int vds_spm_id, Guid masterDomainId,
-            int masterVersion) {
-        super(vdsId, storagePoolId, vds_spm_id);
-        setMasterDomainId(masterDomainId);
-        setMasterVersion(masterVersion);
-    }
 
-    private int privateMasterVersion;
+public class ConnectStoragePoolVDSCommandParameters extends 
VdsIdVDSCommandParametersBase {
 
-    public int getMasterVersion() {
-        return privateMasterVersion;
-    }
+    private VDS vds;
 
-    private void setMasterVersion(int value) {
-        privateMasterVersion = value;
-    }
+    private StoragePool storagePool;
+
+    private boolean refreshOnly;
 
     public ConnectStoragePoolVDSCommandParameters() {
-        privateMasterDomainId = Guid.Empty;
     }
 
-    private Guid privateMasterDomainId;
-
-    public Guid getMasterDomainId() {
-        return privateMasterDomainId;
+    public ConnectStoragePoolVDSCommandParameters(VDS vds, StoragePool 
storagePool) {
+        this.vds = vds;
+        this.storagePool = storagePool;
     }
 
-    private void setMasterDomainId(Guid value) {
-        privateMasterDomainId = value;
+    public ConnectStoragePoolVDSCommandParameters(VDS vds, StoragePool 
storagePool, boolean refreshOnly) {
+        this(vds, storagePool);
+        this.refreshOnly = refreshOnly;
+    }
+
+    public VDS getVds() {
+        return vds;
+    }
+
+    public void setVds(VDS vds) {
+        this.vds = vds;
+    }
+
+    public Guid getVdsId() {
+        return vds.getId();
+    }
+
+    public StoragePool getStoragePool() {
+        return storagePool;
+    }
+
+    public Guid getStoragePoolId() {
+        return storagePool.getId();
+    }
+
+    public void setStoragePool(StoragePool storagePool) {
+        this.storagePool = storagePool;
+    }
+
+    public boolean isRefreshOnly() {
+        return this.refreshOnly;
     }
 
     @Override
     public String toString() {
-        return String.format("%s, masterDomainId = %s, masterVersion = %s",
-                super.toString(),
-                getMasterDomainId(),
-                getMasterVersion());
+        return String.format("%s, vdsId = %s, storagePoolId = %s, 
masterVersion = %d",
+                super.toString(), vds.getId().toString(), 
storagePool.getId().toString(),
+                storagePool.getmaster_domain_version());
     }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java
deleted file mode 100644
index e78f8f9..0000000
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/RefreshStoragePoolVDSCommandParameters.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.ovirt.engine.core.common.vdscommands;
-
-import org.ovirt.engine.core.compat.Guid;
-
-public class RefreshStoragePoolVDSCommandParameters extends 
GetStorageConnectionsListVDSCommandParameters {
-    public RefreshStoragePoolVDSCommandParameters(Guid vdsId, Guid 
storagePoolId, Guid masterStorageDomainId,
-            int masterVersion) {
-        super(vdsId, storagePoolId);
-        setMasterStorageDomainId(masterStorageDomainId);
-        setMasterVersion(masterVersion);
-    }
-
-    private Guid privateMasterStorageDomainId;
-
-    public Guid getMasterStorageDomainId() {
-        return privateMasterStorageDomainId;
-    }
-
-    private void setMasterStorageDomainId(Guid value) {
-        privateMasterStorageDomainId = value;
-    }
-
-    private int privateMasterVersion;
-
-    public int getMasterVersion() {
-        return privateMasterVersion;
-    }
-
-    private void setMasterVersion(int value) {
-        privateMasterVersion = value;
-    }
-
-    public RefreshStoragePoolVDSCommandParameters() {
-        privateMasterStorageDomainId = Guid.Empty;
-    }
-
-    @Override
-    public String toString() {
-        return String.format("%s, masterStorageDomainId=%s, masterVersion=%s",
-                super.toString(),
-                getMasterStorageDomainId(),
-                getMasterVersion());
-    }
-}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index 27b7ab0..3614c34 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -36,7 +36,6 @@
     ConnectStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     DisconnectStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     DiscoverSendTargets("org.ovirt.engine.core.vdsbroker.vdsbroker"),
-    RefreshStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     CreateStoragePool("org.ovirt.engine.core.vdsbroker.vdsbroker"),
     UpgradeStoragePool("org.ovirt.engine.core.vdsbroker.irsbroker"),
     ReconstructMaster("org.ovirt.engine.core.vdsbroker.vdsbroker"),
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
index ffbaf86..a58ed01 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsBrokerCommand.java
@@ -654,8 +654,7 @@
                                 
.getMasterStorageDomainIdForPool(_storagePoolId);
                         VDSReturnValue connectResult = 
ResourceManager.getInstance().runVdsCommand(
                                 VDSCommandType.ConnectStoragePool,
-                                new 
ConnectStoragePoolVDSCommandParameters(selectedVds.getId(), _storagePoolId,
-                                        selectedVds.getVdsSpmId(), masterId, 
storagePool.getmaster_domain_version()));
+                                new 
ConnectStoragePoolVDSCommandParameters(selectedVds, storagePool));
                         if (!connectResult.getSucceeded()
                                 && connectResult.getExceptionObject() 
instanceof IRSNoMasterDomainException) {
                             throw connectResult.getExceptionObject();
@@ -1038,6 +1037,8 @@
                 return;
             }
 
+            boolean vdsNeedsRefresh = false;
+
             // Step 2: build the domain maps for the reported domains and the 
pool domains
             Map<Guid, VDSDomainsData> dataDomainMap = 
getDataDomainsMap(domainsDataList);
             Map<Guid, StorageDomain> poolDomainMap = 
getPoolDomainsMap(_storagePoolId);
@@ -1048,6 +1049,15 @@
                         isDomainReportedAsProblematic(domainData, false) ? 
Status.UNREACHABLE : Status.VISIBLE;
 
                 _domainsVisibility.setVdsDomainStatus(vds.getId(), 
domainData.getDomainId(), status);
+
+                // If the vds is reporting a domain that should be in 
maintenance it needs a refresh
+                StorageDomain poolDomain = 
poolDomainMap.get(domainData.getDomainId());
+                if (poolDomain.getStatus() == 
StorageDomainStatus.MovingToMaintenance
+                        || poolDomain.getStatus() == 
StorageDomainStatus.Maintenance) {
+                    log.infoFormat("VDS {0} is reporting domain in maintenance 
{1} refresh is needed",
+                            vds.getId(), poolDomain.getId());
+                    vdsNeedsRefresh = true;
+                }
             }
 
             // Step 4: for each domain in the pool that is not reported by the 
vds mark it as unreported
@@ -1055,9 +1065,25 @@
                 VDSDomainsData domainData = 
dataDomainMap.get(poolDomain.getId());
                 if (domainData == null) {
                     _domainsVisibility.setVdsDomainStatus(vds.getId(), 
poolDomain.getId(), Status.UNREPORTED);
+
+                    // If the vds is not reporting a domain that should be 
active it needs a refresh
+                    if (poolDomain.getStatus() == StorageDomainStatus.Active) {
+                        log.infoFormat("VDS {0} is not reporting domain {1} 
refresh is needed",
+                                vds.getId(), poolDomain.getId());
+                        vdsNeedsRefresh = true;
+                    }
+
+                    // Check if the domain is ready to be moved to maintenance
                     moveDomainToMaintenance(poolDomain);
                 }
             }
+
+            // Step 5: try to synchronize the vds domain visibility when needed
+            if (vdsNeedsRefresh) {
+                StoragePool storagePool = 
DbFacade.getInstance().getStoragePoolDao().get(_storagePoolId);
+                
ResourceManager.getInstance().runVdsCommand(VDSCommandType.ConnectStoragePool,
+                        new ConnectStoragePoolVDSCommandParameters(vds, 
storagePool, true));
+            }
         }
 
         private void moveDomainToMaintenance(StorageDomain poolDomain) {
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java
index efbea46..6bf943d 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/ConnectStoragePoolVDSCommand.java
@@ -1,26 +1,92 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import org.ovirt.engine.core.common.FeatureSupported;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
+import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import org.ovirt.engine.core.common.utils.StoragePoolDomainHelper;
 import 
org.ovirt.engine.core.common.vdscommands.ConnectStoragePoolVDSCommandParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+
+import java.util.HashMap;
+import java.util.Map;
 
 public class ConnectStoragePoolVDSCommand<P extends 
ConnectStoragePoolVDSCommandParameters>
         extends VdsBrokerCommand<P> {
+
     public ConnectStoragePoolVDSCommand(P parameters) {
         super(parameters);
     }
 
+    private static Map<String, String> getStoragePoolIsoMap(Guid 
storagePoolId) {
+        Map<String, String> storageDomains = new HashMap<>();
+
+        for (StoragePoolIsoMap domain :
+                
DbFacade.getInstance().getStoragePoolIsoMapDao().getAllForStoragePool(storagePoolId))
 {
+            if (domain.getStatus() == StorageDomainStatus.Maintenance
+                    || domain.getStatus() == 
StorageDomainStatus.MovingToMaintenance) {
+                storageDomains.put(domain.getstorage_id().toString(), 
"attached");
+            } else {
+                storageDomains.put(domain.getstorage_id().toString(),
+                        StorageDomainStatus.Active.toString().toLowerCase());
+            }
+        }
+
+        return storageDomains;
+    }
+
+    private static StorageDomain getMasterStorageDomain(Guid storagePoolId) {
+        return DbFacade.getInstance().getStorageDomainDao()
+                .getStorageDomainByTypeAndPool(storagePoolId, 
StorageDomainType.Master);
+    }
+
+    private boolean isPoolWithoutMetadata() {
+        return 
FeatureSupported.storagePoolNoMetadata(getParameters().getStoragePool().getcompatibility_version());
+    }
+
+    public void connectStoragePool() {
+        Map<String, String> storageDomains = null;
+        Guid masterDomainId = 
getMasterStorageDomain(getParameters().getStoragePoolId()).getId(); // 
performance issue?
+
+        if (isPoolWithoutMetadata()) {
+            storageDomains = StoragePoolDomainHelper.getStoragePoolIsoMap(
+                    
DbFacade.getInstance().getStoragePoolIsoMapDao().getAllForStoragePool(
+                            getParameters().getStoragePoolId()));
+        }
+
+        status = 
getBroker().connectStoragePool(getParameters().getStoragePoolId().toString(),
+                getParameters().getVds().getVdsSpmId(), 
getParameters().getStoragePoolId().toString(),
+                masterDomainId.toString(), 
getParameters().getStoragePool().getmaster_domain_version(),
+                storageDomains);
+    }
+
+    public void refreshStoragePool() {
+        Guid masterDomainId = 
getMasterStorageDomain(getParameters().getStoragePoolId()).getId(); // 
performance issue?
+        status = 
getBroker().refreshStoragePool(getParameters().getStoragePoolId().toString(),
+                masterDomainId.toString(), 
getParameters().getStoragePool().getmaster_domain_version());
+    }
+
     @Override
     protected void executeVdsBrokerCommand() {
-        status = 
getBroker().connectStoragePool(getParameters().getStoragePoolId().toString(),
-                getParameters().getvds_spm_id(), 
getParameters().getStoragePoolId().toString(),
-                getParameters().getMasterDomainId().toString(), 
getParameters().getMasterVersion());
-        proceedProxyReturnValue();
+        if (getParameters().isRefreshOnly() && !isPoolWithoutMetadata()) {
+            refreshStoragePool();
+            proceedConnectProxyReturnValue();
+        } else {
+            connectStoragePool();
+            proceedConnectProxyReturnValue();
+        }
+    }
+
+    protected  void proceedRefreshProxyReturnValue() {
+        super.proceedProxyReturnValue();
     }
 
     // dont throw exception on errors except StoragePoolMasterNotFound for
     // master domain failure treatment
-    @Override
-    protected void proceedProxyReturnValue() {
+    protected void proceedConnectProxyReturnValue() {
         VdcBllErrors returnStatus = 
getReturnValueFromStatus(getReturnStatus());
         switch (returnStatus) {
         case Done:
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
index 8fa530d..8071bf4 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java
@@ -105,7 +105,7 @@
     StatusOnlyReturnForXmlRpc formatStorageDomain(String sdUUID);
 
     StatusOnlyReturnForXmlRpc connectStoragePool(String spUUID, int hostSpmId, 
String SCSIKey, String masterdomainId,
-            int masterVersion);
+                                                 int masterVersion, 
Map<String, String> storageDomains);
 
     StatusOnlyReturnForXmlRpc disconnectStoragePool(String spUUID, int 
hostSpmId, String SCSIKey);
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java
deleted file mode 100644
index 5806a7e..0000000
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RefreshStoragePoolVDSCommand.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.ovirt.engine.core.vdsbroker.vdsbroker;
-
-import 
org.ovirt.engine.core.common.vdscommands.RefreshStoragePoolVDSCommandParameters;
-
-public class RefreshStoragePoolVDSCommand<P extends 
RefreshStoragePoolVDSCommandParameters>
-        extends VdsBrokerCommand<P> {
-    public RefreshStoragePoolVDSCommand(P parameters) {
-        super(parameters);
-    }
-
-    @Override
-    protected void executeVdsBrokerCommand() {
-        status = getBroker()
-                
.refreshStoragePool(getParameters().getStoragePoolId().toString(),
-                        getParameters().getMasterStorageDomainId().toString(),
-                        getParameters().getMasterVersion());
-        proceedProxyReturnValue();
-    }
-}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
index 0cd2d0f..260dcdf 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java
@@ -88,6 +88,9 @@
     public Map<String, Object> connectStoragePool(String spUUID, int 
hostSpmId, String SCSIKey, String masterdomainId,
             int masterVersion);
 
+    public Map<String, Object> connectStoragePool(String spUUID, int 
hostSpmId, String SCSIKey, String masterdomainId,
+                                                  int masterVersion, 
Map<String, String> storageDomains);
+
     public Map<String, Object> disconnectStoragePool(String spUUID, int 
hostSpmId, String SCSIKey);
 
     public Map<String, Object> createStoragePool(int poolType, String spUUID, 
String poolName, String msdUUID,
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
index bc4ad53..5c669bb 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java
@@ -469,10 +469,16 @@
 
     @Override
     public StatusOnlyReturnForXmlRpc connectStoragePool(String spUUID, int 
hostSpmId, String SCSIKey,
-            String masterdomainId, int masterVersion) {
+            String masterdomainId, int masterVersion, Map<String, String> 
storageDomains) {
         try {
-            Map<String, Object> xmlRpcReturnValue = 
vdsServer.connectStoragePool(spUUID, hostSpmId, SCSIKey,
-                    masterdomainId, masterVersion);
+            Map<String, Object> xmlRpcReturnValue;
+            if (storageDomains == null) {
+                xmlRpcReturnValue = vdsServer.connectStoragePool(spUUID, 
hostSpmId, SCSIKey,
+                        masterdomainId, masterVersion);
+            } else {
+                xmlRpcReturnValue = vdsServer.connectStoragePool(spUUID, 
hostSpmId, SCSIKey,
+                        masterdomainId, masterVersion, storageDomains);
+            }
             StatusOnlyReturnForXmlRpc wrapper = new 
StatusOnlyReturnForXmlRpc(xmlRpcReturnValue);
             return wrapper;
         } catch (UndeclaredThrowableException ute) {
diff --git a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
index c5aa861..08cd99e 100644
--- a/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/packaging/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -226,6 +226,10 @@
 select fn_db_add_config_value('HotPlugDiskSnapshotSupported','false','3.0');
 select fn_db_add_config_value('HotPlugDiskSnapshotSupported','false','3.1');
 select fn_db_add_config_value('HotPlugDiskSnapshotSupported','false','3.2');
+select fn_db_add_config_value('StoragePoolNoMetadata','false','3.0');
+select fn_db_add_config_value('StoragePoolNoMetadata','false','3.1');
+select fn_db_add_config_value('StoragePoolNoMetadata','false','3.2');
+select fn_db_add_config_value('StoragePoolNoMetadata','false','3.3');
 
 -- by default use no proxy
 select fn_db_add_config_value('SpiceProxyDefault','','general');


-- 
To view, visit http://gerrit.ovirt.org/22712
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic16034c6757959e5d0445814a8acc2221a74f6aa
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimo...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to