)]}'
{"cinder/objects/request_spec.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"71a084eeeb2d314f6970607dd3278d28e29cab36","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"Returns RequestSpec object creating it from legacy dictionary."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        FIXME(mdulko): This should go away in early N as we stop supporting"},{"line_number":61,"context_line":"        backward compatibility with L."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_7d5d1046","line":61,"updated":"2015-12-02 17:33:46.000000000","message":"Having support for n-2 releases is desirable.  For large operators, I do not believe upgrading every 6 months is ideal, or stable.","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9afdccb9e006aa1318de5fd0084ca17eac2b2498","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        \"\"\"Returns RequestSpec object creating it from legacy dictionary."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        FIXME(mdulko): This should go away in early N as we stop supporting"},{"line_number":61,"context_line":"        backward compatibility with L."},{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_81dc0ae5","line":61,"in_reply_to":"9a8ffd7b_7d5d1046","updated":"2015-12-02 20:09:13.000000000","message":"Nova\u0027s policy is to support only N-1 releases (for Cloud Controller-\u003eCompute Node compatibility). I don\u0027t think anyone would care if Cinder could be live upgraded between N-2, while Nova wouldn\u0027t support such upgrades. Am I missing a use case here?","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"14c59558ebfa54456f0e08db50392fedb83f8ddc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        vol_props \u003d spec.pop(\u0027volume_properties\u0027, {})"},{"line_number":67,"context_line":"        spec_obj.volume_properties \u003d VolumeProperties(**vol_props)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_52012637","line":65,"updated":"2015-12-11 16:18:21.000000000","message":"Won\u0027t we have to check if \u0027resource_properties\u0027 and map that to volume_properties object here?","commit_id":"8f42461a043f7fcd4f5726e2c676afb4c77d2f70"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"bfcae1f78a7556b65359f7c09ecaf838b875cc3f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        vol_props \u003d spec.pop(\u0027volume_properties\u0027, {})"},{"line_number":67,"context_line":"        spec_obj.volume_properties \u003d VolumeProperties(**vol_props)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_f9c1d580","line":65,"in_reply_to":"7a740942_52012637","updated":"2015-12-14 13:36:10.000000000","message":"Everywhere in the code resource_properties are just a copy of volume_properties - so ignoring them shouldn\u0027t hurt.","commit_id":"8f42461a043f7fcd4f5726e2c676afb4c77d2f70"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"eeff86907c1704e160bf73a862977a1ae3bcbd59","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        vol_props \u003d spec.pop(\u0027volume_properties\u0027, {})"},{"line_number":67,"context_line":"        if vol_props is not None:"},{"line_number":68,"context_line":"            vol_props \u003d VolumeProperties(**vol_props)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a57f1b5_e4b56fd0","line":65,"updated":"2016-02-09 21:12:40.000000000","message":"Is there a reason to get different behavior for:\n   spec \u003d {\u0027volume_properties\u0027: None, ...}     vs    spec \u003d {...}\n\nBy defaulting to {} instead of None I think we\u0027re adding an empty VolumeProperties instead of leaving it null.  This would make it truthee - not sure if this will have repercussions down the road...\n\nSame goes for the next three \"if\" statements.","commit_id":"42eee66710e5df93581781dd916c4f0024a8b775"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"29dbb4180c5b6be53bc9de29693c8904cdf15bd0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        \"\"\""},{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        vol_props \u003d spec.pop(\u0027volume_properties\u0027, {})"},{"line_number":67,"context_line":"        if vol_props is not None:"},{"line_number":68,"context_line":"            vol_props \u003d VolumeProperties(**vol_props)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a57f1b5_bfee32b2","line":65,"in_reply_to":"3a57f1b5_e4b56fd0","updated":"2016-02-11 15:12:49.000000000","message":"Well, the answer is unfortunately \"it does matter\"… :( This is because in various places request_spec is used in different ways.\n\nFor example volume_properties are always considered as dict and tests like sth in request_spec.volume_properties are applied unconditionally. These will fail on volume_properties being None.\n\nOn the other hand scheduler filters are checking if volume_type is in request_spec and base further reasoning on that logic.\n\nThis is badly complicated, but I believe that defining the exact content of request_spec is the first step in making this correct.","commit_id":"42eee66710e5df93581781dd916c4f0024a8b775"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from oslo_config import cfg"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_versionedobjects import fields"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from cinder import objects"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_43c5768c","line":16,"range":{"start_line":15,"start_character":0,"end_line":16,"end_character":35},"updated":"2016-05-19 10:05:42.000000000","message":"-1: Not needed","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import objects"},{"line_number":20,"context_line":"from cinder.objects import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d cfg.CONF"},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"@base.CinderObjectRegistry.register"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_83bf5efa","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":33},"updated":"2016-05-19 10:05:42.000000000","message":"-1: Not needed","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        vol_props \u003d spec.pop(\u0027volume_properties\u0027, {})"},{"line_number":67,"context_line":"        if vol_props is not None:"},{"line_number":68,"context_line":"            vol_props \u003d VolumeProperties(**vol_props)"},{"line_number":69,"context_line":"        spec_obj.volume_properties \u003d vol_props"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_e3290a39","line":66,"range":{"start_line":66,"start_character":48,"end_line":66,"end_character":52},"updated":"2016-05-19 10:05:42.000000000","message":"-1: I think this should be None, as that\u0027s what you are checking on L67.","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"60e2b4657ff2ee7220865f3a01b5e93a98a60ead","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        spec \u003d spec.copy()"},{"line_number":64,"context_line":"        spec_obj \u003d cls()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        vol_props \u003d spec.pop(\u0027volume_properties\u0027, {})"},{"line_number":67,"context_line":"        if vol_props is not None:"},{"line_number":68,"context_line":"            vol_props \u003d VolumeProperties(**vol_props)"},{"line_number":69,"context_line":"        spec_obj.volume_properties \u003d vol_props"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_3a9fac51","line":66,"range":{"start_line":66,"start_character":48,"end_line":66,"end_character":52},"in_reply_to":"bab6814e_e3290a39","updated":"2016-05-19 12:01:26.000000000","message":"Okay, this is complicated and I\u0027m certainly not 100% happy with that approach, but… This was done to narrow the required changes to the rest of the code and tests. Please check if that reasoning is sane:\n\n1. if we\u0027ve got spec[\u0027volume_properties\u0027] \u003d\u003d None, then we want to keep obj_spec.volume_properties \u003d\u003d None\n2. if we\u0027ve got no volume_properties in spec (it\u0027s often skipped in tests), we want to just put an empty object to spec.volume_properties.\n3. if we\u0027ve got some spec[\u0027volume_properties\u0027] we want to write them to spec_obj.volume_properties\n\nThat was the logic, but now I don\u0027t really remember now what was the deeper reason for 2. I\u0027ll need to dig into that to tell.","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        spec_obj.volume_properties \u003d vol_props"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if \u0027volume\u0027 in spec:"},{"line_number":72,"context_line":"            vol \u003d spec.pop(\u0027volume\u0027, {})"},{"line_number":73,"context_line":"            vol.pop(\u0027name\u0027, None)"},{"line_number":74,"context_line":"            if vol is not None:"},{"line_number":75,"context_line":"                vol \u003d objects.Volume(**vol)"},{"line_number":76,"context_line":"            spec_obj.volume \u003d vol"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_23d792c0","line":74,"range":{"start_line":72,"start_character":11,"end_line":74,"end_character":31},"updated":"2016-05-19 10:05:42.000000000","message":"-1: Same as above, default for pop should be None\n\n vol \u003d spec.pop(\u0027volume\u0027, None)\n if vol is not None:\n     vol.pop(\u0027name\u0027, None)\n     vol \u003d objects.Volume(**vol)","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            spec_obj.volume \u003d vol"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if \u0027volume_type\u0027 in spec:"},{"line_number":79,"context_line":"            vol_type \u003d spec.pop(\u0027volume_type\u0027, {})"},{"line_number":80,"context_line":"            if vol_type is not None:"},{"line_number":81,"context_line":"                vol_type \u003d objects.VolumeType(**vol_type)"},{"line_number":82,"context_line":"            spec_obj.volume_type \u003d vol_type"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_c395e6e4","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":36},"updated":"2016-05-19 10:05:42.000000000","message":"-1: Same as L72-73","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    # Version 1.0: Initial version"},{"line_number":95,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    # TODO(dulek): We should add this to initially move volume_properites to"},{"line_number":98,"context_line":"    # ovo, but this should be removed as soon as possible. Most of the data"},{"line_number":99,"context_line":"    # here is already in request_spec and volume there. Outstanding ones would"},{"line_number":100,"context_line":"    # be reservation, and qos_specs. First one may be moved to request_spec and"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_c34a0683","line":97,"range":{"start_line":97,"start_character":18,"end_line":97,"end_character":37},"updated":"2016-05-19 10:05:42.000000000","message":"nit: We are adding this","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \u0027encryption_key_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":113,"context_line":"        \u0027metadata\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":114,"context_line":"        \u0027multiattach\u0027: fields.BooleanField(nullable\u003dTrue),"},{"line_number":115,"context_line":"        \u0027project_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":116,"context_line":"        \u0027qos_specs\u0027: fields.DictOfStringsField(nullable\u003dTrue),"},{"line_number":117,"context_line":"        \u0027replication_status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":118,"context_line":"        \u0027reservations\u0027: fields.ListOfStringsField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_a31b827f","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":54},"updated":"2016-05-19 10:05:42.000000000","message":"-1: Project id is not a UUID field, it is a String.","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8a2c321ff002ab268cd5879e29660dda0cd1c02","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        \u0027source_replicaid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":122,"context_line":"        \u0027source_volid\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":123,"context_line":"        \u0027status\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":124,"context_line":"        \u0027user_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":125,"context_line":"        \u0027volume_type_id\u0027: fields.UUIDField(nullable\u003dTrue),"},{"line_number":126,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":25,"id":"bab6814e_ee20d19d","line":124,"updated":"2016-05-19 10:05:42.000000000","message":"-1: This is not a UUID field.","commit_id":"f51fd00748c87c82ba367f2e3a2e8c3c4cf1c842"},{"author":{"_account_id":5997,"name":"Walt","display_name":"Hemna","email":"waboring@hemna.com","username":"walter-boring","status":"SAP"},"change_message_id":"f424c22f9139bd069182e11b858df65d0a23f486","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":93,"context_line":"class VolumeProperties(base.CinderObject, base.CinderObjectDictCompat):"},{"line_number":94,"context_line":"    # Version 1.0: Initial version"},{"line_number":95,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1aa78d24_2c3c58c7","line":93,"updated":"2016-07-12 05:52:25.000000000","message":"why can\u0027t we use the Volume object that\u0027s already there?","commit_id":"04df5b5ecc43b264efcf839bc074e13a9a121b8c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c6cf38f61df032cb9d06102cda64003ef586a603","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":93,"context_line":"class VolumeProperties(base.CinderObject, base.CinderObjectDictCompat):"},{"line_number":94,"context_line":"    # Version 1.0: Initial version"},{"line_number":95,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1aa78d24_99701f42","line":93,"in_reply_to":"1aa78d24_2c3c58c7","updated":"2016-07-12 10:00:40.000000000","message":"Good catch, +1 on this question","commit_id":"04df5b5ecc43b264efcf839bc074e13a9a121b8c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fe21ea43c74ccc1bcf4e7000b3ed84de0817a7e3","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":93,"context_line":"class VolumeProperties(base.CinderObject, base.CinderObjectDictCompat):"},{"line_number":94,"context_line":"    # Version 1.0: Initial version"},{"line_number":95,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":37,"id":"1aa78d24_0ba8548b","line":93,"in_reply_to":"1aa78d24_99701f42","updated":"2016-07-12 10:52:42.000000000","message":"See my comment in lines 97-103. I don\u0027t want to do everything in this patch and instead try iterative approach. Data sent over RPC in request_spec and volume_properties is duplicated in multiple places, but to clean it up while keeping backward compatibility requires having versioned objects sent instead of dicts first. Then we can start slowly reworking this interface using smaller, safer patches. Hopefully this is an acceptable approach.","commit_id":"04df5b5ecc43b264efcf839bc074e13a9a121b8c"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0562802e8263c22014a2c50f4dc9bd032e47cff0","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        if \u0027volume\u0027 in spec:"},{"line_number":72,"context_line":"            vol \u003d spec.pop(\u0027volume\u0027, {})"},{"line_number":73,"context_line":"            vol.pop(\u0027name\u0027, None)"},{"line_number":74,"context_line":"            if vol is not None:"},{"line_number":75,"context_line":"                vol \u003d objects.Volume(**vol)"},{"line_number":76,"context_line":"            spec_obj.volume \u003d vol"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_3565d7b4","line":74,"range":{"start_line":74,"start_character":12,"end_line":74,"end_character":31},"updated":"2016-07-29 19:16:02.000000000","message":"Either move vol.pop under this condition or assume vol is always dict, then there is no point in checking if it\u0027s None.","commit_id":"69a844c286123b3d56d808fc3fc2e036ad2cfebc"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0562802e8263c22014a2c50f4dc9bd032e47cff0","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            vol_props \u003d VolumeProperties(**vol_props)"},{"line_number":69,"context_line":"        spec_obj.volume_properties \u003d vol_props"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        if \u0027volume\u0027 in spec:"},{"line_number":72,"context_line":"            vol \u003d spec.pop(\u0027volume\u0027, {})"},{"line_number":73,"context_line":"            vol.pop(\u0027name\u0027, None)"},{"line_number":74,"context_line":"            if vol is not None:"},{"line_number":75,"context_line":"                vol \u003d objects.Volume(**vol)"},{"line_number":76,"context_line":"            spec_obj.volume \u003d vol"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if \u0027volume_type\u0027 in spec:"},{"line_number":79,"context_line":"            vol_type \u003d spec.pop(\u0027volume_type\u0027, {})"}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_75010f6a","line":76,"range":{"start_line":71,"start_character":8,"end_line":76,"end_character":33},"updated":"2016-07-29 19:16:02.000000000","message":"Imo it should look like this:\n\nvol \u003d spec.pop(\u0027volume\u0027, None)\nif vol is not None:\n    vol.pop(\u0027name\u0027, None)\n    spec_obj.volume \u003d objects.Volume(**vol)","commit_id":"69a844c286123b3d56d808fc3fc2e036ad2cfebc"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0562802e8263c22014a2c50f4dc9bd032e47cff0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                vol \u003d objects.Volume(**vol)"},{"line_number":76,"context_line":"            spec_obj.volume \u003d vol"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        if \u0027volume_type\u0027 in spec:"},{"line_number":79,"context_line":"            vol_type \u003d spec.pop(\u0027volume_type\u0027, {})"},{"line_number":80,"context_line":"            if vol_type is not None:"},{"line_number":81,"context_line":"                vol_type \u003d objects.VolumeType(**vol_type)"},{"line_number":82,"context_line":"            spec_obj.volume_type \u003d vol_type"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        spec.pop(\u0027resource_properties\u0027, None)"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_35ce772e","line":82,"range":{"start_line":78,"start_character":8,"end_line":82,"end_character":43},"updated":"2016-07-29 19:16:02.000000000","message":"Similarly:\n\nvol_type \u003d spec.pop(\u0027volume_type\u0027, None)\nif vol_type is not None:\n    spec_obj.volume_type \u003d objects.VolumeType(**vol_type)","commit_id":"69a844c286123b3d56d808fc3fc2e036ad2cfebc"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"20c8a35917625e97167f1320b74495b0bce24218","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"@base.CinderObjectRegistry.register"},{"line_number":93,"context_line":"class VolumeProperties(base.CinderObject, base.CinderObjectDictCompat):"},{"line_number":94,"context_line":"    # Version 1.0: Initial version"},{"line_number":95,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"bacf61ea_826b2e85","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":71},"updated":"2016-08-02 13:43:43.000000000","message":"I don\u0027t fully understand the purpose of this properties class?  This attempts to take the common fields used by request spec in relation to a volume and build a object out of them?\n\nSeems less confusing to just use the resource object directly rather than introduce another layer of indirection to the fields.  But I may not understand this correctly, let me know.","commit_id":"294425d347bdbd8e6df1737e320909fa8a15f8fb"}],"cinder/scheduler/filter_scheduler.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"71a084eeeb2d314f6970607dd3278d28e29cab36","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                                                      filter_properties)"},{"line_number":411,"context_line":"        # When we get the weighed_hosts, we clear those hosts whose backend"},{"line_number":412,"context_line":"        # is not same as consistencygroup\u0027s backend."},{"line_number":413,"context_line":"        CG_backend \u003d request_spec.get(\u0027CG_backend\u0027, None)"},{"line_number":414,"context_line":"        if weighed_hosts and CG_backend:"},{"line_number":415,"context_line":"            # Get host name including host@backend#pool info from"},{"line_number":416,"context_line":"            # weighed_hosts."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_b0a71f0a","line":413,"updated":"2015-12-02 17:33:46.000000000","message":"By default, if \u0027CG_backend\u0027 is not in request_spec, the return would be None - https://docs.python.org/3/library/stdtypes.html#dict","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9afdccb9e006aa1318de5fd0084ca17eac2b2498","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                                                      filter_properties)"},{"line_number":411,"context_line":"        # When we get the weighed_hosts, we clear those hosts whose backend"},{"line_number":412,"context_line":"        # is not same as consistencygroup\u0027s backend."},{"line_number":413,"context_line":"        CG_backend \u003d request_spec.get(\u0027CG_backend\u0027, None)"},{"line_number":414,"context_line":"        if weighed_hosts and CG_backend:"},{"line_number":415,"context_line":"            # Get host name including host@backend#pool info from"},{"line_number":416,"context_line":"            # weighed_hosts."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_21699ef9","line":413,"in_reply_to":"9a8ffd7b_b0a71f0a","updated":"2015-12-02 20:09:13.000000000","message":"Fun fact is that by default CinderObjectDictCompat will try getattr and fail. Why NotSpecifiedSentinel is a default always made me a little confused but it\u0027s how we implement get method.","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"73481f9f0e89f67872bf29e8fe23f199a3e45a4c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        elevated \u003d context.elevated()"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volume_type \u003d resource_type \u003d request_spec.get(\"volume_type\")"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        config_options \u003d self._get_configuration_options()"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_55b8ac2a","line":261,"range":{"start_line":261,"start_character":0,"end_line":261,"end_character":69},"updated":"2016-06-16 04:12:57.000000000","message":"Shouldn\u0027t we have a default\u003dNone here on the get?  It is possible that we don\u0027t have a volume_type.  Even if request_spec handles that for us (I don\u0027t believe it does) it would be better for clarity I think no?","commit_id":"81c72db7206a26f387f85049d63720a63bd6c706"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fdbf2b3957c1f1fb27c402360afce1655151359b","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        \"\"\""},{"line_number":259,"context_line":"        elevated \u003d context.elevated()"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"        volume_type \u003d resource_type \u003d request_spec.get(\"volume_type\")"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        config_options \u003d self._get_configuration_options()"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_35e7d2ad","line":261,"range":{"start_line":261,"start_character":0,"end_line":261,"end_character":69},"in_reply_to":"7aa08908_55b8ac2a","updated":"2016-06-16 10:31:12.000000000","message":"If I\u0027m getting everything correctly [1] is making sure we\u0027ll return None if volume_type is not set.\n\nhttps://github.com/openstack/cinder/blob/master/cinder/objects/base.py#L188-L195","commit_id":"81c72db7206a26f387f85049d63720a63bd6c706"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"73481f9f0e89f67872bf29e8fe23f199a3e45a4c","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        self._populate_retry(filter_properties,"},{"line_number":268,"context_line":"                             request_spec[\u0027volume_properties\u0027])"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if resource_type is None:"},{"line_number":271,"context_line":"            msg \u003d _(\"volume_type cannot be None\")"},{"line_number":272,"context_line":"            raise exception.InvalidVolumeType(reason\u003dmsg)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_358c007f","line":270,"range":{"start_line":270,"start_character":0,"end_line":270,"end_character":33},"updated":"2016-06-16 04:12:57.000000000","message":"Can this be since you\u0027re just using a request_spec.get(\"volume_type\") at 261?\n\nSeems like maybe that should have a default\u003dNone if you think we may hit this case no?","commit_id":"81c72db7206a26f387f85049d63720a63bd6c706"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fdbf2b3957c1f1fb27c402360afce1655151359b","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        self._populate_retry(filter_properties,"},{"line_number":268,"context_line":"                             request_spec[\u0027volume_properties\u0027])"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        if resource_type is None:"},{"line_number":271,"context_line":"            msg \u003d _(\"volume_type cannot be None\")"},{"line_number":272,"context_line":"            raise exception.InvalidVolumeType(reason\u003dmsg)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_55fc1e3f","line":270,"range":{"start_line":270,"start_character":0,"end_line":270,"end_character":33},"in_reply_to":"7aa08908_358c007f","updated":"2016-06-16 10:31:12.000000000","message":"See previous comment.","commit_id":"81c72db7206a26f387f85049d63720a63bd6c706"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4ec8320a0822211365b537f33cb7ed3fb7c4acd6","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        elevated \u003d context.elevated()"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"        volume_properties \u003d request_spec[\u0027volume_properties\u0027]"},{"line_number":261,"context_line":"        # Since Cinder is using mixed filters from Oslo and it\u0027s own, which"},{"line_number":262,"context_line":"        # takes \u0027resource_XX\u0027 and \u0027volume_XX\u0027 as input respectively, copying"},{"line_number":263,"context_line":"        # \u0027volume_XX\u0027 to \u0027resource_XX\u0027 will make both filters happy."},{"line_number":264,"context_line":"        resource_properties \u003d volume_properties.copy()"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a9d85d2_c494dbe3","side":"PARENT","line":261,"updated":"2016-06-21 07:51:36.000000000","message":"This comment here shouldn\u0027t be removed.","commit_id":"ccd410b0aad258be5846882be71283ef0dec3914"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"4ec8320a0822211365b537f33cb7ed3fb7c4acd6","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            msg \u003d _(\"volume_type cannot be None\")"},{"line_number":272,"context_line":"            raise exception.InvalidVolumeType(reason\u003dmsg)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        # NOTE(dulek): This seems wrong to add request_spec to"},{"line_number":275,"context_line":"        # filter_properties, but anyway we need to make sure that we converted"},{"line_number":276,"context_line":"        # it to a dictionary, as filter_properties is still a dictionary."},{"line_number":277,"context_line":"        request_spec_dict \u003d jsonutils.to_primitive(request_spec)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5a9d85d2_a48f0fcb","line":274,"updated":"2016-06-21 07:51:36.000000000","message":"some filters actuall use some information in request_spec.","commit_id":"621f673b40113ac3dab2e1d66e14d68b71197c55"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"0562802e8263c22014a2c50f4dc9bd032e47cff0","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        # Since Cinder is using mixed filters from Oslo and it\u0027s own, which"},{"line_number":262,"context_line":"        # takes \u0027resource_XX\u0027 and \u0027volume_XX\u0027 as input respectively, copying"},{"line_number":263,"context_line":"        # \u0027volume_XX\u0027 to \u0027resource_XX\u0027 will make both filters happy."},{"line_number":264,"context_line":"        volume_type \u003d resource_type \u003d request_spec.get(\"volume_type\")"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        config_options \u003d self._get_configuration_options()"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"bacf61ea_b839bed9","line":264,"range":{"start_line":264,"start_character":22,"end_line":264,"end_character":35},"updated":"2016-07-29 19:16:02.000000000","message":"Why not use volume_type whenever resource_type is required? It may be confusing to use two variables pointing at the same thing in one scope.","commit_id":"69a844c286123b3d56d808fc3fc2e036ad2cfebc"}],"cinder/scheduler/manager.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"73481f9f0e89f67872bf29e8fe23f199a3e45a4c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"class SchedulerManager(manager.Manager):"},{"line_number":57,"context_line":"    \"\"\"Chooses a host to create volumes.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    RPC_API_VERSION \u003d \u00272.1\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_d5f13c03","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":27},"updated":"2016-06-16 04:12:57.000000000","message":"Darn it!!  Now I\u0027ll need to update my patches as you\u0027re stealing my version number :)","commit_id":"81c72db7206a26f387f85049d63720a63bd6c706"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"fdbf2b3957c1f1fb27c402360afce1655151359b","unresolved":false,"context_lines":[{"line_number":56,"context_line":"class SchedulerManager(manager.Manager):"},{"line_number":57,"context_line":"    \"\"\"Chooses a host to create volumes.\"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    RPC_API_VERSION \u003d \u00272.1\u0027"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    target \u003d messaging.Target(version\u003dRPC_API_VERSION)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"7aa08908_75767ad9","line":59,"range":{"start_line":59,"start_character":4,"end_line":59,"end_character":27},"in_reply_to":"7aa08908_d5f13c03","updated":"2016-06-16 10:31:12.000000000","message":"You can always -2 this patch until yours gets in. :D\n\nWe have this problem with RPC versions, microversions, DB migrations and object versions. I don\u0027t think there\u0027s an obvious solution as other projects suffer from same problems.","commit_id":"81c72db7206a26f387f85049d63720a63bd6c706"}],"cinder/scheduler/rpcapi.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"79bfe87ae19586e8685350dc904ef94ca326115d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                    \u0027volume\u0027: volume,"},{"line_number":88,"context_line":"                    }"},{"line_number":89,"context_line":"        version \u003d \u00271.11\u0027"},{"line_number":90,"context_line":"        if not self.client.can_send_version(\u00271.11\u0027):"},{"line_number":91,"context_line":"            # Send request_spec as dict"},{"line_number":92,"context_line":"            version \u003d \u00271.9\u0027"},{"line_number":93,"context_line":"            msg_args[\u0027request_spec\u0027] \u003d jsonutils.to_primitive(request_spec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_41686eb9","line":90,"updated":"2015-11-18 16:03:09.000000000","message":"I wonder if we need to handle each change to a version or just the highest version for a release?  If there are lots of changes inside a release, this if might get long and messy.","commit_id":"2fc8961bd773143a54e0ecda5c2c66311d0eae30"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"25257a0f75ef44e2ab3cd76a7077dba436a57c13","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                    \u0027volume\u0027: volume,"},{"line_number":88,"context_line":"                    }"},{"line_number":89,"context_line":"        version \u003d \u00271.11\u0027"},{"line_number":90,"context_line":"        if not self.client.can_send_version(\u00271.11\u0027):"},{"line_number":91,"context_line":"            # Send request_spec as dict"},{"line_number":92,"context_line":"            version \u003d \u00271.9\u0027"},{"line_number":93,"context_line":"            msg_args[\u0027request_spec\u0027] \u003d jsonutils.to_primitive(request_spec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_a8a816dc","line":90,"in_reply_to":"ba8a016a_2123ea57","updated":"2015-11-18 18:04:24.000000000","message":"Looks like each change is handled on a per change basis and not on a per release basis - https://github.com/openstack/nova/blob/master/nova/conductor/rpcapi.py\n\nIf there a lots of changes within this release for rpcapi.py, then there will be lots of these if statements.\n\nI think we should do it on a per release basis, since that is when versioning matters.  But we can do it this way and clean it up near the end of the release too.","commit_id":"2fc8961bd773143a54e0ecda5c2c66311d0eae30"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6d1874b8dfa96077a9e533d7b27864289ec7a03b","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                    \u0027volume\u0027: volume,"},{"line_number":88,"context_line":"                    }"},{"line_number":89,"context_line":"        version \u003d \u00271.11\u0027"},{"line_number":90,"context_line":"        if not self.client.can_send_version(\u00271.11\u0027):"},{"line_number":91,"context_line":"            # Send request_spec as dict"},{"line_number":92,"context_line":"            version \u003d \u00271.9\u0027"},{"line_number":93,"context_line":"            msg_args[\u0027request_spec\u0027] \u003d jsonutils.to_primitive(request_spec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_2123ea57","line":90,"in_reply_to":"ba8a016a_41686eb9","updated":"2015-11-18 16:06:33.000000000","message":"It will be a long list for Mitaka… Anyway - there are people running trunk - for example Rackspace. They don\u0027t care about major releases. What\u0027s Nova\u0027s approach on that?","commit_id":"2fc8961bd773143a54e0ecda5c2c66311d0eae30"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9e8d78562d4b7f263d07b9aff55aae2aefe00e5f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                    \u0027volume\u0027: volume,"},{"line_number":88,"context_line":"                    }"},{"line_number":89,"context_line":"        version \u003d \u00271.11\u0027"},{"line_number":90,"context_line":"        if not self.client.can_send_version(\u00271.11\u0027):"},{"line_number":91,"context_line":"            # Send request_spec as dict"},{"line_number":92,"context_line":"            version \u003d \u00271.9\u0027"},{"line_number":93,"context_line":"            msg_args[\u0027request_spec\u0027] \u003d jsonutils.to_primitive(request_spec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_3e7a1cbe","line":90,"in_reply_to":"ba8a016a_a8a816dc","updated":"2015-11-18 18:49:34.000000000","message":"Okay, following Nova\u0027s guidelines seems best to me until we gain enough experience with this upgrades stuff.","commit_id":"2fc8961bd773143a54e0ecda5c2c66311d0eae30"}],"cinder/tests/unit/test_volume_rpcapi.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"9e2a25ef9d5ec2e27fe54eaf88000157718443ba","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        self._test_volume_api(\u0027delete_cgsnapshot\u0027, rpc_method\u003d\u0027cast\u0027,"},{"line_number":246,"context_line":"                              cgsnapshot\u003dself.fake_cgsnap, version\u003d\u00272.0\u0027)"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @mock.patch(\u0027oslo_messaging.RPCClient.can_send_version\u0027, return_value\u003dTrue)"},{"line_number":249,"context_line":"    def test_create_volume(self, can_send_version):"},{"line_number":250,"context_line":"        self._test_volume_api(\u0027create_volume\u0027,"},{"line_number":251,"context_line":"                              rpc_method\u003d\u0027cast\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"bacf61ea_f4445d1c","line":248,"updated":"2016-08-02 15:34:50.000000000","message":"You could use ddt and merge this and following tests into one, as is done in L#427.\nThat might be less explicit, so either way seems fine.","commit_id":"294425d347bdbd8e6df1737e320909fa8a15f8fb"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"14c59558ebfa54456f0e08db50392fedb83f8ddc","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"    def execute(self, context, **kwargs):"},{"line_number":765,"context_line":"        scheduler_hints \u003d kwargs.pop(\u0027scheduler_hints\u0027, None)"},{"line_number":766,"context_line":"        db_vt \u003d kwargs.pop(\u0027volume_type\u0027)"},{"line_number":767,"context_line":"        kwargs[\u0027volume_type\u0027] \u003d objects.VolumeType()"},{"line_number":768,"context_line":"        if db_vt:"},{"line_number":769,"context_line":"            objects.VolumeType()._from_db_object(context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_60a248fe","line":766,"updated":"2015-12-11 16:18:21.000000000","message":"Do we actually want to set \u0027volume_type\u0027 to a VolumeType object even if \u0027volume_type\u0027 is not present?\n\nDoing this instead of keeping request_spec.volume_type \u003d None would cause it to be truthee.","commit_id":"8f42461a043f7fcd4f5726e2c676afb4c77d2f70"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"bfcae1f78a7556b65359f7c09ecaf838b875cc3f","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"    def execute(self, context, **kwargs):"},{"line_number":765,"context_line":"        scheduler_hints \u003d kwargs.pop(\u0027scheduler_hints\u0027, None)"},{"line_number":766,"context_line":"        db_vt \u003d kwargs.pop(\u0027volume_type\u0027)"},{"line_number":767,"context_line":"        kwargs[\u0027volume_type\u0027] \u003d objects.VolumeType()"},{"line_number":768,"context_line":"        if db_vt:"},{"line_number":769,"context_line":"            objects.VolumeType()._from_db_object(context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_1997013b","line":766,"in_reply_to":"7a740942_60a248fe","updated":"2015-12-14 13:36:10.000000000","message":"Done","commit_id":"8f42461a043f7fcd4f5726e2c676afb4c77d2f70"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"20c8a35917625e97167f1320b74495b0bce24218","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        # from just one correct place and leave just compatibility code."},{"line_number":513,"context_line":"        #"},{"line_number":514,"context_line":"        # Right now - let\u0027s move it to versioned objects to be able to make"},{"line_number":515,"context_line":"        # non-backward compatible changes."},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"        volume_properties \u003d objects.VolumeProperties(**volume_properties)"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"bacf61ea_023a9ee7","line":515,"range":{"start_line":515,"start_character":0,"end_line":515,"end_character":42},"updated":"2016-08-02 13:43:43.000000000","message":"Ahh.. and here\u0027s the answer to my earlier question about the properties object :)\n\nI wish there was a way to get this info a bit more clearly or I guess cleanly.  I guess that\u0027s what you\u0027re commenting about though and moving things at least one step closer to.\n\nI guess a lot of this duplicate is sort of necessary for compat and like you said we get rid of a bunch of cruft in O","commit_id":"294425d347bdbd8e6df1737e320909fa8a15f8fb"}],"cinder/volume/flows/manager/create_volume.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"71a084eeeb2d314f6970607dd3278d28e29cab36","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                \u0027source_volstatus\u0027: source_volume_ref[\u0027status\u0027],"},{"line_number":282,"context_line":"                \u0027type\u0027: \u0027source_vol\u0027,"},{"line_number":283,"context_line":"            })"},{"line_number":284,"context_line":"        elif request_spec.get(\u0027source_replicaid\u0027, None):"},{"line_number":285,"context_line":"            # We are making a clone based on the replica."},{"line_number":286,"context_line":"            #"},{"line_number":287,"context_line":"            # NOTE(harlowja): This will likely fail if the replica"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_d05f43e3","line":284,"updated":"2015-12-02 17:33:46.000000000","message":"Not sure why you have to specify None here.  By default it is None - https://docs.python.org/3/library/stdtypes.html#dict","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9afdccb9e006aa1318de5fd0084ca17eac2b2498","unresolved":false,"context_lines":[{"line_number":281,"context_line":"                \u0027source_volstatus\u0027: source_volume_ref[\u0027status\u0027],"},{"line_number":282,"context_line":"                \u0027type\u0027: \u0027source_vol\u0027,"},{"line_number":283,"context_line":"            })"},{"line_number":284,"context_line":"        elif request_spec.get(\u0027source_replicaid\u0027, None):"},{"line_number":285,"context_line":"            # We are making a clone based on the replica."},{"line_number":286,"context_line":"            #"},{"line_number":287,"context_line":"            # NOTE(harlowja): This will likely fail if the replica"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_417e22b0","line":284,"in_reply_to":"9a8ffd7b_d05f43e3","updated":"2015-12-02 20:09:13.000000000","message":"Answered on filter_scheduler.py","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"14c59558ebfa54456f0e08db50392fedb83f8ddc","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                # may or may not be sketchy to do??"},{"line_number":281,"context_line":"                \u0027source_volstatus\u0027: source_volume_ref[\u0027status\u0027],"},{"line_number":282,"context_line":"                \u0027type\u0027: \u0027source_vol\u0027,"},{"line_number":283,"context_line":"            })"},{"line_number":284,"context_line":"        elif request_spec.get(\u0027source_replicaid\u0027, None):"},{"line_number":285,"context_line":"            # We are making a clone based on the replica."},{"line_number":286,"context_line":"            #"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_e08dd87c","line":283,"updated":"2015-12-11 16:18:21.000000000","message":"Does this change functionality?","commit_id":"8f42461a043f7fcd4f5726e2c676afb4c77d2f70"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"bfcae1f78a7556b65359f7c09ecaf838b875cc3f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"                # may or may not be sketchy to do??"},{"line_number":281,"context_line":"                \u0027source_volstatus\u0027: source_volume_ref[\u0027status\u0027],"},{"line_number":282,"context_line":"                \u0027type\u0027: \u0027source_vol\u0027,"},{"line_number":283,"context_line":"            })"},{"line_number":284,"context_line":"        elif request_spec.get(\u0027source_replicaid\u0027, None):"},{"line_number":285,"context_line":"            # We are making a clone based on the replica."},{"line_number":286,"context_line":"            #"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_cb8e7c78","line":283,"in_reply_to":"7a740942_e08dd87c","updated":"2015-12-14 13:36:10.000000000","message":"It does… We\u0027re implementing CinderObjectDictCompat in a way that makes get method fail when field doesn\u0027t exist on the object if default value isn\u0027t provided.","commit_id":"8f42461a043f7fcd4f5726e2c676afb4c77d2f70"}],"cinder/volume/manager.py":[{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"71a084eeeb2d314f6970607dd3278d28e29cab36","unresolved":false,"context_lines":[{"line_number":525,"context_line":"            LOG.exception(msg, resource\u003d{\u0027type\u0027: \u0027volume\u0027, \u0027id\u0027: volume.id})"},{"line_number":526,"context_line":"            raise exception.CinderException(msg)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        snapshot_id \u003d request_spec.get(\u0027snapshot_id\u0027, None)"},{"line_number":529,"context_line":"        source_volid \u003d request_spec.get(\u0027source_volid\u0027, None)"},{"line_number":530,"context_line":"        source_replicaid \u003d request_spec.get(\u0027source_replicaid\u0027, None)"},{"line_number":531,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_900c5bed","line":528,"updated":"2015-12-02 17:33:46.000000000","message":"Same comments as before.","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"9afdccb9e006aa1318de5fd0084ca17eac2b2498","unresolved":false,"context_lines":[{"line_number":525,"context_line":"            LOG.exception(msg, resource\u003d{\u0027type\u0027: \u0027volume\u0027, \u0027id\u0027: volume.id})"},{"line_number":526,"context_line":"            raise exception.CinderException(msg)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        snapshot_id \u003d request_spec.get(\u0027snapshot_id\u0027, None)"},{"line_number":529,"context_line":"        source_volid \u003d request_spec.get(\u0027source_volid\u0027, None)"},{"line_number":530,"context_line":"        source_replicaid \u003d request_spec.get(\u0027source_replicaid\u0027, None)"},{"line_number":531,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_c140d261","line":528,"in_reply_to":"9a8ffd7b_900c5bed","updated":"2015-12-02 20:09:13.000000000","message":"Answered on filter_scheduler.py","commit_id":"c3cecbbd3a1cd0ec3f73f804a8508b12d1d14380"}],"cinder/volume/rpcapi.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"20c8a35917625e97167f1320b74495b0bce24218","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027request_spec\u0027: request_spec,"},{"line_number":161,"context_line":"                    \u0027filter_properties\u0027: filter_properties,"},{"line_number":162,"context_line":"                    \u0027allow_reschedule\u0027: allow_reschedule,"},{"line_number":163,"context_line":"                    \u0027volume\u0027: volume,"},{"line_number":164,"context_line":"                    }"},{"line_number":165,"context_line":"        version \u003d \u00272.4\u0027"},{"line_number":166,"context_line":"        if not self.client.can_send_version(\u00272.4\u0027):"}],"source_content_type":"text/x-python","patch_set":43,"id":"bacf61ea_3d40a335","line":163,"range":{"start_line":163,"start_character":20,"end_line":163,"end_character":36},"updated":"2016-08-02 13:43:43.000000000","message":"Not related to your patch, but we should stop doing this IMO.  Passing both the volume_id and the volume ref seems sort of repetitive","commit_id":"294425d347bdbd8e6df1737e320909fa8a15f8fb"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4093d99d85c51a0d123e43ef7af1f192e8ec71a0","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        msg_args \u003d {\u0027volume_id\u0027: volume.id, \u0027request_spec\u0027: request_spec,"},{"line_number":161,"context_line":"                    \u0027filter_properties\u0027: filter_properties,"},{"line_number":162,"context_line":"                    \u0027allow_reschedule\u0027: allow_reschedule,"},{"line_number":163,"context_line":"                    \u0027volume\u0027: volume,"},{"line_number":164,"context_line":"                    }"},{"line_number":165,"context_line":"        version \u003d \u00272.4\u0027"},{"line_number":166,"context_line":"        if not self.client.can_send_version(\u00272.4\u0027):"}],"source_content_type":"text/x-python","patch_set":43,"id":"bacf61ea_dd0fc786","line":163,"range":{"start_line":163,"start_character":20,"end_line":163,"end_character":36},"in_reply_to":"bacf61ea_3d40a335","updated":"2016-08-02 13:51:55.000000000","message":"Suuure, I\u0027ve missed a chance to change that in late Mitaka (RPC major version bump). :(","commit_id":"294425d347bdbd8e6df1737e320909fa8a15f8fb"}]}
