Michael Kublin has uploaded a new change for review. Change subject: engine: Replacing getVds() query by getVdsStatic() query in VDSCommands ......................................................................
engine: Replacing getVds() query by getVdsStatic() query in VDSCommands The following patch will replace a getVds() query by getVdsStatic() query in almost all vds (not spm) commands. THe reasons are: 1. A getVds() query - is a query to view, which is based on JOIN from at least 7 tables, getVdsStatic() it is a query to single table, meaning much more faster. 2. VDSStatic object is smaller than VDS object, less resources spent on retrievening it from DB, allocatin memory, etc... 3. VDSStatic object almost never changed, it is means that when it will be cached, we will not perfrom any query during vds commands, the VDS object contains VDSDynamic part, which is changed very frequently, so caching of VDS object is more difficult and possible not efficient. 4. No reason to use VDS object , when we can use VDSStatic object Also patch includes a following fixes and improvements: 1. FullListVDSCommand will never perform a query to vds object, it will be passed via parameters 2. A part of code moved from GetCapabilitiesVDSCommand to CollectVdsNetworkDataVDSCommand, this code is not relevant for GetCapabilitiesVDSCommand and only relevant for CollectVdsNetworkDataVDSCommand 3. Code clean up Also, after applying a patch, a query for VDSStatic will be made only if it is required to log command, and not always in constractor Change-Id: Iff6fa35e25bcd895c25359ece6ba4d5ce9c8e8cf Signed-off-by: Michael Kublin <mkub...@redhat.com> --- M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FullListVDSCommandParameters.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVGVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetCapabilitiesVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetVmTicketVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStatusVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java M backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java 12 files changed, 45 insertions(+), 40 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/21/14321/1 diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FullListVDSCommandParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FullListVDSCommandParameters.java index 14252f9..3a0bbf0 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FullListVDSCommandParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/FullListVDSCommandParameters.java @@ -2,7 +2,7 @@ import java.util.List; -import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.common.businessentities.VDS; /** * This class is for the list verb that supports getting "full" VM data for a given list of VMs @@ -11,11 +11,8 @@ private List<String> vmIds; - public FullListVDSCommandParameters() { - } - - public FullListVDSCommandParameters(Guid vdsId, List<String> vmIds) { - super(vdsId); + public FullListVDSCommandParameters(VDS vds, List<String> vmIds) { + super(vds); this.vmIds = vmIds; } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java index f874db5..30e9b38 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java @@ -1098,7 +1098,7 @@ */ protected Map[] getVmInfo(List<String> vmsToUpdate) { return (Map[]) (new FullListVdsCommand<FullListVDSCommandParameters>( - new FullListVDSCommandParameters(_vds.getId(), vmsToUpdate)).executeWithReturnValue()); + new FullListVDSCommandParameters(_vds, vmsToUpdate)).executeWithReturnValue()); } private boolean shouldLogDeviceDetails(String deviceType) { diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java index cc3de76..e417270 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CollectVdsNetworkDataVDSCommand.java @@ -34,6 +34,10 @@ extends GetCapabilitiesVDSCommand<P> { public CollectVdsNetworkDataVDSCommand(P parameters) { super(parameters); + if (getVds() == null) { + setVdsAndVdsStatic(DbFacade.getInstance().getVdsDao().get(parameters.getVdsId())); + parameters.setVds(getVds()); + } } @Override diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVGVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVGVDSCommand.java index 28a4132..9cb7093 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVGVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/CreateVGVDSCommand.java @@ -6,12 +6,13 @@ import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.vdscommands.*; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class CreateVGVDSCommand<P extends CreateVGVDSCommandParameters> extends VdsBrokerCommand<P> { private OneUuidReturnForXmlRpc _result; public CreateVGVDSCommand(P parameters) { - super(parameters); + super(parameters, DbFacade.getInstance().getVdsDao().get(parameters.getVdsId())); } @Override diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetCapabilitiesVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetCapabilitiesVDSCommand.java index bbbd9a8..ec06eb9 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetCapabilitiesVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/GetCapabilitiesVDSCommand.java @@ -1,7 +1,6 @@ package org.ovirt.engine.core.vdsbroker.vdsbroker; import org.ovirt.engine.core.common.vdscommands.VdsIdAndVdsVDSCommandParametersBase; -import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.log.Logged; import org.ovirt.engine.core.utils.log.Logged.LogLevel; @@ -9,10 +8,6 @@ public class GetCapabilitiesVDSCommand<P extends VdsIdAndVdsVDSCommandParametersBase> extends InfoVdsBrokerCommand<P> { public GetCapabilitiesVDSCommand(P parameters) { super(parameters, parameters.getVds()); - if (getVds() == null) { - setVds(DbFacade.getInstance().getVdsDao().get(parameters.getVdsId())); - parameters.setVds(getVds()); - } } @Override @@ -20,6 +15,5 @@ infoReturn = getBroker().getCapabilities(); ProceedProxyReturnValue(); VdsBrokerObjectsBuilder.updateVDSDynamicData(getVds(), infoReturn.mInfo); - } } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetVmTicketVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetVmTicketVDSCommand.java index c71bef8..983e379 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetVmTicketVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetVmTicketVDSCommand.java @@ -7,6 +7,7 @@ import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.common.config.Config; import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; public class SetVmTicketVDSCommand<P extends SetVmTicketVDSCommandParameters> extends VdsBrokerCommand<P> { private Guid mVmId = new Guid(); @@ -15,7 +16,7 @@ private String connectionAction = "disconnect"; public SetVmTicketVDSCommand(P parameters) { - super(parameters); + super(parameters, DbFacade.getInstance().getVdsDao().get(parameters.getVdsId())); mVmId = parameters.getVmId(); mTicket = parameters.getTicket(); mValidTime = parameters.getValidTime(); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java index f986749..df1f276 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStartVDSCommand.java @@ -17,9 +17,11 @@ public class SpmStartVDSCommand<P extends SpmStartVDSCommandParameters> extends VdsBrokerCommand<P> { public SpmStartVDSCommand(P parameters) { super(parameters); + vdsId = parameters.getVdsId(); } private OneUuidReturnForXmlRpc _result; + private Guid vdsId; @Override protected void ExecuteVdsBrokerCommand() { @@ -39,7 +41,7 @@ taskStatus = (AsyncTaskStatus) ResourceManager .getInstance() .runVdsCommand(VDSCommandType.HSMGetTaskStatus, - new HSMTaskGuidBaseVDSCommandParameters(getVds().getId(), taskId)).getReturnValue(); + new HSMTaskGuidBaseVDSCommandParameters(vdsId, taskId)).getReturnValue(); log.debugFormat("spmStart polling - task status: {0}", taskStatus.getStatus().toString()); } while (taskStatus.getStatus() != AsyncTaskStatusEnum.finished && taskStatus.getStatus() != AsyncTaskStatusEnum.unknown); @@ -53,7 +55,7 @@ SpmStatusResult spmStatus = (SpmStatusResult) ResourceManager .getInstance() .runVdsCommand(VDSCommandType.SpmStatus, - new SpmStatusVDSCommandParameters(getVds().getId(), getParameters().getStoragePoolId())) + new SpmStatusVDSCommandParameters(vdsId, getParameters().getStoragePoolId())) .getReturnValue(); if (spmStatus != null) { log.infoFormat("spmStart polling ended, spm status: {0}", spmStatus.getSpmStatus().toString()); @@ -62,7 +64,7 @@ } try { ResourceManager.getInstance().runVdsCommand(VDSCommandType.HSMClearTask, - new HSMTaskGuidBaseVDSCommandParameters(getVds().getId(), taskId)); + new HSMTaskGuidBaseVDSCommandParameters(vdsId, taskId)); } catch (java.lang.Exception e) { log.errorFormat("Could not clear spmStart task (id - {0}), continuing with SPM selection.", taskId); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStatusVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStatusVDSCommand.java index 5bea7df..9cbd9f8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStatusVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStatusVDSCommand.java @@ -16,7 +16,7 @@ private SpmStatusReturnForXmlRpc _result; public SpmStatusVDSCommand(P parameters) { - super(parameters, null); + super(parameters); } @Override diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java index 6e2a38b..fac603d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SpmStopVDSCommand.java @@ -9,11 +9,12 @@ import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.vdsbroker.ResourceManager; public class SpmStopVDSCommand<P extends SpmStopVDSCommandParameters> extends VdsBrokerCommand<P> { public SpmStopVDSCommand(P parameters) { - super(parameters); + super(parameters, DbFacade.getInstance().getVdsDao().get(parameters.getVdsId())); } @Override diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java index cb564ac..128e36f 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerCommand.java @@ -2,6 +2,7 @@ import org.apache.commons.lang.exception.ExceptionUtils; import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VdsStatic; import org.ovirt.engine.core.common.errors.VDSError; import org.ovirt.engine.core.common.errors.VdcBLLException; import org.ovirt.engine.core.common.errors.VdcBllErrors; @@ -14,7 +15,8 @@ public abstract class VdsBrokerCommand<P extends VdsIdVDSCommandParametersBase> extends BrokerCommandBase<P> { private final IVdsServer mVdsBroker; - private VDS mVds; + private VdsStatic vdsStatic; + private VDS vds; /** * Construct the command using the parameters and the {@link VDS} which is loaded from the DB. * @@ -24,7 +26,6 @@ public VdsBrokerCommand(P parameters) { super(parameters); mVdsBroker = initializeVdsBroker(parameters.getVdsId()); - mVds = getDbFacade().getVdsDao().get(parameters.getVdsId()); } /** @@ -37,8 +38,9 @@ */ protected VdsBrokerCommand(P parameters, VDS vds) { super(parameters); - mVdsBroker = initializeVdsBroker(parameters.getVdsId()); - mVds = vds; + this.mVdsBroker = initializeVdsBroker(parameters.getVdsId()); + this.vds = vds; + this.vdsStatic = vds.getStaticData(); } protected IVdsServer initializeVdsBroker(Guid vdsId) { @@ -61,19 +63,27 @@ @Override protected String getAdditionalInformation() { - if (getVds() != null) { - return String.format("HostName = %1$s", getVds().getName()); + if (getAndSetVdsStatic() != null) { + return String.format("HostName = %1$s", getAndSetVdsStatic().getName()); } else { return super.getAdditionalInformation(); } } - protected VDS getVds() { - return mVds; + private VdsStatic getAndSetVdsStatic() { + if (vdsStatic == null) { + vdsStatic = getDbFacade().getVdsStaticDao().get(getParameters().getVdsId()); + } + return vdsStatic; } - protected void setVds(VDS value) { - mVds = value; + protected VDS getVds() { + return vds; + } + + protected void setVdsAndVdsStatic(VDS vds) { + this.vds = vds; + this.vdsStatic = vds.getStaticData(); } protected DbFacade getDbFacade() { @@ -98,12 +108,12 @@ // TODO: look for invalid certificates error handling catch (RuntimeException e) { PrintReturnValue(); - if (getVds() == null) { + if (getAndSetVdsStatic() == null) { log.errorFormat("Failed in {0} method, for vds id: {1}", getCommandName(), getParameters().getVdsId()); } else { log.errorFormat("Failed in {0} method, for vds: {1}; host: {2}", - getCommandName(), getVds().getName(), getVds().getHostName()); + getCommandName(), getAndSetVdsStatic().getName(), getAndSetVdsStatic().getHostName()); } throw e; } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java index 3c49d2b..172c14a 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmStatsVdsBrokerCommand.java @@ -10,14 +10,9 @@ public abstract class VmStatsVdsBrokerCommand<P extends VdsIdVDSCommandParametersBase> extends VdsBrokerCommand<P> { protected VMInfoListReturnForXmlRpc mVmListReturn; - public VmStatsVdsBrokerCommand(P parameters) { - super(parameters); - } - protected VmStatsVdsBrokerCommand(P parameters, VDS vds) { super(parameters, vds); } - @Override protected StatusForXmlRpc getReturnStatus() { diff --git a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java index fe2b177..317a902 100644 --- a/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java +++ b/backend/manager/modules/vdsbroker/src/test/java/org/ovirt/engine/core/vdsbroker/vdsbroker/SetupNetworksVDSCommandTest.java @@ -27,7 +27,7 @@ import org.ovirt.engine.core.common.vdscommands.SetupNetworksVdsCommandParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; -import org.ovirt.engine.core.dao.VdsDAO; +import org.ovirt.engine.core.dao.VdsStaticDAO; import org.ovirt.engine.core.utils.RandomUtils; @RunWith(MockitoJUnitRunner.class) @@ -192,9 +192,9 @@ private SetupNetworksVDSCommand<SetupNetworksVdsCommandParameters> createCommand( SetupNetworksVdsCommandParameters parameters) { final DbFacade dbFacade = mock(DbFacade.class); - final VdsDAO vdsDao = mock(VdsDAO.class); + final VdsStaticDAO vdsStaticDao = mock(VdsStaticDAO.class); - when(dbFacade.getVdsDao()).thenReturn(vdsDao); + when(dbFacade.getVdsStaticDao()).thenReturn(vdsStaticDao); // No way to avoid these calls by regular mocking, so must implement anonymously. return new SetupNetworksVDSCommand<SetupNetworksVdsCommandParameters>(parameters) { -- To view, visit http://gerrit.ovirt.org/14321 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iff6fa35e25bcd895c25359ece6ba4d5ce9c8e8cf Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Michael Kublin <mkub...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches