BryanMLima commented on issue #7783:
URL: https://github.com/apache/cloudstack/issues/7783#issuecomment-1658944162

   @DaanHoogland @weizhouapache, to solve this issue, we used the query below 
to identify the Guest OS entries that were duplicate and were not used by any 
VM or template.
   
   
   ```sql
   SELECT g_os.id
   FROM cloud.guest_os g_os
   WHERE g_os.removed IS NULL
   AND id NOT IN (
     SELECT MIN(sub_g_os.id)
     FROM cloud.guest_os sub_g_os
     GROUP BY sub_g_os.display_name, sub_g_os.category_id
   )
   AND (
     SELECT count(*)
     FROM cloud.vm_template vt
     WHERE vt.state <> 'Inactive'
     AND vt.guest_os_id = g_os.id
   ) + (
     SELECT count(*)
     FROM cloud.vm_instance vi
     WHERE vi.removed IS NULL
     AND vi.guest_os_id = g_os.id
   ) = 0;
   ```
   
   To remove the duplicate Guest OS types and hypervisors mappings, the 
following queries were executed:
   
   1. Normalize duplicate Guest OS:
   ```sql
   UPDATE cloud.guest_os
   SET removed = "2000-01-01 00:00:00"
   WHERE id IN (<list of IDs>);
   ```
   2. Normalize duplicate Guest OS hypervisors mappings:
   ```sql
   UPDATE cloud.guest_os_hypervisor
   SET removed = "2000-01-01 00:00:00"
   WHERE guest_os_id IN (<list of IDs>);
   ```
   
   It was used the date `2000-01-01` to easily identify that the entry was not 
removed by an API call. However, it is possible that in some environments, 
templates, and VMs were created using the duplicate entries introduced in 
PR[#7095](https://github.com/apache/cloudstack/pull/7095). Thus, it is required 
manual intervention to normalize these isolated cases. The following query can 
be executed to identify them:
   ```sql
   SELECT *
   FROM cloud.guest_os g_os
   WHERE g_os.removed IS NULL
   AND id NOT IN (
     SELECT MIN(sub_g_os.id)
     FROM cloud.guest_os sub_g_os
     GROUP BY sub_g_os.display_name, sub_g_os.category_id
   );
   ```
   
   As @DaanHoogland mentioned in 
https://github.com/apache/cloudstack/issues/7783#issuecomment-1655201143, we 
need to find a way to automate the normalization of these isolated cases, and 
to validate if a Guest OS and hypervisors mappings already exists when using 
the method `addGuestOsAndHypervisorMappings`.  The second is trivial, the 
problem lies in the automation of the normalization.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to