)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c25c3837931721e2e09eb5a44cd8e5309bf03fdd","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Work In Progress."},{"line_number":15,"context_line":"Todo:"},{"line_number":16,"context_line":" * devstack-based  test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ia20519de2b4964007f8b91ea5d56d1875510d40f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAM3%2F%2FdZo%3D","line":16,"updated":"2013-01-21 20:03:37.000000000","message":"Is this still WIP?  If not, you should remove this from the commit message; if it is, you should click the WIP button on the review, or use the appropriate option to \"git review\" to have it marked as such…","commit_id":"2d14a3d82f6e16c7df801e910491b30c08092452"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"99a8278c2417a959f37645e0b7b0d1b1fede6447","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Work In Progress."},{"line_number":15,"context_line":"Todo:"},{"line_number":16,"context_line":" * devstack-based  test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Ia20519de2b4964007f8b91ea5d56d1875510d40f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAM3%2F%2FYvc%3D","line":16,"in_reply_to":"AAAAM3%2F%2FdZo%3D","updated":"2013-01-24 15:23:27.000000000","message":"no longer wip. fixed","commit_id":"2d14a3d82f6e16c7df801e910491b30c08092452"}],"nova/exception.py":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"ae23e24055c9c18b79c87e7029bee51dbde72506","unresolved":false,"context_lines":[{"line_number":1101,"context_line":"    message \u003d _(\"The CRL file for %(project)s could not be found\")"},{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":""},{"line_number":1104,"context_line":"class ZooKeeperUnavailable(NovaException):"},{"line_number":1105,"context_line":"    message \u003d _(\"ZooKeeper service is temperarily unavailable.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FYrA%3D","line":1104,"updated":"2013-01-24 16:13:21.000000000","message":"Can we have a generic exception ServiceGroupImplementationUnavailable w/o mentioning zookeeper? we can pass the specific driver name as part of the message. (trying to avoid implementation specific exceptions in exception.py itself, does that make sense?)","commit_id":"390a8064fd03e7380432e236af0d125f299e69da"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"ae23e24055c9c18b79c87e7029bee51dbde72506","unresolved":false,"context_lines":[{"line_number":1102,"context_line":""},{"line_number":1103,"context_line":""},{"line_number":1104,"context_line":"class ZooKeeperUnavailable(NovaException):"},{"line_number":1105,"context_line":"    message \u003d _(\"ZooKeeper service is temperarily unavailable.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FYq8%3D","line":1105,"updated":"2013-01-24 16:13:21.000000000","message":"temperarily should be temporarily. also see above for passing in the name of the service dynamically","commit_id":"390a8064fd03e7380432e236af0d125f299e69da"}],"nova/servicegroup/drivers/zk.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"8b3bab60bc784e19cff1746c2fc3a97dc5ec06ff","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import eventlet"},{"line_number":20,"context_line":"import evzookeeper"},{"line_number":21,"context_line":"from evzookeeper import membership"},{"line_number":22,"context_line":"import os"},{"line_number":23,"context_line":"import zookeeper"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import context"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FoSE%3D","line":22,"updated":"2013-01-11 22:48:01.000000000","message":"stdlib imports go first, then a blank line before third-party imports.","commit_id":"05577672a60b5ff01c5ac8e36fbef9ae754be711"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"8b3bab60bc784e19cff1746c2fc3a97dc5ec06ff","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        group_id \u003d service_ref[\u0027topic\u0027]"},{"line_number":102,"context_line":"        member_id \u003d service_ref[\u0027host\u0027]"},{"line_number":103,"context_line":"        all_members \u003d self.get_all(group_id)"},{"line_number":104,"context_line":"        return member_id in all_members if all_members is not None else None"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def get_all(self, group_id):"},{"line_number":107,"context_line":"        monitor \u003d self._monitors.get(group_id, None)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FoRc%3D","line":104,"updated":"2013-01-11 22:48:01.000000000","message":"Do you really want to return None from a method that sounds boolean?  Also, this is hard to read.  Maybe an if statement would be cleaner.","commit_id":"05577672a60b5ff01c5ac8e36fbef9ae754be711"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c25c3837931721e2e09eb5a44cd8e5309bf03fdd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ZKDriver(api.ServiceGroupDriver):"},{"line_number":52,"context_line":"    \"\"\"ZooKeeper driver for the service group API.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FdZg%3D","line":51,"updated":"2013-01-21 20:03:37.000000000","message":"I think we prefer full names rather than abbreviated names, e.g., \"class ZooKeeperDriver\" (femtonit)","commit_id":"2d14a3d82f6e16c7df801e910491b30c08092452"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"99a8278c2417a959f37645e0b7b0d1b1fede6447","unresolved":false,"context_lines":[{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class ZKDriver(api.ServiceGroupDriver):"},{"line_number":52,"context_line":"    \"\"\"ZooKeeper driver for the service group API.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FYvk%3D","line":51,"in_reply_to":"AAAAM3%2F%2FdZg%3D","updated":"2013-01-24 15:23:27.000000000","message":"Done","commit_id":"2d14a3d82f6e16c7df801e910491b30c08092452"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"ae23e24055c9c18b79c87e7029bee51dbde72506","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import utils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"zk_driver_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027zk_session\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper session for servicegroup service.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FYqo%3D","line":33,"updated":"2013-01-24 16:13:21.000000000","message":"Can you please use option groups?","commit_id":"390a8064fd03e7380432e236af0d125f299e69da"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"e8464810f79fd28cae5ad98124537535ceac1e3f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import utils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"zk_driver_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027zk_session\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper session for servicegroup service.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FXI4%3D","line":33,"in_reply_to":"AAAAM3%2F%2FXMY%3D","updated":"2013-01-25 15:49:21.000000000","message":"https://github.com/openstack/nova/blob/master/nova/cells/rpc_driver.py#L33","commit_id":"390a8064fd03e7380432e236af0d125f299e69da"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"8d5bc55a64adc73f0280987260c3969f884d0973","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import utils"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"zk_driver_opts \u003d ["},{"line_number":34,"context_line":"    cfg.StrOpt(\u0027zk_session\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper session for servicegroup service.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FXMY%3D","line":33,"in_reply_to":"AAAAM3%2F%2FYqo%3D","updated":"2013-01-25 15:06:18.000000000","message":"What\u0027s option groups? Could you point me an example? Thanks.","commit_id":"390a8064fd03e7380432e236af0d125f299e69da"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"ae23e24055c9c18b79c87e7029bee51dbde72506","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    ]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"CONF \u003d cfg.CONF"},{"line_number":46,"context_line":"CONF.register_opts(zk_driver_opts)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2FYqk%3D","line":46,"updated":"2013-01-24 16:13:21.000000000","message":"Can you please use a separate option group for this set of configurable parameters?","commit_id":"390a8064fd03e7380432e236af0d125f299e69da"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b6158298b27118ac5ce4ced140f1e354ec2aea14","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027address\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper addresses for servicegroup service in the \u0027"},{"line_number":37,"context_line":"                    \u0027format of host1:port,host2:port,host3:port\u0027),"},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027recv_timeout\u0027,"},{"line_number":39,"context_line":"               default\u003d4000,"},{"line_number":40,"context_line":"               help\u003d\u0027recv_timeout parameter for the zk session\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FHJ4%3D","line":37,"updated":"2013-02-06 20:25:42.000000000","message":"Have you considered using a ListOpt() or MultiStrOpt()?","commit_id":"7de98740b291b154692b22e7e9917a449e32a16c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"08f7f7efa502b4c7d8de8277e66bbf777204ba8b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027address\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper addresses for servicegroup service in the \u0027"},{"line_number":37,"context_line":"                    \u0027format of host1:port,host2:port,host3:port\u0027),"},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027recv_timeout\u0027,"},{"line_number":39,"context_line":"               default\u003d4000,"},{"line_number":40,"context_line":"               help\u003d\u0027recv_timeout parameter for the zk session\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FE0E%3D","line":37,"updated":"2013-02-07 22:09:16.000000000","message":"I really think you ought to consider using a MultiStrOpt() instead of a StrOpt()…","commit_id":"8880aadb976db6ec79a1eed61feb1bc82af0f8e4"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"20b4219481e521f1701d89b538d1241df3783067","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027address\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper addresses for servicegroup service in the \u0027"},{"line_number":37,"context_line":"                    \u0027format of host1:port,host2:port,host3:port\u0027),"},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027recv_timeout\u0027,"},{"line_number":39,"context_line":"               default\u003d4000,"},{"line_number":40,"context_line":"               help\u003d\u0027recv_timeout parameter for the zk session\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FEzg%3D","line":37,"in_reply_to":"AAAAM3%2F%2FE0E%3D","updated":"2013-02-07 22:12:26.000000000","message":"If it were a openstack config option, then I definitely agree with you. But since I need to pass this option blindly to zookeeper, I\u0027m concerned that if zookeeper changes the syntax or add new ways, we would have to change code and the config options too, which will negate the nice property of the MultiStrOpt..","commit_id":"8880aadb976db6ec79a1eed61feb1bc82af0f8e4"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"0b22766bdb8af6f99c01993fb6d648ba918c693d","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027address\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper addresses for servicegroup service in the \u0027"},{"line_number":37,"context_line":"                    \u0027format of host1:port,host2:port,host3:port\u0027),"},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027recv_timeout\u0027,"},{"line_number":39,"context_line":"               default\u003d4000,"},{"line_number":40,"context_line":"               help\u003d\u0027recv_timeout parameter for the zk session\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FEsg%3D","line":37,"in_reply_to":"AAAAM3%2F%2FEyc%3D","updated":"2013-02-07 23:21:46.000000000","message":"I don\u0027t understand your question.  As I understand it, for StrOpt(), you pass in \"foo,bar,baz\", you get \"foo,bar,baz\"; for MultiStrOpt(), on the other hand, you end up with [\"foo\", \"bar\", \"baz\"].","commit_id":"8880aadb976db6ec79a1eed61feb1bc82af0f8e4"},{"author":{"_account_id":1711,"name":"Yun Mao","email":"yunmao@gmail.com","username":"yunmao"},"change_message_id":"e554037af832a2045bd1aa00dc6ee68bd8f2b04b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    cfg.StrOpt(\u0027address\u0027,"},{"line_number":35,"context_line":"               default\u003dNone,"},{"line_number":36,"context_line":"               help\u003d\u0027The ZooKeeper addresses for servicegroup service in the \u0027"},{"line_number":37,"context_line":"                    \u0027format of host1:port,host2:port,host3:port\u0027),"},{"line_number":38,"context_line":"    cfg.IntOpt(\u0027recv_timeout\u0027,"},{"line_number":39,"context_line":"               default\u003d4000,"},{"line_number":40,"context_line":"               help\u003d\u0027recv_timeout parameter for the zk session\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FEyc%3D","line":37,"in_reply_to":"AAAAM3%2F%2FEzg%3D","updated":"2013-02-07 22:18:07.000000000","message":"second thought.. maybe I don\u0027t understand MultiStrOpt vs StrOpt very well. Would it be a problem for the parser if there are \",\" in between for StrOpt?","commit_id":"8880aadb976db6ec79a1eed61feb1bc82af0f8e4"}],"nova/tests/servicegroup/test_zk_driver.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"8b3bab60bc784e19cff1746c2fc3a97dc5ec06ff","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        servicegroup.API._driver \u003d None"},{"line_number":39,"context_line":"        try:"},{"line_number":40,"context_line":"            from nova.servicegroup.drivers import zk"},{"line_number":41,"context_line":"            _zk_installed \u003d True"},{"line_number":42,"context_line":"        except ImportError:"},{"line_number":43,"context_line":"            _zk_installed \u003d False"},{"line_number":44,"context_line":"            self.skipTest(\"Unable to test due to lack of ZooKeeper\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FoSI%3D","line":41,"updated":"2013-01-11 22:48:01.000000000","message":"Is _zk_installed actually used anywhere?","commit_id":"05577672a60b5ff01c5ac8e36fbef9ae754be711"}]}
