)]}'
{"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d55f97fc58cd1a8b76ec6b6b58517e525037798a","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"        except NotImplementedError:"},{"line_number":2525,"context_line":"            driver_capabilities[\u0027alarms\u0027][\u0027history\u0027] \u003d {"},{"line_number":2526,"context_line":"                \u0027query\u0027: {\u0027simple\u0027: False,"},{"line_number":2527,"context_line":"                          \u0027complex\u0027: False}}"},{"line_number":2528,"context_line":"        return Capabilities(api\u003d_flatten_capabilities(driver_capabilities))"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_6821a5fb","line":2527,"updated":"2014-05-23 21:30:57.000000000","message":"Would it make more sense to override ceilometer.alarm.storage.base.Connection.get_capabilities() in each of the sub-classes and then simply replace the suck-it-and-see approach above for testing alarm capabilities with:\n\n   alarm_capabilities \u003d pecan.request.alarm_storage_conn.get_capabilities()\n   combined \u003d dict(driver_capabilities.items() + alarm_capabilities.items())\n   return Capabilities(api\u003d_flatten_capabilities(combined))\n\nI think this would be better for a couple of reasons:\n\n* the suck-it-and-see approach seems to wrongly assume that support for simple queries implies that support for complex queries is also present in the alarms storage driver\n* it would become even more awkward when we split out say the events storage layer also","commit_id":"7d6399963b57a99389979fc6593b11e189d48026"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"dd54c8b0b68e63aa5400d25c3a0c3c9a1f94be42","unresolved":false,"context_lines":[{"line_number":2524,"context_line":"        except NotImplementedError:"},{"line_number":2525,"context_line":"            driver_capabilities[\u0027alarms\u0027][\u0027history\u0027] \u003d {"},{"line_number":2526,"context_line":"                \u0027query\u0027: {\u0027simple\u0027: False,"},{"line_number":2527,"context_line":"                          \u0027complex\u0027: False}}"},{"line_number":2528,"context_line":"        return Capabilities(api\u003d_flatten_capabilities(driver_capabilities))"},{"line_number":2529,"context_line":""},{"line_number":2530,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5adbc538_daae5be7","line":2527,"in_reply_to":"7adec928_6821a5fb","updated":"2014-05-26 10:04:42.000000000","message":"Done, I have mixed query/metadata capabilities in my mind, it\u0027s fixed now.","commit_id":"7d6399963b57a99389979fc6593b11e189d48026"}],"ceilometer/cli.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"455feaadc210f6d8df6919f4cfc5d53e343e2f2e","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    conn \u003d storage.get_connection_from_config(cfg.CONF, \u0027metering\u0027)"},{"line_number":112,"context_line":"    conn.upgrade()"},{"line_number":113,"context_line":"    conn \u003d storage.get_connection_from_config(cfg.CONF, \u0027alarm\u0027)"},{"line_number":114,"context_line":"    conn.upgrade()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"def storage_expirer():"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_9ae208d4","line":114,"updated":"2014-05-27 18:58:14.000000000","message":"Should we guard here for the edge case where the alarm-connection has defaulted to be equivalent to the metering_connection? Or even has been explicitly configured, but to the same value.\n\nOr are you relying on the upgrade() method always being idempotent?","commit_id":"74854f8a7fe4398f34aa3bb188b4ae7825e97d03"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"d4c333e64eac9daa38ca8dba3b53a6a0eb8905bb","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    conn \u003d storage.get_connection_from_config(cfg.CONF, \u0027metering\u0027)"},{"line_number":112,"context_line":"    conn.upgrade()"},{"line_number":113,"context_line":"    conn \u003d storage.get_connection_from_config(cfg.CONF, \u0027alarm\u0027)"},{"line_number":114,"context_line":"    conn.upgrade()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"def storage_expirer():"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_864b802a","line":114,"in_reply_to":"3ae8d1ca_9ae208d4","updated":"2014-05-28 08:35:01.000000000","message":"Yes I rely on the upgrade() method being idempotent.","commit_id":"74854f8a7fe4398f34aa3bb188b4ae7825e97d03"}],"ceilometer/storage/__init__.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d55f97fc58cd1a8b76ec6b6b58517e525037798a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               \"in the database for (\u003c\u003d 0 means forever).\"),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027metering_connection\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027The connection string used to connect to the meteting \u0027"},{"line_number":55,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027alarm_connection\u0027,"},{"line_number":57,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_28a31d50","line":54,"updated":"2014-05-23 21:30:57.000000000","message":"s/meteting/metering/","commit_id":"7d6399963b57a99389979fc6593b11e189d48026"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"dd54c8b0b68e63aa5400d25c3a0c3c9a1f94be42","unresolved":false,"context_lines":[{"line_number":51,"context_line":"               \"in the database for (\u003c\u003d 0 means forever).\"),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027metering_connection\u0027,"},{"line_number":53,"context_line":"               default\u003dNone,"},{"line_number":54,"context_line":"               help\u003d\u0027The connection string used to connect to the meteting \u0027"},{"line_number":55,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027alarm_connection\u0027,"},{"line_number":57,"context_line":"               default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5adbc538_3a31ffec","line":54,"in_reply_to":"7adec928_28a31d50","updated":"2014-05-26 10:04:42.000000000","message":"Done","commit_id":"7d6399963b57a99389979fc6593b11e189d48026"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"455feaadc210f6d8df6919f4cfc5d53e343e2f2e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"              {\u0027name\u0027: engine_name,"},{"line_number":95,"context_line":"               \u0027namespace\u0027: namespace}))"},{"line_number":96,"context_line":"    mgr \u003d driver.DriverManager(namespace, engine_name)"},{"line_number":97,"context_line":"    return mgr.driver(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class SampleFilter(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_1a099831","line":97,"updated":"2014-05-27 18:58:14.000000000","message":"Just a thought: if the URLs are the same for the alarming and metering connections (as a result of defaulting or explicit config), should we ensure that the Connection objects share some state potentially?\n\ne.g. in the sql-a case, using the same sqlalchemy_session.EngineFacade?","commit_id":"74854f8a7fe4398f34aa3bb188b4ae7825e97d03"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"d4c333e64eac9daa38ca8dba3b53a6a0eb8905bb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"              {\u0027name\u0027: engine_name,"},{"line_number":95,"context_line":"               \u0027namespace\u0027: namespace}))"},{"line_number":96,"context_line":"    mgr \u003d driver.DriverManager(namespace, engine_name)"},{"line_number":97,"context_line":"    return mgr.driver(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class SampleFilter(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_269b8c19","line":97,"in_reply_to":"3ae8d1ca_1a099831","updated":"2014-05-28 08:35:01.000000000","message":"Current implementation creates two sqlalchemy engine objects (that creates two DB connections). But I don\u0027t think this is a problem.\n\nTo create only one Connection object, I would be forced to use a global object to track already created Connection object, I don\u0027t really like that. This is why I consciously always create two Connection objects even the url are identical.\n\nBut if something I have missed a needs to have only one sqlalchemy engine, I can update this code.","commit_id":"74854f8a7fe4398f34aa3bb188b4ae7825e97d03"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7dfef7c2c5d047bd0a7cc0f5003d4145ec67f624","unresolved":false,"context_lines":[{"line_number":94,"context_line":"              {\u0027name\u0027: engine_name,"},{"line_number":95,"context_line":"               \u0027namespace\u0027: namespace}))"},{"line_number":96,"context_line":"    mgr \u003d driver.DriverManager(namespace, engine_name)"},{"line_number":97,"context_line":"    return mgr.driver(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class SampleFilter(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3ae8d1ca_c0e8f3b6","line":97,"in_reply_to":"3ae8d1ca_269b8c19","updated":"2014-05-28 20:36:57.000000000","message":"Would we really need a global?\n\nCould the set of existing connections be passed to each new connection as it\u0027s created, when the DBHook is being instantiated?\n\nSo that the new connection could determine that one of the existing connections had the same implementation and an equivalent URL ... and if so, re-use that state.","commit_id":"74854f8a7fe4398f34aa3bb188b4ae7825e97d03"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"b32c0eab531dfae0ec9ea5eefff26240a8d5c98d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"              {\u0027name\u0027: engine_name,"},{"line_number":95,"context_line":"               \u0027namespace\u0027: namespace}))"},{"line_number":96,"context_line":"    mgr \u003d driver.DriverManager(namespace, engine_name)"},{"line_number":97,"context_line":"    return mgr.driver(url)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"class SampleFilter(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1ae5cdf2_bb973139","line":97,"in_reply_to":"3ae8d1ca_c0e8f3b6","updated":"2014-06-04 16:24:02.000000000","message":"I have put the idea into a separate review: \n\nhttps://review.openstack.org/#/c/97847/","commit_id":"74854f8a7fe4398f34aa3bb188b4ae7825e97d03"}]}
