Hello Sahina Bose,

I'd like you to do a code review.  Please visit

    https://gerrit.ovirt.org/40409

to review the following change.

Change subject: engine,webadmin: Add an indicator if geo-replication is enabled
......................................................................

engine,webadmin: Add an indicator if geo-replication is enabled

Added an indicator column to Volume tab, to indicate
if a volume is a geo-replication master or slave

Change-Id: I28178b8ef03ea7cc83097cb99bc2d2be90061434
Signed-off-by: Sahina Bose <sab...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeEntity.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeDaoDbFacadeImpl.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationResources.java
A 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_master.png
A 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_slave.png
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/cell/VolumeInfoCell.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeInfoColumn.java
M packaging/dbscripts/create_views.sql
11 files changed, 136 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/09/40409/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeEntity.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeEntity.java
index 25f85da..ad27058 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeEntity.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/GlusterVolumeEntity.java
@@ -89,6 +89,10 @@
 
     private GlusterVolumeAdvancedDetails advancedDetails;
 
+    private Boolean isGeoRepMaster;
+
+    private String geoRepMasterVolAndClusterName;
+
     public GlusterVolumeEntity() {
         options = new LinkedHashMap<String, GlusterVolumeOptionEntity>();
         bricks = new ArrayList<GlusterBrickEntity>();
@@ -354,6 +358,26 @@
         this.snapshotScheduled = snapshotScheduled;
     }
 
+    public Boolean getIsGeoRepMaster() {
+        return isGeoRepMaster;
+    }
+
+    public void setIsGeoRepMaster(Boolean isGeoRepMaster) {
+        this.isGeoRepMaster = isGeoRepMaster;
+    }
+
+    public Boolean getIsGeoRepSlave() {
+        return getGeoRepMasterVolAndClusterName() != null;
+    }
+
+    public String getGeoRepMasterVolAndClusterName() {
+        return geoRepMasterVolAndClusterName;
+    }
+
+    public void setGeoRepMasterVolAndClusterName(String 
masterVolAndClusterName) {
+        this.geoRepMasterVolAndClusterName = masterVolAndClusterName;
+    }
+
     public void removeBrick(GlusterBrickEntity GlusterBrick) {
         bricks.remove(GlusterBrick);
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeDaoDbFacadeImpl.java
index 465e403..6b56424 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/GlusterVolumeDaoDbFacadeImpl.java
@@ -380,6 +380,8 @@
             entity.setRedundancyCount(rs.getInt("redundancy_count"));
             entity.setSnapshotsCount(rs.getInt("snapshot_count"));
             entity.setSnapshotScheduled(rs.getBoolean("snapshot_scheduled"));
+            entity.setIsGeoRepMaster(rs.getBoolean("is_master"));
+            
entity.setGeoRepMasterVolAndClusterName(rs.getString("master_vol_cluster"));
             return entity;
         }
     }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationResources.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationResources.java
index bc07283..a422233 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationResources.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationResources.java
@@ -173,6 +173,12 @@
     @Source("images/volume_all_bricks_down_warning.png")
     ImageResource volumeAllBricksDownWarning();
 
+    @Source("images/volume_georep_master.png")
+    ImageResource volumeGeoRepMaster();
+
+    @Source("images/volume_georep_slave.png")
+    ImageResource volumeGeoRepSlave();
+
     // Model-bound widgets
 
     @Source("images/snapshot.png")
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_master.png
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_master.png
new file mode 100644
index 0000000..884c048
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_master.png
Binary files differ
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_slave.png
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_slave.png
new file mode 100644
index 0000000..47019b5
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/ui/common/images/volume_georep_slave.png
Binary files differ
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index a1a5719..8d30b67 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -148,6 +148,12 @@
     @DefaultStringValue("Snapshots")
     String volumeSnapshotSubTabLabel();
 
+    @DefaultStringValue("Volume data is being geo-replicated.")
+    String geoRepMasterVolumeToolTip();
+
+    @DefaultStringValue("Volume is destination for geo-replication.")
+    String geoRepSlaveVolumeToolTip();
+
     @DefaultStringValue("Permissions")
     String volumePermissionSubTabLabel();
 
@@ -2800,6 +2806,9 @@
     @DefaultStringValue("Bricks")
     String bricksStatusVolume();
 
+    @DefaultStringValue("Info")
+    String volumeInfoVolume();
+
     @DefaultStringValue("Number of Bricks")
     String numberOfBricksVolume();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
index 8a5e8a9..864db7c 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
@@ -110,4 +110,10 @@
     @DefaultMessage("Default ({0})")
     String defaultMtu(int mtu);
 
