)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"625e7a4cd2ede4348a6ad3df3f4b5ffa7af607ec","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rikimaru Honjo \u003chonjo.rikimaru@po.ntts.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-06 13:49:01 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements caches for image and flavor in compute agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently to obtain image and flavor data,"},{"line_number":10,"context_line":"compute agent always calls nova api, even for the same id of image/flavor."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_3f6111a9","line":7,"updated":"2014-06-06 07:21:53.000000000","message":"tiny nit: the word \u0027implements\u0027 is not suitable since it is a bug fix, what about \u0027adds\u0027","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"},{"author":{"_account_id":8988,"name":"Rikimaru Honjo","email":"honjo.rikimaru@ntt-tx.co.jp","username":"rikimaru.honjo","inactive":true},"change_message_id":"d73cfcb6778f732679e8c5614c034c2d2741636e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rikimaru Honjo \u003chonjo.rikimaru@po.ntts.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-06 13:49:01 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements caches for image and flavor in compute agent"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently to obtain image and flavor data,"},{"line_number":10,"context_line":"compute agent always calls nova api, even for the same id of image/flavor."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_0b2b0431","line":7,"in_reply_to":"1ae5cdf2_3f6111a9","updated":"2014-06-09 09:02:23.000000000","message":"Thanks.\n\nI\u0027ll reflect your comment.","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"}],"ceilometer/nova_client.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"625e7a4cd2ede4348a6ad3df3f4b5ffa7af607ec","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _with_flavor(self, instance, cache):"},{"line_number":71,"context_line":"        fid \u003d instance.flavor[\u0027id\u0027]"},{"line_number":72,"context_line":"        if fid in cache:"},{"line_number":73,"context_line":"            flavor \u003d cache.get(fid)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            try:"},{"line_number":76,"context_line":"                flavor \u003d self.nova_client.flavors.get(fid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_5f7fbddf","line":73,"updated":"2014-06-06 07:21:53.000000000","message":"-1: when an instance is updated in nova side, then this cache is the old one, and when an instance is deleted, then the cache is not clear, in a large system, the memory will slowly drain out\n\nif we want to use cache, then we should listen on the nova and glance notification","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"fdc92a9ffe51ff57926feff8daf72e324d9aeffa","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def _with_flavor(self, instance, cache):"},{"line_number":71,"context_line":"        fid \u003d instance.flavor[\u0027id\u0027]"},{"line_number":72,"context_line":"        if fid in cache:"},{"line_number":73,"context_line":"            flavor \u003d cache.get(fid)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            try:"},{"line_number":76,"context_line":"                flavor \u003d self.nova_client.flavors.get(fid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_3903bb74","line":73,"in_reply_to":"1ae5cdf2_5f7fbddf","updated":"2014-06-09 07:15:15.000000000","message":"my mistake. the cache lives only in the life time of _with_flavor_and_image, the instances will not change during that time (not exactly but the code cannot be so real time)","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"7761efd3a7c1c198355503f14a6e557ed424ec05","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            except novaclient.exceptions.NotFound:"},{"line_number":107,"context_line":"                instance.image[\u0027name\u0027] \u003d \u0027unknown-id-%s\u0027 % iid"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"                class _image(object):"},{"line_number":110,"context_line":"                    pass"},{"line_number":111,"context_line":"                image \u003d _image()"},{"line_number":112,"context_line":"                setattr(image, \u0027name\u0027, instance.image[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_4e76ffd9","line":109,"updated":"2014-06-09 06:41:49.000000000","message":"Using local class looks a bit hackish, WDYT about:\n\n        if iid in cache:\n            image \u003d cache.get(iid)\n        else:\n            try:\n                image \u003d self.nova_client.images.get(iid)\n            except novaclient.exceptions.NotFound:\n                image \u003d None\n            cache[iid] \u003d image\n\n        if not image:\n           instance.image[\u0027name\u0027] \u003d \u0027unknown-id-%s\u0027 % iid\n           instance.kernel_id \u003d None\n           instance.ramdisk_id \u003d None\n           return","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"},{"author":{"_account_id":8988,"name":"Rikimaru Honjo","email":"honjo.rikimaru@ntt-tx.co.jp","username":"rikimaru.honjo","inactive":true},"change_message_id":"d73cfcb6778f732679e8c5614c034c2d2741636e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            except novaclient.exceptions.NotFound:"},{"line_number":107,"context_line":"                instance.image[\u0027name\u0027] \u003d \u0027unknown-id-%s\u0027 % iid"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"                class _image(object):"},{"line_number":110,"context_line":"                    pass"},{"line_number":111,"context_line":"                image \u003d _image()"},{"line_number":112,"context_line":"                setattr(image, \u0027name\u0027, instance.image[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_4b1c2c14","line":109,"in_reply_to":"1ae5cdf2_4e76ffd9","updated":"2014-06-09 09:02:23.000000000","message":"Thanks.\n\nI\u0027ll reflect your comment.","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c03df65740ee31a1a570aaf01f3a271b61f961d","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _with_flavor(self, instance, cache):"},{"line_number":71,"context_line":"        fid \u003d instance.flavor[\u0027id\u0027]"},{"line_number":72,"context_line":"        if fid in cache:"},{"line_number":73,"context_line":"            flavor \u003d cache.get(fid)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7f5a6c51","line":72,"updated":"2014-06-09 19:09:22.000000000","message":"More pythonic:\n\n    fid \u003d cache.get(fid)\n    if not fid:\n        ...","commit_id":"c3527a7d5f6e643c740c5a431993155a92708fbd"},{"author":{"_account_id":8988,"name":"Rikimaru Honjo","email":"honjo.rikimaru@ntt-tx.co.jp","username":"rikimaru.honjo","inactive":true},"change_message_id":"b3ee124dc79079f6741fd5c0fa855ea119824e1a","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _with_flavor(self, instance, cache):"},{"line_number":71,"context_line":"        fid \u003d instance.flavor[\u0027id\u0027]"},{"line_number":72,"context_line":"        if fid in cache:"},{"line_number":73,"context_line":"            flavor \u003d cache.get(fid)"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_3a7c5beb","line":72,"in_reply_to":"1ae5cdf2_7f5a6c51","updated":"2014-06-10 09:11:23.000000000","message":"Thanks. But, in my opinion, current code is right.\n\nWhen the result of flavors.get(fid) is NotFound, the information is cached as cache[fid] \u003d None. Testing by \"if fid in cache\" is needed to handle this case that the flavor is cached as None.","commit_id":"c3527a7d5f6e643c740c5a431993155a92708fbd"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"06761e750c2aa024552724f6e83e3bc1108516cb","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            instance.ramdisk_id \u003d None"},{"line_number":98,"context_line":"            return"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if iid in cache:"},{"line_number":101,"context_line":"            image \u003d cache.get(iid)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_1e7b402a","line":100,"updated":"2014-06-09 09:29:48.000000000","message":"-1: iid is not defined if TypeError is raised\n\nfor i.e.:\n\nzqfan@aji:~/openstack/ceilometer$ cat /tmp/a.py \ndef f():\n    raise Exception()\n\ntry:\n    x \u003d f()\nexcept Exception:\n    pass\n\nif x in (1,2,3):\n    print x\nzqfan@aji:~/openstack/ceilometer$ python /tmp/a.py \nTraceback (most recent call last):\n  File \"/tmp/a.py\", line 9, in \u003cmodule\u003e\n    if x in (1,2,3):\nNameError: name \u0027x\u0027 is not defined","commit_id":"c3527a7d5f6e643c740c5a431993155a92708fbd"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"80ee1209cbb09ea6222f137711316d4a536c5a64","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            instance.ramdisk_id \u003d None"},{"line_number":98,"context_line":"            return"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if iid in cache:"},{"line_number":101,"context_line":"            image \u003d cache.get(iid)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_fe02146e","line":100,"in_reply_to":"1ae5cdf2_1e7b402a","updated":"2014-06-09 09:32:47.000000000","message":"oops, L98 return, sorry, I must have to get some sleep.....","commit_id":"c3527a7d5f6e643c740c5a431993155a92708fbd"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c03df65740ee31a1a570aaf01f3a271b61f961d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                image \u003d None"},{"line_number":107,"context_line":"            cache[iid] \u003d image"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if not image:"},{"line_number":110,"context_line":"            instance.image[\u0027name\u0027] \u003d \u0027unknown-id-%s\u0027 % iid"},{"line_number":111,"context_line":"            instance.kernel_id \u003d None"},{"line_number":112,"context_line":"            instance.ramdisk_id \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_131de466","line":109,"updated":"2014-06-09 19:09:22.000000000","message":"Why not follow the same attr_defaults pattern as in line 85-89 above?","commit_id":"c3527a7d5f6e643c740c5a431993155a92708fbd"},{"author":{"_account_id":8988,"name":"Rikimaru Honjo","email":"honjo.rikimaru@ntt-tx.co.jp","username":"rikimaru.honjo","inactive":true},"change_message_id":"b3ee124dc79079f6741fd5c0fa855ea119824e1a","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                image \u003d None"},{"line_number":107,"context_line":"            cache[iid] \u003d image"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        if not image:"},{"line_number":110,"context_line":"            instance.image[\u0027name\u0027] \u003d \u0027unknown-id-%s\u0027 % iid"},{"line_number":111,"context_line":"            instance.kernel_id \u003d None"},{"line_number":112,"context_line":"            instance.ramdisk_id \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_b9395d41","line":109,"in_reply_to":"1ae5cdf2_131de466","updated":"2014-06-10 09:11:23.000000000","message":"Thanks, I\u0027ll fix this.","commit_id":"c3527a7d5f6e643c740c5a431993155a92708fbd"}],"ceilometer/tests/test_novaclient.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"6d73652210bf537d46f185092da0c1af6af2d2f3","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class TestNovaClient(test.BaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    _flavors_count \u003d None"},{"line_number":32,"context_line":"    _images_count \u003d None"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestNovaClient, self).setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_4e535f6c","line":32,"updated":"2014-06-09 06:34:04.000000000","message":"nit: This class variables are not used/useful.","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"},{"author":{"_account_id":8988,"name":"Rikimaru Honjo","email":"honjo.rikimaru@ntt-tx.co.jp","username":"rikimaru.honjo","inactive":true},"change_message_id":"9dc2ab09848b5e9226b86b4a7e2fcf13630c9952","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class TestNovaClient(test.BaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    _flavors_count \u003d None"},{"line_number":32,"context_line":"    _images_count \u003d None"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestNovaClient, self).setUp()"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_8b1c74c3","line":32,"in_reply_to":"1ae5cdf2_4e535f6c","updated":"2014-06-09 09:12:35.000000000","message":"Thanks, I\u0027ll fix this.","commit_id":"f538cd1a75b2abf712958325a1a5dacd29343381"}]}
