)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3cdfa12f37ffe1771a55057c2e6f1f350446dbf7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     lyanchih \u003clyan.h@inwinstack.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-14 19:22:03 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Creating instance fail when inject ssh key in cells mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The conductor service of compute host will try to found ssh key in child"},{"line_number":10,"context_line":"cells when creating instance. But the ssh key was only stored at parent"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a41bdd9_50e588d9","line":7,"updated":"2015-07-14 20:08:03.000000000","message":"Can we enable the test_create_specify_keypair test with this change?\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/devstack/tempest-dsvm-cells-rc#n61","commit_id":"f7d0da165d8c5e326f2ded607147b6d2fb755067"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f359b1ba41dd26d1b6031d261d21090d9caa67ff","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Creating instance fail when inject ssh key in cells mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The conductor service of compute host will try to found ssh key in child"},{"line_number":10,"context_line":"cells when creating instance. But the ssh key was only stored at parent"},{"line_number":11,"context_line":"api cells. Therefore the conductor service will throw ssh key not found"},{"line_number":12,"context_line":"exception."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"da20952f_3664d620","line":9,"updated":"2015-08-27 18:25:57.000000000","message":"nit: s/found/find/","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"884f9bb6f1d4b087e8257e5be6f8156b09a5ea7c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Creating instance fail when inject ssh key in cells mode"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The conductor service of compute host will try to found ssh key in child"},{"line_number":10,"context_line":"cells when creating instance. But the ssh key was only stored at parent"},{"line_number":11,"context_line":"api cells. Therefore the conductor service will throw ssh key not found"},{"line_number":12,"context_line":"exception."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"da20952f_7b16a4f2","line":9,"in_reply_to":"da20952f_3664d620","updated":"2015-08-28 05:37:09.000000000","message":"Done","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"}],"devstack/tempest-dsvm-cells-rc":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"efda35579d7bffcf365fb32efa14e7285e74bbf6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestJSON\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":59,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers_negative\\.ServersNegativeTestJSON\\.test_shelve_shelved_server*)\""},{"line_number":60,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestManualDisk\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":61,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers\\.ServersTestJSON\\.test_create_specify_keypair*)\""},{"line_number":62,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_virtual_interfaces\\.VirtualInterfacesTestJSON\\.test_list_virtual_interfaces*)\""},{"line_number":63,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.test_networks\\.NetworksTestJSON\\.test_list_networks*)\""},{"line_number":64,"context_line":"r\u003d\"$r|(?:tempest\\.scenario\\.test_minimum_basic\\.TestMinimumBasicScenario\\.test_minimum_basic_scenario*)\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3a50d1a3_9c09d686","side":"PARENT","line":61,"updated":"2015-07-22 17:57:19.000000000","message":"I would prefer to have this change in a separate patch that depends on this one.","commit_id":"38f5c4998a7a7908bf37bce651d7b15d9491754d"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a53c1b0bbf6289b10970c5ab2b68b9f3b5b19946","unresolved":false,"context_lines":[{"line_number":58,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestJSON\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":59,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers_negative\\.ServersNegativeTestJSON\\.test_shelve_shelved_server*)\""},{"line_number":60,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestManualDisk\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":61,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers\\.ServersTestJSON\\.test_create_specify_keypair*)\""},{"line_number":62,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_virtual_interfaces\\.VirtualInterfacesTestJSON\\.test_list_virtual_interfaces*)\""},{"line_number":63,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.test_networks\\.NetworksTestJSON\\.test_list_networks*)\""},{"line_number":64,"context_line":"r\u003d\"$r|(?:tempest\\.scenario\\.test_minimum_basic\\.TestMinimumBasicScenario\\.test_minimum_basic_scenario*)\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3a50d1a3_79b37c4d","side":"PARENT","line":61,"in_reply_to":"3a50d1a3_1d5a6bf2","updated":"2015-07-23 14:30:03.000000000","message":"It\u0027s not necessary, but I think it would be better to do that.  If for some reason the keypair test starts failing shortly after this merges we\u0027re going to revert this changed line here.  If this line is in this patch then the whole patch gets reverted rather than just this change to enable the test.","commit_id":"38f5c4998a7a7908bf37bce651d7b15d9491754d"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"bd75828412d3f1be087bad79996acb2c35c17810","unresolved":false,"context_lines":[{"line_number":58,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestJSON\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":59,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers_negative\\.ServersNegativeTestJSON\\.test_shelve_shelved_server*)\""},{"line_number":60,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestManualDisk\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":61,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers\\.ServersTestJSON\\.test_create_specify_keypair*)\""},{"line_number":62,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_virtual_interfaces\\.VirtualInterfacesTestJSON\\.test_list_virtual_interfaces*)\""},{"line_number":63,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.test_networks\\.NetworksTestJSON\\.test_list_networks*)\""},{"line_number":64,"context_line":"r\u003d\"$r|(?:tempest\\.scenario\\.test_minimum_basic\\.TestMinimumBasicScenario\\.test_minimum_basic_scenario*)\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3a50d1a3_f25a252a","side":"PARENT","line":61,"in_reply_to":"3a50d1a3_79b37c4d","updated":"2015-07-24 12:17:59.000000000","message":"Oh!! If you concern with test failure revert. I agree that. I don\u0027t think that, lol. Thx.","commit_id":"38f5c4998a7a7908bf37bce651d7b15d9491754d"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"aab527c1ae3c6a7093255e8db0e2e8d735653d35","unresolved":false,"context_lines":[{"line_number":58,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestJSON\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":59,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers_negative\\.ServersNegativeTestJSON\\.test_shelve_shelved_server*)\""},{"line_number":60,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_create_server\\.ServersTestManualDisk\\.test_create_server_with_scheduler_hint_group*)\""},{"line_number":61,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_servers\\.ServersTestJSON\\.test_create_specify_keypair*)\""},{"line_number":62,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.servers\\.test_virtual_interfaces\\.VirtualInterfacesTestJSON\\.test_list_virtual_interfaces*)\""},{"line_number":63,"context_line":"r\u003d\"$r|(?:tempest\\.api\\.compute\\.test_networks\\.NetworksTestJSON\\.test_list_networks*)\""},{"line_number":64,"context_line":"r\u003d\"$r|(?:tempest\\.scenario\\.test_minimum_basic\\.TestMinimumBasicScenario\\.test_minimum_basic_scenario*)\""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"3a50d1a3_1d5a6bf2","side":"PARENT","line":61,"in_reply_to":"3a50d1a3_9c09d686","updated":"2015-07-23 12:53:34.000000000","message":"It looks good.\nBut...Does it necessary?\nThere is only one test fail was fixed in this review.","commit_id":"38f5c4998a7a7908bf37bce651d7b15d9491754d"}],"nova/cells/manager.py":[{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"40168dba6363e8b5b467a2d0e07e338f8ec91d5c","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    Scheduling requests get passed to the scheduler class."},{"line_number":77,"context_line":"    \"\"\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    target \u003d oslo_messaging.Target(version\u003d\u00271.36\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_fbedc4ef","line":78,"updated":"2015-08-19 08:21:11.000000000","message":"Is the version change no more needed?","commit_id":"5b96f155226fc504cf016d2977c72695aeb1c69a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f359b1ba41dd26d1b6031d261d21090d9caa67ff","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":592,"context_line":"            return None"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        return keypairs[0]"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_6a51fe0d","line":593,"updated":"2015-08-27 18:25:57.000000000","message":"Should a warning be logged if there is more than one keypair for the user and key name in the parent cell?  Can they have different values?","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cc8b0b3bfae3a73efb705db7fa40567427ae2ce7","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":592,"context_line":"            return None"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        return keypairs[0]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da20952f_4385ca04","line":593,"updated":"2015-08-28 19:13:50.000000000","message":"Asking again:\n\nShould a warning be logged if there is more than one keypair for the user and key name in the parent cell? Can they have different values?","commit_id":"fa9442a227b4646d61f6c5e1f2e5fd858e7f750e"}],"nova/cells/messaging.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5613cd2a214cd6b7a7af30e34f29cce703e8a48","unresolved":false,"context_lines":[{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"        try:"},{"line_number":1205,"context_line":"            return objects.KeyPair.get_by_name(message.ctxt, user_id, name)"},{"line_number":1206,"context_line":"        except exception.KeypairNotFound:"},{"line_number":1207,"context_line":"            pass"},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_187c141e","line":1206,"updated":"2015-07-14 15:58:54.000000000","message":"I don\u0027t see a unit test for this case.","commit_id":"764805fb16d1eeaa7e7fba265dfc8f64b9a2f240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5613cd2a214cd6b7a7af30e34f29cce703e8a48","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"                cells_name.append(response.cell_name)"},{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":"        elif len(keypairs) \u003e 1:"},{"line_number":1818,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1819,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_d871cc45","line":1816,"updated":"2015-07-14 15:58:54.000000000","message":"I don\u0027t see a test for this case.","commit_id":"764805fb16d1eeaa7e7fba265dfc8f64b9a2f240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5613cd2a214cd6b7a7af30e34f29cce703e8a48","unresolved":false,"context_lines":[{"line_number":1814,"context_line":""},{"line_number":1815,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":"        elif len(keypairs) \u003e 1:"},{"line_number":1818,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1819,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1820,"context_line":"                         \"but we return first cell\u0027s keypair\"),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_b853a8e1","line":1817,"updated":"2015-07-14 15:58:54.000000000","message":"nit: you don\u0027t need the elif since you\u0027re returning None right above this.","commit_id":"764805fb16d1eeaa7e7fba265dfc8f64b9a2f240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5613cd2a214cd6b7a7af30e34f29cce703e8a48","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":"        elif len(keypairs) \u003e 1:"},{"line_number":1818,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1819,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1820,"context_line":"                         \"but we return first cell\u0027s keypair\"),"},{"line_number":1821,"context_line":"                     {\u0027size\u0027: len(keypairs), \u0027cells_name\u0027: cells_name})"},{"line_number":1822,"context_line":"        return keypairs[0]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_d8bf8ca8","line":1819,"updated":"2015-07-14 15:58:54.000000000","message":"I don\u0027t see a test for the multiple responses case.","commit_id":"764805fb16d1eeaa7e7fba265dfc8f64b9a2f240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3f54184111510b551423dcb2ed0088f936a06fc","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"        cells_name \u003d \", \".join(cells_name)"},{"line_number":1819,"context_line":"        LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1820,"context_line":"                     \"but we return first cell\u0027s keypair\"),"},{"line_number":1821,"context_line":"                 {\u0027size\u0027: len(keypairs), \u0027cells_name\u0027: cells_name})"},{"line_number":1822,"context_line":"        return keypairs[0]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_50db484f","line":1819,"updated":"2015-07-14 20:02:23.000000000","message":"This only makes sense to log if you have:\n\nif len(keypairs) \u003e 1:\n\nSo you should still have that in here.\n\nAlso, do we have a unit test for the multiple response case?","commit_id":"f7d0da165d8c5e326f2ded607147b6d2fb755067"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"efda35579d7bffcf365fb32efa14e7285e74bbf6","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"        if len(keypairs) \u003e 1:"},{"line_number":1819,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1820,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1821,"context_line":"                         \"but we return first cell\u0027s keypair\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_8be3cba3","line":1818,"updated":"2015-07-22 17:57:19.000000000","message":"This should realistically just be 1 right?  While it\u0027s theoretically possible to run with multiple parents I think we should just assume a single parent and that we either get 0 or 1 keypair.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a53c1b0bbf6289b10970c5ab2b68b9f3b5b19946","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"        if len(keypairs) \u003e 1:"},{"line_number":1819,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1820,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1821,"context_line":"                         \"but we return first cell\u0027s keypair\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_5e9226f7","line":1818,"in_reply_to":"3a50d1a3_2285c6cd","updated":"2015-07-23 14:30:03.000000000","message":"That\u0027s unlikely to actually happen.  But mainly I didn\u0027t feel like the logging is necessary, but it\u0027s fine.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"bd75828412d3f1be087bad79996acb2c35c17810","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"        if len(keypairs) \u003e 1:"},{"line_number":1819,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1820,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1821,"context_line":"                         \"but we return first cell\u0027s keypair\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_a62f6ef5","line":1818,"in_reply_to":"3a50d1a3_5e9226f7","updated":"2015-07-24 12:17:59.000000000","message":"I also think it wouldn\u0027t get multiple keypair at once. But just add for notify when it is really happen.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"aab527c1ae3c6a7093255e8db0e2e8d735653d35","unresolved":false,"context_lines":[{"line_number":1815,"context_line":"        if len(keypairs) \u003d\u003d 0:"},{"line_number":1816,"context_line":"            return None"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":"        if len(keypairs) \u003e 1:"},{"line_number":1819,"context_line":"            cells_name \u003d \", \".join(cells_name)"},{"line_number":1820,"context_line":"            LOG.info(_LI(\"Found %(size)s keypairs at %(cells_name)s, \""},{"line_number":1821,"context_line":"                         \"but we return first cell\u0027s keypair\"),"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_2285c6cd","line":1818,"in_reply_to":"3a50d1a3_8be3cba3","updated":"2015-07-23 12:53:34.000000000","message":"It will boardcase up to every parent cells. It is possible that there are same name keypair in parent cells. Therefore we can\u0027t assume only return one keypair.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"b13ff64c3eaaf76d7ab64adc8a76141ab9a2a882","unresolved":false,"context_lines":[{"line_number":1197,"context_line":"        context \u003d message.ctxt"},{"line_number":1198,"context_line":"        return self.compute_api.get_migrations(context, filters)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    def get_keypair_by_name(self, message, user_id, name):"},{"line_number":1201,"context_line":"        if not self._at_the_top():"},{"line_number":1202,"context_line":"            return"},{"line_number":1203,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_40295536","line":1200,"updated":"2015-07-27 18:29:35.000000000","message":"As i see almost all methods (except one only) intended for running at the top level have \u0027_at_top\u0027 suffix. What is a reason to disregard this local rule?","commit_id":"0b8065f80b287981dba2d282398a1823b77ebf05"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"ca76a073d02bdab83ed87d94b5da2c98da0902a0","unresolved":false,"context_lines":[{"line_number":1197,"context_line":"        context \u003d message.ctxt"},{"line_number":1198,"context_line":"        return self.compute_api.get_migrations(context, filters)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    def get_keypair_by_name(self, message, user_id, name):"},{"line_number":1201,"context_line":"        if not self._at_the_top():"},{"line_number":1202,"context_line":"            return"},{"line_number":1203,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_5d284c33","line":1200,"in_reply_to":"3a50d1a3_40295536","updated":"2015-07-28 02:29:44.000000000","message":"Thanks for your notify. I don\u0027t notice the rule.","commit_id":"0b8065f80b287981dba2d282398a1823b77ebf05"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"b13ff64c3eaaf76d7ab64adc8a76141ab9a2a882","unresolved":false,"context_lines":[{"line_number":1807,"context_line":"        responses \u003d message.process()"},{"line_number":1808,"context_line":"        keypairs \u003d []"},{"line_number":1809,"context_line":"        cells_name \u003d []"},{"line_number":1810,"context_line":"        for response in responses:"},{"line_number":1811,"context_line":"            if response.value is not None:"},{"line_number":1812,"context_line":"                keypairs.append(response.value)"},{"line_number":1813,"context_line":"                cells_name.append(response.cell_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_e06d0133","line":1810,"updated":"2015-07-27 18:29:35.000000000","message":"Why not to process results in manager module? IIANM all other results are processed there.","commit_id":"0b8065f80b287981dba2d282398a1823b77ebf05"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"ca76a073d02bdab83ed87d94b5da2c98da0902a0","unresolved":false,"context_lines":[{"line_number":1807,"context_line":"        responses \u003d message.process()"},{"line_number":1808,"context_line":"        keypairs \u003d []"},{"line_number":1809,"context_line":"        cells_name \u003d []"},{"line_number":1810,"context_line":"        for response in responses:"},{"line_number":1811,"context_line":"            if response.value is not None:"},{"line_number":1812,"context_line":"                keypairs.append(response.value)"},{"line_number":1813,"context_line":"                cells_name.append(response.cell_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_9d69f4fb","line":1810,"in_reply_to":"3a50d1a3_e06d0133","updated":"2015-07-28 02:29:44.000000000","message":"I also had this concern.","commit_id":"0b8065f80b287981dba2d282398a1823b77ebf05"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f359b1ba41dd26d1b6031d261d21090d9caa67ff","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        context \u003d message.ctxt"},{"line_number":1212,"context_line":"        return self.compute_api.get_migrations(context, filters)"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    def get_keypair_at_top(self, message, user_id, name):"},{"line_number":1215,"context_line":"        if not self._at_the_top():"},{"line_number":1216,"context_line":"            return"},{"line_number":1217,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_6a9fbeb4","line":1214,"updated":"2015-08-27 18:25:57.000000000","message":"A docstring for the new public method would be appreciated.","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"884f9bb6f1d4b087e8257e5be6f8156b09a5ea7c","unresolved":false,"context_lines":[{"line_number":1211,"context_line":"        context \u003d message.ctxt"},{"line_number":1212,"context_line":"        return self.compute_api.get_migrations(context, filters)"},{"line_number":1213,"context_line":""},{"line_number":1214,"context_line":"    def get_keypair_at_top(self, message, user_id, name):"},{"line_number":1215,"context_line":"        if not self._at_the_top():"},{"line_number":1216,"context_line":"            return"},{"line_number":1217,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_bb5afc4e","line":1214,"in_reply_to":"da20952f_6a9fbeb4","updated":"2015-08-28 05:37:09.000000000","message":"done","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"}],"nova/cells/rpcapi.py":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"b2900b4e19dd0621964c24a5eded02c54f1b1ddb","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        existing methods in 1.x after that point should be done such that they"},{"line_number":115,"context_line":"        can handle the version_cap being set to 1.34."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        * 1.35 - Make instance_update_at_top, instance_destroy_at_top"},{"line_number":118,"context_line":"                 and instance_info_cache_update_at_top use instance objects"},{"line_number":119,"context_line":"    \u0027\u0027\u0027"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba3cc151_b9b26f4a","line":117,"updated":"2015-07-03 06:31:36.000000000","message":"please add your rpc version here and change your version number","commit_id":"2d9202178b8fed79191c882cd26b609b95fdd1a9"}],"nova/objects/keypair.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"efda35579d7bffcf365fb32efa14e7285e74bbf6","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @base.remotable_classmethod"},{"line_number":62,"context_line":"    def get_by_name(cls, context, user_id, name):"},{"line_number":63,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":64,"context_line":"        if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":65,"context_line":"            cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":66,"context_line":"            db_keypair \u003d cells_api.get_keypair_by_name(context, user_id, name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_9cd6afef","line":63,"updated":"2015-07-22 17:57:19.000000000","message":"Rather than adding logic here to make a cells rpc call it would be preferable to add conditional logic where this is called and failing, nova/api/metadata/base.py.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"5cfe6f225d92d23411178e626b5aa24465a7f5ea","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @base.remotable_classmethod"},{"line_number":62,"context_line":"    def get_by_name(cls, context, user_id, name):"},{"line_number":63,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":64,"context_line":"        if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":65,"context_line":"            cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":66,"context_line":"            db_keypair \u003d cells_api.get_keypair_by_name(context, user_id, name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_db2556c2","line":63,"in_reply_to":"3a50d1a3_26791e30","updated":"2015-07-27 18:04:23.000000000","message":"It\u0027s deprecated in the sense that we\u0027re trying to keep it as stable as possible and not add new features for it.  This could be considered more a bug fix than a new feature, but minimal effect would be good :)","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"a53c1b0bbf6289b10970c5ab2b68b9f3b5b19946","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @base.remotable_classmethod"},{"line_number":62,"context_line":"    def get_by_name(cls, context, user_id, name):"},{"line_number":63,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":64,"context_line":"        if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":65,"context_line":"            cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":66,"context_line":"            db_keypair \u003d cells_api.get_keypair_by_name(context, user_id, name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_be6b2a1d","line":63,"in_reply_to":"3a50d1a3_487fdbdf","updated":"2015-07-23 14:30:03.000000000","message":"Cells v1 is deprecated and not really accepting new features at this point.  I think it would be good to get this in so that keypairs work in conjunction with config drive, but we don\u0027t want to put this sort of cells logic in objects code.  It would be better to localize this to where the break is to minimize the execution paths that need to go through cells code.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"aab527c1ae3c6a7093255e8db0e2e8d735653d35","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @base.remotable_classmethod"},{"line_number":62,"context_line":"    def get_by_name(cls, context, user_id, name):"},{"line_number":63,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":64,"context_line":"        if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":65,"context_line":"            cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":66,"context_line":"            db_keypair \u003d cells_api.get_keypair_by_name(context, user_id, name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_487fdbdf","line":63,"in_reply_to":"3a50d1a3_9cd6afef","updated":"2015-07-23 12:53:34.000000000","message":"It can reduce one time of compute -\u003e conductor rpc cost.\nBut I don\u0027t agree we should move this condition to nova/api/metadata/base.py.\n\nBecause keypair should be uniform store at parent cells instead of any child cell. No matter where you ask db service to response keypair, it can response parent\u0027s keypair.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"bd75828412d3f1be087bad79996acb2c35c17810","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @base.remotable_classmethod"},{"line_number":62,"context_line":"    def get_by_name(cls, context, user_id, name):"},{"line_number":63,"context_line":"        cell_type \u003d cells_opts.get_cell_type()"},{"line_number":64,"context_line":"        if cell_type \u003d\u003d \u0027compute\u0027:"},{"line_number":65,"context_line":"            cells_api \u003d cells_rpcapi.CellsAPI()"},{"line_number":66,"context_line":"            db_keypair \u003d cells_api.get_keypair_by_name(context, user_id, name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a50d1a3_26791e30","line":63,"in_reply_to":"3a50d1a3_be6b2a1d","updated":"2015-07-24 12:17:59.000000000","message":"Cells v1 is deprecated? I only know it is in experimental! Yes, it should be minimum effect for deprecated feature. I will modify it and add test code, thx.","commit_id":"a518f29fbadfc3c0329b73d8a23f8e15f2995e8a"}],"nova/tests/unit/api/metadata/test_base.py":[{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"b13ff64c3eaaf76d7ab64adc8a76141ab9a2a882","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3a50d1a3_fb91329b","updated":"2015-07-27 18:29:35.000000000","message":"metadata api tests are placed in nova.tests.unit.test_metadata\n\nIt\u0027s not consistent. But it\u0027d be more inconsistent to split tests between two files in different folders, would not?","commit_id":"0b8065f80b287981dba2d282398a1823b77ebf05"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"ca76a073d02bdab83ed87d94b5da2c98da0902a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3a50d1a3_7def4887","in_reply_to":"3a50d1a3_fb91329b","updated":"2015-07-28 02:29:44.000000000","message":"Oh!!! Metadata api test file is there!!","commit_id":"0b8065f80b287981dba2d282398a1823b77ebf05"}],"nova/tests/unit/cells/test_cells_manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5613cd2a214cd6b7a7af30e34f29cce703e8a48","unresolved":false,"context_lines":[{"line_number":881,"context_line":""},{"line_number":882,"context_line":"    def test_get_keypair_by_name(self):"},{"line_number":883,"context_line":"        response \u003d \u0027fake_response\u0027"},{"line_number":884,"context_line":"        self.mox.StubOutWithMock(self.msg_runner, \u0027get_keypair_by_name\u0027)"},{"line_number":885,"context_line":"        self.msg_runner.get_keypair_by_name(self.ctxt, \u0027fake_user_id\u0027,"},{"line_number":886,"context_line":"                                            \u0027fake_name\u0027).AndReturn(response)"},{"line_number":887,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_98da644b","line":884,"updated":"2015-07-14 15:58:54.000000000","message":"We should use mock for new tests, not mox.","commit_id":"764805fb16d1eeaa7e7fba265dfc8f64b9a2f240"}],"nova/tests/unit/cells/test_cells_messaging.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e5613cd2a214cd6b7a7af30e34f29cce703e8a48","unresolved":false,"context_lines":[{"line_number":2076,"context_line":"        user_id \u003d \u0027fake_user_id\u0027"},{"line_number":2077,"context_line":"        name \u003d \u0027fake_name\u0027"},{"line_number":2078,"context_line":"        fake_keypair \u003d \u0027fake_keypair\u0027"},{"line_number":2079,"context_line":"        self.mox.StubOutWithMock(objects.KeyPair, \u0027get_by_name\u0027)"},{"line_number":2080,"context_line":"        objects.KeyPair.get_by_name(self.ctxt, user_id, name).AndReturn("},{"line_number":2081,"context_line":"            fake_keypair)"},{"line_number":2082,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_b8ef28e8","line":2079,"updated":"2015-07-14 15:58:54.000000000","message":"Use mock for new tests, not mox.","commit_id":"764805fb16d1eeaa7e7fba265dfc8f64b9a2f240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3f54184111510b551423dcb2ed0088f936a06fc","unresolved":false,"context_lines":[{"line_number":2083,"context_line":"                fake_get_by_name:"},{"line_number":2084,"context_line":"            fake_get_by_name.return_value \u003d keypair"},{"line_number":2085,"context_line":"            responses \u003d self.src_msg_runner.get_keypair_by_name(self.ctxt,"},{"line_number":2086,"context_line":"                                                               user_id, name)"},{"line_number":2087,"context_line":"            fake_get_by_name.assert_called_once_with(self.ctxt, user_id, name)"},{"line_number":2088,"context_line":"            self.assertEqual(keypair, responses)"},{"line_number":2089,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_b0f094ff","line":2086,"updated":"2015-07-14 20:02:23.000000000","message":"nit: align this with ctxt above if you respin","commit_id":"f7d0da165d8c5e326f2ded607147b6d2fb755067"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3f54184111510b551423dcb2ed0088f936a06fc","unresolved":false,"context_lines":[{"line_number":2087,"context_line":"            fake_get_by_name.assert_called_once_with(self.ctxt, user_id, name)"},{"line_number":2088,"context_line":"            self.assertEqual(keypair, responses)"},{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"            fake_get_by_name.reset_mock()"},{"line_number":2091,"context_line":"            fake_get_by_name.side_effect \u003d keypair_exception"},{"line_number":2092,"context_line":"            self.src_msg_runner.get_keypair_by_name(self.ctxt, user_id, name)"},{"line_number":2093,"context_line":"            fake_get_by_name.assert_called_once_with(self.ctxt, user_id, name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_3072447c","line":2090,"updated":"2015-07-14 20:02:23.000000000","message":"You don\u0027t need the reset_mock() here really, you can have the mock return different things on multiple calls with a side_effect, e.g.\n\nfake_get_by_name.side_effect \u003d [keypair, keypair_exception]\n\nThen you call the method twice and do the assertions as appropriate.\n\nI wouldn\u0027t -1 on this really, but what would actually be cleaner than having multiple tests in the same test method is one test case method per test case, so have one for the exception case and one for the case where it returns a single keypair.","commit_id":"f7d0da165d8c5e326f2ded607147b6d2fb755067"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3f54184111510b551423dcb2ed0088f936a06fc","unresolved":false,"context_lines":[{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"            fake_get_by_name.reset_mock()"},{"line_number":2091,"context_line":"            fake_get_by_name.side_effect \u003d keypair_exception"},{"line_number":2092,"context_line":"            self.src_msg_runner.get_keypair_by_name(self.ctxt, user_id, name)"},{"line_number":2093,"context_line":"            fake_get_by_name.assert_called_once_with(self.ctxt, user_id, name)"},{"line_number":2094,"context_line":""},{"line_number":2095,"context_line":"        # test get_keypair_by_name in MessageRunner"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_900790c9","line":2092,"updated":"2015-07-14 20:02:23.000000000","message":"Assert that this returns None?","commit_id":"f7d0da165d8c5e326f2ded607147b6d2fb755067"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e3f54184111510b551423dcb2ed0088f936a06fc","unresolved":false,"context_lines":[{"line_number":2100,"context_line":"            self.src_msg_runner.get_keypair_by_name(self.ctxt, user_id, name)"},{"line_number":2101,"context_line":"            fake_process.assert_called_once_with()"},{"line_number":2102,"context_line":""},{"line_number":2103,"context_line":"            fake_process.reset_mock()"},{"line_number":2104,"context_line":"            fake_process.return_value \u003d [response]"},{"line_number":2105,"context_line":"            responses \u003d self.src_msg_runner.get_keypair_by_name(self.ctxt,"},{"line_number":2106,"context_line":"                                                                user_id, name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a41bdd9_10fce0b6","line":2103,"updated":"2015-07-14 20:02:23.000000000","message":"Same as above, this could really be two separate test case methods.","commit_id":"f7d0da165d8c5e326f2ded607147b6d2fb755067"}],"nova/tests/unit/test_metadata.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f359b1ba41dd26d1b6031d261d21090d9caa67ff","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                                  context.RequestContext)"},{"line_number":402,"context_line":"            mock_json.assert_called_once_with(expected_metadata)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def test_as_json_with_cells_mode(self):"},{"line_number":405,"context_line":"        self.flags(enable\u003dTrue, group\u003d\u0027cells\u0027)"},{"line_number":406,"context_line":"        self.flags(cell_type\u003d\u0027compute\u0027, group\u003d\u0027cells\u0027)"},{"line_number":407,"context_line":"        md \u003d fake_InstanceMetadata(self.stubs, self.instance)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_aa1636ef","line":404,"updated":"2015-08-27 18:25:57.000000000","message":"nit: you could probably somewhat easily combine the majority of this test and the one before it into a private method but pass a flag to tell it whether or not you\u0027re doing cells, and then within that private method you just mock the keypair object or cells calls as appropriate, then we wouldn\u0027t have so much duplicated code here.","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"},{"author":{"_account_id":14447,"name":"lyanchih","email":"lyan.h@inwinstack.com","username":"lyanchih"},"change_message_id":"884f9bb6f1d4b087e8257e5be6f8156b09a5ea7c","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                                  context.RequestContext)"},{"line_number":402,"context_line":"            mock_json.assert_called_once_with(expected_metadata)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def test_as_json_with_cells_mode(self):"},{"line_number":405,"context_line":"        self.flags(enable\u003dTrue, group\u003d\u0027cells\u0027)"},{"line_number":406,"context_line":"        self.flags(cell_type\u003d\u0027compute\u0027, group\u003d\u0027cells\u0027)"},{"line_number":407,"context_line":"        md \u003d fake_InstanceMetadata(self.stubs, self.instance)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_acfe4036","line":404,"in_reply_to":"da20952f_aa1636ef","updated":"2015-08-28 05:37:09.000000000","message":"Done","commit_id":"78077ffd136004cceb676a9d2b3872d1ec4d1b06"}]}
