Tomas Jelinek has uploaded a new change for review.

Change subject: core: added is_run_once flag to vm_dynamic
......................................................................

core: added is_run_once flag to vm_dynamic

The only way how to set this property is using the VmDAO.saveIsRunOnce method.
The reason is to avoid the VdsUpdateRunTimeInfo to replace this field.

Change-Id: I25acdbcc84d326c694d7ae5ff1facaf13e5d683e
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=987985
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
M packaging/dbscripts/create_views.sql
M packaging/dbscripts/vms_sp.sql
11 files changed, 64 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/17481/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index e2e7c7b..5e5d115 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -485,6 +485,7 @@
      */
     protected CreateVmVDSCommandParameters initCreateVmParams() {
         VM vmToBeCreated = getVm();
+        vmToBeCreated.setRunOnce(false);
 
         if (!vmToBeCreated.getInterfaces().isEmpty()) {
             initParametersForExternalNetworks();
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java
index 3bf0c05..4b68302 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmOnceCommand.java
@@ -58,8 +58,9 @@
 
     @Override
     protected CreateVmVDSCommandParameters initCreateVmParams() {
-        getVm().setRunOnce(true);
         CreateVmVDSCommandParameters createVmParams = 
super.initCreateVmParams();
+
+        getVm().setRunOnce(true);
         RunVmOnceParams runOnceParams = getParameters();
 
         SysPrepParams sysPrepParams = new SysPrepParams();
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
index a99559e..7ca5ba8 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VM.java
@@ -1425,11 +1425,11 @@
     }
 
     public void setRunOnce(boolean value) {
-        runOnce = value;
+        vmDynamic.setRunOnce(value);
     }
 
     public boolean isRunOnce() {
-        return runOnce;
+        return vmDynamic.isRunOnce();
     }
 
     public void setVmPayload(VmPayload vmPayload) {
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
index 627e8f9..0872481 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmDynamic.java
@@ -47,6 +47,7 @@
     private boolean win2kHackEnabled = false;
     private Long lastWatchdogEvent = null;
     private String lastWatchdogAction = null;
+    private boolean runOnce;
 
     @Override
     public int hashCode() {
@@ -87,6 +88,7 @@
         result = prime * result + ((vmPid == null) ? 0 : vmPid.hashCode());
         result = prime * result + (lastWatchdogEvent == null ? 0 : 
lastWatchdogEvent.hashCode());
         result = prime * result + (lastWatchdogAction == null ? 0 : 
lastWatchdogAction.hashCode());
+        result = prime * result + (runOnce ? 1231 : 1237);
         return result;
     }
 
@@ -136,7 +138,8 @@
                 && ObjectUtils.objectsEqual(lastStartTime, other.lastStartTime)
                 && ObjectUtils.objectsEqual(vmPid, other.vmPid)
                 && ObjectUtils.objectsEqual(lastWatchdogEvent, 
other.lastWatchdogEvent)
-                && ObjectUtils.objectsEqual(lastWatchdogAction, 
other.lastWatchdogAction));
+                && ObjectUtils.objectsEqual(lastWatchdogAction, 
other.lastWatchdogAction)
+                && runOnce == other.runOnce);
     }
 
     public String getExitMessage() {
@@ -452,4 +455,11 @@
         this.lastWatchdogAction = lastWatchdogAction;
     }
 
