Mike Kolesnik has uploaded a new change for review. Change subject: core: Add provider additional properties ......................................................................
core: Add provider additional properties The additional properties can change by provider type, so adding them as a field in the Provider entity. The first type of additional properties will be the MultiTenantProviderProperties which add a tenant name that is specific to providers that have multi-tenancy, such as OpenStack providers. Change-Id: Id9b51387a1bb7e4fb520ba53428ae82d9705e809 Signed-off-by: Mike Kolesnik <mkole...@redhat.com> --- A backend/manager/dbscripts/upgrade/03_03_0190_add_tenant_to_providers.sql M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/AddProviderCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderProxyFactory.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/RemoveProviderCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/UpdateProviderCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/provider/ProviderValidatorTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProviderParameters.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MultiTenantProviderProperties.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Provider.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDao.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDaoDbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/provider/ProviderDaoTest.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 16 files changed, 172 insertions(+), 35 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/71/15371/1 diff --git a/backend/manager/dbscripts/upgrade/03_03_0190_add_tenant_to_providers.sql b/backend/manager/dbscripts/upgrade/03_03_0190_add_tenant_to_providers.sql new file mode 100644 index 0000000..54a8795 --- /dev/null +++ b/backend/manager/dbscripts/upgrade/03_03_0190_add_tenant_to_providers.sql @@ -0,0 +1 @@ +select fn_db_add_column('providers', 'tenant_name', 'VARCHAR(128)'); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java index 5e39b09..116e681 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java @@ -263,7 +263,7 @@ return genericSearch(getDbFacade().getNetworkViewDao(), true, null); } - private List<Provider> searchProviders() { + private List<Provider<?>> searchProviders() { return genericSearch(getDbFacade().getProviderDao(), true, null); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/AddProviderCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/AddProviderCommand.java index 5fc0c42..4937759 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/AddProviderCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/AddProviderCommand.java @@ -24,7 +24,7 @@ super(parameters); } - private Provider getProvider() { + private Provider<?> getProvider() { return getParameters().getProvider(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderProxyFactory.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderProxyFactory.java index ccb1ae5..fb0f5cd 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderProxyFactory.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderProxyFactory.java @@ -20,7 +20,7 @@ * The provider to create the proxy for. * @return The proxy for communicating with the provider */ - public <P extends ProviderProxy> P create(Provider provider) { + public <P extends ProviderProxy> P create(Provider<?> provider) { return (P) null; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderValidator.java index 2eeae68..6b4813b 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/ProviderValidator.java @@ -8,9 +8,9 @@ public class ProviderValidator { - private Provider provider; + private Provider<?> provider; - public ProviderValidator(Provider provider) { + public ProviderValidator(Provider<?> provider) { this.provider = provider; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/RemoveProviderCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/RemoveProviderCommand.java index b891fbb1..ff1caf6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/RemoveProviderCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/RemoveProviderCommand.java @@ -17,7 +17,7 @@ public class RemoveProviderCommand<P extends ProviderParameters> extends CommandBase<P> { - private Provider deletedProvider; + private Provider<?> deletedProvider; public RemoveProviderCommand(Guid commandId) { super(commandId); @@ -27,7 +27,7 @@ super(parameters); } - private Provider getDeletedProvider() { + private Provider<?> getDeletedProvider() { if (deletedProvider == null) { deletedProvider = getProviderDao().get(getParameters().getProvider().getId()); } @@ -36,7 +36,7 @@ } public String getProviderName() { - Provider provider = getDeletedProvider(); + Provider<?> provider = getDeletedProvider(); return provider == null ? null : provider.getName(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/UpdateProviderCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/UpdateProviderCommand.java index c80ef9d..af60cf9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/UpdateProviderCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/UpdateProviderCommand.java @@ -20,7 +20,7 @@ public class UpdateProviderCommand<P extends ProviderParameters> extends CommandBase<P> implements RenamedEntityInfoProvider { - private Provider oldProvider; + private Provider<?> oldProvider; public UpdateProviderCommand(Guid commandId) { super(commandId); @@ -30,11 +30,11 @@ super(parameters); } - private Provider getProvider() { + private Provider<?> getProvider() { return getParameters().getProvider(); } - private Provider getOldProvider() { + private Provider<?> getOldProvider() { if (oldProvider == null) { oldProvider = getProviderDao().get(getProvider().getId()); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/provider/ProviderValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/provider/ProviderValidatorTest.java index 83e0882..583c5b6 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/provider/ProviderValidatorTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/provider/ProviderValidatorTest.java @@ -14,13 +14,14 @@ import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.Provider.AdditionalProperties; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dao.provider.ProviderDao; @RunWith(MockitoJUnitRunner.class) public class ProviderValidatorTest { - private Provider provider = createProvider("provider"); + private Provider<AdditionalProperties> provider = createProvider("provider"); @Mock private ProviderDao providerDao; @@ -51,14 +52,16 @@ } @Test + @SuppressWarnings("unchecked") public void nameNotAvailable() throws Exception { - Provider otherProvider = createProvider(provider.getName()); - when(providerDao.getByName(provider.getName())).thenReturn(otherProvider); + Provider<AdditionalProperties> otherProvider = createProvider(provider.getName()); + when((Provider<AdditionalProperties>) providerDao.getByName(provider.getName())).thenReturn(otherProvider); assertThat(validator.nameAvailable(), failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NAME_ALREADY_USED)); } - private Provider createProvider(String name) { - Provider p = mock(Provider.class); + @SuppressWarnings("unchecked") + private Provider<AdditionalProperties> createProvider(String name) { + Provider<AdditionalProperties> p = mock(Provider.class); when(p.getName()).thenReturn(name); return p; } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProviderParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProviderParameters.java index cf4a131..76d0915 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProviderParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ProviderParameters.java @@ -9,20 +9,20 @@ private static final long serialVersionUID = 308877238353433739L; @Valid - private Provider provider; + private Provider<?> provider; public ProviderParameters() { } - public ProviderParameters(Provider provider) { + public ProviderParameters(Provider<?> provider) { this.provider = provider; } - public Provider getProvider() { + public Provider<?> getProvider() { return provider; } - public void setProvider(Provider provider) { + public void setProvider(Provider<?> provider) { this.provider = provider; } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MultiTenantProviderProperties.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MultiTenantProviderProperties.java new file mode 100644 index 0000000..52e6196 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/MultiTenantProviderProperties.java @@ -0,0 +1,62 @@ +package org.ovirt.engine.core.common.businessentities; + +import org.ovirt.engine.core.common.businessentities.Provider.AdditionalProperties; + +public class MultiTenantProviderProperties implements AdditionalProperties { + + private static final long serialVersionUID = 573702404083234015L; + + private String tenantName; + + public MultiTenantProviderProperties() { + } + + public MultiTenantProviderProperties(String tenantName) { + this.tenantName = tenantName; + } + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((getTenantName() == null) ? 0 : getTenantName().hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof MultiTenantProviderProperties)) { + return false; + } + MultiTenantProviderProperties other = (MultiTenantProviderProperties) obj; + if (getTenantName() == null) { + if (other.getTenantName() != null) { + return false; + } + } else if (!getTenantName().equals(other.getTenantName())) { + return false; + } + return true; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("MultiTenantProviderProperties [tenantName=").append(getTenantName()).append("]"); + return builder.toString(); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Provider.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Provider.java index 69eb59f..9c53e64 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Provider.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/Provider.java @@ -1,7 +1,11 @@ package org.ovirt.engine.core.common.businessentities; +import java.io.Serializable; + +import javax.validation.Valid; import javax.validation.constraints.NotNull; +import org.ovirt.engine.core.common.businessentities.Provider.AdditionalProperties; import org.ovirt.engine.core.common.validation.annotation.ValidName; import org.ovirt.engine.core.common.validation.group.CreateEntity; import org.ovirt.engine.core.common.validation.group.RemoveEntity; @@ -12,8 +16,11 @@ * A provider can provide external services to be consumed by the system.<br> * The provider will be responsible for managing the provided services, and the interaction with it would be done * through an API which will be accessible via the URL. + * + * @param P + * The type of additional properties this provider holds. */ -public class Provider extends IVdcQueryable implements BusinessEntity<Guid>, Nameable { +public class Provider<P extends AdditionalProperties> extends IVdcQueryable implements BusinessEntity<Guid>, Nameable { private static final long serialVersionUID = 8279455368568715758L; @@ -37,6 +44,9 @@ private String username; private String password; + + @Valid + private P additionalProperties; @Override public String getName() { @@ -105,6 +115,14 @@ this.password = password; } + public P getAdditionalProperties() { + return additionalProperties; + } + + public void setAdditionalProperties(P additionalProperties) { + this.additionalProperties = additionalProperties; + } + @Override public Object getQueryableId() { return getId(); @@ -122,6 +140,7 @@ result = prime * result + ((getType() == null) ? 0 : getType().hashCode()); result = prime * result + ((getUrl() == null) ? 0 : getUrl().hashCode()); result = prime * result + ((getUsername() == null) ? 0 : getUsername().hashCode()); + result = prime * result + ((getAdditionalProperties() == null) ? 0 : getAdditionalProperties().hashCode()); return result; } @@ -136,7 +155,7 @@ if (!(obj instanceof Provider)) { return false; } - Provider other = (Provider) obj; + Provider<?> other = (Provider<?>) obj; if (isRequiringAuthentication() != other.isRequiringAuthentication()) { return false; } @@ -185,6 +204,13 @@ } else if (!getUsername().equals(other.getUsername())) { return false; } + if (getAdditionalProperties() == null) { + if (other.getAdditionalProperties() != null) { + return false; + } + } else if (!getAdditionalProperties().equals(other.getAdditionalProperties())) { + return false; + } return true; } @@ -207,7 +233,15 @@ .append(getUsername()) .append(", password=") .append(getPassword() == null ? null : "******") + .append(", additionalProperties=") + .append(getAdditionalProperties()) .append("]"); return builder.toString(); } + + /** + * Tag interface for classes that add additional properties to providers. + */ + public static interface AdditionalProperties extends Serializable { + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDao.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDao.java index 3c8088c..8b9c474 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDao.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDao.java @@ -5,7 +5,7 @@ import org.ovirt.engine.core.dao.GenericDao; import org.ovirt.engine.core.dao.SearchDAO; -public interface ProviderDao extends GenericDao<Provider, Guid>, SearchDAO<Provider> { +public interface ProviderDao extends GenericDao<Provider<?>, Guid>, SearchDAO<Provider<?>> { /** * Query for the provider by name. @@ -14,5 +14,5 @@ * The name of the provider. * @return The provider, or <code>null</code> if not found. */ - Provider getByName(String name); + Provider<?> getByName(String name); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDaoDbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDaoDbFacadeImpl.java index b2811a8..bbbfd86 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDaoDbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/provider/ProviderDaoDbFacadeImpl.java @@ -4,7 +4,9 @@ import java.sql.SQLException; import java.util.List; +import org.ovirt.engine.core.common.businessentities.MultiTenantProviderProperties; import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.Provider.AdditionalProperties; import org.ovirt.engine.core.common.businessentities.ProviderType; import org.ovirt.engine.core.common.utils.EnumUtils; import org.ovirt.engine.core.compat.Guid; @@ -13,14 +15,32 @@ import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; -public class ProviderDaoDbFacadeImpl extends DefaultGenericDaoDbFacade<Provider, Guid> implements ProviderDao { +public class ProviderDaoDbFacadeImpl extends DefaultGenericDaoDbFacade<Provider<?>, Guid> implements ProviderDao { public ProviderDaoDbFacadeImpl() { super("Provider"); } @Override - protected MapSqlParameterSource createFullParametersMapper(Provider entity) { + protected MapSqlParameterSource createFullParametersMapper(Provider<?> entity) { + MapSqlParameterSource mapper = createBaseProviderParametersMapper(entity); + + if (entity.getAdditionalProperties() != null) { + switch (entity.getType()) { + case OPENSTACK_NETWORK: + MultiTenantProviderProperties properties = + (MultiTenantProviderProperties) entity.getAdditionalProperties(); + mapper.addValue("tenant_name", properties.getTenantName()); + break; + default: + break; + } + } + + return mapper; + } + + protected MapSqlParameterSource createBaseProviderParametersMapper(Provider<?> entity) { return createIdParameterMapper(entity.getId()) .addValue("name", entity.getName()) .addValue("description", entity.getDescription()) @@ -37,18 +57,18 @@ } @Override - protected ParameterizedRowMapper<Provider> createEntityRowMapper() { + protected ParameterizedRowMapper<Provider<?>> createEntityRowMapper() { return ProviderRowMapper.INSTANCE; } @Override - public Provider getByName(String name) { + public Provider<?> getByName(String name) { return getCallsHandler().executeRead("GetProviderByName", createEntityRowMapper(), getCustomMapSqlParameterSource().addValue("name", name)); } - private static class ProviderRowMapper implements ParameterizedRowMapper<Provider> { + private static class ProviderRowMapper implements ParameterizedRowMapper<Provider<?>> { public final static ProviderRowMapper INSTANCE = new ProviderRowMapper(); @@ -56,8 +76,8 @@ } @Override - public Provider mapRow(ResultSet rs, int index) throws SQLException { - Provider entity = new Provider(); + public Provider<?> mapRow(ResultSet rs, int index) throws SQLException { + Provider<AdditionalProperties> entity = new Provider<AdditionalProperties>(); entity.setId(Guid.createGuidFromString(rs.getString("id"))); entity.setName(rs.getString("name")); entity.setDescription(rs.getString("description")); @@ -66,12 +86,25 @@ entity.setRequiringAuthentication(rs.getBoolean("auth_required")); entity.setUsername(rs.getString("auth_username")); entity.setPassword(DbFacadeUtils.decryptPassword(rs.getString("auth_password"))); + entity.setAdditionalProperties(mapAdditionalProperties(rs, entity)); + return entity; + } + + private AdditionalProperties mapAdditionalProperties(ResultSet rs, Provider<?> entity) throws SQLException { + switch (entity.getType()) { + case OPENSTACK_NETWORK: + MultiTenantProviderProperties properties = new MultiTenantProviderProperties(); + properties.setTenantName(rs.getString("tenant_name")); + return properties; + default: + return null; + } } } @Override - public List<Provider> getAllWithQuery(String query) { + public List<Provider<?>> getAllWithQuery(String query) { return jdbcTemplate.query(query, ProviderRowMapper.INSTANCE); } } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/provider/ProviderDaoTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/provider/ProviderDaoTest.java index f0ecec4..4282a8e 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/provider/ProviderDaoTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/provider/ProviderDaoTest.java @@ -6,16 +6,17 @@ import org.junit.Test; import org.ovirt.engine.core.common.businessentities.Provider; +import org.ovirt.engine.core.common.businessentities.Provider.AdditionalProperties; import org.ovirt.engine.core.common.businessentities.ProviderType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.BaseGenericDaoTestCase; import org.ovirt.engine.core.dao.FixturesTool; -public class ProviderDaoTest extends BaseGenericDaoTestCase<Guid, Provider, ProviderDao> { +public class ProviderDaoTest extends BaseGenericDaoTestCase<Guid, Provider<?>, ProviderDao> { @Override - protected Provider generateNewEntity() { - Provider provider = new Provider(); + protected Provider<?> generateNewEntity() { + Provider<AdditionalProperties> provider = new Provider<AdditionalProperties>(); provider.setId(generateNonExistingId()); provider.setName("brovider"); provider.setUrl("http://brovider.com/"); diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 07c5098..1256e83 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -672,6 +672,7 @@ <column>auth_required</column> <column>auth_username</column> <column>auth_password</column> + <column>tenant_name</column> <row> <value>1115c1c6-cb15-4832-b2a4-023770607111</value> <value>provider</value> @@ -681,6 +682,7 @@ <value>false</value> <null/> <null/> + <value>bubu</value> </row> </table> 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 c0f11c7..acf5e55 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 @@ -37,6 +37,7 @@ <include name="common/businessentities/Nameable.java" /> <include name="common/businessentities/Provider.java" /> <include name="common/businessentities/ProviderType.java" /> + <include name="common/businessentities/MultiTenantProviderProperties.java" /> <!-- Network business entities --> <include name="common/businessentities/network/VdsNetworkInterface.java" /> -- To view, visit http://gerrit.ovirt.org/15371 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id9b51387a1bb7e4fb520ba53428ae82d9705e809 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches