Martin Betak has uploaded a new change for review.

Change subject: engine: Enable read of current CD via REST
......................................................................

engine: Enable read of current CD via REST

Added tracking of the current CD for VM (the value resulting from
ChangeDisk).

- On REST side we check for the 'current' matrix param in the GET
  request and if present we return the currentCd of the VM instead of
  the persistent isoPath.
- Added 'current_cd' to vm_dynamic table to store this value in
  VdsBrokerObjectsBuilder.

Change-Id: Ifd6c80984143b7d953b6d76b9863465aabce0917
Signed-off-by: Martin Betak <mbe...@redhat.com>
---
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/VmDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDynamicDAODbFacadeImpl.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
M packaging/dbscripts/create_views.sql
A packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql
M packaging/dbscripts/vms_sp.sql
12 files changed, 69 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/68/20368/1

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 8ec0f33..f7d2229 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
@@ -947,6 +947,14 @@
         this.vmDynamic.setCpuName(value);
     }
 
+    public String getCurrentCd() {
+        return this.vmDynamic.getCurrentCd();
+    }
+
+    public void setCurrentCd(String value) {
+        this.vmDynamic.setCurrentCd(value);
+    }
+
     public void setExportDate(Date value) {
         this.vmStatic.setExportDate(value);
     }
@@ -1205,6 +1213,7 @@
         setVmHost(vm.getVmHost());
         setVmIp(vm.getVmIp());
         setVmFQDN(vm.getVmFQDN());
+        setCurrentCd(vm.getCurrentCd());
 
         // if (!string.IsNullOrEmpty(vm.app_list))
         // {
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 3ec3dbf..f4de31d 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
@@ -50,6 +50,7 @@
     private String lastWatchdogAction;
     private boolean runOnce;
     private String cpuName;
+    private String currentCd;
 
     @Override
     public int hashCode() {
@@ -93,6 +94,7 @@
         result = prime * result + (lastWatchdogAction == null ? 0 : 
lastWatchdogAction.hashCode());
         result = prime * result + (runOnce ? 1231 : 1237);
         result = prime * result + (cpuName == null ? 0 : cpuName.hashCode());
+        result = prime * result + (currentCd == null ? 0 : 
currentCd.hashCode());
         return result;
     }
 
@@ -145,7 +147,8 @@
                 && ObjectUtils.objectsEqual(lastWatchdogEvent, 
other.lastWatchdogEvent)
                 && ObjectUtils.objectsEqual(lastWatchdogAction, 
other.lastWatchdogAction)
                 && runOnce == other.runOnce
-                && ObjectUtils.objectsEqual(cpuName, other.cpuName));
+                && ObjectUtils.objectsEqual(cpuName, other.cpuName)
+                && ObjectUtils.objectsEqual(currentCd, other.currentCd));
     }
 
     public String getExitMessage() {
@@ -490,4 +493,11 @@
         this.cpuName = cpuName;
     }
 
+    public String getCurrentCd() {
+        return currentCd;
+    }
+
+    public void setCurrentCd(String currentCd) {
+        this.currentCd = currentCd;
+    }
 }
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 4a69684..d7bebe0 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
@@ -368,6 +368,7 @@
             entity.setCpuName(rs.getString("cpu_name"));
             
entity.setInstanceTypeId(Guid.createGuidFromString(rs.getString("instance_type_id")));
             
entity.setImageTypeId(Guid.createGuidFromString(rs.getString("image_type_id")));
+            entity.setCurrentCd(rs.getString("current_cd"));
             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 4950bb3..8bf016d 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
@@ -113,7 +113,8 @@
                 .addValue("last_watchdog_event", vm.getLastWatchdogEvent())
                 .addValue("last_watchdog_action", vm.getLastWatchdogAction())
                 .addValue("is_run_once", vm.isRunOnce())
-                .addValue("cpu_name", vm.getCpuName());
+                .addValue("cpu_name", vm.getCpuName())
+                .addValue("current_cd", vm.getCurrentCd());
     }
 
     @Override
@@ -175,6 +176,7 @@
                 
entity.setLastWatchdogAction(rs.getString("last_watchdog_action"));
                 entity.setRunOnce(rs.getBoolean("is_run_once"));
                 entity.setCpuName(rs.getString("cpu_name"));
+                entity.setCurrentCd(rs.getString("current_cd"));
                 return entity;
             }
         };
