)]}'
{"ceilometer/alarm/storage/impl_cassandra.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    if v is None:"},{"line_number":48,"context_line":"        return"},{"line_number":49,"context_line":"    encoded \u003d json.dumps(v)"},{"line_number":50,"context_line":"    o[key] \u003d encoded"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def _from_json(v):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_3b88c7c4","line":50,"updated":"2015-01-23 19:12:02.000000000","message":"this is odd.. why are you encoding part of json and not whole thing? did you try using jsonutils from oslo.serialization?","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    if v is None:"},{"line_number":48,"context_line":"        return"},{"line_number":49,"context_line":"    encoded \u003d json.dumps(v)"},{"line_number":50,"context_line":"    o[key] \u003d encoded"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def _from_json(v):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_8f89a7cc","line":50,"in_reply_to":"1a930d6b_3b88c7c4","updated":"2015-01-29 07:30:50.000000000","message":"We\u0027re only doing one value in a dict.  It\u0027s a helper for when we go from model -\u003e dict but then have to encode some of the dict values as strings.  I renamed the function and added a comment.\n\nI also switched to jsonutils - thanks!","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":53,"context_line":"def _from_json(v):"},{"line_number":54,"context_line":"    if v is None:"},{"line_number":55,"context_line":"        return None"},{"line_number":56,"context_line":"    return json.loads(v)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"KEYSPACE \u003d connection.CassandraKeyspace(\"alarms\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_5be3d3a3","line":56,"updated":"2015-01-23 19:12:02.000000000","message":"use jsonutils from oslo.serialization","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"def _from_json(v):"},{"line_number":54,"context_line":"    if v is None:"},{"line_number":55,"context_line":"        return None"},{"line_number":56,"context_line":"    return json.loads(v)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"KEYSPACE \u003d connection.CassandraKeyspace(\"alarms\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_ef8ea3cf","line":56,"in_reply_to":"1a930d6b_5be3d3a3","updated":"2015-01-29 07:30:50.000000000","message":"Done","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        # We need to return these sorted by recentness (sadly)"},{"line_number":247,"context_line":"        rows.sort(key\u003dlambda row: row.timestamp)"},{"line_number":248,"context_line":"        rows.reverse()"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        return rows"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_3b2447c4","line":248,"updated":"2015-01-23 19:12:02.000000000","message":"this can be:\n\n  sorted(rows, key\u003dlambda row: row.timestamp, reverse\u003dTrue)","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        # We need to return these sorted by recentness (sadly)"},{"line_number":247,"context_line":"        rows.sort(key\u003dlambda row: row.timestamp)"},{"line_number":248,"context_line":"        rows.reverse()"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        return rows"},{"line_number":251,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_8f6d2735","line":248,"in_reply_to":"1a930d6b_3b2447c4","updated":"2015-01-29 07:30:50.000000000","message":"Added the reverse flag, but kept the in-place sort for (minor) efficiency","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"ceilometer/storage/cassandra/README.md":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"The remaining primary-key columns form the clustering key; these determine the"},{"line_number":7,"context_line":"order that things are stored on-disk (for each partition key value)."},{"line_number":8,"context_line":"Range-queries are efficient here, as long as the partition-key is specified."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":8,"id":"1a930d6b_de1ed15e","line":8,"updated":"2015-01-23 19:12:02.000000000","message":"(nit) can we move this to impl_cassandra... not sure how visible this is and it seems dev specific unless there was a specific reason for you putting it here... i really have no strong preference, just trying to minimise the number of files.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"The remaining primary-key columns form the clustering key; these determine the"},{"line_number":7,"context_line":"order that things are stored on-disk (for each partition key value)."},{"line_number":8,"context_line":"Range-queries are efficient here, as long as the partition-key is specified."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":8,"id":"fa81d914_cff2bf99","line":8,"in_reply_to":"1a930d6b_de1ed15e","updated":"2015-01-29 07:30:50.000000000","message":"Moved to ceilometer/storage/cassandra/connection.py; seems to be the most relevant place for it.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"ceilometer/storage/cassandra/connection.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ddef94685a3242cf19c56fba1ef3491c95359ff5","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class CassandraConnection():"},{"line_number":300,"context_line":"    \"\"\"A connection to a C* cluster.\"\"\""},{"line_number":301,"context_line":"    def __init__(self, url):"},{"line_number":302,"context_line":"        \"\"\"Cassandra Connection Initialization.\"\"\""},{"line_number":303,"context_line":"        self.url \u003d url"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_7ed75dbf","line":301,"updated":"2014-12-03 19:56:58.000000000","message":"i begin with apologies because i don\u0027t know much about cassandra and it\u0027s client support but i have a proper stupid question for you... why doesn\u0027t this class (if not module) exist in the client? a lot of this seems to be ceilometer-agnostic.","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"ba519821cc3585cf6039c6df35d15c41ac215026","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class CassandraConnection():"},{"line_number":300,"context_line":"    \"\"\"A connection to a C* cluster.\"\"\""},{"line_number":301,"context_line":"    def __init__(self, url):"},{"line_number":302,"context_line":"        \"\"\"Cassandra Connection Initialization.\"\"\""},{"line_number":303,"context_line":"        self.url \u003d url"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_694aea5c","line":301,"in_reply_to":"5a890539_1c5ac54f","updated":"2014-12-05 18:49:41.000000000","message":"I think that when it is used twice, then we should create a library!  But we cannot use it twice until it is first used once.  Creating a library at first use always risks creating an overcomplicated library, in my experience.\n\nI\u0027m sorry that you were made to create a separate repo for OpenTSDB for Gnocchi.  In my experience, that is a mistake.  It would be easy for me (here) or you (for Gnocchi/OpenTSDB) to push the abstraction layer into the main code, but it would only make the code less readable and really duplicated.  Essentially we have separated the code into a library, but (until it is used twice), it lives in a subdirectory.  I think of that as a library that hasn\u0027t yet been used twice.  My understanding is that this is how oslo came about as well, although this is a lot less work because we anticipate now that it will be separated out, so the layering is clean.\n\nIf we tell people \"anything that could one day be a library should be a library now\" we end up with over-complicated libraries, and with people avoiding separating out layers because of the bureaucracy involved.  So I understand that it is annoying that you were asked to create a separate repo for OpenTSDB, but I (respectfully) do not think this policy is a good idea and I do not think we should repeat it in Ceilometer.","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"81c45ed9e893c3a09083a2abe109a46d498c7e70","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class CassandraConnection():"},{"line_number":300,"context_line":"    \"\"\"A connection to a C* cluster.\"\"\""},{"line_number":301,"context_line":"    def __init__(self, url):"},{"line_number":302,"context_line":"        \"\"\"Cassandra Connection Initialization.\"\"\""},{"line_number":303,"context_line":"        self.url \u003d url"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_1c5ac54f","line":301,"in_reply_to":"5a890539_2c3cb8e0","updated":"2014-12-04 10:49:54.000000000","message":"I\u0027m not Cassandra expert as well, but should not all this helpers/ORM code being extract to the separated repository at all? As it\u0027s so much logv here... And this logic is not actually understandable by people who do not have Cassandra expertise... Like me :) I needed to extract all OpenTSDB related code to the separated repo from gnocchi because of the same issue actually... As it\u0027s the complete hell to review ~1.5k line of code most of which you do not have experience to review...","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"2697880736cef6cf0e59b1319de6da423b319602","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"class CassandraConnection():"},{"line_number":300,"context_line":"    \"\"\"A connection to a C* cluster.\"\"\""},{"line_number":301,"context_line":"    def __init__(self, url):"},{"line_number":302,"context_line":"        \"\"\"Cassandra Connection Initialization.\"\"\""},{"line_number":303,"context_line":"        self.url \u003d url"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_2c3cb8e0","line":301,"in_reply_to":"5a890539_7ed75dbf","updated":"2014-12-04 04:49:37.000000000","message":"No problem - thank you for looking at it!\n\nThis layer is more of an \"ORM\" layer, similar to SQLAlchemy.  Cassandra\u0027s query language is quite restrictive, and we don\u0027t want to be writing in CQL anyway, we want to be writing in Python.  This module implements the Python \u003c-\u003e Cassandra abstraction/ORM layer.\n\nI think this code will eventually end up in Oslo, when/if (a) it is merged into Ceilometer and (b) another project wants to use the same code.  Hopefully we can get this into Ceilometer and then (b) can be Gnocchi!","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"422f627f761f0d5e01496f0b2cd5357c9285d7f4","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"MOCK_DRIVER \u003d \u0027ceilometer.tests.storage.cassandra.inmemory.MemConnection\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"_last_cql_timestamp \u003d 0"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_10562fce","line":39,"updated":"2015-01-08 07:35:42.000000000","message":"having production code depends on ceilometer.tests seems a little bit odd, how about move the inmemory here? just like what hbase does","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"f3a600252e0eee03588ff0f96d3b38670e74074c","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"MOCK_DRIVER \u003d \u0027ceilometer.tests.storage.cassandra.inmemory.MemConnection\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"_last_cql_timestamp \u003d 0"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_641b1c80","line":39,"in_reply_to":"3a961159_10562fce","updated":"2015-01-18 15:52:07.000000000","message":"I agree it\u0027s a little odd!  I did mirror what hbase does here, but I put the mock in-memory implementation into tests, because (like hbase) it is really only a test implementation.\n\nI originally had the in-memory implementation here, but moved it to tests, because I thought it was more \"honest\".  I could move it back, but then we\u0027d have test code in the non-test area.\n\nI think really what we want is a hook where the tests can specify an alternate driver, and they would specify the in memory driver.  That is what I\u0027ve done here with the connection_driver option.  But I default to the in-memory driver for convenience.\n\nOne option therefore is _not_ to default to the in-memory driver, and require the test to specify it.  This would be avoid this dependency, even if it would be less neat!  What do you think?","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    if t \u003c _last_cql_timestamp:"},{"line_number":50,"context_line":"        t \u003d _last_cql_timestamp + 1"},{"line_number":51,"context_line":"    _last_cql_timestamp \u003d t"},{"line_number":52,"context_line":"    LOG.info(\"Generated timestamp: %s\", t)"},{"line_number":53,"context_line":"    return t"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_fe71cda8","line":52,"updated":"2015-01-23 19:12:02.000000000","message":"is this a common action (ie. every write/read)? if so let\u0027s remove it... if not, let\u0027s translate it... and make it a debug statement.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    if t \u003c _last_cql_timestamp:"},{"line_number":50,"context_line":"        t \u003d _last_cql_timestamp + 1"},{"line_number":51,"context_line":"    _last_cql_timestamp \u003d t"},{"line_number":52,"context_line":"    LOG.info(\"Generated timestamp: %s\", t)"},{"line_number":53,"context_line":"    return t"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_8fb0c78c","line":52,"in_reply_to":"1a930d6b_fe71cda8","updated":"2015-01-29 07:30:50.000000000","message":"Yes, very common.  Removed.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def dump(data):"},{"line_number":57,"context_line":"    # XXX: Is the bson thing needed?"},{"line_number":58,"context_line":"    return json.dumps(data)  # , default\u003dbson.json_util.default)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class CassandraKeyspace():"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_1e6a19b3","line":58,"updated":"2015-01-23 19:12:02.000000000","message":"jsonutils","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def dump(data):"},{"line_number":57,"context_line":"    # XXX: Is the bson thing needed?"},{"line_number":58,"context_line":"    return json.dumps(data)  # , default\u003dbson.json_util.default)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class CassandraKeyspace():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_4f6ecf02","line":58,"in_reply_to":"1a930d6b_1e6a19b3","updated":"2015-01-29 07:30:50.000000000","message":"Actually I think this is dead code in this patch, so I just removed it.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"ceilometer/storage/cassandra/eventletreactor.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ddef94685a3242cf19c56fba1ef3491c95359ff5","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class EventletConnection(connection.Connection):"},{"line_number":51,"context_line":"    \"\"\"An implementation of :class:`.Connection` that utilizes ``eventlet``.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _total_reqd_bytes \u003d 0"},{"line_number":54,"context_line":"    _read_watcher \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_3ea07541","line":51,"updated":"2014-12-03 19:56:58.000000000","message":"same for this... why is this not in the client?","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f9c4d1436643357c6ee51358b594bbb821631a6f","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class EventletConnection(connection.Connection):"},{"line_number":51,"context_line":"    \"\"\"An implementation of :class:`.Connection` that utilizes ``eventlet``.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _total_reqd_bytes \u003d 0"},{"line_number":54,"context_line":"    _read_watcher \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_7175a796","line":51,"in_reply_to":"5a890539_0c10dc57","updated":"2014-12-04 16:10:39.000000000","message":"how difficult is this to get into Cassandra client? i think it\u0027d be useful for them (unless it\u0027s a py3 only client)\n\ndo you know if there\u0027s any cassandra devs in openstack? i\u0027d be more confident if someone with experience (in addition to yours) said, yeah this is good... right now all i can is... \"it\u0027s good?\"... or i can take a few days and become a cassandra novice.","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"2697880736cef6cf0e59b1319de6da423b319602","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class EventletConnection(connection.Connection):"},{"line_number":51,"context_line":"    \"\"\"An implementation of :class:`.Connection` that utilizes ``eventlet``.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _total_reqd_bytes \u003d 0"},{"line_number":54,"context_line":"    _read_watcher \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_0c10dc57","line":51,"in_reply_to":"5a890539_3ea07541","updated":"2014-12-04 04:49:37.000000000","message":"I wish it was!  Sadly the client isn\u0027t eventlet aware, so the eventlet bridge needs to be here.\n\nI think eventually this too will end up in Oslo.","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"ba519821cc3585cf6039c6df35d15c41ac215026","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class EventletConnection(connection.Connection):"},{"line_number":51,"context_line":"    \"\"\"An implementation of :class:`.Connection` that utilizes ``eventlet``.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _total_reqd_bytes \u003d 0"},{"line_number":54,"context_line":"    _read_watcher \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_c943de11","line":51,"in_reply_to":"5a890539_7175a796","updated":"2014-12-05 18:49:41.000000000","message":"I can submit a pull request (it looks like DataStax wrote it in the first place, so I don\u0027t know why they are creating so much work for everyone by not incorporating it into the client.)  I do worry about distributions though if we do that.\n\nBut I will submit a pull request - I think that is a great idea you have!  This will also mean that they will review this code, which I agree is totally not-understandable!  It might be that we can get them to sign-off on it, but we have to ship it ourselves until the new driver release comes out.  (But we would have had DataStax OK it!)","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"66b768e1c5318b1e51cccf83cebcf8bd195f9737","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class EventletConnection(connection.Connection):"},{"line_number":51,"context_line":"    \"\"\"An implementation of :class:`.Connection` that utilizes ``eventlet``.\"\"\""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    _total_reqd_bytes \u003d 0"},{"line_number":54,"context_line":"    _read_watcher \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_b1fc3c0e","line":51,"in_reply_to":"5a890539_c943de11","updated":"2014-12-05 19:03:15.000000000","message":"yes, let\u0027s try having someone from DataStax give the ok first... because my ok means little even too myself in this matter.","commit_id":"5b9bcdc17aad8852f111b507599ccbb7e70b1119"}],"ceilometer/storage/cassandra/utils.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\"Create the query document to find timestamps within that range."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    This is done by given two possible datetimes and their operations."},{"line_number":62,"context_line":"    By default, using $gte for the lower bound and $lt for the upper bound."},{"line_number":63,"context_line":"    \"\"\""},{"line_number":64,"context_line":"    ts_range \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_5bc2f334","line":61,"updated":"2015-01-23 19:12:02.000000000","message":"(nit) s/by given/by giving/","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"\"\"Create the query document to find timestamps within that range."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    This is done by given two possible datetimes and their operations."},{"line_number":62,"context_line":"    By default, using $gte for the lower bound and $lt for the upper bound."},{"line_number":63,"context_line":"    \"\"\""},{"line_number":64,"context_line":"    ts_range \u003d {}"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_bb0bd78c","line":62,"updated":"2015-01-23 19:12:02.000000000","message":"(nit) s/using $gte for the lower bound and $lt for the upper bound./$gte is use for the lower bound and $lt for the upper bound/","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \"\"\"Create the query document to find timestamps within that range."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    This is done by given two possible datetimes and their operations."},{"line_number":62,"context_line":"    By default, using $gte for the lower bound and $lt for the upper bound."},{"line_number":63,"context_line":"    \"\"\""},{"line_number":64,"context_line":"    ts_range \u003d {}"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_cf2f1fa0","line":62,"in_reply_to":"1a930d6b_bb0bd78c","updated":"2015-01-29 07:30:50.000000000","message":"Done","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    return escape_identifier(name)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def escape_table(name):"},{"line_number":108,"context_line":"    return escape_identifier(name)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_5b18331e","line":107,"updated":"2015-01-23 19:12:02.000000000","message":"why the duplicate? just call escape_identifier?","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    return escape_identifier(name)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def escape_table(name):"},{"line_number":108,"context_line":"    return escape_identifier(name)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_6f163357","line":107,"in_reply_to":"1a930d6b_5b18331e","updated":"2015-01-29 07:30:50.000000000","message":"I think the rules are different for tables \u0026 columns, but you\u0027re right (YAGNI)","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"ceilometer/tests/base.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"import ceilometer"},{"line_number":33,"context_line":"from ceilometer import messaging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"eventlet.monkey_patch(socket\u003dTrue, select\u003dTrue, thread\u003dTrue)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BaseTestCase(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_3bf8c7c2","line":35,"updated":"2015-01-23 19:12:02.000000000","message":"can you add a note why? random monkey_patch\u0027ing is a concern.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"import ceilometer"},{"line_number":33,"context_line":"from ceilometer import messaging"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"eventlet.monkey_patch(socket\u003dTrue, select\u003dTrue, thread\u003dTrue)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BaseTestCase(base.BaseTestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_ba3a2b32","line":35,"in_reply_to":"1a930d6b_3bf8c7c2","updated":"2015-01-29 07:30:50.000000000","message":"Added a note.  The Cassandra driver itself requires monkey_patching for eventlet; it uses threading.Lock.  It relies on monkey_patching because that\u0027s easier than supporting each evented-IO system individually, I think (e.g. in particular it also supports gevent which also uses monkey-patching)","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"ceilometer/tests/db.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.alarm_connection \u003d storage.get_connection("},{"line_number":155,"context_line":"            self.url, \u0027ceilometer.alarm.storage\u0027)"},{"line_number":156,"context_line":"        # We use the hbase driver as a stub implementation for metering"},{"line_number":157,"context_line":"        self.connection \u003d storage.get_connection("},{"line_number":158,"context_line":"            \u0027hbase://__test__\u0027, \u0027ceilometer.metering.storage\u0027)"},{"line_number":159,"context_line":"        # We use the hbase driver as a stub implementation for events"},{"line_number":160,"context_line":"        self.event_connection \u003d storage.get_connection("}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_7be24f30","line":157,"updated":"2015-01-23 19:12:02.000000000","message":"s/self.connection/self.meter_connection/","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        self.alarm_connection \u003d storage.get_connection("},{"line_number":155,"context_line":"            self.url, \u0027ceilometer.alarm.storage\u0027)"},{"line_number":156,"context_line":"        # We use the hbase driver as a stub implementation for metering"},{"line_number":157,"context_line":"        self.connection \u003d storage.get_connection("},{"line_number":158,"context_line":"            \u0027hbase://__test__\u0027, \u0027ceilometer.metering.storage\u0027)"},{"line_number":159,"context_line":"        # We use the hbase driver as a stub implementation for events"},{"line_number":160,"context_line":"        self.event_connection \u003d storage.get_connection("}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_1a9c17c0","line":157,"in_reply_to":"1a930d6b_7be24f30","updated":"2015-01-29 07:30:50.000000000","message":"These variable names are referenced by the tests themselves.  Check out TestBase setup() around line 218 in this file.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            \u0027hbase://__test__\u0027, \u0027ceilometer.metering.storage\u0027)"},{"line_number":159,"context_line":"        # We use the hbase driver as a stub implementation for events"},{"line_number":160,"context_line":"        self.event_connection \u003d storage.get_connection("},{"line_number":161,"context_line":"            \u0027hbase://__test__\u0027, \u0027ceilometer.event.storage\u0027)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @property"},{"line_number":164,"context_line":"    def url(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_5bbcb306","line":161,"updated":"2015-01-23 19:12:02.000000000","message":"i don\u0027t really get this, why do we need this?","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            \u0027hbase://__test__\u0027, \u0027ceilometer.metering.storage\u0027)"},{"line_number":159,"context_line":"        # We use the hbase driver as a stub implementation for events"},{"line_number":160,"context_line":"        self.event_connection \u003d storage.get_connection("},{"line_number":161,"context_line":"            \u0027hbase://__test__\u0027, \u0027ceilometer.event.storage\u0027)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @property"},{"line_number":164,"context_line":"    def url(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_7aa993de","line":161,"in_reply_to":"1a930d6b_5bbcb306","updated":"2015-01-29 07:30:50.000000000","message":"Same as above, we\u0027re fulfilling the \"contract\" that the tests require.  We don\u0027t have a real cassandra meter or event connection, but the tests need one.  The hbase one is in-memory, so is a nice fast stub.","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"ceilometer/tests/storage/test_impl_cassandra.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"937e8bc2990c0ec6d7cf200209f262273bc3560a","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class CapabilitiesTest(test_base.BaseTestCase):"},{"line_number":23,"context_line":"    # Check the returned capabilities list, which is specific to each DB"},{"line_number":24,"context_line":"    # driver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_alarm_capabilities(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a930d6b_dba343fe","line":23,"updated":"2015-01-23 19:12:02.000000000","message":"(nit) i think this is self-explanatory so we can probably remove this","commit_id":"b9d8bf638587303205974f53272e0d650c863229"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"e526e75ea8cce460854ad425715e2f28e3a3a92f","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class CapabilitiesTest(test_base.BaseTestCase):"},{"line_number":23,"context_line":"    # Check the returned capabilities list, which is specific to each DB"},{"line_number":24,"context_line":"    # driver"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def test_alarm_capabilities(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_dab99f2f","line":23,"in_reply_to":"1a930d6b_dba343fe","updated":"2015-01-29 07:30:50.000000000","message":"Done","commit_id":"b9d8bf638587303205974f53272e0d650c863229"}],"setup.cfg":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"422f627f761f0d5e01496f0b2cd5357c9285d7f4","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    sqlite \u003d ceilometer.event.storage.impl_sqlalchemy:Connection"},{"line_number":225,"context_line":"    hbase \u003d ceilometer.event.storage.impl_hbase:Connection"},{"line_number":226,"context_line":"    db2 \u003d ceilometer.event.storage.impl_db2:Connection"},{"line_number":227,"context_line":"    cassandra \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"ceilometer.metering.storage \u003d"},{"line_number":230,"context_line":"    log \u003d ceilometer.storage.impl_log:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3a961159_d083c753","line":227,"updated":"2015-01-08 07:35:42.000000000","message":"why use hbase to connect to casandra?","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"},{"author":{"_account_id":144,"name":"justinsb","email":"justin@fathomdb.com","username":"justin-fathomdb"},"change_message_id":"f3a600252e0eee03588ff0f96d3b38670e74074c","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    sqlite \u003d ceilometer.event.storage.impl_sqlalchemy:Connection"},{"line_number":225,"context_line":"    hbase \u003d ceilometer.event.storage.impl_hbase:Connection"},{"line_number":226,"context_line":"    db2 \u003d ceilometer.event.storage.impl_db2:Connection"},{"line_number":227,"context_line":"    cassandra \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"ceilometer.metering.storage \u003d"},{"line_number":230,"context_line":"    log \u003d ceilometer.storage.impl_log:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3a961159_c40bf028","line":227,"in_reply_to":"3a961159_cda02994","updated":"2015-01-18 15:52:07.000000000","message":"Yes - thanks Fabio - this is the first patch, and only does alarms, so we need some fallback implementation for the others.  I chose hbase because it uses an in-memory implementation, so we avoiding creating a whole DB.","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"b9619b0b34acbe9f56bdc3ea0b839d3627351b43","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    sqlite \u003d ceilometer.event.storage.impl_sqlalchemy:Connection"},{"line_number":225,"context_line":"    hbase \u003d ceilometer.event.storage.impl_hbase:Connection"},{"line_number":226,"context_line":"    db2 \u003d ceilometer.event.storage.impl_db2:Connection"},{"line_number":227,"context_line":"    cassandra \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"ceilometer.metering.storage \u003d"},{"line_number":230,"context_line":"    log \u003d ceilometer.storage.impl_log:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3a961159_cda02994","line":227,"in_reply_to":"3a961159_d083c753","updated":"2015-01-13 01:29:49.000000000","message":"Because this is the sub part of the driver only for the alarms. So it is needed some other DB to implement the remaining parts: events and meters.","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"422f627f761f0d5e01496f0b2cd5357c9285d7f4","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    sqlite \u003d ceilometer.storage.impl_sqlalchemy:Connection"},{"line_number":235,"context_line":"    hbase \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":236,"context_line":"    db2 \u003d ceilometer.storage.impl_db2:Connection"},{"line_number":237,"context_line":"    cassandra \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"ceilometer.compute.virt \u003d"},{"line_number":240,"context_line":"    libvirt \u003d ceilometer.compute.virt.libvirt.inspector:LibvirtInspector"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3a961159_f0860364","line":237,"updated":"2015-01-08 07:35:42.000000000","message":"ditto","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"b9619b0b34acbe9f56bdc3ea0b839d3627351b43","unresolved":false,"context_lines":[{"line_number":234,"context_line":"    sqlite \u003d ceilometer.storage.impl_sqlalchemy:Connection"},{"line_number":235,"context_line":"    hbase \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":236,"context_line":"    db2 \u003d ceilometer.storage.impl_db2:Connection"},{"line_number":237,"context_line":"    cassandra \u003d ceilometer.storage.impl_hbase:Connection"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"ceilometer.compute.virt \u003d"},{"line_number":240,"context_line":"    libvirt \u003d ceilometer.compute.virt.libvirt.inspector:LibvirtInspector"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3a961159_ad9afd5f","line":237,"in_reply_to":"3a961159_f0860364","updated":"2015-01-13 01:29:49.000000000","message":"please see above explanation","commit_id":"62744087c8c0f5e16ec1ccf142572fbef6d63a3b"}]}
