)]}'
{"ceilometer/storage/impl_cassandra.py":[{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"06d580718a6fafa0363a51b73a88bde7c891d41f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class Connection(base.Connection):"},{"line_number":43,"context_line":"    \"\"\"Base class for storage system connections.\"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    _SAMPLE_CF_NAME \u003d \u0027Samples\u0027"},{"line_number":46,"context_line":"    \"\"\"Name of the column family for storing samples.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, conf):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F88mA%3D","line":45,"updated":"2013-12-18 15:30:44.000000000","message":"Cassandra is case sensitive. Lower case letters in names helps to prevent further misunderstandings. \u0027samples\u0027 might be better.","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"619b8b1ad56050ff935013bc7bf63807ff37b3af","unresolved":false,"context_lines":[{"line_number":42,"context_line":"class Connection(base.Connection):"},{"line_number":43,"context_line":"    \"\"\"Base class for storage system connections.\"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    _SAMPLE_CF_NAME \u003d \u0027Samples\u0027"},{"line_number":46,"context_line":"    \"\"\"Name of the column family for storing samples.\"\"\""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, conf):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F87LU%3D","line":45,"in_reply_to":"AAAATn%2F88mA%3D","updated":"2013-12-18 18:21:23.000000000","message":"Actually it\u0027s not used anymore in that version of the code. I fixed that thanks.","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"06d580718a6fafa0363a51b73a88bde7c891d41f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if keyspace not in cluster.metadata.keyspaces:"},{"line_number":62,"context_line":"            LOG.info(_(\"Cassandra keyspace %s not existing, creating\")"},{"line_number":63,"context_line":"                     % keyspace)"},{"line_number":64,"context_line":"            self.session.execute(\"CREATE KEYSPACE %s\" % keyspace)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.session.set_keyspace(keyspace)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F88e8%3D","line":64,"updated":"2013-12-18 15:30:44.000000000","message":"Won\u0027t work. WITH option is missing. Command is always closing by \u0027;\u0027 character.\n\nMight be:\n\n\"CREATE KEYSPACE %s WITH REPLICATION \u003d {\\\u0027class\\\u0027 : \\\u0027NetworkTopologyStrategy\\\u0027, \\\u0027DC1\\\u0027 : \\\u00273\\\u0027};\"","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"619b8b1ad56050ff935013bc7bf63807ff37b3af","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if keyspace not in cluster.metadata.keyspaces:"},{"line_number":62,"context_line":"            LOG.info(_(\"Cassandra keyspace %s not existing, creating\")"},{"line_number":63,"context_line":"                     % keyspace)"},{"line_number":64,"context_line":"            self.session.execute(\"CREATE KEYSPACE %s\" % keyspace)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.session.set_keyspace(keyspace)"},{"line_number":67,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F87KA%3D","line":64,"in_reply_to":"AAAATn%2F88e8%3D","updated":"2013-12-18 18:21:23.000000000","message":"That looks too much magic. :)\n\nWhat are the different settings that could be set ? Things like DC1: 3 seems obscure too me too. I\u0027m just trying to find a way not to hardcode things that we don\u0027t want to hardcode if possible.","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"06d580718a6fafa0363a51b73a88bde7c891d41f","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.session.set_keyspace(keyspace)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.prepared_insert \u003d self.prepare("},{"line_number":69,"context_line":"            \"\"\"INSERT INTO samples"},{"line_number":70,"context_line":"            (user_id, project_id, resource_id,"},{"line_number":71,"context_line":"            name, unit, type, source, timestamp, volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F88YI%3D","line":68,"updated":"2013-12-18 15:30:44.000000000","message":"The statement structure isn\u0027t compliant with samples table structure: \u0027meter\u0027 field is missing, \u0027volume\u0027 field is undefined, \u0027time\u0027 field is expected instead of \u0027timestamp\u0027, \u0027data\u0027 field is missing, command closing character is missing.\n\nMight be:\n\n\"\"\"INSERT INTO samples\n(meter, user_id, project_id, resource_id, \nname, unit, type, source, time, data) \nVALUES \n(?, ?, ?, ?,\n?, ?, ?, ?, ?, ?);\"\"\"","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"619b8b1ad56050ff935013bc7bf63807ff37b3af","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.session.set_keyspace(keyspace)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.prepared_insert \u003d self.prepare("},{"line_number":69,"context_line":"            \"\"\"INSERT INTO samples"},{"line_number":70,"context_line":"            (user_id, project_id, resource_id,"},{"line_number":71,"context_line":"            name, unit, type, source, timestamp, volume)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F87JU%3D","line":68,"in_reply_to":"AAAATn%2F88YI%3D","updated":"2013-12-18 18:21:23.000000000","message":"Right, I didn\u0027t named all the fields right. Fixed hopefully.","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"06d580718a6fafa0363a51b73a88bde7c891d41f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        keyspace \u003d os.path.basename(result.path)"},{"line_number":82,"context_line":"        return serverlist, keyspace"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def upgrade(self):"},{"line_number":85,"context_line":"        self.session.execute(\"\"\"CREATE TABLE samples ("},{"line_number":86,"context_line":"        meter text,"},{"line_number":87,"context_line":"        source text,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F88Rg%3D","line":84,"updated":"2013-12-18 15:30:44.000000000","message":"Some clarification: \u0027data\u0027 and \u0027metadata\u0027 fields here are text2text maps. CQL statement sees them as a simple dictionary object: {\u0027volume\u0027 : \u002751\u0027, \u0027meter\u0027 : \u0027CPU\u0027, \u0027time\u0027 : \u00272013-12-18 15:21:00\u0027}","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"619b8b1ad56050ff935013bc7bf63807ff37b3af","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        keyspace \u003d os.path.basename(result.path)"},{"line_number":82,"context_line":"        return serverlist, keyspace"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def upgrade(self):"},{"line_number":85,"context_line":"        self.session.execute(\"\"\"CREATE TABLE samples ("},{"line_number":86,"context_line":"        meter text,"},{"line_number":87,"context_line":"        source text,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F87JM%3D","line":84,"in_reply_to":"AAAATn%2F88Rg%3D","updated":"2013-12-18 18:21:23.000000000","message":"Good; data isn\u0027t needed it\u0027s just metadata in that case I think. I\u0027ve fixed that.","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"06d580718a6fafa0363a51b73a88bde7c891d41f","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        :param data: a dictionary representing a sample"},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        self.session.execute("},{"line_number":103,"context_line":"            self.prepared_insert.bind("},{"line_number":104,"context_line":"                data[\u0027user_id\u0027],"},{"line_number":105,"context_line":"                data[\u0027project_id\u0027],"},{"line_number":106,"context_line":"                data[\u0027resource_id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F88PM%3D","line":103,"updated":"2013-12-18 15:30:44.000000000","message":"\u0027meter\u0027 data is missing. \u0027data\u0027 object might be used as the last element in the statement. \n\nMight be:\n\nself.prepared_insert.bind(\ndata[\u0027meter\u0027],\ndata[\u0027user_id\u0027],\ndata[\u0027project_id\u0027],\ndata[\u0027resource_id\u0027],\ndata[\u0027counter_name\u0027],\ndata[\u0027counter_unit\u0027],\ndata[\u0027counter_type\u0027],\ndata[\u0027source\u0027],\ndata[\u0027timestamp\u0027],\ndata\n# FIXME(jd) store metadata\n)","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"619b8b1ad56050ff935013bc7bf63807ff37b3af","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        :param data: a dictionary representing a sample"},{"line_number":101,"context_line":"        \"\"\""},{"line_number":102,"context_line":"        self.session.execute("},{"line_number":103,"context_line":"            self.prepared_insert.bind("},{"line_number":104,"context_line":"                data[\u0027user_id\u0027],"},{"line_number":105,"context_line":"                data[\u0027project_id\u0027],"},{"line_number":106,"context_line":"                data[\u0027resource_id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F87JE%3D","line":103,"in_reply_to":"AAAATn%2F88PM%3D","updated":"2013-12-18 18:21:23.000000000","message":"Cool, I think I fixed that and added metadata.","commit_id":"1e472b10df60d530973931e6daaa1e9cc88e5d4e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"032d1d08d37f56a165c8b625063d2a380873f542","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            LOG.info(_(\"Cassandra keyspace %s not existing, creating\")"},{"line_number":63,"context_line":"                     % keyspace)"},{"line_number":64,"context_line":"            self.session.execute("},{"line_number":65,"context_line":"                \"CREATE KEYSPACE %s WITH strategy_class \u003d SimpleStrategy;\""},{"line_number":66,"context_line":"                % keyspace)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.session.set_keyspace(keyspace)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F85%2Bw%3D","line":65,"updated":"2013-12-19 01:01:22.000000000","message":"Won\u0027t work with CQL 3.0 and above. Cassandra 1.2 is shipped with 3.0 \n\nCorrect statement:\n\n\"\"\"\nCREATE KEYSPACE %s WITH replication \u003d {\u0027class\u0027: \u0027SimpleStrategy\u0027, \u0027replication_factor\u0027: \u00271\u0027};\n\"\"\"","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"87ccaac334cb1644268796afe4fa65fb16a933b2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            LOG.info(_(\"Cassandra keyspace %s not existing, creating\")"},{"line_number":63,"context_line":"                     % keyspace)"},{"line_number":64,"context_line":"            self.session.execute("},{"line_number":65,"context_line":"                \"CREATE KEYSPACE %s WITH strategy_class \u003d SimpleStrategy;\""},{"line_number":66,"context_line":"                % keyspace)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.session.set_keyspace(keyspace)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F81D4%3D","line":65,"in_reply_to":"AAAATn%2F85%2Bw%3D","updated":"2013-12-19 20:45:51.000000000","message":"Done","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"032d1d08d37f56a165c8b625063d2a380873f542","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.session.set_keyspace(keyspace)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.prepared_insert \u003d self.prepare("},{"line_number":71,"context_line":"            \"\"\"INSERT INTO %s"},{"line_number":72,"context_line":"            (user_id, project_id, resource_id, name,"},{"line_number":73,"context_line":"            unit, type, source, time, volume, metadata)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F85sk%3D","line":70,"updated":"2013-12-19 01:01:22.000000000","message":"If you are going to utilize the model with \u0027data\u0027 field, the statement will be as following:\n\n\"\"\"INSERT INTO %s\n(user_id, project_id, resource_id, name,\nsource, time, data, metadata)\nVALUES\n(?, ?, ?, ?\n?, ?, ?, ?, ?, ?)\"\"\"","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"87ccaac334cb1644268796afe4fa65fb16a933b2","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.session.set_keyspace(keyspace)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.prepared_insert \u003d self.prepare("},{"line_number":71,"context_line":"            \"\"\"INSERT INTO %s"},{"line_number":72,"context_line":"            (user_id, project_id, resource_id, name,"},{"line_number":73,"context_line":"            unit, type, source, time, volume, metadata)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F81Ds%3D","line":70,"in_reply_to":"AAAATn%2F85sk%3D","updated":"2013-12-19 20:45:51.000000000","message":"Correct me if I\u0027m wrong but I think it\u0027s better to have a full defined schema to some extend. That\u0027s why I\u0027ve been explicit and dropped data.","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"032d1d08d37f56a165c8b625063d2a380873f542","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        return serverlist, keyspace"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def upgrade(self):"},{"line_number":87,"context_line":"        self.session.execute(\"\"\"CREATE TABLE %s ("},{"line_number":88,"context_line":"        name text,"},{"line_number":89,"context_line":"        unit text,"},{"line_number":90,"context_line":"        type text,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F85wk%3D","line":87,"updated":"2013-12-19 01:01:22.000000000","message":"Incorrect syntax. My fault. The correct statement should be as following:\n\n\"\"\"\nCREATE TABLE samples (\nname text,\nsource text,\nuser_id text,\nproject_id text,\nresource_id text,\ntime timestamp,\ndata map\u003ctext, text\u003e,\nmetadata map\u003ctext,text\u003e,\nPRIMARY KEY((name,source,user_id,project_id,resource_id), time)\n) WITH CLUSTERING ORDER BY (time DESC);\n\"\"\"\n\nNOTE-1: I use \u0027data\u0027 map instead unit, type and volume. \u0027data\u0027 will consist of the latter fields and primary row keys. Since name, source, user, project and resource are part of a row key, they are partially known when the user searchs by some of them. \n\nFor example in the old data model the result of \n\"\"\"\nselect * from samples where resource_id\u003d\u00271\u0027 and user_id\u003d\u002732\u0027 and name \u003d \u0027\u0027 and source\u003d\u0027\u0027 and project_id\u003d\u0027\u0027 and time \u003e now();\n\"\"\"\nwill be \n\nresult \u003d [ {resource_id\u003d\u00271\u0027, user_id\u003d\u002732\u0027, name \u003d \u0027\u0027, source\u003d\u0027\u0027, project_id\u003d\u0027\u0027, unit\u003d\u0027MB\u0027, type\u003d\u0027STORAGE\u0027, volume\u003d\u0027512\u0027, time\u003d\u00272013-12-12 00:00:00\u0027, metadata \u003d{\u0027key_1\u0027:\u0027tag_1\u0027, \u0027key_2\u0027:\u0027tag_2\u0027}}, {resource_id\u003d\u00271\u0027, user_id\u003d\u002732\u0027, name \u003d \u0027\u0027, source\u003d\u0027\u0027, project_id\u003d\u0027\u0027, unit\u003d\u0027MGz\u0027, type\u003d\u0027CPU\u0027, volume\u003d\u00271024\u0027, time\u003d\u00272013-12-12 00:00:00\u0027, metadata \u003d{\u0027key_1\u0027:\u0027tag_1\u0027, \u0027key_2\u0027:\u0027tag_2\u0027}} ]\n\nIn the model the result of above will be \n\nresult \u003d [ {resource_id\u003d\u00271\u0027, user_id\u003d\u002732\u0027, name \u003d \u0027\u0027, source\u003d\u0027\u0027, project_id\u003d\u0027\u0027, data\u003d{\u0027resource_id\u0027\u003d\u00271\u0027, \u0027user_id\u0027\u003d\u002732\u0027, \u0027name\u0027\u003d\u0027storage_metric\u0027, \u0027source\u0027\u003d\u0027some_source\u0027, \u0027project_id\u0027\u003d\u0027some_project\u0027, \u0027unit\u0027\u003d\u0027MB\u0027, \u0027type\u003d\u0027STORAGE\u0027, \u0027volume\u003d\u0027512\u0027, \u0027time\u003d\u00272013-12-12 00:00:00\u0027}, metadata \u003d{\u0027key_1\u0027:\u0027tag_1\u0027, \u0027key_2\u0027:\u0027tag_2\u0027}}, {resource_id\u003d\u00271\u0027, user_id\u003d\u002732\u0027, name \u003d \u0027\u0027, source\u003d\u0027\u0027, project_id\u003d\u0027\u0027, data\u003d{\u0027resource_id\u0027\u003d\u00271\u0027, \u0027user_id\u0027\u003d\u002732\u0027, \u0027name\u0027\u003d\u0027storage_metric\u0027, \u0027source\u0027\u003d\u0027some_source\u0027, \u0027project_id\u0027\u003d\u0027some_project\u0027, \u0027unit\u0027\u003d\u0027MGz\u0027, \u0027type\u0027\u003d\u0027CPU\u0027, \u0027volume\u0027\u003d\u00271024\u0027, \u0027time\u0027\u003d\u00272013-12-12 00:00:00\u0027}, metadata \u003d{\u0027key_1\u0027:\u0027tag_1\u0027, \u0027key_2\u0027:\u0027tag_2\u0027}} ]\n\nSo the user may have full information about the sample and it doesn’t matter by what he search. \n\nNOTE-2: The model with \u0027data\u0027 map, might be a completely overkill. So it\u0027s up to you which one of them to use.","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"87ccaac334cb1644268796afe4fa65fb16a933b2","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        return serverlist, keyspace"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def upgrade(self):"},{"line_number":87,"context_line":"        self.session.execute(\"\"\"CREATE TABLE %s ("},{"line_number":88,"context_line":"        name text,"},{"line_number":89,"context_line":"        unit text,"},{"line_number":90,"context_line":"        type text,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F81DE%3D","line":87,"in_reply_to":"AAAATn%2F85wk%3D","updated":"2013-12-19 20:45:51.000000000","message":"Honestly I don\u0027t have enough knowledge of Cassandra to judge if it is an overkill. I\u0027m just trying to apply my knowledge of SQL (which is probably unrelated) to that, so I\u0027d go with well defined field for each. Even if they\u0027re not used as index.\n\nBut if there is a compelling argument to design with \u0027data\u0027, tell me about it. :)","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":9024,"name":"Dmitri Krasnenko","email":"dmitri.krasnenko@gmail.com","username":"dkrasnenko"},"change_message_id":"032d1d08d37f56a165c8b625063d2a380873f542","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        :param data: a dictionary representing a sample"},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        self.session.execute("},{"line_number":107,"context_line":"            self.prepared_insert.bind("},{"line_number":108,"context_line":"                data[\u0027user_id\u0027],"},{"line_number":109,"context_line":"                data[\u0027project_id\u0027],"},{"line_number":110,"context_line":"                data[\u0027resource_id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F85s8%3D","line":107,"updated":"2013-12-19 01:01:22.000000000","message":"If you are going to utilize the model with \u0027data\u0027 field, the statement will be as following:\n\nsapmle \u003d {k:data[k] for k in (\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027, .., \u0027volume\u0027) if k in data}\n\nself.prepared_insert.bind(\ndata[\u0027user_id\u0027],\ndata[\u0027project_id\u0027],\ndata[\u0027resource_id\u0027],\ndata[\u0027counter_name\u0027],\ndata[\u0027source\u0027],\ndata[\u0027timestamp\u0027],\nsample,\ndata[\u0027resource_metadata\u0027],\n)","commit_id":"89f5bda2b0d476c375b3855ca1cf40f2c9975f1e"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"28e36684be94d051dfb4cb422b65a8c963295b16","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        except cassandra.AlreadyExists:"},{"line_number":98,"context_line":"            pass"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def close(self):"},{"line_number":101,"context_line":"        self.cluster.shutdown()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def record_metering_data(self, data):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2Bnds%3D","line":100,"updated":"2014-02-20 07:11:23.000000000","message":"Do we need to define this into base.Connection class?","commit_id":"2af5adf5615b61d6ea389796d566e645990fc722"}],"ceilometer/tests/db.py":[{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"d5acb48e870d730d2516a410386586394ebfecb7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class TestBase(test_base.BaseTestCase):"},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestBase, self).setUp()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        if self.database_connection is None:"},{"line_number":38,"context_line":"            self.skipTest(\"No connection URL set\")"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAT3%2F%2FrVc%3D","line":36,"updated":"2014-01-03 16:51:49.000000000","message":"I think this could be it\u0027s own patch, actually. I\u0027m going to want this for the vertica driver as well.","commit_id":"a0a9acd414dc2bd500d714dc64112046c86ab612"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"165e4a4ad6e069d3a54a219b34b8007ffd337483","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class TestBase(test_base.BaseTestCase):"},{"line_number":34,"context_line":"    def setUp(self):"},{"line_number":35,"context_line":"        super(TestBase, self).setUp()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        if self.database_connection is None:"},{"line_number":38,"context_line":"            self.skipTest(\"No connection URL set\")"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2F8Uw%3D","line":36,"in_reply_to":"AAAAT3%2F%2FrVc%3D","updated":"2014-01-06 13:27:05.000000000","message":"Fair enough.","commit_id":"a0a9acd414dc2bd500d714dc64112046c86ab612"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"974dc953ac56d75b3ca34762b6c57e3e2748d63f","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        (\u0027db2\u0027, dict(database_connection\u003dDB2FakeConnectionUrl())),"},{"line_number":105,"context_line":"        (\u0027cassandra\u0027, dict("},{"line_number":106,"context_line":"            database_connection\u003dos.environ.get("},{"line_number":107,"context_line":"                \u0027CEILOMETER_TEST_CASSANDRA_URL\u0027))),"},{"line_number":108,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2F1%2Bg%3D","line":107,"updated":"2014-01-07 19:38:56.000000000","message":"perhaps CEILOMETER_CASSANDRA_URL?","commit_id":"4210f9d8947d6afea317ffbb401d4c818aca79fa"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"d9f776bdcb828c88abc4e1b258f3cd087df40986","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        (\u0027db2\u0027, dict(database_connection\u003dDB2FakeConnectionUrl())),"},{"line_number":105,"context_line":"        (\u0027cassandra\u0027, dict("},{"line_number":106,"context_line":"            database_connection\u003dos.environ.get("},{"line_number":107,"context_line":"                \u0027CEILOMETER_TEST_CASSANDRA_URL\u0027))),"},{"line_number":108,"context_line":"    ]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Fx%2FE%3D","line":107,"in_reply_to":"AAAAUH%2F%2F1%2Bg%3D","updated":"2014-01-08 15:00:25.000000000","message":"I kept the same scheme.","commit_id":"4210f9d8947d6afea317ffbb401d4c818aca79fa"}]}
