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 <[email protected]>
---
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 <[email protected]>
Gerrit-Reviewer: Sahina Bose <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches