)]}'
{"nova/compute/flavors.py":[{"author":{"_account_id":17139,"name":"Chuck Carmack","email":"carmack@us.ibm.com","username":"ccarmack"},"change_message_id":"72c7649aeab8913e79ab0db14afab5944e64e0ae","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def create(name, memory, vcpus, root_gb, ephemeral_gb\u003d0, flavorid\u003dNone,"},{"line_number":93,"context_line":"           swap\u003d0, rxtx_factor\u003d1.0, is_public\u003dTrue,"},{"line_number":94,"context_line":"           group\u003d\u0027virtual_instance\u0027):"},{"line_number":95,"context_line":"    \"\"\"Creates flavors.\"\"\""},{"line_number":96,"context_line":"    if not flavorid:"},{"line_number":97,"context_line":"        flavorid \u003d uuid.uuid4()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_55cc65ba","line":94,"updated":"2015-12-08 19:59:38.000000000","message":"I\u0027m confused why the default group for flavor create is \"virtual_instance\".  Groups are only being added to the db with this spec, and are not being used.  Does this create an upgrade problem once groups are exposed to the users?  All of their created flavors will be in the \"virtual_instance\" group, which doesn\u0027t exist. (the db migration doesn\u0027t create it)\n\nShould the default group be None?","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"},{"author":{"_account_id":9452,"name":"James Penick","email":"penick@verizonmedia.com","username":"epim"},"change_message_id":"66c6531daaae5ffb7f9ed1c56590953d50a7e36d","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def create(name, memory, vcpus, root_gb, ephemeral_gb\u003d0, flavorid\u003dNone,"},{"line_number":93,"context_line":"           swap\u003d0, rxtx_factor\u003d1.0, is_public\u003dTrue,"},{"line_number":94,"context_line":"           group\u003d\u0027virtual_instance\u0027):"},{"line_number":95,"context_line":"    \"\"\"Creates flavors.\"\"\""},{"line_number":96,"context_line":"    if not flavorid:"},{"line_number":97,"context_line":"        flavorid \u003d uuid.uuid4()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_156c9d33","line":94,"in_reply_to":"7a740942_55cc65ba","updated":"2015-12-08 20:11:52.000000000","message":"Agree, default None. I definitely wouldn\u0027t put \"virtual\" in there, since flavors are used to represent non-VM resources. And, in line with my other comments, this really should be \u0027class\u0027 not group.","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"f7f7a1a255062391e4559623ef3bbf831f938417","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"def create(name, memory, vcpus, root_gb, ephemeral_gb\u003d0, flavorid\u003dNone,"},{"line_number":93,"context_line":"           swap\u003d0, rxtx_factor\u003d1.0, is_public\u003dTrue,"},{"line_number":94,"context_line":"           group\u003d\u0027virtual_instance\u0027):"},{"line_number":95,"context_line":"    \"\"\"Creates flavors.\"\"\""},{"line_number":96,"context_line":"    if not flavorid:"},{"line_number":97,"context_line":"        flavorid \u003d uuid.uuid4()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_750881da","line":94,"in_reply_to":"7a740942_55cc65ba","updated":"2015-12-08 21:03:16.000000000","message":"Makes more sense Chuck to keep it None. Thanks!","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"}],"nova/db/sqlalchemy/migrate_repo/versions/313_add_flavor_class_column_to_instance_types.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9572b799fda05ed010d4d74ec4f954ee6190eca3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    # Add a new column flavor_class"},{"line_number":25,"context_line":"    flavor_class \u003d Column(\u0027flavor_class\u0027, Text, default\u003d\u0027[]\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    if not hasattr(instance_types.c, \u0027flavor_class\u0027):"},{"line_number":28,"context_line":"        instance_types.create_column(flavor_class)"},{"line_number":29,"context_line":"    if not hasattr(shadow_instance_types.c, \u0027flavor_class\u0027):"},{"line_number":30,"context_line":"        shadow_instance_types.create_column(flavor_class.copy())"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_e2e4f5e1","line":27,"updated":"2015-12-07 20:38:11.000000000","message":"This should just be \u0027class\u0027.  Actually there\u0027s probably a much better name than we could use, I just don\u0027t know what it is :)\n\n\u0027group\u0027  is probably what I would use for now.","commit_id":"0c2543a546377d54e0c4963d489dbfd7e9d7cdd4"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"04e70c147c7a27d423b35274a849455b2fe6db97","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    # Add a new column flavor_class"},{"line_number":25,"context_line":"    flavor_class \u003d Column(\u0027flavor_class\u0027, Text, default\u003d\u0027[]\u0027)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    if not hasattr(instance_types.c, \u0027flavor_class\u0027):"},{"line_number":28,"context_line":"        instance_types.create_column(flavor_class)"},{"line_number":29,"context_line":"    if not hasattr(shadow_instance_types.c, \u0027flavor_class\u0027):"},{"line_number":30,"context_line":"        shadow_instance_types.create_column(flavor_class.copy())"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_494966b6","line":27,"in_reply_to":"7a740942_e2e4f5e1","updated":"2015-12-08 01:45:56.000000000","message":"Initially thought of using just class but thought flavor_class would be more apt. If you strongly feel about it will remove in next patch","commit_id":"0c2543a546377d54e0c4963d489dbfd7e9d7cdd4"}],"nova/objects/flavor.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9572b799fda05ed010d4d74ec4f954ee6190eca3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":52,"context_line":"        # Ideally this should be a ListOfObjectsField but starting of as"},{"line_number":53,"context_line":"        # ListOfStrings."},{"line_number":54,"context_line":"        \u0027flavor_class\u0027: fields.ListOfStringsField(),"},{"line_number":55,"context_line":"        }"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_826bb1f0","line":54,"updated":"2015-12-07 20:38:11.000000000","message":"What are you planning to keep in here?  I was envisioning this just being a string, it could be an int as well but a string is easier for admin consumption.  This really just needs to group flavors together so all that matters is that multiple flavors can share the same value here.","commit_id":"0c2543a546377d54e0c4963d489dbfd7e9d7cdd4"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"04e70c147c7a27d423b35274a849455b2fe6db97","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":52,"context_line":"        # Ideally this should be a ListOfObjectsField but starting of as"},{"line_number":53,"context_line":"        # ListOfStrings."},{"line_number":54,"context_line":"        \u0027flavor_class\u0027: fields.ListOfStringsField(),"},{"line_number":55,"context_line":"        }"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_a9ceca2a","line":54,"in_reply_to":"7a740942_826bb1f0","updated":"2015-12-08 01:45:56.000000000","message":"As we discussed on IRC will keep it simple since that way we abide by the spec.","commit_id":"0c2543a546377d54e0c4963d489dbfd7e9d7cdd4"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"805f8f9cafc9310e44cf17d41fb473190c1dfde1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":48,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":49,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":50,"context_line":"        \u0027group\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_8c409808","line":50,"updated":"2015-12-08 15:08:26.000000000","message":"Because you\u0027re adding a field, you need to add a backport compatibility rule, similar to https://github.com/openstack/nova/blob/master/nova/objects/monitor_metric.py#L48-L53 by removing the \u0027group\u0027 field when version \u003c (1, 2).","commit_id":"9e8418d8da6d9ec53b7684def06a11a6c041387a"},{"author":{"_account_id":9452,"name":"James Penick","email":"penick@verizonmedia.com","username":"epim"},"change_message_id":"f5c9b7cb62af7a7bc5230e425b08b92fb26a1e66","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":48,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":49,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":50,"context_line":"        \u0027group\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_bf1faab5","line":50,"updated":"2015-12-08 19:27:52.000000000","message":"The goal is to create a many to many relationship between flavors and classes. EG, m1.small, m1.small-ssd m1.smal-ssd_with_numa becomes one flavor: m1.small with three classes normal, ssd, ssd_with_numa.\n\nThis should be a ListOfStrings","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"40cfcd9a4265673dee8eb84d22e7e07faf2eb914","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":48,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":49,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":50,"context_line":"        \u0027group\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_bad495eb","line":50,"in_reply_to":"7a740942_ba80188c","updated":"2015-12-08 20:50:43.000000000","message":"It sounds like we need to back up a bit.  This work is only outlined in a backlog spec at the moment and needs to be fleshed out in a full spec.  But what is currently described there would a many to one relationship, because the class/group is a scope to use for policy/quotas.  If there are many classes for a flavor which one do you use for the scoping?\n\nFor your example James what would be setup would be flavor classes of normal, ssd, ssd_with_numa with a number of flavors under each.  So under ssd you could have m1.small-ssd, m2.small-ssd, etc... and then you could setup quotas so that each of those ssd flavors would share and would be distinct from ssd_with_numa quotas.\n\nThe intent was not to be able to have a unified m1.small that could be used under multiple classes.  That\u0027s a nice simplification of things but is a larger change because it requires cooperation of users via the API since they\u0027ll need to specify the class.  I\u0027m not against the change, but that needs to be detailed in a spec and needs some discussion.","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"},{"author":{"_account_id":9452,"name":"James Penick","email":"penick@verizonmedia.com","username":"epim"},"change_message_id":"66c6531daaae5ffb7f9ed1c56590953d50a7e36d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":48,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":49,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":50,"context_line":"        \u0027group\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_5537854c","line":50,"in_reply_to":"7a740942_ba80188c","updated":"2015-12-08 20:11:52.000000000","message":"Without allowing many classes per flavor, i\u0027m not sure what value classes would bring? It wouldn\u0027t fix the flavor explosion problem.","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"f7f7a1a255062391e4559623ef3bbf831f938417","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":48,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":49,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":50,"context_line":"        \u0027group\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_7a05cd11","line":50,"in_reply_to":"7a740942_bad495eb","updated":"2015-12-08 21:03:16.000000000","message":"@Andrew : It would be nice to have a unified m1.small that could be used under multiple classes.\n\nReasons :-\n\n1. Minimizes the flavors to be maintained. \n\nAs per your example with 3 flavor classes normal, ssd, ssd_with_numa we might need to have 3 variants of m1.small as m1.small-ssd, m1.small-normal, m1.small-ssd_with_numa. Where as the approach suggested above we just have one flavor\n\nm1.small and\nflavor_class \u003d [ normal, ssd, ssd_with_numa ]\n\nNow these normal, ssd, ssd_with_numa  in itself could be classes and we can set quotas on them rather than they be just dumb strings.\n\n2. Helps admins.","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"},{"author":{"_account_id":10263,"name":"Vilobh Meshram","email":"vilobhmm@yahoo-inc.com","username":"vilobhmm"},"change_message_id":"62c170fad6332e1816884da55e4fe57feeb0c8ef","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027is_public\u0027: fields.BooleanField(),"},{"line_number":48,"context_line":"        \u0027extra_specs\u0027: fields.DictOfStringsField(),"},{"line_number":49,"context_line":"        \u0027projects\u0027: fields.ListOfStringsField(),"},{"line_number":50,"context_line":"        \u0027group\u0027: fields.StringField(),"},{"line_number":51,"context_line":"        }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_ba80188c","line":50,"in_reply_to":"7a740942_bf1faab5","updated":"2015-12-08 19:53:43.000000000","message":"James I did propose this in patch 1 https://review.openstack.org/#/c/253306/1/nova/objects/flavor.py. the way I envision it is it should be a ListOfObjects so that going ahead specialized version of these objects can be created and we can set quota by flavor etc.\n\n@alaski mentioned that since this was not covered in the spec and the spec only mentioned about introducing this attribute he would prefer to make it just a String field.\n\nMy suggestion is to make it either ListOfStrings or ListOfObjects the later is better to build more meaningful usecases like Quota by Flavor, etc.\n\nThoughts ?","commit_id":"4525845b88d1737449c4677f71f425ffcdab5634"}]}