+    public boolean isRunOnce() {
+        return runOnce;
+    }
+
+    public void setRunOnce(boolean runOnce) {
+        this.runOnce = runOnce;
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java
index 8112556..bc089af 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java
@@ -217,6 +217,17 @@
      *            Whether or not the VM is initialized.
      */
     void saveIsInitialized(Guid vmid, boolean isInitialized);
+
+    /**
+     * Saves the is_run_once property of the VM.
+     *
+     * @param vmid
+     *            The VM's ID
+     * @param isRunOnce
+     *            Whether or not the VM is running in run once.
+     */
+    void saveIsRunOnce(Guid vmid, boolean isRunOnce);
+
     /**
      * Removes the VM with the specified id.
      *
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
index 18cc051..31b6d1d 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java
@@ -250,6 +250,14 @@
     }
 
     @Override
+    public void saveIsRunOnce(Guid vmid, boolean isRunOnce) {
+        getCallsHandler().executeModification("UpdateIsRunOnce",
+                getCustomMapSqlParameterSource()
+                        .addValue("vm_guid", vmid)
+                        .addValue("is_run_once", isRunOnce));
+    }
+
+    @Override
     public void remove(Guid id) {
         getCallsHandler().executeModification("DeleteVm", 
getCustomMapSqlParameterSource()
                 .addValue("vm_guid", id));
@@ -403,6 +411,7 @@
             entity.setRunAndPause(rs.getBoolean("is_run_and_pause"));
             entity.setLastWatchdogEvent(getLong(rs, "last_watchdog_event"));
             entity.setTrustedService(rs.getBoolean("trusted_service"));
+            entity.setRunOnce(rs.getBoolean("is_run_once"));
             entity.setCreatedByUserId(getGuid(rs,"created_by_user_id"));
             return entity;
         }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java
index 36a17bb..9e2900c 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java
@@ -168,6 +168,7 @@
                 
entity.setGuestAgentNicsHash(rs.getInt("guest_agent_nics_hash"));
                 entity.setLastWatchdogEvent(getLong(rs, 
"last_watchdog_event"));
                 
entity.setLastWatchdogAction(rs.getString("last_watchdog_action"));
+                entity.setRunOnce(rs.getBoolean("is_run_once"));
                 return entity;
             }
         };
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
index 8caf43f..8e84c0d 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java
@@ -430,4 +430,18 @@
         updatedVm = dao.get(vmId);
         assertEquals("VM's is_initiazlied was not updated", origInitialized, 
updatedVm.isInitialized());
     }
+
+    @Test
+    public void testSaveIsRunOnce() {
+        Guid vmId = existingVm.getId();
+        boolean origIsRunOnce = existingVm.isRunOnce();
+
+        dao.saveIsRunOnce(vmId, !origIsRunOnce);
+        VM updatedVm = dao.get(vmId);
+        assertEquals("VM's is_run_once was not updated", !origIsRunOnce, 
updatedVm.isRunOnce());
+
+        dao.saveIsRunOnce(vmId, origIsRunOnce);
+        updatedVm = dao.get(vmId);
+        assertEquals("VM's is_run_once was not updated", origIsRunOnce, 
updatedVm.isRunOnce());
+    }
 }
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
index ad34177..320d9f8 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/CreateVmVDSCommand.java
@@ -43,6 +43,7 @@
                 if (command.getVDSReturnValue().getSucceeded()) {
                     vm.setInitialized(true);
                     saveSetInitializedToDb(vm.getId());
+                    
DbFacade.getInstance().getVmDao().saveIsRunOnce(vm.getId(), vm.isRunOnce());
 
                     
TransactionSupport.executeInScope(TransactionScopeOption.Required,
                             new TransactionMethod<Object>() {
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index bcb295a..94e762d 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -563,7 +563,7 @@
                       vm_static.default_display_type as default_display_type, 
vm_static.priority as priority,vm_static.iso_path as iso_path, vm_static.origin 
as origin, vds_groups.compatibility_version as vds_group_compatibility_version,
                       vm_static.initrd_url as initrd_url, vm_static.kernel_url 
as kernel_url, vm_static.kernel_params as kernel_params, 
vm_dynamic.pause_status as pause_status, vm_dynamic.exit_message as 
exit_message, vm_dynamic.exit_status as exit_status,vm_static.migration_support 
as migration_support,vm_static.predefined_properties as 
predefined_properties,vm_static.userdefined_properties as 
userdefined_properties,vm_static.min_allocated_mem as min_allocated_mem,  
vm_dynamic.hash as hash, vm_static.cpu_pinning as cpu_pinning, 
vm_static.db_generation as db_generation, vm_static.host_cpu_flags as 
host_cpu_flags,
                       vm_static.tunnel_migration as tunnel_migration, 
vm_static.vnc_keyboard_layout as vnc_keyboard_layout, 
vm_static.is_run_and_pause as is_run_and_pause, vm_static.created_by_user_id as 
created_by_user_id,
-                      vm_dynamic.last_watchdog_event as last_watchdog_event, 
vm_dynamic.last_watchdog_action as last_watchdog_action
+                      vm_dynamic.last_watchdog_event as last_watchdog_event, 
vm_dynamic.last_watchdog_action as last_watchdog_action, vm_dynamic.is_run_once 
as is_run_once
 FROM         vm_static INNER JOIN
 vm_dynamic ON vm_static.vm_guid = vm_dynamic.vm_guid INNER JOIN
 vm_static AS vm_templates ON vm_static.vmt_guid = vm_templates.vm_guid INNER 
JOIN
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index aedca76..9a19c5e 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -1080,6 +1080,17 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+Create or replace FUNCTION UpdateIsRunOnce(v_vm_guid UUID,
+ v_is_run_once BOOLEAN)
+RETURNS VOID
+
+   AS $procedure$
+BEGIN
+      UPDATE vm_dynamic
+      SET is_run_once = v_is_run_once
+      WHERE vm_guid = v_vm_guid;
+END; $procedure$
+LANGUAGE plpgsql;
 
 
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I25acdbcc84d326c694d7ae5ff1facaf13e5d683e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to