)]}'
{"ceilometer/storage/base.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"db126bcd00b393798d703d40a5d25117bcd717f3","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def __init__(self, conf):"},{"line_number":69,"context_line":"        \"\"\"Constructor.\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def disconnect(self):"},{"line_number":72,"context_line":"        \"\"\"Disconnect.\"\"\""},{"line_number":73,"context_line":"        pass"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FsYo%3D","line":71,"updated":"2013-07-12 21:59:40.000000000","message":"This should be an abstract method so all driver authors implement it as a no-op explicitly.","commit_id":"7e82c8ab14e0a3ea3fee4834fcdabe0fd0074524"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7a6c46fb82578261c8cc90ec22da825d73eb2028","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def __init__(self, conf):"},{"line_number":69,"context_line":"        \"\"\"Constructor.\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def disconnect(self):"},{"line_number":72,"context_line":"        \"\"\"Disconnect.\"\"\""},{"line_number":73,"context_line":"        pass"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FpZc%3D","line":71,"in_reply_to":"AAAAP3%2F%2FsYo%3D","updated":"2013-07-15 12:44:57.000000000","message":"Removed because in the end it didn\u0027t fix the problem I hoped it did.","commit_id":"7e82c8ab14e0a3ea3fee4834fcdabe0fd0074524"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"6533b2f8c23d2f83d89c25ed33bafcf540107ffa","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        opts \u003d self._parse_connection_url(conf.database.connection)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        if opts[\u0027host\u0027] \u003d\u003d \u0027__test__\u0027:"},{"line_number":206,"context_line":"            url \u003d os.environ.get(\u0027CEILOMETER_TEST_MONGODB_URL\u0027)"},{"line_number":207,"context_line":"            opts \u003d self._parse_connection_url(url)"},{"line_number":208,"context_line":"            # NOTE(jd): Only use one connection stored in the class because"},{"line_number":209,"context_line":"            # pymongo never disconnect from mongo…"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fh2k%3D","line":206,"updated":"2013-06-28 13:42:24.000000000","message":"Perhaps warn user if CEILOMETER_TEST_MONGODB_URL is not set correctly.","commit_id":"c1056f35d42ca0b328cf2539370bfaa66d59a9b9"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e1438a61c62c8136d6dc9984c820f5cf32f2606a","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        opts \u003d self._parse_connection_url(conf.database.connection)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"        if opts[\u0027host\u0027] \u003d\u003d \u0027__test__\u0027:"},{"line_number":206,"context_line":"            url \u003d os.environ.get(\u0027CEILOMETER_TEST_MONGODB_URL\u0027)"},{"line_number":207,"context_line":"            opts \u003d self._parse_connection_url(url)"},{"line_number":208,"context_line":"            # NOTE(jd): Only use one connection stored in the class because"},{"line_number":209,"context_line":"            # pymongo never disconnect from mongo…"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2Fh10%3D","line":206,"in_reply_to":"AAAAPn%2F%2Fh2k%3D","updated":"2013-06-28 13:46:06.000000000","message":"Done","commit_id":"c1056f35d42ca0b328cf2539370bfaa66d59a9b9"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"4c359bfdedba6e63ceb279fed70de9d5eb05803d","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        if opts[\u0027host\u0027] \u003d\u003d \u0027__test__\u0027:"},{"line_number":206,"context_line":"            url \u003d os.environ.get(\u0027CEILOMETER_TEST_MONGODB_URL\u0027)"},{"line_number":207,"context_line":"            if not url:"},{"line_number":208,"context_line":"                raise RuntimeError("},{"line_number":209,"context_line":"                    \"No MongoDB test URL set,\""},{"line_number":210,"context_line":"                    \"export CEILOMETER_TEST_MONGODB_URL environment variable\")"},{"line_number":211,"context_line":"            opts \u003d self._parse_connection_url(url)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPn%2F%2FaqU%3D","line":208,"updated":"2013-07-02 13:01:28.000000000","message":"missing test (and else)","commit_id":"93007137202ee779224bd7fdea48e5530f49722f"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"4c359bfdedba6e63ceb279fed70de9d5eb05803d","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            opts \u003d self._parse_connection_url(url)"},{"line_number":212,"context_line":"            # NOTE(jd): Only use one connection stored in the class because"},{"line_number":213,"context_line":"            # pymongo never disconnect from mongo…"},{"line_number":214,"context_line":"            if hasattr(self.__class__, \"conn\"):"},{"line_number":215,"context_line":"                self.conn \u003d self.__class__.conn"},{"line_number":216,"context_line":"            else:"},{"line_number":217,"context_line":"                LOG.info(\u0027connecting to MongoDB on %s:%s\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPn%2F%2FaqM%3D","line":214,"updated":"2013-07-02 13:01:28.000000000","message":"missing test (and else)","commit_id":"93007137202ee779224bd7fdea48e5530f49722f"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"1436acb5ad3e8d5de550802aea80f337e4b715ba","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        else:"},{"line_number":224,"context_line":"            LOG.info(\u0027connecting to MongoDB on %s:%s\u0027,"},{"line_number":225,"context_line":"                     opts[\u0027host\u0027], opts[\u0027port\u0027])"},{"line_number":226,"context_line":"            self.conn \u003d pymongo.Connection(opts[\u0027host\u0027],"},{"line_number":227,"context_line":"                                           opts[\u0027port\u0027],"},{"line_number":228,"context_line":"                                           safe\u003dTrue)"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPn%2F%2FZhc%3D","line":226,"updated":"2013-07-02 18:28:22.000000000","message":"is the check above for a single connection worth applying to production path as well or is it in another patch?","commit_id":"93007137202ee779224bd7fdea48e5530f49722f"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7b0a233fe42410f512004af551c263d9e8d91f7e","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        else:"},{"line_number":224,"context_line":"            LOG.info(\u0027connecting to MongoDB on %s:%s\u0027,"},{"line_number":225,"context_line":"                     opts[\u0027host\u0027], opts[\u0027port\u0027])"},{"line_number":226,"context_line":"            self.conn \u003d pymongo.Connection(opts[\u0027host\u0027],"},{"line_number":227,"context_line":"                                           opts[\u0027port\u0027],"},{"line_number":228,"context_line":"                                           safe\u003dTrue)"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAPn%2F%2FXOk%3D","line":226,"in_reply_to":"AAAAPn%2F%2FZhc%3D","updated":"2013-07-03 09:32:01.000000000","message":"The path above is a convenient fix until https://bugs.launchpad.net/ceilometer/+bug/1178845 is fixed too.","commit_id":"93007137202ee779224bd7fdea48e5530f49722f"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"4bd0869feb232a8bb05681310d2f53bbb745c4c4","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    def __init__(self, conf):"},{"line_number":230,"context_line":"        opts \u003d self._parse_connection_url(conf.database.connection)"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        if opts[\u0027netloc\u0027] \u003d\u003d \u0027__test__\u0027:"},{"line_number":233,"context_line":"            url \u003d os.environ.get(\u0027CEILOMETER_TEST_MONGODB_URL\u0027)"},{"line_number":234,"context_line":"            if not url:"},{"line_number":235,"context_line":"                raise RuntimeError("}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAP3%2F%2FxII%3D","line":232,"updated":"2013-07-11 18:53:26.000000000","message":"Still no tests for the stuff under here. At the very least there should be a test for !\u003d \u0027__test__\u0027 to ensure the pymongo.Connection() code is called (even if it\u0027s mocked out)","commit_id":"66b7a59dabe59fabd0735e68d19f4f6ff796905e"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"db126bcd00b393798d703d40a5d25117bcd717f3","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        # opts is a dict, dict are unhashable, convert to tuple"},{"line_number":243,"context_line":"        connection_pool_key \u003d tuple(sorted(opts.items()))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # NOTE(jd) Use our own connection pooling on top of the Pymongo one."},{"line_number":246,"context_line":"        # We need that otherwise we overflow the MongoDB instance with new"},{"line_number":247,"context_line":"        # connection since we instanciate a Pymongo client each time someone"},{"line_number":248,"context_line":"        # requires a new storage connection."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FsUY%3D","line":245,"updated":"2013-07-12 21:59:40.000000000","message":"This connection pool management logic should move into its own function (or class).","commit_id":"7e82c8ab14e0a3ea3fee4834fcdabe0fd0074524"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7a6c46fb82578261c8cc90ec22da825d73eb2028","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        # opts is a dict, dict are unhashable, convert to tuple"},{"line_number":243,"context_line":"        connection_pool_key \u003d tuple(sorted(opts.items()))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        # NOTE(jd) Use our own connection pooling on top of the Pymongo one."},{"line_number":246,"context_line":"        # We need that otherwise we overflow the MongoDB instance with new"},{"line_number":247,"context_line":"        # connection since we instanciate a Pymongo client each time someone"},{"line_number":248,"context_line":"        # requires a new storage connection."}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FpYY%3D","line":245,"in_reply_to":"AAAAP3%2F%2FsUY%3D","updated":"2013-07-15 12:44:57.000000000","message":"SAD FACE\n\nI wish I would not have had to write this in the first time.","commit_id":"7e82c8ab14e0a3ea3fee4834fcdabe0fd0074524"}],"run-tests.sh":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1877d625c6b6d57608c2f85e0d62f724a1d181bd","unresolved":false,"context_lines":[{"line_number":2,"context_line":"set -e"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Nova notifier tests"},{"line_number":5,"context_line":"bash tools/init_testr_if_needed.sh"},{"line_number":6,"context_line":"python setup.py testr --slowest --testr-args\u003d\"--concurrency\u003d1 --here\u003dnova_tests $*\""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# Main unit tests"}],"source_content_type":"text/x-sh","patch_set":16,"id":"AAAAPn%2F%2FSrQ%3D","line":5,"updated":"2013-07-04 21:20:20.000000000","message":"init_testr_if_needed.sh used to run between the two test suites. Was that wrong, or does the order not matter?","commit_id":"93007137202ee779224bd7fdea48e5530f49722f"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"730f1ab4594ebac5d53430b75d788383eab94459","unresolved":false,"context_lines":[{"line_number":2,"context_line":"set -e"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"# Nova notifier tests"},{"line_number":5,"context_line":"bash tools/init_testr_if_needed.sh"},{"line_number":6,"context_line":"python setup.py testr --slowest --testr-args\u003d\"--concurrency\u003d1 --here\u003dnova_tests $*\""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"# Main unit tests"}],"source_content_type":"text/x-sh","patch_set":16,"id":"AAAAPn%2F%2FR64%3D","line":5,"in_reply_to":"AAAAPn%2F%2FSrQ%3D","updated":"2013-07-05 09:58:02.000000000","message":"It\u0027s just used to init for nova_tests, so it\u0027s run before it, it\u0027s all good.","commit_id":"93007137202ee779224bd7fdea48e5530f49722f"}],"test-requirements.txt":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f45bec073e584e55cbd436f16f0feb7e7343f73c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"sphinx"},{"line_number":15,"context_line":"sphinxcontrib-pecanwsme\u003e\u003d0.2"},{"line_number":16,"context_line":"docutils\u003d\u003d0.9.1 # for bug 1091333, remove after sphinx \u003e1.1.3 is released."},{"line_number":17,"context_line":"python-spidermonkey"},{"line_number":18,"context_line":"python-subunit"},{"line_number":19,"context_line":"testrepository\u003e\u003d0.0.13"},{"line_number":20,"context_line":"testtools\u003e\u003d0.9.29"}],"source_content_type":"text/plain","patch_set":13,"id":"AAAAPn%2F%2Fk4g%3D","line":17,"updated":"2013-06-27 14:26:28.000000000","message":"can we drop spidermonkey too?","commit_id":"bc61bb68504dd4898810010102b175782c7ed5da"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b715d049fd0e56fe742331db74c69cc2bc5eff65","unresolved":false,"context_lines":[{"line_number":14,"context_line":"sphinx"},{"line_number":15,"context_line":"sphinxcontrib-pecanwsme\u003e\u003d0.2"},{"line_number":16,"context_line":"docutils\u003d\u003d0.9.1 # for bug 1091333, remove after sphinx \u003e1.1.3 is released."},{"line_number":17,"context_line":"python-spidermonkey"},{"line_number":18,"context_line":"python-subunit"},{"line_number":19,"context_line":"testrepository\u003e\u003d0.0.13"},{"line_number":20,"context_line":"testtools\u003e\u003d0.9.29"}],"source_content_type":"text/plain","patch_set":13,"id":"AAAAPn%2F%2Fkvo%3D","line":17,"in_reply_to":"AAAAPn%2F%2Fk4g%3D","updated":"2013-06-27 14:54:26.000000000","message":"You\u0027re right, we can drop it.","commit_id":"bc61bb68504dd4898810010102b175782c7ed5da"}],"tests/storage/test_impl_mongodb.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f45bec073e584e55cbd436f16f0feb7e7343f73c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"# under the License."},{"line_number":18,"context_line":"\"\"\"Tests for ceilometer/storage/impl_mongodb.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. note::"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  (dhellmann) These tests have some dependencies which cannot be"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2Fk3c%3D","line":19,"updated":"2013-06-27 14:26:28.000000000","message":"do we still need this note? indifferent whether we leave it in.","commit_id":"bc61bb68504dd4898810010102b175782c7ed5da"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b715d049fd0e56fe742331db74c69cc2bc5eff65","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":17,"context_line":"# under the License."},{"line_number":18,"context_line":"\"\"\"Tests for ceilometer/storage/impl_mongodb.py"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. note::"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"  (dhellmann) These tests have some dependencies which cannot be"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPn%2F%2FkvQ%3D","line":19,"in_reply_to":"AAAAPn%2F%2Fk3c%3D","updated":"2013-06-27 14:54:26.000000000","message":"Yeah I should remove :)","commit_id":"bc61bb68504dd4898810010102b175782c7ed5da"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"db126bcd00b393798d703d40a5d25117bcd717f3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    database_connection \u003d \u0027mongodb://__test__\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MongoDBConnection(MongoDBEngineTestBase):"},{"line_number":43,"context_line":"    database_connection \u003d \u0027mongodb://__test__\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_connection_pooling(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FsUI%3D","line":42,"updated":"2013-07-12 21:59:40.000000000","message":"You\u0027ll need to rebase against the test scenarios change that just went in.","commit_id":"7e82c8ab14e0a3ea3fee4834fcdabe0fd0074524"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7a6c46fb82578261c8cc90ec22da825d73eb2028","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    database_connection \u003d \u0027mongodb://__test__\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MongoDBConnection(MongoDBEngineTestBase):"},{"line_number":43,"context_line":"    database_connection \u003d \u0027mongodb://__test__\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_connection_pooling(self):"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAP3%2F%2FpW4%3D","line":42,"in_reply_to":"AAAAP3%2F%2FsUI%3D","updated":"2013-07-15 12:44:57.000000000","message":"It didn\u0027t, so I\u0027m happy you didn\u0027t hold this change for this reason only. ;)","commit_id":"7e82c8ab14e0a3ea3fee4834fcdabe0fd0074524"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"86071909d9cf24fc1f4ee307d0dc5e7ed421ecfb","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MongoDBConnection(MongoDBEngineTestBase):"},{"line_number":43,"context_line":"    database_connection \u003d \u0027mongodb://__test__\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_connection_pooling(self):"},{"line_number":46,"context_line":"        self.assertEqual(self.conn.conn,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAP3%2F%2FpT4%3D","line":43,"updated":"2013-07-15 12:59:18.000000000","message":"is this value not inherited?","commit_id":"7292c201266c606d246fa2d9117d5fbe6f7704f5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"12afe90cb51ffd0ae79676b55bc07286a6f47e02","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class MongoDBConnection(MongoDBEngineTestBase):"},{"line_number":43,"context_line":"    database_connection \u003d \u0027mongodb://__test__\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def test_connection_pooling(self):"},{"line_number":46,"context_line":"        self.assertEqual(self.conn.conn,"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAP3%2F%2FpE4%3D","line":43,"in_reply_to":"AAAAP3%2F%2FpT4%3D","updated":"2013-07-15 14:10:15.000000000","message":"Done","commit_id":"7292c201266c606d246fa2d9117d5fbe6f7704f5"}]}
