Dhandapani Gopal has uploaded a new change for review.

Change subject: engine: Get Service Status Query
......................................................................

engine: Get Service Status Query

- New entity class for Service
- New Service Dao
- Query to fetch the services from the database.

Change-Id: I7982faf180f8580838a962a5674e8e9e8982679b
Signed-off-by: Dhandapani <[email protected]>
---
A backend/manager/dbscripts/services_sp.sql
A backend/manager/dbscripts/upgrade/03_02_0340_add_services_table.sql
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetServicesQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterQueriesCommandBase.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetServicesQueryTest.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceConfigEntity.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceEntity.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceStatus.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/ServicesQueryParameters.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDao.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDaoDbFacadeImpl.java
M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
A 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/ServicesDaoTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
18 files changed, 991 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/11147/1

diff --git a/backend/manager/dbscripts/services_sp.sql 
b/backend/manager/dbscripts/services_sp.sql
new file mode 100644
index 0000000..7a2da8d
--- /dev/null
+++ b/backend/manager/dbscripts/services_sp.sql
@@ -0,0 +1,114 @@
+/* ----------------------------------------------------------------
+ Stored procedures for database operations on Services
+ related tables:
+      - services
+      - service_config
+----------------------------------------------------------------*/
+
+Create or replace FUNCTION InsertService(v_id UUID,
+                                                v_cluster_id UUID,
+                                                v_server_id UUID,
+                                                v_service_name VARCHAR(1000),
+                                                v_pid INTEGER,
+                                                v_status VARCHAR(100))
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    INSERT INTO services(id, cluster_id, server_id, service_name, pid, status)
+    VALUES (v_id, v_cluster_id, v_server_id, v_service_name, v_pid, v_status);
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION InsertServiceConfig(v_service_id UUID,
+                                                    v_section VARCHAR(1000),
+                                                    v_option_key VARCHAR(1000),
+                                                    v_option_value 
VARCHAR(1000))
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    INSERT INTO service_config(service_id, section, option_key, option_value)
+    VALUES (v_service_id, v_section,  v_option_key, v_option_value);
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION GetServicesByClusterId(v_cluster_id UUID)
+    RETURNS SETOF services
+    AS $procedure$
+BEGIN
+    RETURN QUERY SELECT *
+    FROM services
+    WHERE cluster_id = v_cluster_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION GetServicesByServerId(v_server_id UUID)
+    RETURNS SETOF services
+    AS $procedure$
+BEGIN
+    RETURN QUERY SELECT *
+    FROM services
+    WHERE server_id = v_server_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION GetServiceById(v_id UUID)
+    RETURNS SETOF services
+    AS $procedure$
+BEGIN
+    RETURN QUERY SELECT *
+    FROM  services
+    WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION GetServiceConfigById(v_service_id UUID)
+    RETURNS SETOF service_config
+    AS $procedure$
+BEGIN
+    RETURN QUERY SELECT *
+    FROM  service_config
+    WHERE service_id = v_service_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION GetServiceByName(v_server_id UUID,
+                                                 v_service_name VARCHAR(1000))
+RETURNS SETOF services
+AS $procedure$
+BEGIN
+    RETURN QUERY SELECT *
+    FROM  services
+    WHERE server_id = v_server_id AND service_name = v_service_name;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION DeleteServiceByGuid(v_id UUID)
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    DELETE FROM services
+    WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION DeleteServiceByName(v_server_id UUID, 
v_service_name VARCHAR(1000))
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    DELETE FROM services
+    WHERE server_id = v_server_id AND service_name = v_service_name;
+END; $procedure$
+LANGUAGE plpgsql;
+
+Create or replace FUNCTION UpdateServiceStatus(v_id UUID,
+                                                  v_status VARCHAR(100))
+    RETURNS VOID
+    AS $procedure$
+BEGIN
+    UPDATE  services
+    SET     status = v_status,
+            _update_date = LOCALTIMESTAMP
+    WHERE   id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
diff --git 
a/backend/manager/dbscripts/upgrade/03_02_0340_add_services_table.sql 
b/backend/manager/dbscripts/upgrade/03_02_0340_add_services_table.sql
new file mode 100644
index 0000000..911813c
--- /dev/null
+++ b/backend/manager/dbscripts/upgrade/03_02_0340_add_services_table.sql
@@ -0,0 +1,49 @@
+Create or replace FUNCTION __temp_fn_db_add_services_tables() returns void
+AS $procedure$
+BEGIN
+-- Add services table
+IF (NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE 
table_name='services')) THEN
+   BEGIN
+       CREATE TABLE services
+       (
+        id UUID NOT NULL,
+        cluster_id UUID NOT NULL references vds_groups(vds_group_id) on delete 
cascade,
+        server_id UUID NOT NULL references vds_static(vds_id) on delete 
cascade,
+        service_name VARCHAR(1000) NOT NULL,
+        pid INTEGER NOT NULL default 0,
+        status VARCHAR(100),
+        _create_date TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,
+        _update_date TIMESTAMP WITH TIME ZONE,
+        CONSTRAINT pk_services PRIMARY KEY(id)
+       ) WITH OIDS;
+   END;
+END IF;
+
+DROP INDEX IF EXISTS IDX_services_server_id;
+CREATE INDEX IDX_services_server_id ON services(server_id);
+DROP INDEX IF EXISTS IDX_services_name_unique;
+CREATE INDEX IDX_services_name_unique ON services(server_id, service_name);
+
+-- Add service config table
+IF (NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE 
table_name='service_config')) THEN
+   BEGIN
+       CREATE TABLE service_config
+       (
+        service_id UUID NOT NULL references services(id) on delete cascade,
+        section VARCHAR(1000) NOT NULL,
+        option_key VARCHAR(1000),
+        option_value VARCHAR(1000),
+        CONSTRAINT pk_service_config PRIMARY KEY(service_id, section)
+       ) WITH OIDS;
+   END;
+END IF;
+
+-- Create partial index for fetching configs of a service
+DROP INDEX if exists IDX_service_config_service_id;
+CREATE INDEX IDX_service_config_service_id ON service_config(service_id);
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+select __temp_fn_db_add_services_tables();
+drop function __temp_fn_db_add_services_tables();
\ No newline at end of file
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetServicesQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetServicesQuery.java
new file mode 100644
index 0000000..596a46d
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GetServicesQuery.java
@@ -0,0 +1,22 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import org.ovirt.engine.core.common.queries.gluster.ServicesQueryParameters;
+
+/**
+ * Query to fetch all services
+ */
+public class GetServicesQuery<P extends ServicesQueryParameters> extends 
GlusterQueriesCommandBase<P> {
+
+    public GetServicesQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        if (getParameters().getServerId() != null) {
+            
getQueryReturnValue().setReturnValue(getServicesDao().getAllServicesByServerId(getParameters().getServerId()));
+        } else {
+            
getQueryReturnValue().setReturnValue(getServicesDao().getAllServicesByClusterId(getParameters().getClusterId()));
+        }
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterQueriesCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterQueriesCommandBase.java
index 4d31981..a89c9ec 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterQueriesCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/gluster/GlusterQueriesCommandBase.java
@@ -6,6 +6,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.gluster.GlusterBrickDao;
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
+import org.ovirt.engine.core.dao.gluster.ServicesDao;
 
 public abstract class GlusterQueriesCommandBase<P extends 
VdcQueryParametersBase> extends QueriesCommandBase<P> {
     protected GlusterQueriesCommandBase(P parameters) {
@@ -24,4 +25,8 @@
     protected String getGlusterVolumeName(Guid volumeId) {
         return getGlusterVolumeDao().getById(volumeId).getName();
     }
+
+    protected ServicesDao getServicesDao() {
+        return DbFacade.getInstance().getServicesDao();
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetServicesQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetServicesQueryTest.java
new file mode 100644
index 0000000..cdc8268
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/gluster/GetServicesQueryTest.java
@@ -0,0 +1,78 @@
+package org.ovirt.engine.core.bll.gluster;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.ovirt.engine.core.bll.AbstractQueryTest;
+import 
org.ovirt.engine.core.common.businessentities.gluster.ServiceConfigEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceStatus;
+import org.ovirt.engine.core.common.queries.gluster.ServicesQueryParameters;
+import org.ovirt.engine.core.common.utils.ListUtils;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.gluster.ServicesDao;
+
+public class GetServicesQueryTest extends 
AbstractQueryTest<ServicesQueryParameters, 
GetServicesQuery<ServicesQueryParameters>> {
+
+    private static final Guid SERVER_ID = new 
Guid("23f6d691-5dfb-472b-86dc-9e1d2d3c18f3");
+    private static final Guid CLUSTER_ID = new 
Guid("ae956031-6be2-43d6-bb8f-5191c9253314");
+    ServiceEntity expectedService;
+    ServicesDao servicesDaoMock;
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        expectedService = getTestService();
+        setupMock();
+    }
+
+    private ServiceEntity getTestService() {
+        Guid serviceId = Guid.NewGuid();
+        ServiceEntity service = new ServiceEntity();
+        service.setServiceName("proxy-server");
+        service.setClusterId(CLUSTER_ID);
+        service.setServerId(SERVER_ID);
+        service.setId(serviceId);
+        service.setPid(23491);
+        service.setStatus(ServiceStatus.RUNNING);
+        service.setServiceConfig(getServiceConfig(serviceId));
+        return service;
+    }
+
+    private ServiceConfigEntity getServiceConfig(Guid serviceId) {
+        ServiceConfigEntity serviceConfig = new ServiceConfigEntity();
+        serviceConfig.setServiceId(serviceId);
+        serviceConfig.setSection("section1");
+        serviceConfig.setKey("memcache_servers");
+        serviceConfig.setValue("localhost:11211");
+        return serviceConfig;
+    }
+
+    private void setupMock() {
+        // Mock the query's parameters
+        when(getQueryParameters().getServerId()).thenReturn(SERVER_ID);
+        when(getQueryParameters().getClusterId()).thenReturn(CLUSTER_ID);
+
+        servicesDaoMock = mock(ServicesDao.class);
+        
when(servicesDaoMock.getAllServicesByClusterId(CLUSTER_ID)).thenReturn(Collections.singletonList(expectedService));
+        
when(servicesDaoMock.getAllServicesByServerId(SERVER_ID)).thenReturn(Collections.singletonList(expectedService))
 ;
+        doReturn(servicesDaoMock).when(getQuery()).getServicesDao();
+    }
+
+    @Test
+    public void testExecuteQueryCommnad() {
+        getQuery().executeQueryCommand();
+        List<ServiceEntity> services =  (List<ServiceEntity>) 
getQuery().getQueryReturnValue().getReturnValue();
+
+        assertNotNull(services);
+        ListUtils.listsEqual(Collections.singletonList(expectedService), 
services);
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceConfigEntity.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceConfigEntity.java
new file mode 100644
index 0000000..bd67b37
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceConfigEntity.java
@@ -0,0 +1,90 @@
+package org.ovirt.engine.core.common.businessentities.gluster;
+
+import java.io.Serializable;
+
+import javax.validation.constraints.NotNull;
+
+import org.ovirt.engine.core.common.validation.group.RemoveEntity;
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * The service config entity.
+ *
+ * @see ServiceEntity
+ */
+public class ServiceConfigEntity implements Serializable {
+
+    private static final long serialVersionUID = -585458847720355956L;
+
+    @NotNull(message = "VALIDATION.GLUSTER.SERVICE.ID.NOT_NULL", groups = { 
RemoveEntity.class })
+    private Guid serviceId;
+
+    private String section;
+
+    private String key;
+
+    private String value;
+
+    public ServiceConfigEntity() {
+    }
+
+    public Guid getServiceId() {
+        return serviceId;
+    }
+
+    public void setServiceId(Guid serviceId) {
+        this.serviceId = serviceId;
+    }
+
+    public String getSection() {
+        return section;
+    }
+
+    public void setSection(String section) {
+        this.section = section;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((serviceId == null) ? 0 : 
serviceId.hashCode());
+        result = prime * result + ((section == null) ? 0 : section.hashCode());
+        result = prime * result + ((key == null) ? 0 : key.hashCode());
+        result = prime * result + ((value == null) ? 0 : value.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof ServiceConfigEntity)) {
+            return false;
+        }
+
+        ServiceConfigEntity config = (ServiceConfigEntity) obj;
+
+        if (!(serviceId.equals(config.getServiceId())
+                && section.equals(config.getSection())
+                && key.equals(config.getKey())
+                && value.equals(config.getValue()))) {
+            return false;
+        }
+        return true;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceEntity.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceEntity.java
new file mode 100644
index 0000000..bdfcd6f
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceEntity.java
@@ -0,0 +1,152 @@
+package org.ovirt.engine.core.common.businessentities.gluster;
+
+import javax.validation.constraints.NotNull;
+
+import org.ovirt.engine.core.common.businessentities.BusinessEntity;
+import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
+import org.ovirt.engine.core.common.utils.ObjectUtils;
+import org.ovirt.engine.core.common.validation.group.CreateEntity;
+import org.ovirt.engine.core.common.validation.group.RemoveEntity;
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * The service entity.
+ *
+ * @see ServiceStatus
+ * @see ServiceConfigEntity
+ */
+public class ServiceEntity extends IVdcQueryable implements 
BusinessEntity<Guid> {
+    private static final long serialVersionUID = 2355384696827317277L;
+
+    @NotNull(message = "VALIDATION.SERVICE.ID.NOT_NULL", groups = { 
RemoveEntity.class })
+    private Guid id;
+
+    @NotNull(message = "VALIDATION.CLUSTER_ID.NOT_NULL", groups = 
{CreateEntity.class})
+    private Guid clusterId;
+
+    @NotNull(message = "VALIDATION.SERVICE.SERVER_ID.NOT_NULL", groups = { 
CreateEntity.class })
+    private Guid serverId;
+
+    private String serviceName;
+
+    private Integer pid;
+
+    private ServiceStatus status;
+
+    private ServiceConfigEntity serviceConfig;
+
+    public ServiceEntity() {
+    }
+
+    @Override
+    public Guid getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(Guid id) {
+        this.id = id;
+    }
+
+    public Guid getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(Guid clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public Guid getServerId() {
+        return serverId;
+    }
+
+    public void setServerId(Guid serverId) {
+        this.serverId = serverId;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public Integer getPid() {
+        return pid;
+    }
+
+    public void setPid(Integer pid) {
+        this.pid = pid;
+    }
+
+    public ServiceStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(ServiceStatus status) {
+        this.status = status;
+    }
+
+    public ServiceConfigEntity getServiceConfig() {
+        return serviceConfig;
+    }
+
+    public void setServiceConfig(ServiceConfigEntity serviceConfig) {
+        this.serviceConfig = serviceConfig;
+    }
+
+    public boolean isRunning() {
+        return this.status == ServiceStatus.RUNNING;
+    }
+
+    public boolean isStopped() {
+        return this.status == ServiceStatus.STOPPED;
+    }
+
+    public boolean isFailed() {
+        return this.status == ServiceStatus.FAILED;
+    }
+
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((serviceName == null) ? 0 : 
serviceName.hashCode());
+        result = prime * result + ((clusterId == null) ? 0 : 
clusterId.hashCode());
+        result = prime * result + ((serverId == null) ? 0 : 
serverId.hashCode());
+        result = prime * result + ((pid == 0) ? 0 : pid.hashCode());
+        result = prime * result + ((status == null) ? 0 : status.hashCode());
+        result = prime * result + ((serviceConfig == null) ? 0 : 
serviceConfig.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof ServiceEntity)) {
+            return false;
+        }
+
+        ServiceEntity service = (ServiceEntity) obj;
+
+        if (!(clusterId.equals(service.getClusterId()))) {
+            return false;
+        }
+
+        if (!(id.equals(service.getId())
+                && serviceName.equals(service.getServiceName())
+                && serverId.equals(service.getServerId())
+                && ObjectUtils.objectsEqual(pid, service.getPid())
+                && status == service.getStatus())) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public Object getQueryableId() {
+        return getId();
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceStatus.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceStatus.java
new file mode 100644
index 0000000..7dae94b
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/gluster/ServiceStatus.java
@@ -0,0 +1,11 @@
+package org.ovirt.engine.core.common.businessentities.gluster;
+
+/**
+ * Enum for the Service Status.
+ * @see ServiceEntity
+ */
+public enum ServiceStatus {
+    RUNNING,
+    STOPPED,
+    FAILED;
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index e23bf8a..6250e14 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -292,6 +292,8 @@
     GetGlusterVolumeAdvancedDetails,
     GetGlusterVolumeProfileInfo,
     GetDefaultConfigurationVersion(VdcQueryAuthType.User),
+    GetServices,
+
     // Default type instead of having to null check
     Unknown(VdcQueryAuthType.User);
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/ServicesQueryParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/ServicesQueryParameters.java
new file mode 100644
index 0000000..3c1e76f
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/gluster/ServicesQueryParameters.java
@@ -0,0 +1,25 @@
+package org.ovirt.engine.core.common.queries.gluster;
+
+import org.ovirt.engine.core.compat.Guid;
+
+/**
+ * Parameter class with cluster Id and serverId as parameters. <br>
+ * This will be used by services query command. <br>
+ */
+public class ServicesQueryParameters extends GlusterParameters {
+
+    private Guid serverId;
+
+    public ServicesQueryParameters(Guid clusterId, Guid serverId) {
+        super(clusterId);
+        setServerId(serverId);
+    }
+
+    public Guid getServerId() {
+        return serverId;
+    }
+
+    public void setServerId(Guid serverId) {
+        this.serverId = serverId;
+    }
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
index 83b915f..dfa1e4b 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
@@ -18,8 +18,11 @@
 import org.ovirt.engine.core.common.businessentities.Image;
 import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.Snapshot;
+import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 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.businessentities.VdsDynamic;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.businessentities.VdsStatistics;
@@ -30,11 +33,8 @@
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.image_storage_domain_map;
 import org.ovirt.engine.core.common.businessentities.permissions;
-import org.ovirt.engine.core.common.businessentities.StorageDomainDynamic;
-import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
-import org.ovirt.engine.core.common.businessentities.StoragePoolIsoMap;
 import org.ovirt.engine.core.common.businessentities.vds_spm_id_map;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
@@ -97,6 +97,7 @@
 import org.ovirt.engine.core.dao.gluster.GlusterBrickDao;
 import org.ovirt.engine.core.dao.gluster.GlusterOptionDao;
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
+import org.ovirt.engine.core.dao.gluster.ServicesDao;
 import org.ovirt.engine.core.dao.network.InterfaceDao;
 import org.ovirt.engine.core.dao.network.NetworkClusterDao;
 import org.ovirt.engine.core.dao.network.NetworkDao;
@@ -870,6 +871,15 @@
         return getDao(GlusterOptionDao.class);
     }
 
+    /**
+     * Returns the singleton instance of {@link ServicesDao}.
+     *
+     * @return the dao
+     */
+    public ServicesDao getServicesDao() {
+        return getDao(ServicesDao.class);
+    }
+
     public void setOnStartConnectionTimeout(int onStartConnectionTimeout) {
         this.onStartConnectionTimeout = onStartConnectionTimeout;
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDao.java
new file mode 100644
index 0000000..40c5631
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDao.java
@@ -0,0 +1,36 @@
+package org.ovirt.engine.core.dao.gluster;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceStatus;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.DAO;
+import org.ovirt.engine.core.dao.MassOperationsDao;
+import org.ovirt.engine.core.dao.SearchDAO;
+
+/**
+ * Interface for DB operations on Services.
+ */
+public interface ServicesDao extends DAO, SearchDAO<ServiceEntity>, 
MassOperationsDao<ServiceEntity, Guid> {
+
+    public void save(ServiceEntity service);
+
+    public List<ServiceEntity> getAllServicesByClusterId(Guid clusterId);
+
+    public List<ServiceEntity> getAllServicesByServerId(Guid serverId);
+
+    public ServiceEntity getById(Guid serviceId);
+
+    public ServiceEntity getByName(Guid serviceId, String serviceName);
+
+    @Override
+    public List<ServiceEntity> getAllWithQuery(String query);
+
+    public void remove(Guid id);
+
+    public void removeByName(Guid serverId, String serviceName);
+
+    public void updateServiceStatus(Guid serviceId, ServiceStatus status);
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDaoDbFacadeImpl.java
new file mode 100644
index 0000000..9c1534e
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/gluster/ServicesDaoDbFacadeImpl.java
@@ -0,0 +1,185 @@
+package org.ovirt.engine.core.dao.gluster;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.gluster.ServiceConfigEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceStatus;
+import org.ovirt.engine.core.common.utils.EnumUtils;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.MassOperationsGenericDaoDbFacade;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+import org.springframework.jdbc.core.simple.ParameterizedRowMapper;
+import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
+
+/**
+ * Implementation of the DB Facade for Services.
+ */
+public class ServicesDaoDbFacadeImpl extends 
MassOperationsGenericDaoDbFacade<ServiceEntity, Guid> implements ServicesDao {
+
+    private static final ParameterizedRowMapper<ServiceEntity> 
serviceRowMapper = new ServiceRowMapper();
+    private static final ParameterizedRowMapper<ServiceConfigEntity> 
serviceConfigRowMapper = new ServiceConfigRowMapper();
+
+    public ServicesDaoDbFacadeImpl() {
+        super("Services");
+        setProcedureNameForGet("GetById");
+    }
+
+    @Override
+    public void save(ServiceEntity service) {
+        insertService(service);
+        insertServiceConfing(service);
+    }
+
+    private void insertService(ServiceEntity service) {
+        getCallsHandler().executeModification("InsertService", 
createFullParametersMapper(service));
+    }
+
+    private void insertServiceConfing(ServiceEntity service) {
+        getCallsHandler().executeModification("InsertServiceConfig", 
createServiceConfigParams(service.getServiceConfig()));
+    }
+
+    @Override
+    public List<ServiceEntity> getAllServicesByClusterId(Guid clusterId) {
+        List<ServiceEntity> services = 
getCallsHandler().executeReadList("GetServicesByClusterId",
+                serviceRowMapper,
+                getCustomMapSqlParameterSource()
+                        .addValue("cluster_id", clusterId));
+        fetchServiceConfigEntitys(services);
+        return services;
+    }
+
+    @Override
+    public List<ServiceEntity> getAllServicesByServerId(Guid serverId) {
+        List<ServiceEntity> services = 
getCallsHandler().executeReadList("GetServicesByServerId",
+                serviceRowMapper,
+                getCustomMapSqlParameterSource()
+                        .addValue("server_id", serverId));
+        fetchServiceConfigEntitys(services);
+        return services;
+    }
+
+    @Override
+    public ServiceEntity getById(Guid serviceId) {
+        ServiceEntity service =
+                getCallsHandler().executeRead("GetServiceById", 
serviceRowMapper, createIdParameterMapper(serviceId));
+        fetchServiceConfigEntity(service);
+        return service;
+    }
+
+    private void fetchServiceConfigEntity(ServiceEntity service) {
+        if (service != null) {
+            
service.setServiceConfig(getCallsHandler().executeRead("GetServiceConfigById",
+                    serviceConfigRowMapper,
+                    getCustomMapSqlParameterSource().addValue("service_id", 
service.getId())));
+        }
+    }
+
+
+    private void fetchServiceConfigEntitys(List<ServiceEntity> services) {
+        for (ServiceEntity service : services) {
+            fetchServiceConfigEntity(service);
+        }
+    }
+
+    @Override
+    public ServiceEntity getByName(Guid serverId, String serviceName) {
+        ServiceEntity service =
+                getCallsHandler().executeRead("GetServiceByName",
+                        serviceRowMapper,
+                        getCustomMapSqlParameterSource()
+                                .addValue("server_id", serverId)
+                                .addValue("service_name", serviceName));
+        return service;
+    }
+
+    @Override
+    public List<ServiceEntity> getAllWithQuery(String query) {
+        List<ServiceEntity> services = new 
SimpleJdbcTemplate(jdbcTemplate).query(query, serviceRowMapper);
+        fetchServiceConfigEntitys(services);
+        return services;
+    }
+
+    @Override
+    public void remove(Guid serviceId) {
+        getCallsHandler().executeModification("DeleteServiceByGuid",
+                createIdParameterMapper(serviceId));
+    }
+
+    @Override
+    public void removeByName(Guid serverId, String serviceName) {
+        getCallsHandler().executeModification("DeleteServiceByName",
+                getCustomMapSqlParameterSource()
+                        .addValue("server_id", serverId)
+                        .addValue("service_name", serviceName));
+    }
+
+    @Override
+    public void updateServiceStatus(Guid serviceId, ServiceStatus status) {
+        getCallsHandler().executeModification("UpdateServiceStatus",
+                createIdParameterMapper(serviceId).addValue("status", 
EnumUtils.nameOrNull(status)));
+
+    }
+
+    @Override
+    protected MapSqlParameterSource createFullParametersMapper(ServiceEntity 
service) {
+        return getCustomMapSqlParameterSource()
+                .addValue("id", service.getId())
+                .addValue("cluster_id", service.getClusterId())
+                .addValue("server_id", service.getServerId())
+                .addValue("service_name", service.getServiceName())
+                .addValue("pid", service.getPid())
+                .addValue("status", EnumUtils.nameOrNull(service.getStatus()));
+    }
+
+    private MapSqlParameterSource 
createServiceConfigParams(ServiceConfigEntity serviceConfig) {
+        return getCustomMapSqlParameterSource()
+                .addValue("service_id", serviceConfig.getServiceId())
+                .addValue("section", serviceConfig.getSection())
+                .addValue("option_key", serviceConfig.getKey())
+                .addValue("option_value", serviceConfig.getValue());
+    }
+
+
+    @Override
+    protected ParameterizedRowMapper<ServiceEntity> createEntityRowMapper() {
+        return serviceRowMapper;
+    }
+
+    private static final class ServiceRowMapper implements 
ParameterizedRowMapper<ServiceEntity> {
+        @Override
+        public ServiceEntity mapRow(ResultSet rs, int rowNum)
+                throws SQLException {
+            ServiceEntity entity = new ServiceEntity();
+            entity.setId(Guid.createGuidFromString(rs.getString("id")));
+            
entity.setClusterId(Guid.createGuidFromString(rs.getString("cluster_id")));
+            entity.setServerId(Guid.createGuidFromString(rs
+                    .getString("server_id")));
+            entity.setServiceName(rs.getString("service_name"));
+            entity.setPid(rs.getInt("pid"));
+            entity.setStatus(ServiceStatus.valueOf(rs.getString("status")));
+            return entity;
+        }
+    }
+
+    private static final class ServiceConfigRowMapper implements 
ParameterizedRowMapper<ServiceConfigEntity> {
+        @Override
+        public ServiceConfigEntity mapRow(ResultSet rs, int rowNum)
+                throws SQLException {
+            ServiceConfigEntity entity = new ServiceConfigEntity();
+            
entity.setServiceId(Guid.createGuidFromString(rs.getString("service_id")));
+            entity.setSection(rs.getString("section"));
+            entity.setKey(rs.getString("option_key"));
+            entity.setValue(rs.getString("option_value"));
+            return entity;
+        }
+    }
+
+    @Override
+    protected MapSqlParameterSource createIdParameterMapper(Guid id) {
+        return getCustomMapSqlParameterSource().addValue("id", id);
+    }
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties 
b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
index d39f7d4..b6581fc 100644
--- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
+++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
@@ -57,3 +57,4 @@
 
VmAndTemplatesGenerationsDAO=org.ovirt.engine.core.dao.VmAndTemplatesGenerationsDbFacadeImpl
 NetworkViewDao=org.ovirt.engine.core.dao.network.NetworkViewDaoDbFacadeImpl
 
VmGuestAgentInterfaceDao=org.ovirt.engine.core.dao.VmGuestAgentInterfaceDaoDbFacadeImpl
+ServicesDao=org.ovirt.engine.core.dao.gluster.ServicesDaoDbFacadeImpl
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index bf8c664..5696cff 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -785,6 +785,9 @@
 VALIDATION.GLUSTER.BRICK.ID.NOT_NULL=Brick ID is required.
 VALIDATION.GLUSTER.VOLUME.BRICK.SERVER_ID.NOT_NULL=Brick Server ID is required.
 VALIDATION.GLUSTER.VOLUME.BRICK.BRICK_DIR.NOT_NULL=Brick Directory is required.
+VALIDATION.SERVICE.ID.NOT_NULL=Service ID is required.
+VALIDATION.CLUSTER_ID.NOT_NULL=Cluster ID is required.
+VALIDATION.SERVICE.SERVER_ID.NOT_NULL=Server ID is required.
 ACTION_TYPE_FAILED_CLUSTER_IS_NOT_VALID=Cannot ${action} ${type}. Cluster ID 
is not valid.
 ACTION_TYPE_FAILED_CLUSTER_DOES_NOT_SUPPORT_GLUSTER=Cannot ${action} ${type}. 
Cluster does not support Gluster service.
 ACTION_TYPE_FAILED_GLUSTER_VOLUME_NAME_ALREADY_EXISTS=Cannot ${action} 
${type}. Volume name ${volumeName} already exists.
@@ -832,7 +835,6 @@
 ENGINE_IS_RUNNING_IN_PREPARE_MODE=This action is not allowed when Engine is 
preparing for maintenance.
 ACTION_TYPE_FAILED_SERVER_NAME_REQUIRED=Cannot ${action} ${type}. Server Name 
required.
 SERVER_ALREADY_EXISTS_IN_ANOTHER_CLUSTER=One or more servers are already part 
of an existing cluster.
-=======
 # Exteral Events Errors Messages
 VAR__TYPE__EXTERNAL_EVENT=$type Exteral Event
 ACTION_TYPE_FAILED_EXTERNAL_EVENT_ILLEGAL_ORIGIN=Cannot ${action} ${type}. 
Illegal Origin for External Event : oVirt
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/ServicesDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/ServicesDaoTest.java
new file mode 100644
index 0000000..95ee420
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/gluster/ServicesDaoTest.java
@@ -0,0 +1,143 @@
+package org.ovirt.engine.core.dao.gluster;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Test;
+import 
org.ovirt.engine.core.common.businessentities.gluster.ServiceConfigEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceStatus;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.BaseDAOTestCase;
+
+/**
+ * Tests for Services DAO
+ */
+public class ServicesDaoTest extends BaseDAOTestCase {
+    private static final Guid SERVER_ID = new 
Guid("23f6d691-5dfb-472b-86dc-9e1d2d3c18f3");
+    private static final Guid CLUSTER_ID = new 
Guid("ae956031-6be2-43d6-bb8f-5191c9253314");
+    private static final Guid EXISTING_SERVICE_ID = new 
Guid("b2cb2f73-fab3-4a42-93f0-d5e4c069a43a");
+    private static final String EXISTING_SERVICE_NAME = "container-server";
+    private static final String NEW_SERVICE_NAME = "account-server";
+    private ServicesDao dao;
+    private ServiceEntity existingService;
+    private ServiceEntity newService;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        dao = dbFacade.getServicesDao();
+        existingService = dao.getById(EXISTING_SERVICE_ID);
+    }
+
+    @Test
+    public void testSaveAndGetById() {
+        ServiceEntity service = dao.getByName(SERVER_ID, NEW_SERVICE_NAME);
+        assertNull(service);
+
+        newService = getTestService();
+        insertTestService(newService);
+        service = dao.getById(newService.getId());
+        assertNotNull(service);
+        assertEquals(newService, service);
+    }
+
+    @Test
+    public void testGetById() {
+        ServiceEntity service = dao.getById(EXISTING_SERVICE_ID);
+
+        assertTrue(service != null);
+        assertEquals(existingService, service);
+    }
+
+    @Test
+    public void testGetAllServicesByClusterId() {
+        List<ServiceEntity> services = 
dao.getAllServicesByClusterId(CLUSTER_ID);
+        assertNotNull(services);
+        assertTrue(services.size() == 3);
+        assertTrue(services.contains(existingService));
+    }
+
+    @Test
+    public void testGetByName() {
+        newService = getTestService();
+        insertTestService(newService);
+        ServiceEntity service = dao.getByName(SERVER_ID, NEW_SERVICE_NAME);
+
+        assertNotNull(service);
+        assertEquals(newService, service);
+    }
+
+
+    @Test
+    public void testGetAllWithQuery() {
+        List<ServiceEntity> services =
+                dao.getAllWithQuery("select * from services where server_id = 
'"
+                        + SERVER_ID + "'");
+
+        assertTrue(services != null);
+        assertTrue(services.size() == 2);
+        assertTrue(services.contains(existingService));
+    }
+
+    @Test
+    public void testRemove() {
+        dao.remove(EXISTING_SERVICE_ID);
+        ServiceEntity service = dao.getById(EXISTING_SERVICE_ID);
+        assertNull(service);
+    }
+
+    @Test
+    public void testRemoveByName() {
+        dao.removeByName(SERVER_ID, EXISTING_SERVICE_NAME);
+        List<ServiceEntity> services = dao.getAllServicesByServerId(SERVER_ID);
+        assertTrue(services.size() == 1);
+        assertFalse(services.contains(existingService));
+    }
+
+    @Test
+    public void testUpdateServiceStatus() {
+        assertTrue(existingService.getStatus() == ServiceStatus.RUNNING);
+
+        dao.updateServiceStatus(EXISTING_SERVICE_ID, ServiceStatus.STOPPED);
+        ServiceEntity service = dao.getById(EXISTING_SERVICE_ID);
+
+        assertNotNull(service);
+        assertFalse(service.getStatus() == ServiceStatus.RUNNING);
+
+        assertFalse(service.equals(existingService));
+        existingService.setStatus(ServiceStatus.STOPPED);
+        assertEquals(existingService, service);
+    }
+
+    private void insertTestService(ServiceEntity service) {
+        dao.save(service);
+    }
+
+    private ServiceEntity getTestService() {
+        Guid serviceId = Guid.NewGuid();
+        ServiceEntity service = new ServiceEntity();
+        service.setServiceName(NEW_SERVICE_NAME);
+        service.setClusterId(CLUSTER_ID);
+        service.setServerId(SERVER_ID);
+        service.setId(serviceId);
+        service.setPid(23491);
+        service.setStatus(ServiceStatus.RUNNING);
+        service.setServiceConfig(getServiceConfig(serviceId));
+        return service;
+    }
+
+    private ServiceConfigEntity getServiceConfig(Guid serviceId) {
+        ServiceConfigEntity serviceConfig = new ServiceConfigEntity();
+        serviceConfig.setServiceId(serviceId);
+        serviceConfig.setSection("section1");
+        serviceConfig.setKey("memcache_servers");
+        serviceConfig.setValue("localhost:11211");
+        return serviceConfig;
+    }
+}
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 898ed0d..f503210 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -4427,6 +4427,65 @@
             <value>RDMA</value>
         </row>
     </table>
+
+    <table name="services">
+        <column>id</column>
+        <column>cluster_id</column>
+        <column>server_id</column>
+        <column>service_name</column>
+        <column>pid</column>
+        <column>status</column>
+        <row>
+            <value>b2cb2f73-fab3-4a42-93f0-d5e4c069a43a</value>
+            <value>ae956031-6be2-43d6-bb8f-5191c9253314</value>
+            <value>23f6d691-5dfb-472b-86dc-9e1d2d3c18f3</value>
+            <value>container-server</value>
+            <value>32561</value>
+            <value>RUNNING</value>
+        </row>
+        <row>
+            <value>b2cb2f73-fab3-4a42-93f0-d5e4c069a43c</value>
+            <value>ae956031-6be2-43d6-bb8f-5191c9253314</value>
+            <value>23f6d691-5dfb-472b-86dc-9e1d2d3c18f3</value>
+            <value>proxy-server</value>
+            <value>32531</value>
+            <value>RUNNING</value>
+        </row>
+        <row>
+            <value>b2cb2f73-fab3-4a42-93f0-d5e4c068c65b</value>
+            <value>ae956031-6be2-43d6-bb8f-5191c9253314</value>
+            <value>2001751e-549b-4e7a-aff6-32d36856c125</value>
+            <value>proxy-server</value>
+            <value>39861</value>
+            <value>RUNNING</value>
+        </row>
+    </table>
+
+    <table name="service_config">
+        <column>service_id</column>
+        <column>section</column>
+        <column>option_key</column>
+        <column>option_value</column>
+        <row>
+            <value>b2cb2f73-fab3-4a42-93f0-d5e4c069a43a</value>
+            <value>section2</value>
+            <value>use</value>
+            <value>egg:swift#memcache</value>
+        </row>
+        <row>
+            <value>b2cb2f73-fab3-4a42-93f0-d5e4c069a43c</value>
+            <value>section1</value>
+            <value>use</value>
+            <value>egg:swift#proxy</value>
+        </row>
+        <row>
+            <value>b2cb2f73-fab3-4a42-93f0-d5e4c068c65b</value>
+            <value>section2</value>
+            <value>use</value>
+            <value>egg:swift#proxy</value>
+        </row>
+    </table>
+
     <table name="object_column_white_list">
         <column>object_name</column>
         <column>column_name</column>
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 90808a6..642cbcd 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -305,6 +305,9 @@
                <include 
name="common/businessentities/gluster/MemoryStatus.java"/>
                <include name="common/businessentities/gluster/Mempool.java"/>
                <include 
name="common/businessentities/gluster/ServiceType.java"/>
+               <include 
name="common/businessentities/gluster/ServiceEntity.java"/>
+               <include 
name="common/businessentities/gluster/ServiceConfigEntity.java"/>
+               <include 
name="common/businessentities/gluster/ServiceStatus.java"/>
                <include name="common/action/gluster/*.java"/>
                <include name="common/queries/gluster/*.java"/>
                <include name="common/constants/gluster/GlusterConstants.java"/>


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7982faf180f8580838a962a5674e8e9e8982679b
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Dhandapani Gopal <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to