)]}'
{"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61b748e97d303d4dc8426e23f3d495f7cb756b70","unresolved":false,"context_lines":[{"line_number":619,"context_line":"    total \u003d model_query(context,"},{"line_number":620,"context_line":"                        models.Volume).filter_by(service_uuid\u003dNone).count()"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    vol_refs \u003d model_query(context, models.Volume).filter_by("},{"line_number":623,"context_line":"        service_uuid\u003dNone).limit(max_count).all()"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    service_refs \u003d model_query(context, models.Service).filter_by("},{"line_number":626,"context_line":"        topic\u003d\"cinder-volume\").limit(max_count).all()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_5fc78e65","line":623,"range":{"start_line":622,"start_character":15,"end_line":623,"end_character":26},"updated":"2017-11-15 18:00:32.000000000","message":"nit: you could build the query object once, call count() on it above, and then call .limit(max_count).all() separately.","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"2097ab8e2b2f721b3cda70c469c94051764abf74","unresolved":false,"context_lines":[{"line_number":619,"context_line":"    total \u003d model_query(context,"},{"line_number":620,"context_line":"                        models.Volume).filter_by(service_uuid\u003dNone).count()"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    vol_refs \u003d model_query(context, models.Volume).filter_by("},{"line_number":623,"context_line":"        service_uuid\u003dNone).limit(max_count).all()"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":"    service_refs \u003d model_query(context, models.Service).filter_by("},{"line_number":626,"context_line":"        topic\u003d\"cinder-volume\").limit(max_count).all()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_4530dc9f","line":623,"range":{"start_line":622,"start_character":15,"end_line":623,"end_character":26},"in_reply_to":"1f485f77_5fc78e65","updated":"2017-11-15 22:10:41.000000000","message":"Done","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61b748e97d303d4dc8426e23f3d495f7cb756b70","unresolved":false,"context_lines":[{"line_number":628,"context_line":"    # build a map to access the service uuid by host"},{"line_number":629,"context_line":"    svc_map \u003d {}"},{"line_number":630,"context_line":"    for svc in service_refs:"},{"line_number":631,"context_line":"        svc_map[str(svc.host)] \u003d str(svc.uuid)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"    # update our volumes appropriately"},{"line_number":634,"context_line":"    for v in vol_refs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_dfa81e8d","line":631,"range":{"start_line":631,"start_character":20,"end_line":631,"end_character":28},"updated":"2017-11-15 18:00:32.000000000","message":"Can this host name have unicode in it? If so, str() might blow up.","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"2097ab8e2b2f721b3cda70c469c94051764abf74","unresolved":false,"context_lines":[{"line_number":628,"context_line":"    # build a map to access the service uuid by host"},{"line_number":629,"context_line":"    svc_map \u003d {}"},{"line_number":630,"context_line":"    for svc in service_refs:"},{"line_number":631,"context_line":"        svc_map[str(svc.host)] \u003d str(svc.uuid)"},{"line_number":632,"context_line":""},{"line_number":633,"context_line":"    # update our volumes appropriately"},{"line_number":634,"context_line":"    for v in vol_refs:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_850014ad","line":631,"range":{"start_line":631,"start_character":20,"end_line":631,"end_character":28},"in_reply_to":"1f485f77_dfa81e8d","updated":"2017-11-15 22:10:41.000000000","message":"Yep, I hacked that in for some testing and never removed it. Thanks!","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"}],"cinder/db/sqlalchemy/migrate_repo/versions/114_add_service_uuid_fk_to_volumes.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61b748e97d303d4dc8426e23f3d495f7cb756b70","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                     ForeignKey(\u0027services.uuid\u0027),"},{"line_number":31,"context_line":"                                     nullable\u003dTrue))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    index_name \u003d \u0027volumes_service_idx\u0027"},{"line_number":34,"context_line":"    indexes \u003d Inspector(migrate_engine).get_indexes(\u0027volumes\u0027)"},{"line_number":35,"context_line":"    if index_name not in (i[\u0027name\u0027] for i in indexes):"},{"line_number":36,"context_line":"        volumes \u003d Table(\u0027volumes\u0027, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_9fe866e2","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":33},"updated":"2017-11-15 18:00:32.000000000","message":"service_uuid? That\u0027s the name of the column that your index is on.","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"2097ab8e2b2f721b3cda70c469c94051764abf74","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                     ForeignKey(\u0027services.uuid\u0027),"},{"line_number":31,"context_line":"                                     nullable\u003dTrue))"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    index_name \u003d \u0027volumes_service_idx\u0027"},{"line_number":34,"context_line":"    indexes \u003d Inspector(migrate_engine).get_indexes(\u0027volumes\u0027)"},{"line_number":35,"context_line":"    if index_name not in (i[\u0027name\u0027] for i in indexes):"},{"line_number":36,"context_line":"        volumes \u003d Table(\u0027volumes\u0027, meta, autoload\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_06542ffe","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":33},"in_reply_to":"1f485f77_9fe866e2","updated":"2017-11-15 22:10:41.000000000","message":"Yes, that was the intent, service_uuid which is the service tables uuid / fk.  \n\nMy intent is to be able to query and or sort volumes by backend using service_uuid.  Change the name to `volumes_service_uuid_idx` better maybe?","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a6dd2629d6527ab9f912e34047b5816fee56430b","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        primaryjoin\u003d\u0027GroupSnapshot.group_id \u003d\u003d Group.id\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class Volume(BASE, CinderBase):"},{"line_number":243,"context_line":"    \"\"\"Represents a block storage device that can be attached to a vm.\"\"\""},{"line_number":244,"context_line":"    __tablename__ \u003d \u0027volumes\u0027"},{"line_number":245,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_ff951a34","line":242,"range":{"start_line":242,"start_character":6,"end_line":242,"end_character":12},"updated":"2017-11-15 18:01:11.000000000","message":"Your migration script defines an index but the model doesn\u0027t?","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec2677e2eed72aa08e821f7545731df44c43ac1e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        primaryjoin\u003d\u0027GroupSnapshot.group_id \u003d\u003d Group.id\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class Volume(BASE, CinderBase):"},{"line_number":243,"context_line":"    \"\"\"Represents a block storage device that can be attached to a vm.\"\"\""},{"line_number":244,"context_line":"    __tablename__ \u003d \u0027volumes\u0027"},{"line_number":245,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_6c25eb5b","line":242,"range":{"start_line":242,"start_character":6,"end_line":242,"end_character":12},"in_reply_to":"1f485f77_86113f55","updated":"2017-11-16 13:59:23.000000000","message":"It\u0027s not a named index though. The index name will be randomly generated by the sqla backend using the models, unlike the migration script which has a specific index name.","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"2097ab8e2b2f721b3cda70c469c94051764abf74","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        primaryjoin\u003d\u0027GroupSnapshot.group_id \u003d\u003d Group.id\u0027)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"class Volume(BASE, CinderBase):"},{"line_number":243,"context_line":"    \"\"\"Represents a block storage device that can be attached to a vm.\"\"\""},{"line_number":244,"context_line":"    __tablename__ \u003d \u0027volumes\u0027"},{"line_number":245,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_86113f55","line":242,"range":{"start_line":242,"start_character":6,"end_line":242,"end_character":12},"in_reply_to":"1f485f77_ff951a34","updated":"2017-11-15 22:10:41.000000000","message":"Line #314 no?","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec2677e2eed72aa08e821f7545731df44c43ac1e","unresolved":false,"context_lines":[{"line_number":640,"context_line":"    \"\"\"Represents a resource reservation for quotas.\"\"\""},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"    __tablename__ \u003d \u0027reservations\u0027"},{"line_number":643,"context_line":"    __table_args__ \u003d (Index(\u0027reservations_deleted_expire_idx\u0027,"},{"line_number":644,"context_line":"                            \u0027deleted\u0027, \u0027expire\u0027),"},{"line_number":645,"context_line":"                      Index(\u0027reservations_deleted_uuid_idx\u0027,"},{"line_number":646,"context_line":"                            \u0027deleted\u0027, \u0027uuid\u0027),"},{"line_number":647,"context_line":"                      CinderBase.__table_args__)"},{"line_number":648,"context_line":""},{"line_number":649,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_ec18bb1e","line":646,"range":{"start_line":643,"start_character":22,"end_line":646,"end_character":46},"updated":"2017-11-16 13:59:23.000000000","message":"I expected to see something like this.","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"}],"cinder/objects/volume.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"61b748e97d303d4dc8426e23f3d495f7cb756b70","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        return changes"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":236,"context_line":"        \"\"\"Make a Volume representation compatible with a target version.\"\"\""},{"line_number":237,"context_line":"        added_fields \u003d (((1, 4), (\u0027cluster\u0027, \u0027cluster_name\u0027)),"},{"line_number":238,"context_line":"                        ((1, 5), (\u0027group\u0027, \u0027group_id\u0027)))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_3f1612f3","line":235,"range":{"start_line":235,"start_character":8,"end_line":235,"end_character":27},"updated":"2017-11-15 18:00:32.000000000","message":"Missing handling service_uuid here right?","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"2097ab8e2b2f721b3cda70c469c94051764abf74","unresolved":false,"context_lines":[{"line_number":232,"context_line":""},{"line_number":233,"context_line":"        return changes"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def obj_make_compatible(self, primitive, target_version):"},{"line_number":236,"context_line":"        \"\"\"Make a Volume representation compatible with a target version.\"\"\""},{"line_number":237,"context_line":"        added_fields \u003d (((1, 4), (\u0027cluster\u0027, \u0027cluster_name\u0027)),"},{"line_number":238,"context_line":"                        ((1, 5), (\u0027group\u0027, \u0027group_id\u0027)))"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_86681fb9","line":235,"range":{"start_line":235,"start_character":8,"end_line":235,"end_character":27},"in_reply_to":"1f485f77_3f1612f3","updated":"2017-11-15 22:10:41.000000000","message":"Done","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"}],"cinder/tests/unit/test_migrations.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"02b3eaf8c48b9a9078e69ed5b293f5e765a006a4","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        self.assertEqual(sorted([\u0027deleted\u0027, \u0027uuid\u0027]),"},{"line_number":373,"context_line":"                         sorted(index_columns))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def _check_114(self, engine, data):"},{"line_number":376,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"},{"line_number":377,"context_line":"        self.assertIsInstance(volumes.c.service_uuid.type,"},{"line_number":378,"context_line":"                              self.VARCHAR_TYPE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_5faaee70","line":375,"updated":"2017-11-15 18:02:12.000000000","message":"Assert that you created the index?","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"2097ab8e2b2f721b3cda70c469c94051764abf74","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        self.assertEqual(sorted([\u0027deleted\u0027, \u0027uuid\u0027]),"},{"line_number":373,"context_line":"                         sorted(index_columns))"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def _check_114(self, engine, data):"},{"line_number":376,"context_line":"        volumes \u003d db_utils.get_table(engine, \u0027volumes\u0027)"},{"line_number":377,"context_line":"        self.assertIsInstance(volumes.c.service_uuid.type,"},{"line_number":378,"context_line":"                              self.VARCHAR_TYPE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f485f77_a6a43ba7","line":375,"in_reply_to":"1f485f77_5faaee70","updated":"2017-11-15 22:10:41.000000000","message":"Done","commit_id":"b4dacd75ab9c6689cdc76c102eee0213fa3a7a16"}],"cinder/volume/manager.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"244845c0667abbd3594d3c610add445c8439c5c8","unresolved":false,"context_lines":[{"line_number":2379,"context_line":"            except exception.ServiceNotFound:"},{"line_number":2380,"context_line":"                LOG.warning(\"Attempt to update service_uuid \""},{"line_number":2381,"context_line":"                            \"resulted in a Service NotFound \""},{"line_number":2382,"context_line":"                            \"exception, service_uuid field on\""},{"line_number":2383,"context_line":"                            \"volumes will be NULL.\")"},{"line_number":2384,"context_line":"                pass"},{"line_number":2385,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_3540d856","line":2382,"range":{"start_line":2382,"start_character":61,"end_line":2382,"end_character":62},"updated":"2017-11-21 17:05:42.000000000","message":"Missing space.","commit_id":"8e103a2303c5624ffa0309d42857fbe3b815be01"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"4c257c32ae3a60c0b9d31630f597a3b0c2c811e1","unresolved":false,"context_lines":[{"line_number":2379,"context_line":"            except exception.ServiceNotFound:"},{"line_number":2380,"context_line":"                LOG.warning(\"Attempt to update service_uuid \""},{"line_number":2381,"context_line":"                            \"resulted in a Service NotFound \""},{"line_number":2382,"context_line":"                            \"exception, service_uuid field on\""},{"line_number":2383,"context_line":"                            \"volumes will be NULL.\")"},{"line_number":2384,"context_line":"                pass"},{"line_number":2385,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_c67d401d","line":2382,"range":{"start_line":2382,"start_character":61,"end_line":2382,"end_character":62},"in_reply_to":"ff82abbf_3540d856","updated":"2017-11-21 18:29:23.000000000","message":"Done","commit_id":"8e103a2303c5624ffa0309d42857fbe3b815be01"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"244845c0667abbd3594d3c610add445c8439c5c8","unresolved":false,"context_lines":[{"line_number":2381,"context_line":"                            \"resulted in a Service NotFound \""},{"line_number":2382,"context_line":"                            \"exception, service_uuid field on\""},{"line_number":2383,"context_line":"                            \"volumes will be NULL.\")"},{"line_number":2384,"context_line":"                pass"},{"line_number":2385,"context_line":""},{"line_number":2386,"context_line":"        if not self.driver.initialized:"},{"line_number":2387,"context_line":"            if self.driver.configuration.config_group is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_d5240cc9","line":2384,"range":{"start_line":2384,"start_character":16,"end_line":2384,"end_character":20},"updated":"2017-11-21 17:05:42.000000000","message":"pass not needed.","commit_id":"8e103a2303c5624ffa0309d42857fbe3b815be01"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"4c257c32ae3a60c0b9d31630f597a3b0c2c811e1","unresolved":false,"context_lines":[{"line_number":2381,"context_line":"                            \"resulted in a Service NotFound \""},{"line_number":2382,"context_line":"                            \"exception, service_uuid field on\""},{"line_number":2383,"context_line":"                            \"volumes will be NULL.\")"},{"line_number":2384,"context_line":"                pass"},{"line_number":2385,"context_line":""},{"line_number":2386,"context_line":"        if not self.driver.initialized:"},{"line_number":2387,"context_line":"            if self.driver.configuration.config_group is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_e67ac422","line":2384,"range":{"start_line":2384,"start_character":16,"end_line":2384,"end_character":20},"in_reply_to":"ff82abbf_d5240cc9","updated":"2017-11-21 18:29:23.000000000","message":"Done","commit_id":"8e103a2303c5624ffa0309d42857fbe3b815be01"}]}
