)]}'
{"nova/db/sqlalchemy/migrate_repo/versions/359_add_service_uuid.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3242a007fc5492d62874af21a7fc5028d7d38a78","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":22,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":23,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"        services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_a68e002c","line":24,"updated":"2017-04-05 20:27:14.000000000","message":"This isn\u0027t idempotent. We need to make sure the column doesn\u0027t exist first.","commit_id":"c66135f3d7a211cae512b8e51f217f173b5bb6ab"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"a67e3ed81f9e5d882e638a42af524f5bda24fdde","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":22,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":23,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"        services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_8c3afde4","line":24,"in_reply_to":"bff0334d_66bc7869","updated":"2017-04-05 21:21:14.000000000","message":"Done","commit_id":"c66135f3d7a211cae512b8e51f217f173b5bb6ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"80b1bb52e6eed07fe7766219b415ba2f528d3e81","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":22,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":23,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"        services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_66bc7869","line":24,"in_reply_to":"bff0334d_a68e002c","updated":"2017-04-05 20:39:18.000000000","message":"I guess we screwed that up in the 314 migration where compute_nodes.uuid was added, but we should be checking that, like here:\n\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/migrate_repo/versions/358_bdm_attachment_id.py#L27","commit_id":"c66135f3d7a211cae512b8e51f217f173b5bb6ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3242a007fc5492d62874af21a7fc5028d7d38a78","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"},{"line_number":28,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":29,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":30,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_0677ec3c","line":27,"updated":"2017-04-05 20:27:14.000000000","message":"We haven\u0027t supported downgrade in forever. Maybe GoDaddy still does, but not here bubba. I\u0027m surprised we didn\u0027t have a test failure for this.","commit_id":"c66135f3d7a211cae512b8e51f217f173b5bb6ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"831ba4f926f4121513627d80203fb701680cf0f8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"},{"line_number":28,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":29,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":30,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_2c94118b","line":27,"in_reply_to":"bff0334d_0677ec3c","updated":"2017-04-05 21:03:50.000000000","message":"We had a test, it just didn\u0027t work:\n\nhttps://review.openstack.org/#/c/453872/","commit_id":"c66135f3d7a211cae512b8e51f217f173b5bb6ab"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"a67e3ed81f9e5d882e638a42af524f5bda24fdde","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def downgrade(migrate_engine):"},{"line_number":28,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":29,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":30,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bff0334d_6c3fb9d6","line":27,"in_reply_to":"bff0334d_2c94118b","updated":"2017-04-05 21:21:14.000000000","message":"Done","commit_id":"c66135f3d7a211cae512b8e51f217f173b5bb6ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":23,"context_line":"        services \u003d Table(prefix + \u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":24,"context_line":"        if not hasattr(services.c, \u0027uuid\u0027):"},{"line_number":25,"context_line":"            services.create_column(Column(\u0027uuid\u0027, String(36), nullable\u003dTrue))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_5a220702","line":25,"updated":"2017-04-07 20:25:56.000000000","message":"I think this should also be index\u003dTrue and unique\u003dTrue to create a unique index for this column. Alternatively we could create an index explicitly, like the instances_uuid_idx.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"398393cf1242623e267cabfd1dfaa9fc42266712","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    uuid_index_name \u003d \u0027services_uuid_idx\u0027"},{"line_number":30,"context_line":"    indexes \u003d Inspector(migrate_engine).get_indexes(\u0027services\u0027)"},{"line_number":31,"context_line":"    if uuid_index_name not in (i[\u0027name\u0027] for i in indexes):"},{"line_number":32,"context_line":"        services \u003d Table(\u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":33,"context_line":"        Index(uuid_index_name, services.c.uuid, unique\u003dTrue).create()"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_7998e073","line":31,"updated":"2017-04-11 19:38:07.000000000","message":"A typical pattern when adding an index is rather than look for an index with the same name, we look for one on the same columns, see:\n\nhttps://review.openstack.org/#/c/454887/2/nova/db/sqlalchemy/migrate_repo/versions/359_add_compute_nodes_uuid_index.py@27\n\nThis is probably fine though since we\u0027re also adding the uuid column in this same change.","commit_id":"dd6dabae21d28d93d85615f7eb93a0085a4b19db"}],"nova/db/sqlalchemy/models.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        schema.UniqueConstraint(\"host\", \"topic\", \"deleted\","},{"line_number":82,"context_line":"                                name\u003d\"uniq_services0host0topic0deleted\"),"},{"line_number":83,"context_line":"        schema.UniqueConstraint(\"host\", \"binary\", \"deleted\","},{"line_number":84,"context_line":"                                name\u003d\"uniq_services0host0binary0deleted\")"},{"line_number":85,"context_line":"        )"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_9ab2cf93","line":84,"updated":"2017-04-07 20:26:29.000000000","message":"Although you cannot currently add a unique constraint (because the field is NULLable), please write a followup patch that adds a unique index/constraint on the uuid field after an online data migration that ensures each record has a UUID field generated for it.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        )"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":88,"context_line":"    uuid \u003d Column(String(36), nullable\u003dTrue)"},{"line_number":89,"context_line":"    host \u003d Column(String(255))  # , ForeignKey(\u0027hosts.id\u0027))"},{"line_number":90,"context_line":"    binary \u003d Column(String(255))"},{"line_number":91,"context_line":"    topic \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_7a3cabbe","line":88,"updated":"2017-04-07 20:25:56.000000000","message":"I suppose we should add an index for these since we\u0027ll be looking up by uuid in the API. We wouldn\u0027t need to define an index if we could define this as unique\u003dTrue, but I don\u0027t know if we can do that for a nullable column.\n\nAfter reading up on some docs though, it looks like mysql and postgresql are OK with uniqueness in a nullable column, and unique indexes for those databases exclude null values for equality checks, so we should make this unique.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"0aea733df1e476bd25902f72297408bb03e83ff9","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        )"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":88,"context_line":"    uuid \u003d Column(String(36), nullable\u003dTrue)"},{"line_number":89,"context_line":"    host \u003d Column(String(255))  # , ForeignKey(\u0027hosts.id\u0027))"},{"line_number":90,"context_line":"    binary \u003d Column(String(255))"},{"line_number":91,"context_line":"    topic \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_55c0987b","line":88,"in_reply_to":"bff0334d_7a3cabbe","updated":"2017-04-07 20:28:02.000000000","message":"Hmm, OK then... for some reason I thought we\u0027d need to do it in a follow up patch. But if NULLs aren\u0027t considered for uniqueness constraint, let\u0027s do it here now.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"}],"nova/objects/service.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"90d6eccfa4be966f6f337ab7d93625bb05b561b9","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    fields \u003d {"},{"line_number":136,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":137,"context_line":"        \u0027uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":138,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":139,"context_line":"        \u0027binary\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":140,"context_line":"        \u0027topic\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_b25ffc70","line":137,"range":{"start_line":137,"start_character":23,"end_line":137,"end_character":34},"updated":"2017-04-04 06:55:37.000000000","message":"It should be \u0027UUIDField\u0027.","commit_id":"a4c62488be78e08dd7ab9b124e1ecafab5065011"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"e37f645d7cca6f52848e144e1ee883704215fb8d","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    fields \u003d {"},{"line_number":136,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":137,"context_line":"        \u0027uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":138,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":139,"context_line":"        \u0027binary\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":140,"context_line":"        \u0027topic\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_dfa70d0b","line":137,"in_reply_to":"dfeb2761_b25ffc70","updated":"2017-04-04 18:02:03.000000000","message":"Done","commit_id":"a4c62488be78e08dd7ab9b124e1ecafab5065011"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"90d6eccfa4be966f6f337ab7d93625bb05b561b9","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if \u0027uuid\u0027 not in service:"},{"line_number":229,"context_line":"            service.uuid \u003d uuidutils.generate_uuid()"},{"line_number":230,"context_line":"            LOG.debug(\u0027Generated UUID %(uuid)s for service %(id)i\u0027,"},{"line_number":231,"context_line":"                      dict(uuid\u003dservice.uuid, id\u003dservice.id))"},{"line_number":232,"context_line":"            service.save()"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_52779003","line":230,"range":{"start_line":230,"start_character":64,"end_line":230,"end_character":65},"updated":"2017-04-04 06:55:37.000000000","message":"d?","commit_id":"a4c62488be78e08dd7ab9b124e1ecafab5065011"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"e37f645d7cca6f52848e144e1ee883704215fb8d","unresolved":false,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if \u0027uuid\u0027 not in service:"},{"line_number":229,"context_line":"            service.uuid \u003d uuidutils.generate_uuid()"},{"line_number":230,"context_line":"            LOG.debug(\u0027Generated UUID %(uuid)s for service %(id)i\u0027,"},{"line_number":231,"context_line":"                      dict(uuid\u003dservice.uuid, id\u003dservice.id))"},{"line_number":232,"context_line":"            service.save()"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_ee11065f","line":230,"in_reply_to":"dfeb2761_52779003","updated":"2017-04-04 18:02:03.000000000","message":"i and d are the same - https://docs.python.org/2.7/library/stdtypes.html#string-formatting-operations","commit_id":"a4c62488be78e08dd7ab9b124e1ecafab5065011"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                # NOTE(danms): Special handling of the version field, since"},{"line_number":216,"context_line":"                # it is read_only and set in our init."},{"line_number":217,"context_line":"                setattr(service, base.get_attrname(key), db_service[key])"},{"line_number":218,"context_line":"            elif key \u003d\u003d \u0027uuid\u0027 and not db_service.get(key):"},{"line_number":219,"context_line":"                # Leave uuid off the object if undefined in the database"},{"line_number":220,"context_line":"                # so that it will be generated below."},{"line_number":221,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_1a635f44","line":218,"updated":"2017-04-07 20:25:56.000000000","message":"I think you could also just add \u0027uuid\u0027 to allow_missing above.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                # NOTE(danms): Special handling of the version field, since"},{"line_number":216,"context_line":"                # it is read_only and set in our init."},{"line_number":217,"context_line":"                setattr(service, base.get_attrname(key), db_service[key])"},{"line_number":218,"context_line":"            elif key \u003d\u003d \u0027uuid\u0027 and not db_service.get(key):"},{"line_number":219,"context_line":"                # Leave uuid off the object if undefined in the database"},{"line_number":220,"context_line":"                # so that it will be generated below."},{"line_number":221,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_a91e3eb8","line":218,"in_reply_to":"bff0334d_1a635f44","updated":"2017-04-11 00:14:02.000000000","message":"I tried that, but it misses the case where uuid is in db_service but is null; in that case, we do not want to set the value on service, lest the [if uuid not in service] check below fail.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        service._context \u003d context"},{"line_number":226,"context_line":"        service.obj_reset_changes()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if \u0027uuid\u0027 not in service:"},{"line_number":229,"context_line":"            service.uuid \u003d uuidutils.generate_uuid()"},{"line_number":230,"context_line":"            LOG.debug(\u0027Generated UUID %(uuid)s for service %(id)i\u0027,"},{"line_number":231,"context_line":"                      dict(uuid\u003dservice.uuid, id\u003dservice.id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_5ae567a7","line":228,"updated":"2017-04-07 20:25:56.000000000","message":"Leave a TODO to remove this compat shim once we enforce the online data migrations to be complete in a later release (like, we\u0027ll at some point have an offline migration that enforces you\u0027ve run the pike online data migrations before you can upgrade to the R release for example).\n\ne.g. https://github.com/openstack/nova/blob/13.0.0/nova/objects/compute_node.py#L243","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        service._context \u003d context"},{"line_number":226,"context_line":"        service.obj_reset_changes()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        if \u0027uuid\u0027 not in service:"},{"line_number":229,"context_line":"            service.uuid \u003d uuidutils.generate_uuid()"},{"line_number":230,"context_line":"            LOG.debug(\u0027Generated UUID %(uuid)s for service %(id)i\u0027,"},{"line_number":231,"context_line":"                      dict(uuid\u003dservice.uuid, id\u003dservice.id))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_4ccd802f","line":228,"in_reply_to":"bff0334d_5ae567a7","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"de1fcbd99984c7caabfdae7b765ef685cc0888c1","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    fields \u003d {"},{"line_number":136,"context_line":"        \u0027id\u0027: fields.IntegerField(read_only\u003dTrue),"},{"line_number":137,"context_line":"        \u0027uuid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":138,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":139,"context_line":"        \u0027binary\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":140,"context_line":"        \u0027topic\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_c0336c61","line":137,"updated":"2017-04-11 21:53:13.000000000","message":"This should not be nullable. It can be nullable on the model and in the schema, but the object should not consider it \"able to be set to None\".","commit_id":"bb214823e030873a0423b53c97c2f09ec8cd1ecd"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":3470,"context_line":""},{"line_number":3471,"context_line":"    def _get_base_values(self):"},{"line_number":3472,"context_line":"        return {"},{"line_number":3473,"context_line":"            \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":3474,"context_line":"            \u0027host\u0027: \u0027fake_host\u0027,"},{"line_number":3475,"context_line":"            \u0027binary\u0027: \u0027fake_binary\u0027,"},{"line_number":3476,"context_line":"            \u0027topic\u0027: \u0027fake_topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_3a8e23d0","line":3473,"range":{"start_line":3473,"start_character":20,"end_line":3473,"end_character":32},"updated":"2017-04-07 20:25:56.000000000","message":"Maybe leave this as None?","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":3470,"context_line":""},{"line_number":3471,"context_line":"    def _get_base_values(self):"},{"line_number":3472,"context_line":"        return {"},{"line_number":3473,"context_line":"            \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":3474,"context_line":"            \u0027host\u0027: \u0027fake_host\u0027,"},{"line_number":3475,"context_line":"            \u0027binary\u0027: \u0027fake_binary\u0027,"},{"line_number":3476,"context_line":"            \u0027topic\u0027: \u0027fake_topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_75371ce5","line":3473,"updated":"2017-04-07 20:26:29.000000000","message":"You will want to use the nova.tests.uuidsentinel module and generate a real UUID for the data here... otherwise, you\u0027ll end up with warnings in the logs about fake UUIDs.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":3470,"context_line":""},{"line_number":3471,"context_line":"    def _get_base_values(self):"},{"line_number":3472,"context_line":"        return {"},{"line_number":3473,"context_line":"            \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":3474,"context_line":"            \u0027host\u0027: \u0027fake_host\u0027,"},{"line_number":3475,"context_line":"            \u0027binary\u0027: \u0027fake_binary\u0027,"},{"line_number":3476,"context_line":"            \u0027topic\u0027: \u0027fake_topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_cc74f0d1","line":3473,"in_reply_to":"bff0334d_3a8e23d0","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":3470,"context_line":""},{"line_number":3471,"context_line":"    def _get_base_values(self):"},{"line_number":3472,"context_line":"        return {"},{"line_number":3473,"context_line":"            \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":3474,"context_line":"            \u0027host\u0027: \u0027fake_host\u0027,"},{"line_number":3475,"context_line":"            \u0027binary\u0027: \u0027fake_binary\u0027,"},{"line_number":3476,"context_line":"            \u0027topic\u0027: \u0027fake_topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_ac7d2cb3","line":3473,"in_reply_to":"bff0334d_75371ce5","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":3514,"context_line":"    def test_service_update(self):"},{"line_number":3515,"context_line":"        service \u003d self._create_service({})"},{"line_number":3516,"context_line":"        new_values \u003d {"},{"line_number":3517,"context_line":"            \u0027uuid\u0027: \u0027fake-uuid1\u0027,"},{"line_number":3518,"context_line":"            \u0027host\u0027: \u0027fake_host1\u0027,"},{"line_number":3519,"context_line":"            \u0027binary\u0027: \u0027fake_binary1\u0027,"},{"line_number":3520,"context_line":"            \u0027topic\u0027: \u0027fake_topic1\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_dab85777","line":3517,"range":{"start_line":3517,"start_character":20,"end_line":3517,"end_character":33},"updated":"2017-04-07 20:25:56.000000000","message":"Use uuidsentinel for a real uuid.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":3514,"context_line":"    def test_service_update(self):"},{"line_number":3515,"context_line":"        service \u003d self._create_service({})"},{"line_number":3516,"context_line":"        new_values \u003d {"},{"line_number":3517,"context_line":"            \u0027uuid\u0027: \u0027fake-uuid1\u0027,"},{"line_number":3518,"context_line":"            \u0027host\u0027: \u0027fake_host1\u0027,"},{"line_number":3519,"context_line":"            \u0027binary\u0027: \u0027fake_binary1\u0027,"},{"line_number":3520,"context_line":"            \u0027topic\u0027: \u0027fake_topic1\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_8c7a68b7","line":3517,"in_reply_to":"bff0334d_dab85777","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"}],"nova/tests/unit/db/test_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"398393cf1242623e267cabfd1dfaa9fc42266712","unresolved":false,"context_lines":[{"line_number":948,"context_line":"                                \u0027attachment_id\u0027)"},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"    def _check_359(self, engine, data):"},{"line_number":951,"context_line":"        self.assertColumnExists(engine, \u0027services\u0027, \u0027uuid\u0027)"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"class TestNovaMigrationsSQLite(NovaMigrationsCheckers,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_79a6a0ad","line":951,"updated":"2017-04-11 19:38:07.000000000","message":"Assert the index exists as well.","commit_id":"dd6dabae21d28d93d85615f7eb93a0085a4b19db"}],"nova/tests/unit/notifications/objects/test_notification.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":103,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":104,"context_line":"        \u0027id\u0027: 123,"},{"line_number":105,"context_line":"        \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":106,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":107,"context_line":"        \u0027binary\u0027: \u0027nova-fake\u0027,"},{"line_number":108,"context_line":"        \u0027topic\u0027: \u0027fake-service-topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_b50c843b","line":105,"range":{"start_line":105,"start_character":16,"end_line":105,"end_character":28},"updated":"2017-04-07 20:25:56.000000000","message":"Just leave this as None.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":103,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":104,"context_line":"        \u0027id\u0027: 123,"},{"line_number":105,"context_line":"        \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":106,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":107,"context_line":"        \u0027binary\u0027: \u0027nova-fake\u0027,"},{"line_number":108,"context_line":"        \u0027topic\u0027: \u0027fake-service-topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_154e906e","line":105,"updated":"2017-04-07 20:26:29.000000000","message":"use uuidsentinel","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":103,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":104,"context_line":"        \u0027id\u0027: 123,"},{"line_number":105,"context_line":"        \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":106,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":107,"context_line":"        \u0027binary\u0027: \u0027nova-fake\u0027,"},{"line_number":108,"context_line":"        \u0027topic\u0027: \u0027fake-service-topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_2c435c6e","line":105,"in_reply_to":"bff0334d_154e906e","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":103,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":104,"context_line":"        \u0027id\u0027: 123,"},{"line_number":105,"context_line":"        \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":106,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":107,"context_line":"        \u0027binary\u0027: \u0027nova-fake\u0027,"},{"line_number":108,"context_line":"        \u0027topic\u0027: \u0027fake-service-topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_0c489884","line":105,"in_reply_to":"bff0334d_b50c843b","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"}],"nova/tests/unit/objects/test_instance.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                        \u0027topic\u0027: \u0027fake-service-topic\u0027, \u0027report_count\u0027: 1,"},{"line_number":177,"context_line":"                        \u0027forced_down\u0027: False, \u0027disabled\u0027: False,"},{"line_number":178,"context_line":"                        \u0027disabled_reason\u0027: None, \u0027last_seen_up\u0027: None,"},{"line_number":179,"context_line":"                        \u0027version\u0027: 1, \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":180,"context_line":"                    }"},{"line_number":181,"context_line":"        fake_instance \u003d dict(self.fake_instance,"},{"line_number":182,"context_line":"                             services\u003d[fake_service],"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_1529f088","line":179,"range":{"start_line":179,"start_character":46,"end_line":179,"end_character":57},"updated":"2017-04-07 20:25:56.000000000","message":"None is fine here.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                        \u0027topic\u0027: \u0027fake-service-topic\u0027, \u0027report_count\u0027: 1,"},{"line_number":177,"context_line":"                        \u0027forced_down\u0027: False, \u0027disabled\u0027: False,"},{"line_number":178,"context_line":"                        \u0027disabled_reason\u0027: None, \u0027last_seen_up\u0027: None,"},{"line_number":179,"context_line":"                        \u0027version\u0027: 1, \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":180,"context_line":"                    }"},{"line_number":181,"context_line":"        fake_instance \u003d dict(self.fake_instance,"},{"line_number":182,"context_line":"                             services\u003d[fake_service],"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_f550cc0c","line":179,"updated":"2017-04-07 20:26:29.000000000","message":"use uuidsentinel","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                        \u0027topic\u0027: \u0027fake-service-topic\u0027, \u0027report_count\u0027: 1,"},{"line_number":177,"context_line":"                        \u0027forced_down\u0027: False, \u0027disabled\u0027: False,"},{"line_number":178,"context_line":"                        \u0027disabled_reason\u0027: None, \u0027last_seen_up\u0027: None,"},{"line_number":179,"context_line":"                        \u0027version\u0027: 1, \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":180,"context_line":"                    }"},{"line_number":181,"context_line":"        fake_instance \u003d dict(self.fake_instance,"},{"line_number":182,"context_line":"                             services\u003d[fake_service],"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_0c3d38dc","line":179,"in_reply_to":"bff0334d_1529f088","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                        \u0027topic\u0027: \u0027fake-service-topic\u0027, \u0027report_count\u0027: 1,"},{"line_number":177,"context_line":"                        \u0027forced_down\u0027: False, \u0027disabled\u0027: False,"},{"line_number":178,"context_line":"                        \u0027disabled_reason\u0027: None, \u0027last_seen_up\u0027: None,"},{"line_number":179,"context_line":"                        \u0027version\u0027: 1, \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":180,"context_line":"                    }"},{"line_number":181,"context_line":"        fake_instance \u003d dict(self.fake_instance,"},{"line_number":182,"context_line":"                             services\u003d[fake_service],"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_2c38fceb","line":179,"in_reply_to":"bff0334d_f550cc0c","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"}],"nova/tests/unit/objects/test_service.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":39,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":40,"context_line":"        \u0027id\u0027: 123,"},{"line_number":41,"context_line":"        \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":42,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":43,"context_line":"        \u0027binary\u0027: \u0027nova-fake\u0027,"},{"line_number":44,"context_line":"        \u0027topic\u0027: \u0027fake-service-topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_953ce0c8","line":41,"range":{"start_line":41,"start_character":16,"end_line":41,"end_character":27},"updated":"2017-04-07 20:25:56.000000000","message":"Here and throughout, please use uuidsentinel for real uuids if you\u0027re going to set them.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027deleted_at\u0027: None,"},{"line_number":39,"context_line":"        \u0027deleted\u0027: False,"},{"line_number":40,"context_line":"        \u0027id\u0027: 123,"},{"line_number":41,"context_line":"        \u0027uuid\u0027: \u0027fake-uuid\u0027,"},{"line_number":42,"context_line":"        \u0027host\u0027: \u0027fake-host\u0027,"},{"line_number":43,"context_line":"        \u0027binary\u0027: \u0027nova-fake\u0027,"},{"line_number":44,"context_line":"        \u0027topic\u0027: \u0027fake-service-topic\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_e7390dd7","line":41,"in_reply_to":"bff0334d_953ce0c8","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def test_create(self, mock_service_create):"},{"line_number":125,"context_line":"        service_obj \u003d service.Service(context\u003dself.context)"},{"line_number":126,"context_line":"        service_obj.host \u003d \u0027fake-host\u0027"},{"line_number":127,"context_line":"        service_obj.uuid \u003d \u0027fake-uuid\u0027"},{"line_number":128,"context_line":"        service_obj.create()"},{"line_number":129,"context_line":"        self.assertEqual(fake_service[\u0027id\u0027], service_obj.id)"},{"line_number":130,"context_line":"        self.assertEqual(service.SERVICE_VERSION, service_obj.version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_d5570802","line":127,"updated":"2017-04-07 20:26:29.000000000","message":"use uuidsentinel","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def test_create(self, mock_service_create):"},{"line_number":125,"context_line":"        service_obj \u003d service.Service(context\u003dself.context)"},{"line_number":126,"context_line":"        service_obj.host \u003d \u0027fake-host\u0027"},{"line_number":127,"context_line":"        service_obj.uuid \u003d \u0027fake-uuid\u0027"},{"line_number":128,"context_line":"        service_obj.create()"},{"line_number":129,"context_line":"        self.assertEqual(fake_service[\u0027id\u0027], service_obj.id)"},{"line_number":130,"context_line":"        self.assertEqual(service.SERVICE_VERSION, service_obj.version)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_073d11c3","line":127,"in_reply_to":"bff0334d_d5570802","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                                      \u0027version\u0027: fake_service[\u0027version\u0027]})"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @mock.patch(\u0027nova.objects.service.uuidutils.generate_uuid\u0027,"},{"line_number":137,"context_line":"                return_value\u003d\u0027new-uuid\u0027)"},{"line_number":138,"context_line":"    @mock.patch.object(db, \u0027service_create\u0027, return_value\u003dfake_service)"},{"line_number":139,"context_line":"    def test_create_without_uuid_generates_one("},{"line_number":140,"context_line":"            self, mock_service_create, generate_uuid):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_553658e8","line":137,"range":{"start_line":137,"start_character":30,"end_line":137,"end_character":38},"updated":"2017-04-07 20:25:56.000000000","message":"use a real uuid","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                                      \u0027version\u0027: fake_service[\u0027version\u0027]})"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @mock.patch(\u0027nova.objects.service.uuidutils.generate_uuid\u0027,"},{"line_number":137,"context_line":"                return_value\u003d\u0027new-uuid\u0027)"},{"line_number":138,"context_line":"    @mock.patch.object(db, \u0027service_create\u0027, return_value\u003dfake_service)"},{"line_number":139,"context_line":"    def test_create_without_uuid_generates_one("},{"line_number":140,"context_line":"            self, mock_service_create, generate_uuid):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_272495ae","line":137,"in_reply_to":"bff0334d_553658e8","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                \u0027.obj_make_compatible_from_manifest\u0027, new\u003dmock.Mock())"},{"line_number":410,"context_line":"    def test_obj_make_compatible_from_manifest_strips_uuid(self):"},{"line_number":411,"context_line":"        s \u003d service.Service()"},{"line_number":412,"context_line":"        primitive \u003d {\u0027uuid\u0027: \u0027fake-uuid\u0027}"},{"line_number":413,"context_line":"        s.obj_make_compatible_from_manifest(primitive, \u00271.20\u0027, mock.Mock())"},{"line_number":414,"context_line":"        self.assertNotIn(\u0027uuid\u0027, primitive)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_b55a4427","line":412,"updated":"2017-04-07 20:26:29.000000000","message":"use uuidsentinel","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                \u0027.obj_make_compatible_from_manifest\u0027, new\u003dmock.Mock())"},{"line_number":410,"context_line":"    def test_obj_make_compatible_from_manifest_strips_uuid(self):"},{"line_number":411,"context_line":"        s \u003d service.Service()"},{"line_number":412,"context_line":"        primitive \u003d {\u0027uuid\u0027: \u0027fake-uuid\u0027}"},{"line_number":413,"context_line":"        s.obj_make_compatible_from_manifest(primitive, \u00271.20\u0027, mock.Mock())"},{"line_number":414,"context_line":"        self.assertNotIn(\u0027uuid\u0027, primitive)"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_475439fe","line":412,"in_reply_to":"bff0334d_b55a4427","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        self.assertNotIn(\u0027uuid\u0027, primitive)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    @mock.patch(\u0027nova.objects.service.uuidutils.generate_uuid\u0027,"},{"line_number":417,"context_line":"                return_value\u003d\u0027new-uuid\u0027)"},{"line_number":418,"context_line":"    def test_from_db_object_without_uuid_generates_one(self, generate_uuid):"},{"line_number":419,"context_line":"        values \u003d _fake_service(uuid\u003dNone, id\u003dNone)"},{"line_number":420,"context_line":"        db_service \u003d db.api.service_create(self.context, values)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_d57028a8","line":417,"updated":"2017-04-07 20:26:29.000000000","message":"use uuidsentinel","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":414,"context_line":"        self.assertNotIn(\u0027uuid\u0027, primitive)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    @mock.patch(\u0027nova.objects.service.uuidutils.generate_uuid\u0027,"},{"line_number":417,"context_line":"                return_value\u003d\u0027new-uuid\u0027)"},{"line_number":418,"context_line":"    def test_from_db_object_without_uuid_generates_one(self, generate_uuid):"},{"line_number":419,"context_line":"        values \u003d _fake_service(uuid\u003dNone, id\u003dNone)"},{"line_number":420,"context_line":"        db_service \u003d db.api.service_create(self.context, values)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_c747294c","line":417,"in_reply_to":"bff0334d_d57028a8","updated":"2017-04-11 00:14:02.000000000","message":"Done","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"}],"nova/tests/unit/test_availability_zones.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"90d6eccfa4be966f6f337ab7d93625bb05b561b9","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_72d614c6","line":64,"range":{"start_line":64,"start_character":23,"end_line":64,"end_character":28},"updated":"2017-04-04 06:55:37.000000000","message":"It is an unrelated change.","commit_id":"a4c62488be78e08dd7ab9b124e1ecafab5065011"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"e37f645d7cca6f52848e144e1ee883704215fb8d","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_1f8c5634","line":64,"in_reply_to":"dfeb2761_72d614c6","updated":"2017-04-04 18:02:03.000000000","message":"Now that services are written back to the database during read if they do not have a uuid, this causes a validation of the binary field, which fails without the \"nova-\" prefix.  This causes test_get_availability_zones to fail.  So I think this test needs to change in this change set.","commit_id":"a4c62488be78e08dd7ab9b124e1ecafab5065011"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3a093588e7896c9b1193efab5f1cf57b1fab7023","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_55b9b82b","line":64,"updated":"2017-04-07 20:25:56.000000000","message":"Why did this need to change? Seems unrelated.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aa12ff035ff9ceea43f4431f89ccefa656b5078d","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_159c50be","line":64,"updated":"2017-04-07 20:26:29.000000000","message":"not sure this change was necessary, but ok :)","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"27d1a675d7b640d8f25bd28f6e3aaae47ef8458a","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_07b07142","line":64,"in_reply_to":"bff0334d_55b9b82b","updated":"2017-04-11 00:14:02.000000000","message":"As I explained to Takashi - Now that services are written back to the database during read if they do not have a uuid, this causes a validation of the binary field, which fails without the \"nova-\" prefix.  This causes test_get_availability_zones to fail.  So I think this test needs to change in this change set.","commit_id":"83556734015f80624e3f68a8f59ba6fd512b96da"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"da6cffe4ffe21bf0bd9c5a2dbaaab66d2ca78879","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_440d028f","line":64,"updated":"2017-04-13 21:19:15.000000000","message":"Hmm, not sure why this is suddenly a thing in this patch. Maybe because we\u0027re calling save() in the create() path now and it sanity-checks the version?","commit_id":"3674a4268d177230375fa1b581dbdf6f62755cee"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"bb473a37076e3a1052739f4bca937bdbc9b80be6","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _create_service_with_topic(self, topic, host, disabled\u003dFalse):"},{"line_number":63,"context_line":"        values \u003d {"},{"line_number":64,"context_line":"            \u0027binary\u0027: \u0027nova-bin\u0027,"},{"line_number":65,"context_line":"            \u0027host\u0027: host,"},{"line_number":66,"context_line":"            \u0027topic\u0027: topic,"},{"line_number":67,"context_line":"            \u0027disabled\u0027: disabled,"}],"source_content_type":"text/x-python","patch_set":8,"id":"7ffa3b31_04b13a90","line":64,"in_reply_to":"7ffa3b31_440d028f","updated":"2017-04-13 21:27:02.000000000","message":"Yep.","commit_id":"3674a4268d177230375fa1b581dbdf6f62755cee"}]}