@@ -222,7 +224,8 @@
                         .addValue("guest_agent_nics_hash", 
entity.getGuestAgentNicsHash())
                         .addValue("last_watchdog_event", 
entity.getLastWatchdogEvent())
                         .addValue("last_watchdog_action", 
entity.getLastWatchdogAction())
-                        .addValue("cpu_name", entity.getCpuName());
+                        .addValue("cpu_name", entity.getCpuName())
+                        .addValue("current_cd", entity.getCurrentCd());
 
                 return paramValue;
             }
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 3776536..4ac6f3b 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -2570,6 +2570,7 @@
         <column>exit_message</column>
         <column>guest_agent_nics_hash</column>
         <column>cpu_name</column>
+        <column>current_cd</column>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4356</value>
             <value>5</value>
@@ -2603,6 +2604,7 @@
             <value>0</value>
             <value>0</value>
             <null />
+            <null/>
             <null/>
             <null/>
         </row>
@@ -2641,6 +2643,7 @@
             <null />
             <value>0</value>
             <null />
+            <null/>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4354</value>
@@ -2677,6 +2680,7 @@
             <null />
             <value>3452354</value>
             <null />
+            <null/>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4359</value>
@@ -2712,6 +2716,7 @@
             <value>0</value>
             <null />
             <null />
+            <null/>
         </row>
         <row>
             <value>77296e00-0cad-4e5a-9299-008a7b6f4360</value>
@@ -2747,6 +2752,7 @@
             <value>0</value>
             <null />
             <null />
+            <null/>
         </row>
     </table>
 
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index f595bdb..4cc139c 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -378,7 +378,8 @@
     body:
       parameterType: null
       signatures: []
-    urlparams: {}
+    urlparams:
+      current: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
     headers: {}
 - name: /api/vms/{vm:id}/cdroms/{cdrom:id}|rel=delete
   description: delete the cdrom for a virtual machine identified by the given 
id
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java
index 94363b8..fe20057 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendCdRomResource.java
@@ -40,4 +40,20 @@
             return super.update(resource);
         }
     }
