)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14274,"name":"XinXiaohui","email":"xiaohui.xin@intel.com","username":"XinXiaohui"},"change_message_id":"66dd57817ce6aa7ef1dcfd4eab618d75442ccbab","unresolved":false,"context_lines":[{"line_number":11,"context_line":"created volume always set multiattach to False, even the source"},{"line_number":12,"context_line":"snapshot/volume/replica/ is allowing mutiattach."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This patch addes code to inherit multiattach from the source where"},{"line_number":15,"context_line":"volume is created. I didn\u0027t add test cases to api/v1/test_volumes.py,"},{"line_number":16,"context_line":"because it would be duplicated since the new test cases test against"},{"line_number":17,"context_line":"volume/api.API, no matter api/v1 or api/v2. I don\u0027t see code to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a5ae5dd_fe27c0c7","line":14,"range":{"start_line":14,"start_character":11,"end_line":14,"end_character":16},"updated":"2016-02-05 07:33:36.000000000","message":"s/addes/adds","commit_id":"06f1105d6a771270d07a283ebf4d18f49a42a846"}],"cinder/tests/unit/api/v2/test_volumes.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4a40b10449bab91dd574a0bccdea5fe79cb0f5ec","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                                              vol_api.scheduler_rpcapi,"},{"line_number":617,"context_line":"                                              vol_api.volume_rpcapi)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        snapshot.destroy()"},{"line_number":620,"context_line":"        volume.destroy()"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    @mock.patch(\u0027cinder.policy.enforce\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_ad1ed860","line":619,"updated":"2016-03-14 13:19:08.000000000","message":"Please, use addCleanUp method here and below","commit_id":"43b1fe773ab02b1a49a0a8f19f8171cb5c913d89"}],"cinder/tests/unit/test_volume.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4a40b10449bab91dd574a0bccdea5fe79cb0f5ec","unresolved":false,"context_lines":[{"line_number":1191,"context_line":"                    \u0027volume_type_id\u0027: biz_type[\u0027id\u0027]}"},{"line_number":1192,"context_line":"        snapshot_obj \u003d fake_snapshot.fake_snapshot_obj(self.context,"},{"line_number":1193,"context_line":"                                                       **snapshot)"},{"line_number":1194,"context_line":""},{"line_number":1195,"context_line":"        # Make sure the case of specifying a type that"},{"line_number":1196,"context_line":"        # doesn\u0027t match the snapshots type fails"},{"line_number":1197,"context_line":"        self.assertRaises(exception.InvalidInput,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_db15dd49","line":1194,"updated":"2016-03-14 13:19:08.000000000","message":"Please, remove this change","commit_id":"43b1fe773ab02b1a49a0a8f19f8171cb5c913d89"}],"cinder/volume/api.py":[{"author":{"_account_id":14274,"name":"XinXiaohui","email":"xiaohui.xin@intel.com","username":"XinXiaohui"},"change_message_id":"66dd57817ce6aa7ef1dcfd4eab618d75442ccbab","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            inherited_multiattach \u003d source_volume.multiattach"},{"line_number":326,"context_line":"        elif source_replica:"},{"line_number":327,"context_line":"            inherited_multiattach \u003d source_replica.multiattach"},{"line_number":328,"context_line":"        elif snapshot:"},{"line_number":329,"context_line":"            inherited_multiattach \u003d snapshot_originating_volume.multiattach"},{"line_number":330,"context_line":"        else:"},{"line_number":331,"context_line":"            inherited_multiattach \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a5ae5dd_01b35d99","line":328,"range":{"start_line":328,"start_character":13,"end_line":328,"end_character":21},"updated":"2016-02-05 07:33:36.000000000","message":"If you move line 310~320 to after line 328, the code structure will be better.","commit_id":"06f1105d6a771270d07a283ebf4d18f49a42a846"},{"author":{"_account_id":14274,"name":"XinXiaohui","email":"xiaohui.xin@intel.com","username":"XinXiaohui"},"change_message_id":"37d50d3f68d3b073d99e858869bfcc3315306c78","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        elif snapshot:"},{"line_number":316,"context_line":"            # Load the snapshot\u0027s originating volume for later use"},{"line_number":317,"context_line":"            try:"},{"line_number":318,"context_line":"                snapshot_originating_volume \u003d self.get_volume("},{"line_number":319,"context_line":"                                            context,"},{"line_number":320,"context_line":"                                            snapshot.volume_id)"},{"line_number":321,"context_line":"            except exception.VolumeNotFound:"},{"line_number":322,"context_line":"                msg \u003d _(\"Invalid snapshot provided: %(snapshot_id)s (cannot \""},{"line_number":323,"context_line":"                        \"find the snapshot\u0027s originating volume: \""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_3c27b165","line":320,"range":{"start_line":318,"start_character":16,"end_line":320,"end_character":63},"updated":"2016-03-02 06:15:50.000000000","message":"How about just use this:\n    snapshot_originating_volume \u003d (\n       objects.Volume.get_by_id(context, snapshot.volume_id))","commit_id":"75c79ce0301d9609086fdc47ce8d4c7d2e6c13ab"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"bc75341ae7c5eef597d207dbe4f00b296a237987","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        elif snapshot:"},{"line_number":316,"context_line":"            # Load the snapshot\u0027s originating volume for later use"},{"line_number":317,"context_line":"            try:"},{"line_number":318,"context_line":"                snapshot_originating_volume \u003d self.get_volume("},{"line_number":319,"context_line":"                                            context,"},{"line_number":320,"context_line":"                                            snapshot.volume_id)"},{"line_number":321,"context_line":"            except exception.VolumeNotFound:"},{"line_number":322,"context_line":"                msg \u003d _(\"Invalid snapshot provided: %(snapshot_id)s (cannot \""},{"line_number":323,"context_line":"                        \"find the snapshot\u0027s originating volume: \""}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_499f9450","line":320,"range":{"start_line":318,"start_character":16,"end_line":320,"end_character":63},"in_reply_to":"7af24918_3c27b165","updated":"2016-03-11 10:39:20.000000000","message":"Awesome! Thank you a lot!","commit_id":"75c79ce0301d9609086fdc47ce8d4c7d2e6c13ab"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"f478b3c32f651b2bd61dfadd077c7de50a768523","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                msg \u003d _LW(\"Invalid snapshot provided: %(snapshot_id)s (cannot \""},{"line_number":324,"context_line":"                          \"find the snapshot\u0027s originating volume: \""},{"line_number":325,"context_line":"                          \"%(volume_id)s)\")"},{"line_number":326,"context_line":"                LOG.warning(msg, {\u0027snapshot_id\u0027: snapshot.id,"},{"line_number":327,"context_line":"                                  \u0027volume_id\u0027: snapshot.volume_id})"},{"line_number":328,"context_line":"                inherited_multiattach \u003d False"},{"line_number":329,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_9f61ced6","line":326,"updated":"2016-03-11 10:41:21.000000000","message":"Test cases, for example cinder.tests.unit.test_volume.VolumeMigrationTestCase.test_create_volume_from_snapshot_with_types, will pass in snapshot object whose volume_id is \u0027fake_id\u0027. So here I only log a warning rather than raise an exception.","commit_id":"88be2bb31624602cc55fbef492f32de9ab34a15d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4a40b10449bab91dd574a0bccdea5fe79cb0f5ec","unresolved":false,"context_lines":[{"line_number":318,"context_line":"                snapshot_originating_volume \u003d objects.Volume.get_by_id("},{"line_number":319,"context_line":"                    context,"},{"line_number":320,"context_line":"                    snapshot.volume_id)"},{"line_number":321,"context_line":"                inherited_multiattach \u003d \\"},{"line_number":322,"context_line":"                    snapshot_originating_volume[\u0027multiattach\u0027]"},{"line_number":323,"context_line":"            except exception.VolumeNotFound:"},{"line_number":324,"context_line":"                msg \u003d _LW(\"Invalid snapshot provided: %(snapshot_id)s (cannot \""}],"source_content_type":"text/x-python","patch_set":5,"id":"3afc51ec_2d6f68c6","line":321,"range":{"start_line":321,"start_character":39,"end_line":321,"end_character":40},"updated":"2016-03-14 13:19:08.000000000","message":"Please, use brackets () instead of \u0027\\\u0027 symbol","commit_id":"43b1fe773ab02b1a49a0a8f19f8171cb5c913d89"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"eb312c319afd59ff4a23fab85adb2a5cdb71db50","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            \u0027optional_args\u0027: {\u0027is_quota_committed\u0027: False},"},{"line_number":348,"context_line":"            \u0027consistencygroup\u0027: consistencygroup,"},{"line_number":349,"context_line":"            \u0027cgsnapshot\u0027: cgsnapshot,"},{"line_number":350,"context_line":"            \u0027multiattach\u0027: multiattach or inherited_multiattach,"},{"line_number":351,"context_line":"        }"},{"line_number":352,"context_line":"        try:"},{"line_number":353,"context_line":"            sched_rpcapi \u003d (self.scheduler_rpcapi if (not cgsnapshot and"}],"source_content_type":"text/x-python","patch_set":6,"id":"1af94dfe_40a47556","line":350,"updated":"2016-03-15 19:10:16.000000000","message":"Won\u0027t this result in multiattach being True even if the user has explicitly specified multiattach\u003dFalse on this call?\n\nI don\u0027t think that\u0027s desirable behavior since it makes it impossible to clone a non-multiattach volume from a multiattach volume, which a lot of people would consider a dangerous operation.","commit_id":"71e433dfeaebfe62b8e60bbe895424e7c5f875f6"}]}