+    @DefaultMessage("Free {0}\nUsed {1} of total available {2}")
+    String glusterCapacityInfo(String freeSize, String usedSize, String 
totalSize);
+
+    @DefaultMessage("Volume data from {0} of cluster {1} is replicated to this 
volume.")
+    String geoRepSlaveVolumeToolTip(String mastervolName, String clusterName);
+
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
index 60fa8d9..bf93603 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVolumeView.java
@@ -33,6 +33,7 @@
 import 
org.ovirt.engine.ui.webadmin.widget.table.column.VolumeActivityStatusColumn;
 import 
org.ovirt.engine.ui.webadmin.widget.table.column.VolumeBrickStatusColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeCapacityCell;
+import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeInfoColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeStatusColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VolumeTaskWaitingCell;
 
@@ -101,9 +102,11 @@
         getTable().addColumn(volumeTypeColumn, constants.volumeTypeVolume(), 
"150px"); //$NON-NLS-1$
 
         getTable().addColumn(new VolumeBrickStatusColumn(), 
constants.bricksStatusVolume(), "150px"); //$NON-NLS-1$
+        getTable().addColumn(new VolumeInfoColumn(), 
constants.volumeInfoVolume(), "100px"); //$NON-NLS-1$
 
         MenuCell<GlusterTaskSupport> rebalanceMenuCell = 
getRebalanceActivityMenu(constants);
         MenuCell<GlusterTaskSupport> removeBricksMenuCell = 
getRemoveBrickActivityMenu(constants);
+
         List<HasCell<GlusterTaskSupport, ?>> list = new 
ArrayList<HasCell<GlusterTaskSupport, ?>>();
         list.add(new VolumeActivityStatusColumn<GlusterTaskSupport>());
         list.add(new Column<GlusterTaskSupport, GlusterTaskSupport>(new 
VolumeActivitySeperatorCell<GlusterTaskSupport>()) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/cell/VolumeInfoCell.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/cell/VolumeInfoCell.java
new file mode 100644
index 0000000..dbf6e91
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/cell/VolumeInfoCell.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.ui.webadmin.widget.table.cell;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationMessages;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
+
+import com.google.gwt.cell.client.AbstractCell;
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
+
+public class VolumeInfoCell extends AbstractCell<GlusterVolumeEntity> {
+
+    private static final ApplicationResources resources = 
GWT.create(ApplicationResources.class);
+    private static final ApplicationConstants constants = 
GWT.create(ApplicationConstants.class);
+    private static final ApplicationTemplates applicationTemplates = 
GWT.create(ApplicationTemplates.class);
+    private static final ApplicationMessages messages = 
GWT.create(ApplicationMessages.class);
+
+    protected ImageResource geoRepMasterImage = resources.volumeGeoRepMaster();
+    protected ImageResource geoRepSlaveImage = resources.volumeGeoRepSlave();
+
+    @Override
+    public void render(Context context, GlusterVolumeEntity volume, 
SafeHtmlBuilder sb) {
+        // Nothing to render if no volume is provided:
+        if (volume == null) {
+            return;
+        }
+        if (volume.getIsGeoRepMaster()) {
+            SafeHtml geoRepMasterHtml =
+                    
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(geoRepMasterImage).getHTML());
+            sb.append(applicationTemplates.statusTemplate(geoRepMasterHtml, 
constants.geoRepMasterVolumeToolTip()));
+        }
+        if (volume.getIsGeoRepSlave()) {
+            SafeHtml geoRepSlaveHtml =
+                    
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(geoRepSlaveImage).getHTML());
+            String[] volClusterNames = 
formatVolClusterName(volume.getGeoRepMasterVolAndClusterName());
+            String volName = volClusterNames[0];
+            String clusterName = volClusterNames.length == 2 ? 
volClusterNames[1] : "UNKNOWN"; //$NON-NLS-1$
+            sb.append(applicationTemplates.statusTemplate(geoRepSlaveHtml,
+                    messages.geoRepSlaveVolumeToolTip(volName, clusterName)));
+        }
+    }
+
+    private String[] formatVolClusterName(String volClusterName) {
+        if (volClusterName == null) {
+            return null;
+        }
+        String[] names = volClusterName.split("\\|"); //$NON-NLS-1$
+        return names;
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeInfoColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeInfoColumn.java
new file mode 100644
index 0000000..f2a2c41
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VolumeInfoColumn.java
@@ -0,0 +1,17 @@
+package org.ovirt.engine.ui.webadmin.widget.table.column;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.ui.common.widget.table.column.SortableColumn;
+import org.ovirt.engine.ui.webadmin.widget.table.cell.VolumeInfoCell;
+
+public class VolumeInfoColumn extends SortableColumn<GlusterVolumeEntity, 
GlusterVolumeEntity> {
+
+    public VolumeInfoColumn() {
+        super(new VolumeInfoCell());
+    }
+
+    @Override
+    public GlusterVolumeEntity getValue(GlusterVolumeEntity object) {
+        return object;
+    }
+}
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index 00be84d..341c7fa 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -1718,15 +1718,25 @@
 CREATE OR REPLACE VIEW gluster_volumes_view
 AS
 SELECT gluster_volumes.*,
-       vds_groups.name AS vds_group_name
+    vds_groups.name AS vds_group_name,
+    CASE WHEN EXISTS (SELECT session_id FROM gluster_georep_session
+                      WHERE master_volume_id = gluster_volumes.id)
+         THEN true
+         ELSE false END
+         as is_master,
+    (SELECT vol.vol_name || '|' || cluster.name
+     FROM gluster_georep_session
+     INNER JOIN gluster_volumes vol ON master_volume_id = vol.id
+     INNER JOIN vds_groups cluster ON cluster.vds_group_id = vol.cluster_id
+     WHERE slave_volume_id = gluster_volumes.id) as master_vol_cluster
 FROM gluster_volumes
 INNER JOIN vds_groups ON gluster_volumes.cluster_id = vds_groups.vds_group_id;
 
 CREATE OR REPLACE VIEW gluster_volume_snapshots_view
 AS
 SELECT gluster_volume_snapshots.*,
-       gluster_volumes.cluster_id AS cluster_id,
-       gluster_volumes.vol_name as volume_name
+    gluster_volumes.cluster_id AS cluster_id,
+    gluster_volumes.vol_name AS volume_name
 FROM gluster_volume_snapshots
 INNER JOIN gluster_volumes ON gluster_volume_snapshots.volume_id = 
gluster_volumes.id;
 


-- 
To view, visit https://gerrit.ovirt.org/40409
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I28178b8ef03ea7cc83097cb99bc2d2be90061434
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: Shubhendu Tripathi <shtri...@redhat.com>
Gerrit-Reviewer: Sahina Bose <sab...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to