)]}'
{"cinder/db/sqlalchemy/migrate_repo/versions/113_add_shared_targets_column_to_volumes.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                            Boolean,"},{"line_number":26,"context_line":"                            default\u003dTrue)"},{"line_number":27,"context_line":"    volumes.create_column(shared_targets)"},{"line_number":28,"context_line":"    volume_list \u003d list(volumes.select().execute())"},{"line_number":29,"context_line":"    for v in volume_list:"},{"line_number":30,"context_line":"        volumes.update().where(volumes.c.id \u003d\u003d v.id).\\"},{"line_number":31,"context_line":"            values(shared_targets\u003dTrue).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_6921b64d","line":31,"range":{"start_line":28,"start_character":4,"end_line":31,"end_character":49},"updated":"2017-10-05 16:18:35.000000000","message":"Seems there has to be a more efficient way to do this than in python code? Maybe ask Mike Bayer.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"}],"cinder/db/sqlalchemy/migrate_repo/versions/114_add_backend_identifier_to_volumes.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8375284ec34ebcd567ec391833b9c16e7523238","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    backend_id \u003d Column(\u0027backend_id\u0027,"},{"line_number":23,"context_line":"                        String(36),"},{"line_number":24,"context_line":"                        default\u003d\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # backend_id will default to service.uuid"},{"line_number":27,"context_line":"    # can also be set via config option"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_4b3f6086","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":34},"updated":"2017-10-03 08:39:24.000000000","message":"Not a DB migration expert really and I haven\u0027t seen default anywhere else. So just for my clarity, do you have to set one here?","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"4be4f2425039a249a72c8c88ce6f15c8c30ec84f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    backend_id \u003d Column(\u0027backend_id\u0027,"},{"line_number":23,"context_line":"                        String(36),"},{"line_number":24,"context_line":"                        default\u003d\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # backend_id will default to service.uuid"},{"line_number":27,"context_line":"    # can also be set via config option"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_6988e121","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":34},"in_reply_to":"7f515b1d_4b3f6086","updated":"2017-10-03 13:41:13.000000000","message":"Well yeah, I mean I probably don\u0027t have to; but I should and I want to.  If you look again there are plenty of cases where a default is set on creation in the migration file.  It\u0027s not a weird thing to do if you want to have a default set to something.","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"749d9b23549b1ddeaacc4c91d53a01a30f87ed18","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    backend_id \u003d Column(\u0027backend_id\u0027,"},{"line_number":23,"context_line":"                        String(36),"},{"line_number":24,"context_line":"                        default\u003d\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # backend_id will default to service.uuid"},{"line_number":27,"context_line":"    # can also be set via config option"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_8ceb2bdb","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":34},"in_reply_to":"7f515b1d_6988e121","updated":"2017-10-03 14:22:03.000000000","message":"My confusion was that it\u0027s set here only and not that it\u0027s set here. I guess it should be fine based on how you use it later and it certainly doesn\u0027t do harm.\n\nI asked purely for my better understanding on how these migrations work.","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    backend_id \u003d Column(\u0027backend_id\u0027,"},{"line_number":23,"context_line":"                        String(36),"},{"line_number":24,"context_line":"                        default\u003d\"\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # backend_id will default to service.uuid"},{"line_number":27,"context_line":"    # can also be set via config option"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e9892626","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":34},"updated":"2017-10-05 16:18:35.000000000","message":"Couldn\u0027t this just default to nullable\u003dTrue?","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"20f53d9bf0df77bf42ee441ff01672fe2172036f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    volumes.create_column(backend_id)"},{"line_number":29,"context_line":"    services \u003d Table(\u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    volume_list \u003d list(volumes.select().execute())"},{"line_number":32,"context_line":"    for v in volume_list:"},{"line_number":33,"context_line":"        if v.host:"},{"line_number":34,"context_line":"            v_host \u003d v.host.split(\u0027#\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_292e1ea5","line":31,"updated":"2017-10-05 16:25:43.000000000","message":"You\u0027re already listing all volumes in the migration right before this one, you could squash these migrations and do them in one - but still, totally do this online...","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    for v in volume_list:"},{"line_number":33,"context_line":"        if v.host:"},{"line_number":34,"context_line":"            v_host \u003d v.host.split(\u0027#\u0027)[0]"},{"line_number":35,"context_line":"            results \u003d list(services.select().where("},{"line_number":36,"context_line":"                services.c.host \u003d\u003d v_host).execute())"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"            volumes.update().where(volumes.c.id \u003d\u003d v.id).\\"},{"line_number":39,"context_line":"                values(backend_id\u003dresults[0].uuid).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_09d5a2e5","line":36,"range":{"start_line":35,"start_character":12,"end_line":36,"end_character":53},"updated":"2017-10-05 16:18:35.000000000","message":"If you\u0027re not going to do this online, at least cache the result of the service query so you don\u0027t have to do it for every volume since a lot of them will presumably be on the same host.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    volumes.create_column(backend_id)"},{"line_number":29,"context_line":"    services \u003d Table(\u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    volume_list \u003d list(volumes.select().execute())"},{"line_number":32,"context_line":"    for v in volume_list:"},{"line_number":33,"context_line":"        if v.host:"},{"line_number":34,"context_line":"            v_host \u003d v.host.split(\u0027#\u0027)[0]"},{"line_number":35,"context_line":"            results \u003d list(services.select().where("},{"line_number":36,"context_line":"                services.c.host \u003d\u003d v_host).execute())"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"            volumes.update().where(volumes.c.id \u003d\u003d v.id).\\"},{"line_number":39,"context_line":"                values(backend_id\u003dresults[0].uuid).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_09c0022a","line":39,"range":{"start_line":31,"start_character":4,"end_line":39,"end_character":60},"updated":"2017-10-05 16:18:35.000000000","message":"Ew, this could be done in an online data migration when the Volume object is read from the database. When reading it from the DB, if backend_id isn\u0027t set, then do this lookup and set it. You could also provide a CLI option for batching these, like the nova-manage db online_data_migrations CLI.\n\nBasically this is extending the window of your offline upgrade, and you could do it online when the data is accessed instead.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ac1aeda53c38ee5d80abd77547cb4348b6c0c248","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    volumes.create_column(backend_id)"},{"line_number":29,"context_line":"    services \u003d Table(\u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    volume_list \u003d list(volumes.select().execute())"},{"line_number":32,"context_line":"    for v in volume_list:"},{"line_number":33,"context_line":"        if v.host:"},{"line_number":34,"context_line":"            v_host \u003d v.host.split(\u0027#\u0027)[0]"},{"line_number":35,"context_line":"            results \u003d list(services.select().where("},{"line_number":36,"context_line":"                services.c.host \u003d\u003d v_host).execute())"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"            volumes.update().where(volumes.c.id \u003d\u003d v.id).\\"},{"line_number":39,"context_line":"                values(backend_id\u003dresults[0].uuid).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e94b6684","line":39,"range":{"start_line":31,"start_character":4,"end_line":39,"end_character":60},"in_reply_to":"7f515b1d_09c0022a","updated":"2017-10-05 16:24:25.000000000","message":"Cinder actually has an online_data_migrations CLI:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/cmd/manage.py#L290\n\nIt\u0027s just that it doesn\u0027t do anything yet:\n\nhttps://github.com/openstack/cinder/blob/master/cinder/cmd/manage.py#L208\n\nBe the first John. Be the first.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d89f305303ef1157f65bb7b6103889510ee70c1a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    volumes.create_column(backend_id)"},{"line_number":29,"context_line":"    services \u003d Table(\u0027services\u0027, meta, autoload\u003dTrue)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    volume_list \u003d list(volumes.select().execute())"},{"line_number":32,"context_line":"    for v in volume_list:"},{"line_number":33,"context_line":"        if v.host:"},{"line_number":34,"context_line":"            v_host \u003d v.host.split(\u0027#\u0027)[0]"},{"line_number":35,"context_line":"            results \u003d list(services.select().where("},{"line_number":36,"context_line":"                services.c.host \u003d\u003d v_host).execute())"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"            volumes.update().where(volumes.c.id \u003d\u003d v.id).\\"},{"line_number":39,"context_line":"                values(backend_id\u003dresults[0].uuid).execute()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e4894b26","line":39,"range":{"start_line":31,"start_character":4,"end_line":39,"end_character":60},"in_reply_to":"7f515b1d_e94b6684","updated":"2017-10-05 16:40:11.000000000","message":"Here is a pretty simple example in nova of adding a uuid column to the services table and then populating the value on read for existing records:\n\nhttps://review.openstack.org/#/c/453025/\n\nAnd https://review.openstack.org/#/c/454899/ for the online_data_migration CLI part.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"}],"cinder/objects/service.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8375284ec34ebcd567ec391833b9c16e7523238","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # Version 1.2: Add get_minimum_rpc_version() and get_minimum_obj_version()"},{"line_number":34,"context_line":"    # Version 1.3: Add replication fields"},{"line_number":35,"context_line":"    # Version 1.4: Add cluster fields"},{"line_number":36,"context_line":"    # Version 1.5: Add uuid"},{"line_number":37,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    OPTIONAL_FIELDS \u003d (\u0027cluster\u0027,)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_0bc848a3","line":37,"range":{"start_line":36,"start_character":4,"end_line":37,"end_character":19},"updated":"2017-10-03 08:39:24.000000000","message":"Shouldn\u0027t all the service uuid related changes be in the previous patch set where you introduce it?","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"4be4f2425039a249a72c8c88ce6f15c8c30ec84f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # Version 1.2: Add get_minimum_rpc_version() and get_minimum_obj_version()"},{"line_number":34,"context_line":"    # Version 1.3: Add replication fields"},{"line_number":35,"context_line":"    # Version 1.4: Add cluster fields"},{"line_number":36,"context_line":"    # Version 1.5: Add uuid"},{"line_number":37,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    OPTIONAL_FIELDS \u003d (\u0027cluster\u0027,)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_49d6452a","line":37,"range":{"start_line":36,"start_character":4,"end_line":37,"end_character":19},"in_reply_to":"7f515b1d_0bc848a3","updated":"2017-10-03 13:41:13.000000000","message":"Probably :) But on the other hand it\u0027s not like this is the first time we added something to the DB and didn\u0027t add it to the objects until later.  I can break these apart and move that if it\u0027s a problem though.","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"9e609b98dd10e7f213d30761e82e5d66804a4f0c","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # Version 1.2: Add get_minimum_rpc_version() and get_minimum_obj_version()"},{"line_number":34,"context_line":"    # Version 1.3: Add replication fields"},{"line_number":35,"context_line":"    # Version 1.4: Add cluster fields"},{"line_number":36,"context_line":"    # Version 1.5: Add uuid"},{"line_number":37,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    OPTIONAL_FIELDS \u003d (\u0027cluster\u0027,)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_3aa90990","line":37,"range":{"start_line":36,"start_character":4,"end_line":37,"end_character":19},"in_reply_to":"7f515b1d_2cb0b7dd","updated":"2017-10-03 16:05:38.000000000","message":"This depends on the other so you don\u0027t have to track anything else, just this.  So if you have the API version and the Object version you\u0027re good.  No tracking problems I hope.","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"c43fb307cf23655bb0389ac8733135be8bac88d2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # Version 1.2: Add get_minimum_rpc_version() and get_minimum_obj_version()"},{"line_number":34,"context_line":"    # Version 1.3: Add replication fields"},{"line_number":35,"context_line":"    # Version 1.4: Add cluster fields"},{"line_number":36,"context_line":"    # Version 1.5: Add uuid"},{"line_number":37,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    OPTIONAL_FIELDS \u003d (\u0027cluster\u0027,)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_5550160b","line":37,"range":{"start_line":36,"start_character":4,"end_line":37,"end_character":19},"in_reply_to":"7f515b1d_3aa90990","updated":"2017-10-03 16:29:26.000000000","message":"BTW on versions, I think a note on 3.45 is missing from this file: https://github.com/openstack/cinder/blob/master/cinder/api/openstack/rest_api_version_history.rst","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"749d9b23549b1ddeaacc4c91d53a01a30f87ed18","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # Version 1.2: Add get_minimum_rpc_version() and get_minimum_obj_version()"},{"line_number":34,"context_line":"    # Version 1.3: Add replication fields"},{"line_number":35,"context_line":"    # Version 1.4: Add cluster fields"},{"line_number":36,"context_line":"    # Version 1.5: Add uuid"},{"line_number":37,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    OPTIONAL_FIELDS \u003d (\u0027cluster\u0027,)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_2cb0b7dd","line":37,"range":{"start_line":36,"start_character":4,"end_line":37,"end_character":19},"in_reply_to":"7f515b1d_49d6452a","updated":"2017-10-03 14:22:03.000000000","message":"It\u0027s ok, none of these are big patches, so I should be able to put together the pieces. It\u0027s just easier to check whether everything is there for the related change if they are in one patch. :)","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"182afba07c8dc3184ba4b66b0aa45b714a4747ab","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    # Version 1.2: Add get_minimum_rpc_version() and get_minimum_obj_version()"},{"line_number":34,"context_line":"    # Version 1.3: Add replication fields"},{"line_number":35,"context_line":"    # Version 1.4: Add cluster fields"},{"line_number":36,"context_line":"    # Version 1.5: Add uuid"},{"line_number":37,"context_line":"    VERSION \u003d \u00271.5\u0027"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    OPTIONAL_FIELDS \u003d (\u0027cluster\u0027,)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_66ca431b","line":37,"range":{"start_line":36,"start_character":4,"end_line":37,"end_character":19},"in_reply_to":"7f515b1d_5550160b","updated":"2017-10-03 21:33:53.000000000","message":"Yup, I think you\u0027re right :) . Will fix it","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    fields \u003d {"},{"line_number":42,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":43,"context_line":"        \u0027uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":44,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":45,"context_line":"        \u0027binary\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":46,"context_line":"        \u0027cluster_name\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_8902b26e","line":43,"updated":"2017-10-05 16:18:35.000000000","message":"OK so I guess there is already a uuid column on the services table in the DB, it was just never added to the object for whatever reason.\n\nHowever, this value is nullable\u003dTrue, so will it be set in the database? Or when reading a record out of the db do you need to set the uuid to something and then save the record before it\u0027s used?","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        \u0027active_backend_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":64,"context_line":"    }"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":67,"context_line":"        \"\"\"Make a service representation compatible with a target version.\"\"\""},{"line_number":68,"context_line":"        # Convert all related objects"},{"line_number":69,"context_line":"        super(Service, self).obj_make_compatible(primitive, target_version)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_c92d4afe","line":66,"updated":"2017-10-05 16:18:35.000000000","message":"You\u0027re missing a compat check for uuid.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"f3bd62a6ccb9f09dcec445e96ef59345164acd3d","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    fields \u003d {"},{"line_number":47,"context_line":"        \u0027id\u0027: fields.IntegerField(),"},{"line_number":48,"context_line":"        \u0027uuid\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":49,"context_line":"        \u0027host\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":50,"context_line":"        \u0027binary\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":51,"context_line":"        \u0027cluster_name\u0027: fields.StringField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_2bcb961e","line":48,"range":{"start_line":48,"start_character":9,"end_line":48,"end_character":50},"updated":"2017-10-23 07:33:50.000000000","message":"There is another \u0027uuid\u0027 at line 70, is this duplicated?","commit_id":"53d21fe54d3269079290424b0090546f874f8d70"}],"cinder/objects/volume.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                                               nullable\u003dTrue),"},{"line_number":126,"context_line":"        \u0027snapshots\u0027: fields.ObjectField(\u0027SnapshotList\u0027, nullable\u003dTrue),"},{"line_number":127,"context_line":"        \u0027group\u0027: fields.ObjectField(\u0027Group\u0027, nullable\u003dTrue),"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        \u0027shared_targets\u0027: fields.BooleanField(default\u003dTrue, nullable\u003dTrue),"},{"line_number":130,"context_line":"        \u0027backend_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":131,"context_line":"    }"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    # NOTE(thangp): obj_extra_fields is used to hold properties that are not"},{"line_number":134,"context_line":"    # usually part of the model"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_49227a03","line":131,"range":{"start_line":128,"start_character":0,"end_line":131,"end_character":5},"updated":"2017-10-05 16:18:35.000000000","message":"You\u0027re missing compat checks for these in obj_make_compatible.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"}],"cinder/tests/unit/test_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        self.assertIsInstance(services.c.uuid.type,"},{"line_number":361,"context_line":"                              self.VARCHAR_TYPE)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def _check_113(self, engine, data):"},{"line_number":364,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"},{"line_number":365,"context_line":"        self.assertIsInstance(volumes.c.shared_targets.type,"},{"line_number":366,"context_line":"                              self.BOOL_TYPE)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def _check_114(self, engine, data):"},{"line_number":369,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"},{"line_number":370,"context_line":"        self.assertIsInstance(volumes.c.backend_id.type,"},{"line_number":371,"context_line":"                              self.VARCHAR_TYPE)"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def test_walk_versions(self):"},{"line_number":374,"context_line":"        self.walk_versions(False, False)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_29761e08","line":371,"range":{"start_line":363,"start_character":4,"end_line":371,"end_character":48},"updated":"2017-10-05 16:18:35.000000000","message":"How about pre-create a volume/service for these and make sure they have values set after the migration, unless you are going to do it online, which you should.","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"}],"cinder/volume/driver.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8375284ec34ebcd567ec391833b9c16e7523238","unresolved":false,"context_lines":[{"line_number":279,"context_line":"               help\u003d\u0027Unique identifier of backend device, \u0027"},{"line_number":280,"context_line":"                    \u0027defaults to c-vol service UUID, set \u0027"},{"line_number":281,"context_line":"                    \u0027this option when sharing a single device \u0027"},{"line_number":282,"context_line":"                    \u0027device for multiple c-vol services.\u0027),"},{"line_number":283,"context_line":"]"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_4b5520f9","line":282,"range":{"start_line":282,"start_character":21,"end_line":282,"end_character":27},"updated":"2017-10-03 08:39:24.000000000","message":"You can remove it, it\u0027s duplicated.","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"4be4f2425039a249a72c8c88ce6f15c8c30ec84f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"               help\u003d\u0027Unique identifier of backend device, \u0027"},{"line_number":280,"context_line":"                    \u0027defaults to c-vol service UUID, set \u0027"},{"line_number":281,"context_line":"                    \u0027this option when sharing a single device \u0027"},{"line_number":282,"context_line":"                    \u0027device for multiple c-vol services.\u0027),"},{"line_number":283,"context_line":"]"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"# for backward compatibility"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_69ba21e2","line":282,"range":{"start_line":282,"start_character":21,"end_line":282,"end_character":27},"in_reply_to":"7f515b1d_4b5520f9","updated":"2017-10-03 13:41:13.000000000","message":"oops!  Ok, I\u0027ll put up another version to fix that, thanks!","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65e72cc79b57f97ab7ef54288a935070711d2df7","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                    \u0027the storage_availability_zone option value is used as \u0027"},{"line_number":275,"context_line":"                    \u0027the default for all backends.\u0027),"},{"line_number":276,"context_line":"    cfg.StrOpt(\u0027backend_id\u0027,"},{"line_number":277,"context_line":"               default\u003d\u0027\u0027,"},{"line_number":278,"context_line":"               help\u003d\u0027Unique identifier of backend device, \u0027"},{"line_number":279,"context_line":"                    \u0027defaults to c-vol service UUID, set \u0027"},{"line_number":280,"context_line":"                    \u0027this option when sharing a single device \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_e961263b","line":277,"range":{"start_line":277,"start_character":15,"end_line":277,"end_character":26},"updated":"2017-10-05 16:18:35.000000000","message":"Why not just default to None?","commit_id":"59045dadccc376916de3ba47b4855a55c4ab1737"}],"cinder/volume/manager.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"a8375284ec34ebcd567ec391833b9c16e7523238","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                # CleanableManager"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"                # Take advantage of the fact we\u0027re already iterating over"},{"line_number":494,"context_line":"                # volumes here incase a config option was"},{"line_number":495,"context_line":"                # added and also use this as an opportunity to read"},{"line_number":496,"context_line":"                # capabilities and verify shared_targets flag is accurate"},{"line_number":497,"context_line":"                # since we default to True on init this may be wrong"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_abb13446","line":494,"range":{"start_line":494,"start_character":31,"end_line":494,"end_character":37},"updated":"2017-10-03 08:39:24.000000000","message":"s/incase/in case/","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"1039c8e8736afb91184acbc14c1801625055b5ff","unresolved":false,"context_lines":[{"line_number":514,"context_line":"        # at this point the driver is considered initialized."},{"line_number":515,"context_line":"        # NOTE(jdg): Careful though because that doesn\u0027t mean"},{"line_number":516,"context_line":"        # that an entry exists in the service table"},{"line_number":517,"context_line":"        # ^^  I don\u0027t think this is true any longer and can be removed?"},{"line_number":518,"context_line":"        self.driver.set_initialized()"},{"line_number":519,"context_line":""},{"line_number":520,"context_line":"        # Keep the image tmp file clean when init host."}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_00db7a7d","line":517,"updated":"2017-10-03 17:13:10.000000000","message":"I think thats right, if it\u0027s not we probably should take a look at why.. especially when we\u0027re doing queries on the service table to look up our uuid before this point :D","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"1039c8e8736afb91184acbc14c1801625055b5ff","unresolved":false,"context_lines":[{"line_number":706,"context_line":"                # volume stats as these are decremented on delete."},{"line_number":707,"context_line":"                self._update_allocated_capacity(volume)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        volume.shared_targets \u003d self.shared_targets"},{"line_number":710,"context_line":"        volume.backend_id \u003d self.backend_id"},{"line_number":711,"context_line":"        volume.save()"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        LOG.info(\"Created volume successfully.\", resource\u003dvolume)"},{"line_number":714,"context_line":"        return volume.id"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_e06e1e95","line":711,"range":{"start_line":709,"start_character":8,"end_line":711,"end_character":21},"updated":"2017-10-03 17:13:10.000000000","message":"Should we do this earlier in the create_volume flow? Or even like immediately upon entering the method?\n\nMy thinking is that while it doesn\u0027t affect anything for external api callers using the attach api\u0027s, if we wanted to key off of it internally for doing things like creating volumes from images and stuff we coiuld, but only if its set before we _run_flow()","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"182afba07c8dc3184ba4b66b0aa45b714a4747ab","unresolved":false,"context_lines":[{"line_number":706,"context_line":"                # volume stats as these are decremented on delete."},{"line_number":707,"context_line":"                self._update_allocated_capacity(volume)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        volume.shared_targets \u003d self.shared_targets"},{"line_number":710,"context_line":"        volume.backend_id \u003d self.backend_id"},{"line_number":711,"context_line":"        volume.save()"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        LOG.info(\"Created volume successfully.\", resource\u003dvolume)"},{"line_number":714,"context_line":"        return volume.id"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f515b1d_8612dfb3","line":711,"range":{"start_line":709,"start_character":8,"end_line":711,"end_character":21},"in_reply_to":"7f515b1d_e06e1e95","updated":"2017-10-03 21:33:53.000000000","message":"That should be reasonable, I\u0027ll give some folks time for more comments but I\u0027ll go ahead and get this moved up before the run_flow call in my staged copy.  Thanks!","commit_id":"c3013220ef7e353b98eb900140037052e1055c48"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"f3bd62a6ccb9f09dcec445e96ef59345164acd3d","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # until the service entry is created (handled by __init__"},{"line_number":469,"context_line":"        # in service.py)"},{"line_number":470,"context_line":"        svc_host \u003d vol_utils.extract_host(self.host, \u0027backend\u0027)"},{"line_number":471,"context_line":"        service \u003d objects.Service.get_by_args(ctxt, svc_host,"},{"line_number":472,"context_line":"                                              constants.VOLUME_BINARY)"},{"line_number":473,"context_line":"        self.backend_id \u003d service.uuid"},{"line_number":474,"context_line":"        configured_backend_id \u003d self.driver.configuration.safe_get("},{"line_number":475,"context_line":"            \u0027backend_id\u0027)"},{"line_number":476,"context_line":"        if configured_backend_id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_cb0e423a","line":473,"range":{"start_line":471,"start_character":8,"end_line":473,"end_character":38},"updated":"2017-10-23 07:33:50.000000000","message":"get the service object only if the backend_id is not confgiured.","commit_id":"53d21fe54d3269079290424b0090546f874f8d70"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"f3bd62a6ccb9f09dcec445e96ef59345164acd3d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        if configured_backend_id:"},{"line_number":477,"context_line":"            self.backend_id \u003d configured_backend_id"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        # Now, we also want to query the driver and check the shared_targets"},{"line_number":480,"context_line":"        # stats field, set that as a member variable as well"},{"line_number":481,"context_line":"        stats_refresh \u003d self.driver.get_volume_stats(refresh\u003dTrue)"},{"line_number":482,"context_line":"        self.shared_targets \u003d stats_refresh.get(\u0027shared_targets\u0027, True)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        try:"},{"line_number":485,"context_line":"            for volume in volumes:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_c6af57e1","line":482,"range":{"start_line":479,"start_character":7,"end_line":482,"end_character":71},"updated":"2017-10-23 07:33:50.000000000","message":"We asked driver to report the status twice in the init_host method, one is here and another one is line 531, can we combine them into one?","commit_id":"53d21fe54d3269079290424b0090546f874f8d70"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"f3bd62a6ccb9f09dcec445e96ef59345164acd3d","unresolved":false,"context_lines":[{"line_number":684,"context_line":"            with flow_utils.DynamicLogListener(flow_engine, logger\u003dLOG):"},{"line_number":685,"context_line":"                flow_engine.run()"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        volume.shared_targets \u003d self.shared_targets"},{"line_number":688,"context_line":"        volume.backend_id \u003d self.backend_id"},{"line_number":689,"context_line":"        volume.save()"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"        # NOTE(dulek): Flag to indicate if volume was rescheduled. Used to"},{"line_number":692,"context_line":"        # decide if allocated_capacity should be incremented."}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_46bda7d6","line":689,"range":{"start_line":687,"start_character":6,"end_line":689,"end_character":21},"updated":"2017-10-23 07:33:50.000000000","message":"Can we move this into the flow task, for instance, \u0027CreateVolumeOnFinishTask\u0027","commit_id":"53d21fe54d3269079290424b0090546f874f8d70"}]}
