package org.ovirt.engine.core.vdsbroker.vdsbroker;
import javax.inject.Inject;
import org.ovirt.engine.core.common.vdscommands.CollectHostNetworkDataVdsCommandParameters;
import org.ovirt.engine.core.common.vdscommands.UserConfiguredNetworkData;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.utils.transaction.TransactionSupport;
public class CollectVdsNetworkDataVDSCommand extends GetCapabilitiesVDSCommand<CollectHostNetworkDataVdsCommandParameters> {
@Inject
private HostNetworkTopologyPersister hostNetworkTopologyPersister;
public CollectVdsNetworkDataVDSCommand(CollectHostNetworkDataVdsCommandParameters parameters) {
super(parameters);
}
@Override
protected void executeVdsBrokerCommand() {
// call getVdsCapabilities verb
super.executeVdsBrokerCommand();
persistCollectedData();
proceedProxyReturnValue();
}
protected void persistCollectedData() {
updateNetConfigDirtyFlag();
hostNetworkTopologyPersister.persistAndEnforceNetworkCompliance(getVds(),
skipManagementNetwork(),
new UserConfiguredNetworkData());
}
/**
* @return By default, don't skip the management network check.
*/
protected boolean skipManagementNetwork() {
return false;
}
/**
* Update the {@link org.ovirt.engine.core.common.businessentities.VdsDynamic#getNetConfigDirty()} field in the
* DB.<br>
* The update is done in a new transaction since we don't care if afterwards something goes wrong, but we would like
* to minimize races with other command that update the
* {@link org.ovirt.engine.core.common.businessentities.VdsDynamic} entity in the DB.
*/
private void updateNetConfigDirtyFlag() {
TransactionSupport.executeInNewTransaction(() -> {
DbFacade.getInstance()
.getVdsDynamicDao()
.updateNetConfigDirty(getVds().getId(), getVds().getNetConfigDirty());
return null;
});
}
}