Mike Kolesnik has uploaded a new change for review. Change subject: engine: Log mass network operations ......................................................................
engine: Log mass network operations Added logging of mass operations of networking commands so that each network change that causes update of the network on multiple hosts would output a log similar to: (7/11): Applying changes for network red on host vds1. Both start and end (successful or failed) are logged. Change-Id: Ie86bd5368052b4ed3bd18cff567c39daef911b31 Bug-Url: https://bugzilla.redhat.com/1055161 Signed-off-by: Mike Kolesnik <[email protected]> (cherry picked from commit 52854122b7bfd442e3d2f949bdac8739c8a5bb6a) --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworksByLabelParametersBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/NetworkParametersBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworkParametersBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworksByLabelParametersBuilder.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworksToClusterCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/PersistentSetupNetworksCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PersistentSetupNetworksParameters.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties 15 files changed, 106 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/24357/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java index df178b8..051e76e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworkParametersBuilder.java @@ -31,6 +31,7 @@ for (VdsNetworkInterface nic : nics) { PersistentSetupNetworksParameters setupNetworkParams = createSetupNetworksParameters(nic.getVdsId()); + setupNetworkParams.setNetworkNames(network.getName()); VdsNetworkInterface nicToConfigure = getNicToConfigure(setupNetworkParams.getInterfaces(), nic.getId()); if (nicToConfigure == null) { throw new VdcBLLException(VdcBllErrors.LABELED_NETWORK_INTERFACE_NOT_FOUND); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworksByLabelParametersBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworksByLabelParametersBuilder.java index 5e131dd..64dab7f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworksByLabelParametersBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/AddNetworksByLabelParametersBuilder.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.action.PersistentSetupNetworksParameters; import org.ovirt.engine.core.common.businessentities.Entities; import org.ovirt.engine.core.common.businessentities.network.Network; @@ -58,6 +59,8 @@ parameters.getInterfaces().addAll(configureNetworks(nicToConfigure, Collections.singleton(network))); } + parameters.setNetworkNames(StringUtils.join(Entities.objectNames(networkToAdd), ", ")); + return parameters; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/NetworkParametersBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/NetworkParametersBuilder.java index b21a081..0fccbe8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/NetworkParametersBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/NetworkParametersBuilder.java @@ -7,6 +7,7 @@ import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.PersistentSetupNetworksParameters; +import org.ovirt.engine.core.common.action.VdcActionParametersBase; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol; @@ -35,6 +36,7 @@ parameters.setVdsId(host.getId()); parameters.setInterfaces(nics); parameters.setCheckConnectivity(true); + parameters.setShouldBeLogged(false); return parameters; } @@ -126,4 +128,21 @@ private DbFacade getDbFacade() { return DbFacade.getInstance(); } + + /** + * Update the given list of parameters to have sequencing according to their order, and have the total count. The + * updated parameters also will be set to log the command. + * + * @param parameters + * A list of parameters to update. + */ + public static void updateParametersSequencing(List<VdcActionParametersBase> parameters) { + for (int i = 0; i < parameters.size(); i++) { + PersistentSetupNetworksParameters setupNetworkParameters = + (PersistentSetupNetworksParameters) parameters.get(i); + setupNetworkParameters.setSequence(i + 1); + setupNetworkParameters.setTotal(parameters.size()); + setupNetworkParameters.setShouldBeLogged(true); + } + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworkParametersBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworkParametersBuilder.java index 7601877..b6c61e7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworkParametersBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworkParametersBuilder.java @@ -36,6 +36,7 @@ for (VdsNetworkInterface nic : nics) { PersistentSetupNetworksParameters setupNetworkParams = createSetupNetworksParameters(nic.getVdsId()); + setupNetworkParams.setNetworkNames(network.getName()); VdsNetworkInterface nicToConfigure = getNicToConfigure(setupNetworkParams.getInterfaces(), nic.getId()); if (nicToConfigure == null) { throw new VdcBLLException(VdcBllErrors.LABELED_NETWORK_INTERFACE_NOT_FOUND); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworksByLabelParametersBuilder.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworksByLabelParametersBuilder.java index f7049e3..30fb29e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworksByLabelParametersBuilder.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/RemoveNetworksByLabelParametersBuilder.java @@ -60,6 +60,8 @@ parameters.getInterfaces().removeAll(nicsToRemove); } + parameters.setNetworkNames(StringUtils.join(Entities.objectNames(networksToRemove), ", ")); + return parameters; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java index 3ed1a4e..0c66017 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java @@ -6,6 +6,7 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VdsGroupCommandBase; import org.ovirt.engine.core.bll.network.AddNetworkParametersBuilder; +import org.ovirt.engine.core.bll.network.NetworkParametersBuilder; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; @@ -86,6 +87,7 @@ ArrayList<VdcActionParametersBase> parameters = builder.buildParameters(nics); if (!parameters.isEmpty()) { + NetworkParametersBuilder.updateParametersSequencing(parameters); getBackend().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, parameters); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworksToClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworksToClusterCommand.java index 0e91ef9..db72a24 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworksToClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworksToClusterCommand.java @@ -13,6 +13,7 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VdsGroupCommandBase; import org.ovirt.engine.core.bll.network.AddNetworksByLabelParametersBuilder; +import org.ovirt.engine.core.bll.network.NetworkParametersBuilder; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.AttachNetworkToVdsGroupParameter; import org.ovirt.engine.core.common.action.ClusterNetworksParameters; @@ -91,6 +92,7 @@ labelsToNicsByHost.get(entry.getKey()))); } + NetworkParametersBuilder.updateParametersSequencing(parameters); getBackend().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, parameters); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java index 897ee826..96b0600 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworkToVdsGroupCommand.java @@ -7,6 +7,7 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.VdsGroupCommandBase; +import org.ovirt.engine.core.bll.network.NetworkParametersBuilder; import org.ovirt.engine.core.bll.network.RemoveNetworkParametersBuilder; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.validator.NetworkValidator; @@ -107,6 +108,7 @@ ArrayList<VdcActionParametersBase> parameters = builder.buildParameters(nics); if (!parameters.isEmpty()) { + NetworkParametersBuilder.updateParametersSequencing(parameters); getBackend().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, parameters); } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java index b2f3119..9bfe9ef 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/DetachNetworksFromClusterCommand.java @@ -12,6 +12,7 @@ import org.ovirt.engine.core.bll.InternalCommandAttribute; import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VdsGroupCommandBase; +import org.ovirt.engine.core.bll.network.NetworkParametersBuilder; import org.ovirt.engine.core.bll.network.RemoveNetworksByLabelParametersBuilder; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.common.action.AttachNetworkToVdsGroupParameter; @@ -90,6 +91,7 @@ nicsByHost.get(entry.getKey()))); } + NetworkParametersBuilder.updateParametersSequencing(parameters); getBackend().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, parameters); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java index a34a1a6..735b65c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java @@ -84,6 +84,7 @@ ArrayList<VdcActionParametersBase> parameters = builder.buildParameters(getNetwork(), getOldNetwork()); if (!parameters.isEmpty()) { + NetworkParametersBuilder.updateParametersSequencing(parameters); getBackend().runInternalMultipleActions(VdcActionType.PersistentSetupNetworks, parameters); } } @@ -420,6 +421,7 @@ for (Guid hostId : hostIdsToSync) { PersistentSetupNetworksParameters setupNetworkParams = createSetupNetworksParameters(hostId); + setupNetworkParams.setNetworkNames(getNetworkName()); setupNetworkParams.setNetworksToSync(Collections.singletonList(getNetworkName())); parameters.add(setupNetworkParams); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/PersistentSetupNetworksCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/PersistentSetupNetworksCommand.java index 526cc5f..c821b3d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/PersistentSetupNetworksCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/PersistentSetupNetworksCommand.java @@ -3,11 +3,13 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.VdsCommand; import org.ovirt.engine.core.bll.network.host.SetupNetworksCommand.SETUP_NETWORKS_RESOLUTION; +import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.PersistentSetupNetworksParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VdcReturnValueBase; import org.ovirt.engine.core.common.action.VdsActionParameters; import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector; @NonTransactiveCommandAttribute public class PersistentSetupNetworksCommand<T extends PersistentSetupNetworksParameters> extends VdsCommand<T> { @@ -15,6 +17,18 @@ public PersistentSetupNetworksCommand(T parameters) { super(parameters); setVdsId(parameters.getVdsId()); + } + + public int getSequence() { + return getParameters().getSequence(); + } + + public int getTotal() { + return getParameters().getTotal(); + } + + public String getNetworkNames() { + return getParameters().getNetworkNames(); } @Override @@ -25,12 +39,19 @@ @Override protected void executeCommand() { + if (getParameters().getShouldBeLogged()) { + AuditLogDirector.log(this, AuditLogType.PERSIST_NETWORK_ON_HOST); + } + VdcReturnValueBase returnValue = getBackend().runInternalAction(VdcActionType.SetupNetworks, getParameters()); if (returnValue.getSucceeded() && SETUP_NETWORKS_RESOLUTION.NO_CHANGES_DETECTED != returnValue.getActionReturnValue()) { + VdsActionParameters parameters = new VdsActionParameters(getParameters().getVdsId()); + parameters.setShouldBeLogged(false); + parameters.setCorrelationId(getCorrelationId()); returnValue = getBackend().runInternalAction(VdcActionType.CommitNetworkChanges, - new VdsActionParameters(getParameters().getVdsId())); + parameters); } if (!returnValue.getSucceeded()) { @@ -39,4 +60,10 @@ setSucceeded(returnValue.getSucceeded()); } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.PERSIST_NETWORK_ON_HOST_FINISHED + : AuditLogType.PERSIST_NETWORK_ON_HOST_FAILED; + } } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index dc84905..f4558a6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -625,6 +625,9 @@ SUBNET_ADDED(1142), SUBNET_ADDITION_FAILED(1143), CONFIGURE_NETWORK_BY_LABELS_WHEN_CHANGING_CLUSTER_FAILED(1144), + PERSIST_NETWORK_ON_HOST(1145), + PERSIST_NETWORK_ON_HOST_FINISHED(1146), + PERSIST_NETWORK_ON_HOST_FAILED(1147), // Import/Export IMPORTEXPORT_STARTING_EXPORT_VM(1162), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PersistentSetupNetworksParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PersistentSetupNetworksParameters.java index 8fd386c..46b1e65 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PersistentSetupNetworksParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PersistentSetupNetworksParameters.java @@ -3,4 +3,37 @@ public class PersistentSetupNetworksParameters extends SetupNetworksParameters { private static final long serialVersionUID = 2120379740832172688L; + + private int sequence; + + private int total; + + private String networkNames; + + public PersistentSetupNetworksParameters() { + } + + public int getSequence() { + return sequence; + } + + public void setSequence(int sequence) { + this.sequence = sequence; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public String getNetworkNames() { + return networkNames; + } + + public void setNetworkNames(String networkNames) { + this.networkNames = networkNames; + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java index ee0e4cd..5ff8320 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java @@ -847,6 +847,9 @@ severities.put(AuditLogType.SUBNET_ADDED, AuditLogSeverity.NORMAL); severities.put(AuditLogType.SUBNET_ADDITION_FAILED, AuditLogSeverity.ERROR); severities.put(AuditLogType.CONFIGURE_NETWORK_BY_LABELS_WHEN_CHANGING_CLUSTER_FAILED, AuditLogSeverity.ERROR); + severities.put(AuditLogType.PERSIST_NETWORK_ON_HOST, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.PERSIST_NETWORK_ON_HOST_FINISHED, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.PERSIST_NETWORK_ON_HOST_FAILED, AuditLogSeverity.ERROR); } private static void initExtrnalEvents() { diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index 3591bdc..906e22a 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -471,6 +471,9 @@ SUBNET_ADDITION_FAILED=Failed to add subnet ${SubnetName} on provider ${ProviderName}. (User: ${UserName}) SUBNET_REMOVED=Subnet ${SubnetName} was removed from provider ${ProviderName}. (User: ${UserName}) SUBNET_REMOVAL_FAILED=Failed to remove subnet ${SubnetName} from provider ${ProviderName}. (User: ${UserName}) +PERSIST_NETWORK_ON_HOST=(${Sequence}/${Total}): Applying changes for network(s) ${NetworkNames} on host ${VdsName}. (User: ${UserName}) +PERSIST_NETWORK_ON_HOST_FINISHED=(${Sequence}/${Total}): Successfully applied changes for network(s) ${NetworkNames} on host ${VdsName}. (User: ${UserName}) +PERSIST_NETWORK_ON_HOST_FAILED=(${Sequence}/${Total}): Failed to apply changes for network(s) ${NetworkNames} on host ${VdsName}. (User: ${UserName}) NETWORK_ADD_NETWORK=Network ${NetworkName} was added to Data Center: ${StoragePoolName} NETWORK_ADD_NETWORK_FAILED=Failed to add Network ${NetworkName} to Data Center: ${StoragePoolName} NETWORK_ADD_TEMPLATE_INTERFACE=Interface ${InterfaceName} (${InterfaceType}) was added to Template ${VmTemplateName}. (User: ${UserName}) -- To view, visit http://gerrit.ovirt.org/24357 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie86bd5368052b4ed3bd18cff567c39daef911b31 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Mike Kolesnik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
