+1 on enforcing it through db constraints. Create a JIRA ticket https://issues.apache.org/jira/browse/CLOUDSTACK-2676 to track this issue.
Thanks -min On 5/24/13 6:20 AM, "Alex Huang" <alex.hu...@citrix.com> wrote: >+1 on adding the constraints. Just make sure you add them after >upgrading the data. > >Populating with id in the upgrade prevents exactly the problem you've >described. That's why we're doing it. > > >--Alex > >> -----Original Message----- >> From: Nitin Mehta [mailto:nitin.me...@citrix.com] >> Sent: Thursday, May 23, 2013 11:09 PM >> To: dev@cloudstack.apache.org >> Subject: Re: Convention on UUID column >> >> Agree with Koushik. Lets enforce the not null constraint on all the >>UUID fields >> now that we are populating it. >> >> Also wanted to ask why we are populating it with the ID and not a >>generated >> UUID ? Doesn't break the backward compatibilty going either ways but the >> later is more consistent right and can be used in future as they are >>always >> unique across the system - say for storing templates directly under >>?UUID of >> the template/vol/snapshot on sec. storage than using the folder >>structure of >> templates/account_id/template_id/real_template ? >> Clients who have hardcoded against CS for system vm ids, service >>offering ids >> etc. will break definitely though - is that ok ? >> >> Thanks, >> -Nitin >> >> On 24/05/13 9:26 AM, "Koushik Das" <koushik....@citrix.com> wrote: >> >> > >> >It is better to add constraints in the db for all uuid fields. That way >> >uuid field will never get missed out. I see that for some tables there >> >is a NOT NULL constraint. >> > >> >-Koushik >> > >> >> -----Original Message----- >> >> From: Min Chen [mailto:min.c...@citrix.com] >> >> Sent: Friday, May 24, 2013 4:09 AM >> >> To: dev@cloudstack.apache.org >> >> Subject: Convention on UUID column >> >> >> >> Hi there, >> >> >> >> During API refactoring efforts, Rohit and I run into several issues >> >>due to empty UUID column for existing DB entries. Since UUID was >> >>introduced later in 3.0.x, we have to always conditionally handle >> >>existing customers with empty UUID columns for different entities, >> >>causing much headache for various upgrade cases. To make sure that we >> >>have a consistent upgrade base for all 4.1 customers later, in >> >>schema-410to420.sql, we have added sql scripts to populate UUID >> >>column of all pre-4.1 schema tables with values from their ID column >> >>if UUID column is NULL. To make this work properly, we require that >> >>all UUID columns should be populated with values when you add new >> >>data into both pre-4.1 schema or post-4.1 schema. I just noticed that >> >>this assumption may not be well known to community, since I am seeing >> >>this sql in schema-410to420.sql: >> >> >> >> >> >> INSERT INTO `cloud`.`vm_template` (id, unique_name, name, public, >> >>created, type, hvm, bits, account_id, url, checksum, enable_password, >> >>display_text, format, guest_os_id, featured, cross_zones, >> >>hypervisor_type) >> >> >> >> VALUES (10, 'routing-10', 'SystemVM Template (LXC)', 0, now(), >> >>'SYSTEM', 0, 64, 1, >> >>'http://download.cloud.com/templates/acton/acton-systemvm- >> >> 02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, >> 'SystemVM >> >>Template (LXC)', 'QCOW2', 15, 0, 1, 'LXC'); >> >> >> >> >> >> Instead, this should be modified as: >> >> >> >> >> >> INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, >> >>public, created, type, hvm, bits, account_id, url, checksum, >> >>enable_password, display_text, format, guest_os_id, featured, >> >>cross_zones, >> >>hypervisor_type) >> >> >> >> VALUES (10, UUID(), 'routing-10', 'SystemVM Template (LXC)', 0, >> >>now(), 'SYSTEM', 0, 64, 1, >> >>'http://download.cloud.com/templates/acton/acton- >> >> systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, >> >>'SystemVM Template (LXC)', 'QCOW2', 15, 0, 1, 'LXC'); >> >> >> >> I have made this fix in master, but want to raise this topic to get >> >>community's attention on this. >> >> >> >> Thanks >> >> -min >> >> >> > >