[openstack-dev] [Neutron] Database field sizes and attribute "MAX_LEN" constants

Henry Gessau HenryG at gessau.net
Mon Oct 17 11:03:08 UTC 2016


Anna Taraday <akamyshnikova at mirantis.com> wrote:
> Henry, thanks for taking care of this!
> 
> In my opinion, it is just safe to use raw values in migration, because
> migration is a strict point in time.
> 
> I remember how many patches I send in havana in Neutron for fixing
> synchronization issues. Usage constants everywhere can be good in this case,
> but ModelMigrationSyc did such check of this for us already.
> 
> If we want to have constants everywhere, we should guarantee that they are
> unchanged - have test in neutron-lib which verifies their values. 

Yes, we could have some tests, although a patch changing a constant would
probably also have a change to the test. :) We might need to also have a
prominent "Warning! Do not change this test!" comment for each test.

> 
> 
> On Sat, Oct 15, 2016 at 10:41 PM Henry Gessau <HenryG at gessau.net
> <mailto:HenryG at gessau.net>> wrote:
> 
>     Hi neutrinos,
> 
>     In Neutron many attributes are stored in database fields. The size of these
>     fields therefore determines the maximum length of the attribute values.
> 
>     I would like to get some consistency in place around how we define the
>     constants and where they are used. Here are my thoughts...
> 
> 
>     1. Raw sizes in alembic migrations
> 
>     In the alembic migrations which build the DB schema, we should use the raw
>     number value of the field size.
> 
>     2. FOO_FIELD_SIZE in the sqlalchemy models
> 
>     In the sqlalchemy models, we should use the <field>_FIELD_SIZE constants
>     defined in neutron_lib/db/constants.py
> 
>     3. Everywhere else, use FOO_FIELD_SIZE, or another constant (like FOO_MAX_LEN)
>     based on FOO_FIELD_SIZE.
> 
> 
>     "Why raw numbers in alembic migrations?", you may ask. Well, we have tests
>     that verify that the models match the schema generated by migrations. If both
>     the models and the migrations use the constants then the tests would not
>     detect if a patch changes the constant value.
> 
>     By using raw numbers in migrations, together with our rule of not allowing
>     changes to existing migrations, we allow the tests to detect and fail on any
>     attempt to alter a FIELD_SIZE constant.
> 
>     Let me know if this makes sense or if you think it's a terrible idea.
> 
>     If there are no objections, I intend to submit a patch or patches to:
>      - replace constants with numbers in existing migrations
>      - ensure all models use the appropriate constants
> 
>     Existing code uses FOO_MAX_LEN in a lot of places. In most of these places it
>     would make sense to simply switch to using FOO_FIELD_SIZE. However, some code
>     may be quite far removed from the DB and would look better by sticking to
>     FOO_MAX_LEN. I added item 3. above to allow for that.




More information about the OpenStack-dev mailing list