+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
> >>
> >

Reply via email to