)]}'
{"shade/__init__.py":[{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"9d16788f94a918e47df6b0b2664f5485cf5cbab9","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"                    self.update_image_properties("},{"line_number":1182,"context_line":"                        image\u003dimage,"},{"line_number":1183,"context_line":"                        **image_properties)"},{"line_number":1184,"context_line":"                    self.list_images.invalidate(self)"},{"line_number":1185,"context_line":"                    return self.get_image_dict(status.result[\u0027image_id\u0027])"},{"line_number":1186,"context_line":"                if status.status \u003d\u003d \u0027failure\u0027:"},{"line_number":1187,"context_line":"                    raise OpenStackCloudException("}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_8b19e88a","line":1184,"updated":"2015-04-24 18:22:45.000000000","message":"Regarding invalidation: I actually think we should do with list_images and list_tasks what we did with list_volumes: don\u0027t ever cache a list with an unsteady state. The unsteady state implies that we will come back and query it soon. That prevents needing to invalidate inside the wait loop. Note that not invalidating the cache when we don\u0027t wait is an entirely different problem than the problem of not having test coverage for v2, which already existed before this change. So can we push that to a follow-up change?","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"2dcc6fb9f6a8dd41dcc874aa4b0346acfaf52264","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"                    self.update_image_properties("},{"line_number":1182,"context_line":"                        image\u003dimage,"},{"line_number":1183,"context_line":"                        **image_properties)"},{"line_number":1184,"context_line":"                    self.list_images.invalidate(self)"},{"line_number":1185,"context_line":"                    return self.get_image_dict(status.result[\u0027image_id\u0027])"},{"line_number":1186,"context_line":"                if status.status \u003d\u003d \u0027failure\u0027:"},{"line_number":1187,"context_line":"                    raise OpenStackCloudException("}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_17c89554","line":1184,"updated":"2015-04-23 21:39:58.000000000","message":"Shouldn\u0027t we invalidate the cache even if we don\u0027t wait for it to succeed? We should have an entry for the building image (or whatever the appropriate swift/glance state is).\n\nAlso this makes me wonder, are asynchronous image uploaders expected to invalidate the cache on their own in order to eventually see the image? and if so have we documented that somewhere? If not pollers are going to have a bad time.","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"b2bf223d77a0342286177f9b81d33c5c8f31b3f0","unresolved":false,"context_lines":[{"line_number":1181,"context_line":"                    self.update_image_properties("},{"line_number":1182,"context_line":"                        image\u003dimage,"},{"line_number":1183,"context_line":"                        **image_properties)"},{"line_number":1184,"context_line":"                    self.list_images.invalidate(self)"},{"line_number":1185,"context_line":"                    return self.get_image_dict(status.result[\u0027image_id\u0027])"},{"line_number":1186,"context_line":"                if status.status \u003d\u003d \u0027failure\u0027:"},{"line_number":1187,"context_line":"                    raise OpenStackCloudException("}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_962480af","line":1184,"in_reply_to":"bab921fb_17c89554","updated":"2015-04-24 12:43:16.000000000","message":"I agree with Clark - we should invalidate before the poll, and also in the poll.\n\nAs for folks polling themselves, I think we should have each of the places where we check a status be a method that a consumer can call - that way the poll can be consistent. However, that\u0027s a bigger thing and I think it can wait until later.","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"}],"shade/tests/unit/test_caching.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"25af0aed595ae41ed8f97dd626c5805f524c54fe","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        swift_mock.post_object.assert_called_once()"},{"line_number":300,"context_line":"        swift_mock.put_object.assert_called_once()"},{"line_number":301,"context_line":"        glance_mock.tasks.create.assert_called_once()"},{"line_number":302,"context_line":"        glance_mock.images.update.assert_called_once()"},{"line_number":303,"context_line":"        self.assertEqual({\u002799\u0027: fake_image}, self.cloud.list_images())"}],"source_content_type":"text/x-python","patch_set":1,"id":"dac4157f_e73b13ea","line":302,"updated":"2015-04-21 18:30:17.000000000","message":"assert_called_once() is not valid","commit_id":"40b0b9a9c071904fd52a00ba01754f65ad8ec394"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"8068cf37aeb69f32e42f9ca04c489f5aeaf7b42e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        })"},{"line_number":297,"context_line":"        glance_mock.tasks.get.return_value \u003d fake_task"},{"line_number":298,"context_line":"        self._call_create_image(\u002799 name\u0027)"},{"line_number":299,"context_line":"        swift_mock.post_object.assert_called_once()"},{"line_number":300,"context_line":"        swift_mock.put_object.assert_called_once()"},{"line_number":301,"context_line":"        glance_mock.tasks.create.assert_called_with(type\u003d\u0027import\u0027, input\u003d{"},{"line_number":302,"context_line":"            \u0027import_from\u0027: \u0027images/99 name\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bab921fb_6c48632e","line":299,"updated":"2015-04-22 18:57:53.000000000","message":"Has the same issue as the parent patch - this method doesnt exist, you want assert_called_once_with()","commit_id":"4c7d4cf7d155bbbfc5b877497c80a81f4f8b972e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"2dcc6fb9f6a8dd41dcc874aa4b0346acfaf52264","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        })"},{"line_number":300,"context_line":"        glance_mock.images.list.return_value \u003d [fake_image]"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        class FakeTask(dict):"},{"line_number":303,"context_line":"            status \u003d \u0027success\u0027"},{"line_number":304,"context_line":"            result \u003d {\u0027image_id\u0027: \u002799\u0027}"},{"line_number":305,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_f7c40141","line":302,"updated":"2015-04-23 21:39:58.000000000","message":"It took me a bit to figure out this is a glance task and not a taskmanager task. Oh well. Glance has decided this is their api.","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"2dcc6fb9f6a8dd41dcc874aa4b0346acfaf52264","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        swift_mock.post_object.assert_called_with(**args)"},{"line_number":318,"context_line":"        swift_mock.put_object.assert_called_with(contents\u003dmock.ANY,"},{"line_number":319,"context_line":"                                                 obj\u003d\u002799 name\u0027,"},{"line_number":320,"context_line":"                                                 container\u003d\u0027images\u0027)"},{"line_number":321,"context_line":"        glance_mock.tasks.create.assert_called_with(type\u003d\u0027import\u0027, input\u003d{"},{"line_number":322,"context_line":"            \u0027import_from\u0027: \u0027images/99 name\u0027,"},{"line_number":323,"context_line":"            \u0027image_properties\u0027: {\u0027name\u0027: \u002799 name\u0027}})"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_d7c1fd2f","line":320,"updated":"2015-04-23 21:39:58.000000000","message":"Early in the test the container for this appears to be \u0027image_upload_v2_test_container\u0027. Why are we setting container to images in args then asserting that value here instead?","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"370cc0104f23e25e6375290eda6d059e66d08b78","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        swift_mock.post_object.assert_called_with(**args)"},{"line_number":318,"context_line":"        swift_mock.put_object.assert_called_with(contents\u003dmock.ANY,"},{"line_number":319,"context_line":"                                                 obj\u003d\u002799 name\u0027,"},{"line_number":320,"context_line":"                                                 container\u003d\u0027images\u0027)"},{"line_number":321,"context_line":"        glance_mock.tasks.create.assert_called_with(type\u003d\u0027import\u0027, input\u003d{"},{"line_number":322,"context_line":"            \u0027import_from\u0027: \u0027images/99 name\u0027,"},{"line_number":323,"context_line":"            \u0027image_properties\u0027: {\u0027name\u0027: \u002799 name\u0027}})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ad32947_deb827e8","line":320,"updated":"2015-04-27 23:19:50.000000000","message":"I think confusion in tests matters. I\u0027ll push a new version soon that is more clear.","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"9d16788f94a918e47df6b0b2664f5485cf5cbab9","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        swift_mock.post_object.assert_called_with(**args)"},{"line_number":318,"context_line":"        swift_mock.put_object.assert_called_with(contents\u003dmock.ANY,"},{"line_number":319,"context_line":"                                                 obj\u003d\u002799 name\u0027,"},{"line_number":320,"context_line":"                                                 container\u003d\u0027images\u0027)"},{"line_number":321,"context_line":"        glance_mock.tasks.create.assert_called_with(type\u003d\u0027import\u0027, input\u003d{"},{"line_number":322,"context_line":"            \u0027import_from\u0027: \u0027images/99 name\u0027,"},{"line_number":323,"context_line":"            \u0027image_properties\u0027: {\u0027name\u0027: \u002799 name\u0027}})"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_6b1c5477","line":320,"updated":"2015-04-24 18:22:45.000000000","message":"I think this may actually be a bug that the test was reinforcing. OOPS! I\u0027ll dig into it and hopefully it will be more sane soon. :)","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"64333510e2fdb0f9a1eb7794292b0fa202592058","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        swift_mock.post_object.assert_called_with(**args)"},{"line_number":318,"context_line":"        swift_mock.put_object.assert_called_with(contents\u003dmock.ANY,"},{"line_number":319,"context_line":"                                                 obj\u003d\u002799 name\u0027,"},{"line_number":320,"context_line":"                                                 container\u003d\u0027images\u0027)"},{"line_number":321,"context_line":"        glance_mock.tasks.create.assert_called_with(type\u003d\u0027import\u0027, input\u003d{"},{"line_number":322,"context_line":"            \u0027import_from\u0027: \u0027images/99 name\u0027,"},{"line_number":323,"context_line":"            \u0027image_properties\u0027: {\u0027name\u0027: \u002799 name\u0027}})"}],"source_content_type":"text/x-python","patch_set":3,"id":"7ad32947_58aaef71","line":320,"in_reply_to":"bab921fb_6b1c5477","updated":"2015-04-27 21:53:43.000000000","message":"I think this is because were not setting the container in create_images, so its just defaulting to \u0027images\u0027. Im really +/- 0 on whether this matters...","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"b2bf223d77a0342286177f9b81d33c5c8f31b3f0","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        swift_mock.post_object.assert_called_with(**args)"},{"line_number":318,"context_line":"        swift_mock.put_object.assert_called_with(contents\u003dmock.ANY,"},{"line_number":319,"context_line":"                                                 obj\u003d\u002799 name\u0027,"},{"line_number":320,"context_line":"                                                 container\u003d\u0027images\u0027)"},{"line_number":321,"context_line":"        glance_mock.tasks.create.assert_called_with(type\u003d\u0027import\u0027, input\u003d{"},{"line_number":322,"context_line":"            \u0027import_from\u0027: \u0027images/99 name\u0027,"},{"line_number":323,"context_line":"            \u0027image_properties\u0027: {\u0027name\u0027: \u002799 name\u0027}})"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab921fb_b6cb04a5","line":320,"in_reply_to":"bab921fb_d7c1fd2f","updated":"2015-04-24 12:43:16.000000000","message":"++","commit_id":"884b5ac1bf8ac9e57c61b78ea6e366198e7714f2"}]}