+
+    @Override
+    public CdRom get() {
+        if (QueryHelper.hasMatrixParam(getUriInfo(), 
CURRENT_CONSTRAINT_PARAMETER)) {
+            VM vm = collection.lookupEntity(guid);
+            if (vm == null) {
+                return notFound();
+            }
+            // change the iso path so the result of 'map' will contain current 
cd instead of the
+            // persistent configuration
+            vm.setIsoPath(vm.getCurrentCd());
+            return addLinks(populate(map(vm), vm));
+        } else {
+            return super.get();
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java
index b29c7ff..61f4629 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendCdRomsResourceTest.java
@@ -52,6 +52,7 @@
                 new Object[] { PARENT_ID },
                 new VM(),
                 1);
+        setUriInfo(setUpBasicUriExpectations());
         control.replay();
         try {
             collection.remove(NON_EXISTANT_GUID.toString());
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
index bfc5820..e4abf27 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsBrokerObjectsBuilder.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.core.vdsbroker.vdsbroker;
 
+import java.nio.file.Paths;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -256,6 +257,13 @@
             vm.setLastWatchdogEvent((long) time);
             vm.setLastWatchdogAction(action);
         }
+
+        if (xmlRpcStruct.containsKey(VdsProperties.CDRom)) {
+            String isoName = Paths.get((String) 
xmlRpcStruct.get(VdsProperties.CDRom)).getFileName().toString();
+            vm.setCurrentCd(isoName);
+        } else {
+            vm.setCurrentCd(null);
+        }
     }
 
     public static void updateVMStatisticsData(VmStatistics vm, Map<String, 
Object> xmlRpcStruct) {
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index 98958f4..32949c1 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -582,7 +582,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.is_run_once 
as is_run_once, vm_dynamic.vm_fqdn as vm_fqdn, vm_dynamic.cpu_name as cpu_name,
+                      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, vm_dynamic.vm_fqdn as vm_fqdn, vm_dynamic.cpu_name as cpu_name, 
vm_dynamic.current_cd as current_cd,
                       vm_static.instance_type_id as instance_type_id, 
vm_static.image_type_id as image_type_id
 FROM         vm_static INNER JOIN
 vm_dynamic ON vm_static.vm_guid = vm_dynamic.vm_guid INNER JOIN
diff --git 
a/packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql 
b/packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql
new file mode 100644
index 0000000..b10d730
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_04_0060_add_current_cd_to_vm_dynamic.sql
@@ -0,0 +1 @@
+select fn_db_add_column('vm_dynamic', 'current_cd', 'varchar(4000) default 
null');
\ No newline at end of file
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index 327122b..57a3c5c 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -243,12 +243,13 @@
         v_last_watchdog_event NUMERIC,
         v_last_watchdog_action VARCHAR(8),
         v_is_run_once BOOLEAN,
-        v_cpu_name VARCHAR(255))
+        v_cpu_name VARCHAR(255),
+        v_current_cd VARCHAR(4000))
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO vm_dynamic(app_list, guest_cur_user_name, console_cur_user_name, 
guest_last_login_time, guest_last_logout_time, console_user_id, guest_os, 
migrating_to_vds, RUN_ON_VDS, status, vm_guid, vm_host, vm_ip, last_start_time, 
vm_pid, display, acpi_enable, session, display_ip, display_type, kvm_enable, 
boot_sequence, display_secure_port, utc_diff, last_vds_run_on, client_ip, 
guest_requested_memory, 
hibernation_vol_handle,exit_status,pause_status,exit_message, 
guest_agent_nics_hash, last_watchdog_event, last_watchdog_action, is_run_once, 
vm_fqdn, cpu_name)
-       VALUES(v_app_list, v_guest_cur_user_name, v_console_cur_user_name, 
v_guest_last_login_time, v_guest_last_logout_time, v_console_user_id, 
v_guest_os, v_migrating_to_vds, v_run_on_vds, v_status, v_vm_guid, v_vm_host, 
v_vm_ip, v_last_start_time, v_vm_pid, v_display, v_acpi_enable, v_session, 
v_display_ip, v_display_type, v_kvm_enable, v_boot_sequence, 
v_display_secure_port, v_utc_diff, v_last_vds_run_on, v_client_ip, 
v_guest_requested_memory, v_hibernation_vol_handle, v_exit_status, 
v_pause_status, v_exit_message, v_guest_agent_nics_hash, v_last_watchdog_event, 
v_last_watchdog_action, v_is_run_once, v_vm_fqdn, v_cpu_name);
+INSERT INTO vm_dynamic(app_list, guest_cur_user_name, console_cur_user_name, 
guest_last_login_time, guest_last_logout_time, console_user_id, guest_os, 
migrating_to_vds, RUN_ON_VDS, status, vm_guid, vm_host, vm_ip, last_start_time, 
vm_pid, display, acpi_enable, session, display_ip, display_type, kvm_enable, 
boot_sequence, display_secure_port, utc_diff, last_vds_run_on, client_ip, 
guest_requested_memory, 
hibernation_vol_handle,exit_status,pause_status,exit_message, 
guest_agent_nics_hash, last_watchdog_event, last_watchdog_action, is_run_once, 
vm_fqdn, cpu_name, current_cd)
+       VALUES(v_app_list, v_guest_cur_user_name, v_console_cur_user_name, 
v_guest_last_login_time, v_guest_last_logout_time, v_console_user_id, 
v_guest_os, v_migrating_to_vds, v_run_on_vds, v_status, v_vm_guid, v_vm_host, 
v_vm_ip, v_last_start_time, v_vm_pid, v_display, v_acpi_enable, v_session, 
v_display_ip, v_display_type, v_kvm_enable, v_boot_sequence, 
v_display_secure_port, v_utc_diff, v_last_vds_run_on, v_client_ip, 
v_guest_requested_memory, v_hibernation_vol_handle, v_exit_status, 
v_pause_status, v_exit_message, v_guest_agent_nics_hash, v_last_watchdog_event, 
v_last_watchdog_action, v_is_run_once, v_vm_fqdn, v_cpu_name, v_current_cd);
 END; $procedure$
 LANGUAGE plpgsql;
 
@@ -291,7 +292,8 @@
         v_last_watchdog_event NUMERIC,
         v_last_watchdog_action VARCHAR(8),
         v_is_run_once BOOLEAN,
-        v_cpu_name VARCHAR(255))
+        v_cpu_name VARCHAR(255),
+        v_current_cd VARCHAR(4000))
 RETURNS VOID
 
        --The [vm_dynamic] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
@@ -314,7 +316,8 @@
       guest_requested_memory = v_guest_requested_memory,
       hibernation_vol_handle = v_hibernation_vol_handle,exit_status = 
v_exit_status,
       pause_status = v_pause_status,exit_message = v_exit_message, 
hash=v_hash, guest_agent_nics_hash = v_guest_agent_nics_hash,
-      last_watchdog_event = v_last_watchdog_event, last_watchdog_action = 
v_last_watchdog_action, is_run_once = v_is_run_once, cpu_name = v_cpu_name
+      last_watchdog_event = v_last_watchdog_event, last_watchdog_action = 
v_last_watchdog_action, is_run_once = v_is_run_once, cpu_name = v_cpu_name,
+      current_cd = v_current_cd
       WHERE vm_guid = v_vm_guid;
 END; $procedure$
 LANGUAGE plpgsql;


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

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

Reply via email to