)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1be3ab8607841130d991f10fa96d0a16df3b6884","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rohit Jaiswal \u003crohit.jaiswal@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-01-27 16:39:29 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Removed blank spaces and fixed imports"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A gliffy-based schema diagram is at:"},{"line_number":10,"context_line":"http://www.gliffy.com/go/publish/6816275"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"fa81d914_1690b9eb","line":7,"updated":"2015-01-28 01:48:08.000000000","message":"??? are you really (only) doing this in this patch?","commit_id":"9f55d70482b2cc61d2193bf5c0c38c89ad95ca6a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Storage Layer Implementation for Pipeline Configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Removed relationship attrs from Sinks"},{"line_number":10,"context_line":"and SourceSinkAssoc model objects."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"A gliffy-based schema diagram is at:"},{"line_number":13,"context_line":"http://www.gliffy.com/go/publish/6816275"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":43,"id":"da86d52c_a1762dd6","line":10,"updated":"2015-02-18 15:51:45.000000000","message":"you should probably keep this generic (not specific to the latest commit)","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and SourceSinkAssoc model objects."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"A gliffy-based schema diagram is at:"},{"line_number":13,"context_line":"http://www.gliffy.com/go/publish/6816275"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: Phil Neal \u003cphil.neal@hp.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Fabio Giannetti \u003cfabio.giannetti@hp.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":43,"id":"da86d52c_01a37943","line":13,"updated":"2015-02-18 15:51:45.000000000","message":"can we update this? or remove it?","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"078eecce97f4db8b3825ca3158133acb8f6deb12","unresolved":false,"context_lines":[{"line_number":10,"context_line":"and SourceSinkAssoc model objects."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"A gliffy-based schema diagram is at:"},{"line_number":13,"context_line":"http://www.gliffy.com/go/publish/6816275"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Authored-By: Phil Neal \u003cphil.neal@hp.com\u003e"},{"line_number":16,"context_line":"Co-Authored-By: Fabio Giannetti \u003cfabio.giannetti@hp.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":43,"id":"da86d52c_18f67fd7","line":13,"in_reply_to":"da86d52c_01a37943","updated":"2015-02-18 20:16:46.000000000","message":"@gordc: i will update this shortly.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3207d1f0e1f22270213a69e35328cb6f5b167b52","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Storage Layer Implementation for Pipeline Configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Resolved merge conflicts."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"A gliffy-based schema diagram is at:"},{"line_number":12,"context_line":"http://www.gliffy.com/go/publish/6816275"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"ba7be1f8_57b5d67c","line":9,"updated":"2015-02-26 21:33:44.000000000","message":"this should be a generic commit message describing the patch. not one that corresponds the specific update.","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3207d1f0e1f22270213a69e35328cb6f5b167b52","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Resolved merge conflicts."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"A gliffy-based schema diagram is at:"},{"line_number":12,"context_line":"http://www.gliffy.com/go/publish/6816275"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Phil Neal \u003cphil.neal@hp.com\u003e"},{"line_number":15,"context_line":"Co-Authored-By: Fabio Giannetti \u003cfabio.giannetti@hp.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"ba7be1f8_97874eb6","line":12,"updated":"2015-02-26 21:33:44.000000000","message":"can we remove this... this is outdated","commit_id":"b9337eea28771c5596109288e46862f7a6500079"}],"ceilometer/agent/base.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2dfb35ef6ee94033cafe0dbccf910d85244869f6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from stevedore import extension"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from ceilometer import coordination"},{"line_number":32,"context_line":"from ceilometer.dbconfig import DbConfig"},{"line_number":33,"context_line":"from ceilometer.i18n import _"},{"line_number":34,"context_line":"from ceilometer.openstack.common import log"},{"line_number":35,"context_line":"from ceilometer.openstack.common import service as os_service"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_62c24986","line":32,"updated":"2015-01-27 13:29:07.000000000","message":"It will better to import dbconfig (from ceilometer import dbconfig) and using like dbconfig.DbConfig","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from stevedore import extension"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from ceilometer import coordination"},{"line_number":32,"context_line":"from ceilometer.dbconfig import DbConfig"},{"line_number":33,"context_line":"from ceilometer.i18n import _"},{"line_number":34,"context_line":"from ceilometer.openstack.common import log"},{"line_number":35,"context_line":"from ceilometer.openstack.common import service as os_service"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_3357b159","line":32,"in_reply_to":"1a930d6b_62c24986","updated":"2015-01-27 14:54:01.000000000","message":"Agree with Ilya, now we could import only modules not classes because of pep8.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"}],"ceilometer/cmd/storage.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a0fedff2e8291932e0e4a104497ece0876084987","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027metering\u0027).upgrade()"},{"line_number":31,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027alarm\u0027).upgrade()"},{"line_number":32,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027event\u0027).upgrade()"},{"line_number":33,"context_line":"    cfg.CONF.import_opt(\u0027pipeline_config_in_db\u0027, \u0027ceilometer.pipeline\u0027)"},{"line_number":34,"context_line":"    if cfg.CONF.pipeline_config_in_db:"},{"line_number":35,"context_line":"        storage.get_connection_from_config(cfg.CONF, \u0027pipeline\u0027).upgrade()"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_7f298936","line":33,"updated":"2015-02-09 23:39:48.000000000","message":"move this outside","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"24edd53cad7ce374acee4ed8e4468a7f8b1fad81","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027metering\u0027).upgrade()"},{"line_number":33,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027alarm\u0027).upgrade()"},{"line_number":34,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027event\u0027).upgrade()"},{"line_number":35,"context_line":"    if cfg.CONF.pipeline_config_in_db:"},{"line_number":36,"context_line":"        storage.get_connection_from_config(cfg.CONF, \u0027pipeline\u0027).upgrade()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"da86d52c_4e6df1cb","line":35,"updated":"2015-02-16 18:04:39.000000000","message":"i think we need to make this mandatory because all the db\u0027s share a common upgrade path so we can\u0027t actually skip this even though we don\u0027t enable it","commit_id":"33e6c3bb1a3c2c3aa24529d9c92c5b85bbf4b320"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"a00f129b69e238033c63fd7506b5017a60c9bb4d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027metering\u0027).upgrade()"},{"line_number":33,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027alarm\u0027).upgrade()"},{"line_number":34,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027event\u0027).upgrade()"},{"line_number":35,"context_line":"    if cfg.CONF.pipeline_config_in_db:"},{"line_number":36,"context_line":"        storage.get_connection_from_config(cfg.CONF, \u0027pipeline\u0027).upgrade()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_4eda2818","line":35,"updated":"2015-02-17 18:28:53.000000000","message":"The only issue i faced is while running devstack tests (tempest), is that there wasnt any name value pair for ceilometer.pipeline.storage in ceilometer.conf file and this would lead to a change in lib/ceilometer in devstack to emit the new configuration element - ceilometer.pipeline.storage. If we are ok to make this change, then i am fine removing this (the if) and have a different patch for the devstack change.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027metering\u0027).upgrade()"},{"line_number":33,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027alarm\u0027).upgrade()"},{"line_number":34,"context_line":"    storage.get_connection_from_config(cfg.CONF, \u0027event\u0027).upgrade()"},{"line_number":35,"context_line":"    if cfg.CONF.pipeline_config_in_db:"},{"line_number":36,"context_line":"        storage.get_connection_from_config(cfg.CONF, \u0027pipeline\u0027).upgrade()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_a1af0d2a","line":35,"in_reply_to":"da86d52c_4eda2818","updated":"2015-02-18 15:51:45.000000000","message":"this conditional is fine i guess.. it\u0027s not a big deal.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"}],"ceilometer/configuration/__init__.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"69f1869c573ef2f53bbd6903a092354b2e394c37","unresolved":false,"context_lines":[{"line_number":1,"context_line":"__author__ \u003d \u0027jaiswaro\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_1f055213","line":1,"updated":"2015-02-06 07:39:59.000000000","message":"This file should be empty","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"}],"ceilometer/configuration/pipeline/storage/base.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"69f1869c573ef2f53bbd6903a092354b2e394c37","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\"Base class for storage system connections.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # A dictionary representing the capabilities of this driver."},{"line_number":32,"context_line":"    CAPABILITIES \u003d {"},{"line_number":33,"context_line":"        \u0027pipeline\u0027: {\u0027pagination\u0027: False,"},{"line_number":34,"context_line":"                     \u0027query\u0027: {\u0027simple\u0027: False,"},{"line_number":35,"context_line":"                               \u0027metadata\u0027: False,"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_5f1b4a80","line":32,"updated":"2015-02-06 07:39:59.000000000","message":"I don\u0027t think this capability have a sense.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a0fedff2e8291932e0e4a104497ece0876084987","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    \"\"\"Base class for storage system connections.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    STORAGE_CAPABILITIES \u003d {"},{"line_number":32,"context_line":"        \u0027storage\u0027: {\u0027production_ready\u0027: False},"},{"line_number":33,"context_line":"    }"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self, url):"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_df0275b3","line":32,"updated":"2015-02-09 23:39:48.000000000","message":"what other capabilities are there? if none, we probably don\u0027t need this.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"}],"ceilometer/configuration/pipeline/storage/impl_sqlalchemy.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a0fedff2e8291932e0e4a104497ece0876084987","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def get_config_pipeline(self):"},{"line_number":104,"context_line":"        \"\"\"Return an iterable of Pipeline model objects.\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        session \u003d self._engine_facade.get_session()"},{"line_number":107,"context_line":"        # Retrieve all pipeline sources"},{"line_number":108,"context_line":"        q_sources \u003d session.query(models.Sources.id.label(\u0027source_id\u0027),"},{"line_number":109,"context_line":"                                  models.Sources.name.label(\u0027source_name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_a2404636","line":106,"updated":"2015-02-09 23:39:48.000000000","message":"i haven\u0027t tried this but shouldn\u0027t everything be based around sourcesinkassoc... this seems like a lot of random querying.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"0885b7967d3c54ed15fb4946e26ce5344016fd50","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def get_config_pipeline(self):"},{"line_number":104,"context_line":"        \"\"\"Return an iterable of Pipeline model objects.\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        session \u003d self._engine_facade.get_session()"},{"line_number":107,"context_line":"        # Retrieve all pipeline sources"},{"line_number":108,"context_line":"        q_sources \u003d session.query(models.Sources.id.label(\u0027source_id\u0027),"},{"line_number":109,"context_line":"                                  models.Sources.name.label(\u0027source_name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_ce2e41a5","line":106,"in_reply_to":"da86d52c_2ea43db8","updated":"2015-02-10 02:22:37.000000000","message":"Minor correction - Using sqlalchemy outer join can reduce the query to one, but causes some massaging of records into the Pipeline object. Since the Pipeline object in configuration/pipeline/models.py is hierachically composed of sources and sinks which are composed of other objects. It helps by having small multiple queries that populate each object at a time.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"3b67cd87d4c6a7acd022596e1dabce18fc44094a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def get_config_pipeline(self):"},{"line_number":104,"context_line":"        \"\"\"Return an iterable of Pipeline model objects.\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        session \u003d self._engine_facade.get_session()"},{"line_number":107,"context_line":"        # Retrieve all pipeline sources"},{"line_number":108,"context_line":"        q_sources \u003d session.query(models.Sources.id.label(\u0027source_id\u0027),"},{"line_number":109,"context_line":"                                  models.Sources.name.label(\u0027source_name\u0027),"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_2ea43db8","line":106,"in_reply_to":"da86d52c_a2404636","updated":"2015-02-10 02:06:28.000000000","message":"sourcesinkassoc captures associations between source and sinks. Additional join will be needed with transformer table to capture all transformers. This does not fit into an inner join. Since there can be sinks that have no transformers and sources that are not yet mapped to sinks. Not sure if sqlalchemy can support full join; i am thinking we can whittle it down to 2 left join-based queries. One for sources-sinks and one for sinks-transformers.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"b8300b9ff7e46900df390023330e82e75c675fbb","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            if conn.dialect.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":244,"context_line":"                trans \u003d conn.begin()"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            with trans:"},{"line_number":247,"context_line":"                sink_row \u003d conn.execute("},{"line_number":248,"context_line":"                    sa.select([_sink.c.id.label(\u0027sink_id\u0027)])"},{"line_number":249,"context_line":"                    .where(sa.and_(_sink.c.name \u003d\u003d sink.name))).first()"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_c5b817e8","line":246,"updated":"2015-02-08 21:13:03.000000000","message":"I\u0027m not an expert in interactions with sql but the following \u0027select\u0027 looks very low-level. Doesn\u0027t sqlalchemy provide more simple way for execution? I\u0027m just asking, I see that in existing Ceiilometer code we use the same construction","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"9283d88dc90319bc8fd5ab1d02a6f4fa0d6d10f9","unresolved":false,"context_lines":[{"line_number":243,"context_line":"            if conn.dialect.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":244,"context_line":"                trans \u003d conn.begin()"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"            with trans:"},{"line_number":247,"context_line":"                sink_row \u003d conn.execute("},{"line_number":248,"context_line":"                    sa.select([_sink.c.id.label(\u0027sink_id\u0027)])"},{"line_number":249,"context_line":"                    .where(sa.and_(_sink.c.name \u003d\u003d sink.name))).first()"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_fa405109","line":246,"in_reply_to":"da86d52c_c5b817e8","updated":"2015-02-09 07:55:41.000000000","message":"The low-level select provides a way to distinguish between a create and update operation. Similar logic has been implemented for creating samples and meters.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"58f30317b035d4bbd19f2353cb0a650dbed8056e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"              sink_id: sink id            (-\u003esinks.id)"},{"line_number":63,"context_line":"              name: transformer name"},{"line_number":64,"context_line":"              map_to_name: transformer target map to name"},{"line_number":65,"context_line":"              map_to_unit: transformer target map to unit"},{"line_number":66,"context_line":"              map_from_name: transformer source map from name"},{"line_number":67,"context_line":"              map_from_unit: transformer source map from unit"},{"line_number":68,"context_line":"              type: transformer target type"}],"source_content_type":"text/x-python","patch_set":38,"id":"da86d52c_232778cb","line":65,"updated":"2015-02-12 14:08:44.000000000","message":"this needs to be updated.","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            with trans:"},{"line_number":214,"context_line":"                sink_row \u003d conn.execute("},{"line_number":215,"context_line":"                    sa.select([_sink.c.id.label(\u0027sink_id\u0027)])"},{"line_number":216,"context_line":"                    .where(sa.and_(_sink.c.name \u003d\u003d sink.name))).first()"},{"line_number":217,"context_line":"                sink_id \u003d sink_row[0] if sink_row else None"},{"line_number":218,"context_line":"                if sink_id is None:"},{"line_number":219,"context_line":"                    result \u003d conn.execute(_sink.insert(), name\u003dsink.name,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_8113e963","line":216,"updated":"2015-02-18 15:51:45.000000000","message":"this could probably be a scalar() and then you can assign it directly to sink_id since you\u0027re defaulting to None anyways... i\u0027m assuming this will always return one value... it should","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"078eecce97f4db8b3825ca3158133acb8f6deb12","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            with trans:"},{"line_number":214,"context_line":"                sink_row \u003d conn.execute("},{"line_number":215,"context_line":"                    sa.select([_sink.c.id.label(\u0027sink_id\u0027)])"},{"line_number":216,"context_line":"                    .where(sa.and_(_sink.c.name \u003d\u003d sink.name))).first()"},{"line_number":217,"context_line":"                sink_id \u003d sink_row[0] if sink_row else None"},{"line_number":218,"context_line":"                if sink_id is None:"},{"line_number":219,"context_line":"                    result \u003d conn.execute(_sink.insert(), name\u003dsink.name,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_38d7c3ef","line":216,"in_reply_to":"da86d52c_8113e963","updated":"2015-02-18 20:16:46.000000000","message":"Done","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                        sa.select([_sink.c.id.label(\u0027sink_id\u0027)])"},{"line_number":257,"context_line":"                        .where(sa.and_(_sink.c.name \u003d\u003d"},{"line_number":258,"context_line":"                                       sink_name))).first()"},{"line_number":259,"context_line":"                    sink_id \u003d sink_row[0] if sink_row else None"},{"line_number":260,"context_line":"                    if sink_id is not None:"},{"line_number":261,"context_line":"                        conn.execute(_assoc.insert(),"},{"line_number":262,"context_line":"                                     source_id\u003dsource_id,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_c108812f","line":259,"updated":"2015-02-18 15:51:45.000000000","message":"same ^","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"078eecce97f4db8b3825ca3158133acb8f6deb12","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                        sa.select([_sink.c.id.label(\u0027sink_id\u0027)])"},{"line_number":257,"context_line":"                        .where(sa.and_(_sink.c.name \u003d\u003d"},{"line_number":258,"context_line":"                                       sink_name))).first()"},{"line_number":259,"context_line":"                    sink_id \u003d sink_row[0] if sink_row else None"},{"line_number":260,"context_line":"                    if sink_id is not None:"},{"line_number":261,"context_line":"                        conn.execute(_assoc.insert(),"},{"line_number":262,"context_line":"                                     source_id\u003dsource_id,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_7804db7d","line":259,"in_reply_to":"da86d52c_c108812f","updated":"2015-02-18 20:16:46.000000000","message":"Done","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    .where(sa.and_(_transformer.c.name \u003d\u003d"},{"line_number":285,"context_line":"                                   transformer.name,"},{"line_number":286,"context_line":"                                   _transformer.c.sink_id \u003d\u003d sink_id)))."},{"line_number":287,"context_line":"                         first())"},{"line_number":288,"context_line":"                t_id \u003d t_row[0] if t_row else None"},{"line_number":289,"context_line":"                if t_id is None:"},{"line_number":290,"context_line":"                    result \u003d conn.execute(_transformer.insert(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_f443853c","line":287,"updated":"2015-02-18 15:51:45.000000000","message":"same","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"078eecce97f4db8b3825ca3158133acb8f6deb12","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                    .where(sa.and_(_transformer.c.name \u003d\u003d"},{"line_number":285,"context_line":"                                   transformer.name,"},{"line_number":286,"context_line":"                                   _transformer.c.sink_id \u003d\u003d sink_id)))."},{"line_number":287,"context_line":"                         first())"},{"line_number":288,"context_line":"                t_id \u003d t_row[0] if t_row else None"},{"line_number":289,"context_line":"                if t_id is None:"},{"line_number":290,"context_line":"                    result \u003d conn.execute(_transformer.insert(),"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_98098f97","line":287,"in_reply_to":"da86d52c_f443853c","updated":"2015-02-18 20:16:46.000000000","message":"Done","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"9dd0daef7c076c12f443be4c17c7f24fa08d9a9a","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        # for all components to use."},{"line_number":341,"context_line":"        self.clear_config_pipeline()"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        with engine.begin() as conn:"},{"line_number":344,"context_line":"            if sinks:"},{"line_number":345,"context_line":"                for sink in sinks:"},{"line_number":346,"context_line":"                    self._update_pipeline_sink(conn, sink)"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_1dcbd172","line":343,"updated":"2015-02-18 19:46:55.000000000","message":"@gordc: Do we need to have the entire pipeline update as a single transaction? Sources, sinks and transformers are related to one another, so making a non-whole transaction could lead to impartial updates. The individual update methods should still be able to use their own transaction but also be able to participate in a global pipeline-level transaction in case of pipeline update operation. Currently they just create their own transaction context. Thoughts?","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"69131af74b734784a8ff842cf138c10f2ff537cd","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        # for all components to use."},{"line_number":341,"context_line":"        self.clear_config_pipeline()"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        with engine.begin() as conn:"},{"line_number":344,"context_line":"            if sinks:"},{"line_number":345,"context_line":"                for sink in sinks:"},{"line_number":346,"context_line":"                    self._update_pipeline_sink(conn, sink)"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_fd76fdd6","line":343,"in_reply_to":"da86d52c_1dcbd172","updated":"2015-02-18 19:58:10.000000000","message":"i think it\u0027d be good to allow updates at a more individual level ie. just sources... but i believe the current proposed use case is to only allow complete refresh of all pipelines?\n\ni don\u0027t have a real use case so you can probably take my opinion on this with less weight.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"078eecce97f4db8b3825ca3158133acb8f6deb12","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        # for all components to use."},{"line_number":341,"context_line":"        self.clear_config_pipeline()"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        with engine.begin() as conn:"},{"line_number":344,"context_line":"            if sinks:"},{"line_number":345,"context_line":"                for sink in sinks:"},{"line_number":346,"context_line":"                    self._update_pipeline_sink(conn, sink)"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_f86c4b38","line":343,"in_reply_to":"da86d52c_fd76fdd6","updated":"2015-02-18 20:16:46.000000000","message":"I was referring to PUT/POST operations for the complete pipeline. Atomicity of transaction would be a desired feature for this scenario? The other cases like PATCH a source, sink or transformer will be handled by transactions at a granular method level as they are now.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"0ad4ec7bd688fd3fae31438613fc251e77d1a576","unresolved":false,"context_lines":[{"line_number":42,"context_line":"          - { id: source id"},{"line_number":43,"context_line":"              name: source name"},{"line_number":44,"context_line":"              interval: polling interval"},{"line_number":45,"context_line":"              meters: comma separated meter names"},{"line_number":46,"context_line":"              }"},{"line_number":47,"context_line":"        - sinks"},{"line_number":48,"context_line":"          - pipeline sink definition"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_31bec4ae","line":45,"updated":"2015-02-27 17:40:41.000000000","message":"Possibly wildcarded, or negated?","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"ceeef72d4e096233b2441977dea8f399b6cc0273","unresolved":false,"context_lines":[{"line_number":42,"context_line":"          - { id: source id"},{"line_number":43,"context_line":"              name: source name"},{"line_number":44,"context_line":"              interval: polling interval"},{"line_number":45,"context_line":"              meters: comma separated meter names"},{"line_number":46,"context_line":"              }"},{"line_number":47,"context_line":"        - sinks"},{"line_number":48,"context_line":"          - pipeline sink definition"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_3578d7c3","line":45,"in_reply_to":"ba7be1f8_2ea196a9","updated":"2015-03-03 00:43:17.000000000","message":"Done","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"0870f4164aed238d6441a7ec4393d6a8b36234cd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"          - { id: source id"},{"line_number":43,"context_line":"              name: source name"},{"line_number":44,"context_line":"              interval: polling interval"},{"line_number":45,"context_line":"              meters: comma separated meter names"},{"line_number":46,"context_line":"              }"},{"line_number":47,"context_line":"        - sinks"},{"line_number":48,"context_line":"          - pipeline sink definition"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_cbb57332","line":45,"in_reply_to":"ba7be1f8_31bec4ae","updated":"2015-02-27 18:57:10.000000000","message":"@eoghan: Meter names can be wildcarded, negated or expressed as a set of meters. It still gets stored as a comma separated list of names in db since we dont want to add extra processing around wildcarding. Wildcarding and negating is still supported at the pipeline level for meters and it will be stored just that way. A * would be stored as a string *, storage.objects.* would also be stored as is. A * and a ~image.* would be stored as *,~image.*","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"bbbcf1e422bae816190c14fbd4643dda887bc70c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"          - { id: source id"},{"line_number":43,"context_line":"              name: source name"},{"line_number":44,"context_line":"              interval: polling interval"},{"line_number":45,"context_line":"              meters: comma separated meter names"},{"line_number":46,"context_line":"              }"},{"line_number":47,"context_line":"        - sinks"},{"line_number":48,"context_line":"          - pipeline sink definition"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_2ea196a9","line":45,"in_reply_to":"ba7be1f8_cbb57332","updated":"2015-03-02 08:44:26.000000000","message":"Understood, so would the description would be more accurate as something like:\n\n  meters: comma separated list of meter name filters","commit_id":"b9337eea28771c5596109288e46862f7a6500079"}],"ceilometer/configuration/pipeline/storage/models.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"24edd53cad7ce374acee4ed8e4468a7f8b1fad81","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":42,"id":"da86d52c_ee1305ff","line":93,"updated":"2015-02-16 18:04:39.000000000","message":"is this a model of pipeline manager? trying to understand why this is a list","commit_id":"33e6c3bb1a3c2c3aa24529d9c92c5b85bbf4b320"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"a00f129b69e238033c63fd7506b5017a60c9bb4d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_a9eb9e10","line":93,"updated":"2015-02-17 18:28:53.000000000","message":"sinks is an object representation of the Sinks table. The pipeline storage layer returns sources and sinks as list objects in a Pipeline object. The PipelineManager deals with sources and sinks as json. The pipeline api/agent layer is expected to take this object repr and convert it into json before transforming it into consumable pipes using PipelineManager.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_41301156","line":93,"in_reply_to":"da86d52c_a9eb9e10","updated":"2015-02-18 15:51:45.000000000","message":"cool cool. it\u0027s just typically we describe a pipeline as a single source-sink pair... this seems to be all the pipelines... just differing use of terminology","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"0ad4ec7bd688fd3fae31438613fc251e77d1a576","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_df1c51c4","line":93,"updated":"2015-02-27 17:40:41.000000000","message":"This notion of a pipeline encapsulating many sources and sinks seems to conflict with the prior concept of a pipeline representing just a *single* source-sink pair:\n\n  https://github.com/openstack/ceilometer/blob/master/ceilometer/pipeline.py#L436","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"ceeef72d4e096233b2441977dea8f399b6cc0273","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_b82d9e48","line":93,"in_reply_to":"ba7be1f8_2e04367d","updated":"2015-03-03 00:43:17.000000000","message":"Done","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"bbbcf1e422bae816190c14fbd4643dda887bc70c","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_2e04367d","line":93,"in_reply_to":"ba7be1f8_6be64718","updated":"2015-03-02 08:44:26.000000000","message":"\u003e I think you are referring to the notion of pipeline in PipelineManager, which has multiple pipeline each representing a single source-sink pair.\n\nYes, exactly.\n\n\u003e The Pipeline object in the storage model is a model of the pipeline.yaml or the pipeline configuration shared by all CM components. It tries to model the contents of pipeline.yaml which has multiple sources and multiple sinks.\n\nYes, got that. The pipeline.yaml contains a set of pipeline*s*, as does this storage model. So it would seem clearer to me if the model name was pluralized. It would be arguable that pipeline.yaml should itself have been pluralized from the outset, but in this case I\u0027d be concerned with using Pipeline to name a python class in two different contexts, one of which represents an individual source-sink association and the other representing all source-sink associations. Another option would be to name it with a singular collective noun, e.g. PipelineCollection.","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"0870f4164aed238d6441a7ec4393d6a8b36234cd","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        \"\"\""},{"line_number":91,"context_line":"        base.Model.__init__(self,"},{"line_number":92,"context_line":"                            sources\u003dsources,"},{"line_number":93,"context_line":"                            sinks\u003dsinks)"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_6be64718","line":93,"in_reply_to":"ba7be1f8_df1c51c4","updated":"2015-02-27 18:57:10.000000000","message":"@eoghan: I think you are referring to the notion of pipeline in PipelineManager, which has multiple pipeline each representing a single source-sink pair.\n\nThe Pipeline object in the storage model is a model of the pipeline.yaml or the pipeline configuration shared by all CM components. It tries to model the contents of pipeline.yaml which has multiple sources and multiple sinks.\n\nThe API/Agent layer will transform this representation to the notion of pipeline in PipelineManager so that i can be fed to other components. This also where pipeline validation comes in.","commit_id":"b9337eea28771c5596109288e46862f7a6500079"}],"ceilometer/notification.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2dfb35ef6ee94033cafe0dbccf910d85244869f6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from stevedore import extension"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ceilometer import coordination"},{"line_number":24,"context_line":"from ceilometer.dbconfig import DbConfig"},{"line_number":25,"context_line":"from ceilometer.event import endpoint as event_endpoint"},{"line_number":26,"context_line":"from ceilometer.i18n import _"},{"line_number":27,"context_line":"from ceilometer import messaging"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_82757533","line":24,"updated":"2015-01-27 13:29:07.000000000","message":"ditto","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2dfb35ef6ee94033cafe0dbccf910d85244869f6","unresolved":false,"context_lines":[{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def start(self):"},{"line_number":84,"context_line":"        super(NotificationService, self).start()"},{"line_number":85,"context_line":"        self.tg.add_timer(7, self.refresh_pipeline_config)"},{"line_number":86,"context_line":"        self.pipeline_manager \u003d pipeline.setup_pipeline(thread_group\u003dself.tg)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        transport \u003d messaging.get_transport()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_623de92a","line":85,"updated":"2015-01-27 13:29:07.000000000","message":"Why do you use constant 7 second here?","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"                if cfg.CONF.notification.workload_partitioning:"},{"line_number":213,"context_line":"                    self._refresh_agent(None)"},{"line_number":214,"context_line":"                \u0027\u0027\u0027"},{"line_number":215,"context_line":"                self._kill_listeners(self.listeners)"},{"line_number":216,"context_line":"                self._configure_main_queue_listeners(self.pipeline_manager)"},{"line_number":217,"context_line":"                \u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_17c2a084","line":214,"updated":"2015-01-27 14:54:01.000000000","message":"amiright that it is a comment? if so it is better to use #...\ninstead of multiquotes.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"}],"ceilometer/pipeline.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                           ))"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":""},{"line_number":576,"context_line":"def get_pipeline_cfg_from_file():"},{"line_number":577,"context_line":"    cfg_file \u003d cfg.CONF.pipeline_cfg_file"},{"line_number":578,"context_line":"    if not os.path.exists(cfg_file):"},{"line_number":579,"context_line":"        cfg_file \u003d cfg.CONF.find_file(cfg_file)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_37acfc8b","line":576,"updated":"2015-01-27 14:54:01.000000000","message":"It would be nice if we have some discriptions for new functions.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"69f1869c573ef2f53bbd6903a092354b2e394c37","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               default\u003d\"event_pipeline.yaml\","},{"line_number":44,"context_line":"               help\u003d\"Configuration file for event pipeline definition.\""},{"line_number":45,"context_line":"               ),"},{"line_number":46,"context_line":"    cfg.BoolOpt(\u0027config_in_db\u0027,"},{"line_number":47,"context_line":"                default\u003dFalse,"},{"line_number":48,"context_line":"                help\u003d\"Store configuration in database.\""},{"line_number":49,"context_line":"                ),"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_3a3304f7","line":46,"updated":"2015-02-06 07:39:59.000000000","message":"We should have the pipeline word somewhere.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"0ad64ec67eb1d5712aad9b186d7dfcdf0b47c5f3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               default\u003d\"event_pipeline.yaml\","},{"line_number":44,"context_line":"               help\u003d\"Configuration file for event pipeline definition.\""},{"line_number":45,"context_line":"               ),"},{"line_number":46,"context_line":"    cfg.BoolOpt(\u0027pipeline_config_in_db\u0027,"},{"line_number":47,"context_line":"                default\u003dFalse,"},{"line_number":48,"context_line":"                help\u003d\"Store configuration in database.\""},{"line_number":49,"context_line":"                ),"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_1f752932","line":46,"updated":"2015-03-10 19:42:00.000000000","message":"Instead of defining this as a boolean option, why not just look at whether or not the pipeline database URL is set?","commit_id":"1f49e38295e369114679d21d65d22611f863391b"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"e1a95faa86bfe8dfba9339c25ee565c2ecfdc583","unresolved":false,"context_lines":[{"line_number":43,"context_line":"               default\u003d\"event_pipeline.yaml\","},{"line_number":44,"context_line":"               help\u003d\"Configuration file for event pipeline definition.\""},{"line_number":45,"context_line":"               ),"},{"line_number":46,"context_line":"    cfg.BoolOpt(\u0027pipeline_config_in_db\u0027,"},{"line_number":47,"context_line":"                default\u003dFalse,"},{"line_number":48,"context_line":"                help\u003d\"Store configuration in database.\""},{"line_number":49,"context_line":"                ),"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_e580c348","line":46,"in_reply_to":"9a80dd14_1f752932","updated":"2015-03-10 22:34:37.000000000","message":"Sure, we can do it that way. We can take care of the detailed explanation in the docs.","commit_id":"1f49e38295e369114679d21d65d22611f863391b"}],"ceilometer/storage/__init__.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"b8300b9ff7e46900df390023330e82e75c675fbb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027pipeline_connection\u0027,"},{"line_number":66,"context_line":"               default\u003dNone,"},{"line_number":67,"context_line":"               help\u003d\u0027The connection string used to connect to the pipeline \u0027"},{"line_number":68,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027mongodb_replica_set\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_65876b13","line":67,"updated":"2015-02-08 21:13:03.000000000","message":"Not clear phrase \"connection is used\". What connection?","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"9283d88dc90319bc8fd5ab1d02a6f4fa0d6d10f9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027pipeline_connection\u0027,"},{"line_number":66,"context_line":"               default\u003dNone,"},{"line_number":67,"context_line":"               help\u003d\u0027The connection string used to connect to the pipeline \u0027"},{"line_number":68,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":69,"context_line":"    cfg.StrOpt(\u0027mongodb_replica_set\u0027,"},{"line_number":70,"context_line":"               default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_da9f0db3","line":67,"in_reply_to":"da86d52c_65876b13","updated":"2015-02-09 07:55:41.000000000","message":"Similar to connection strings for alarm(alarm_connection) and event(event_connection), pipeline_connection will hold the connection string to connect to the database that stores pipeline configuration.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"0ad64ec67eb1d5712aad9b186d7dfcdf0b47c5f3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               default\u003dNone,"},{"line_number":63,"context_line":"               help\u003d\u0027The connection string used to connect to the event \u0027"},{"line_number":64,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027pipeline_connection\u0027,"},{"line_number":66,"context_line":"               default\u003dNone,"},{"line_number":67,"context_line":"               help\u003d\u0027The connection string used to connect to the pipeline \u0027"},{"line_number":68,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_dfc8f158","line":65,"updated":"2015-03-10 19:42:00.000000000","message":"Instead of adding a new option here, we should deprecate the old pipeline_cfg_file and rename it to something like pipeline_cfg_storage_url. Existing values that are filenames won\u0027t have a schema defined, so we can tell that they are files. New values that point to a database will have a schema and we can use that to switch to the database driver and store the data there. This prevents a user from configuring both the file and database URL and forgetting to set the boolean to cause the database to actually be used.","commit_id":"1f49e38295e369114679d21d65d22611f863391b"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"e1a95faa86bfe8dfba9339c25ee565c2ecfdc583","unresolved":false,"context_lines":[{"line_number":62,"context_line":"               default\u003dNone,"},{"line_number":63,"context_line":"               help\u003d\u0027The connection string used to connect to the event \u0027"},{"line_number":64,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027pipeline_connection\u0027,"},{"line_number":66,"context_line":"               default\u003dNone,"},{"line_number":67,"context_line":"               help\u003d\u0027The connection string used to connect to the pipeline \u0027"},{"line_number":68,"context_line":"               \u0027database. (if unset, connection is used)\u0027),"}],"source_content_type":"text/x-python","patch_set":47,"id":"9a80dd14_65685388","line":65,"in_reply_to":"9a80dd14_dfc8f158","updated":"2015-03-10 22:34:37.000000000","message":"We are trying to preserve backward compatibility. So if you don\u0027t want to use the db, I guess you can still set the file location (as default) and not set the db connection. This will have all the agents to point to the file and not try to load it in the db.\nIf we remove that pipeline_cfg_file we are breaking backward compatibility, I guess ... My 2c.","commit_id":"1f49e38295e369114679d21d65d22611f863391b"}],"ceilometer/storage/base.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":25,"context_line":"import six"},{"line_number":26,"context_line":"from six import moves"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"import ceilometer"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_77e044cd","line":28,"updated":"2015-01-27 14:54:01.000000000","message":"seems that additional empty line is little bit odd here.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @staticmethod"},{"line_number":277,"context_line":"    def get_config_pipeline():"},{"line_number":278,"context_line":"        \"\"\"Return an iterable of Pipeline model objects"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_5771880a","line":278,"updated":"2015-01-27 14:54:01.000000000","message":"Should be finished with dot and be single not multi line docstring.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2dfb35ef6ee94033cafe0dbccf910d85244869f6","unresolved":false,"context_lines":[{"line_number":749,"context_line":"                    )"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"    def get_config_pipeline(self):"},{"line_number":752,"context_line":"        \"\"\"Return an iterable of Pipeline model objects"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        \"\"\""},{"line_number":755,"context_line":"        session \u003d self._engine_facade.get_session()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_c2f13d6c","line":752,"updated":"2015-01-27 13:29:07.000000000","message":"Please, add dot at the end of first doctring.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":749,"context_line":"                    )"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"    def get_config_pipeline(self):"},{"line_number":752,"context_line":"        \"\"\"Return an iterable of Pipeline model objects"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"        \"\"\""},{"line_number":755,"context_line":"        session \u003d self._engine_facade.get_session()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_f7dd14e1","line":752,"in_reply_to":"1a930d6b_c2f13d6c","updated":"2015-01-27 14:54:01.000000000","message":"please finish that docstring on one line.","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2dfb35ef6ee94033cafe0dbccf910d85244869f6","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"            session.query(table).delete()"},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"    def set_config_pipeline(self, pipeline):"},{"line_number":1034,"context_line":"        \"\"\"Create/ update Pipeline model objects"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"        :param pipeline: Pipeline model object"},{"line_number":1037,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_42054d44","line":1034,"updated":"2015-01-27 13:29:07.000000000","message":"ditto","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"5c03e3a958347ca6cad1ab53fa5e04059ff033c5","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from ceilometer.storage.sqlalchemy import utils as sql_utils"},{"line_number":41,"context_line":"from ceilometer import utils"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"import datetime"},{"line_number":44,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_9c0f152e","line":43,"updated":"2015-02-03 12:49:03.000000000","message":"Please, move this import to first group.","commit_id":"ba5958d34c37ba24c1398bef66357195dc55e63d"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b3629e1da57498782350ed34018a20bdc59f91b8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"from ceilometer.storage.sqlalchemy import utils as sql_utils"},{"line_number":41,"context_line":"from ceilometer import utils"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"import datetime"},{"line_number":44,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_3cb629fb","line":43,"updated":"2015-02-03 12:55:07.000000000","message":"That change is not responsible. Move that import back at line 17","commit_id":"ba5958d34c37ba24c1398bef66357195dc55e63d"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b3629e1da57498782350ed34018a20bdc59f91b8","unresolved":false,"context_lines":[{"line_number":1042,"context_line":"        LOG.info(_(\"%d pipeline removed from database\"))"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"    def set_config_pipeline(self, pipeline):"},{"line_number":1045,"context_line":"        \"\"\"Create/ update Pipeline model objects."},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"        :param pipeline: Pipeline model object"},{"line_number":1048,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_7ccb4153","line":1045,"updated":"2015-02-03 12:55:07.000000000","message":"It seems that space after slash is useless.","commit_id":"ba5958d34c37ba24c1398bef66357195dc55e63d"}],"ceilometer/storage/models.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                 meter_names,"},{"line_number":159,"context_line":"                 sink_names\u003dNone"},{"line_number":160,"context_line":"                 ):"},{"line_number":161,"context_line":"        \"\"\"Create a new source."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        :param name: name of source"},{"line_number":164,"context_line":"        :param interval: time interval of source element (polling element)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_177540ca","line":161,"updated":"2015-01-27 14:54:01.000000000","message":"That docs strings seem to be moved up and be included in multi-line docs under class definition otherwise please use #","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                 map_from_name,"},{"line_number":193,"context_line":"                 map_from_unit"},{"line_number":194,"context_line":"                 ):"},{"line_number":195,"context_line":"        \"\"\"Create a new Transformer Source."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        :param map_from_name: Name of the source meter to be mapped"},{"line_number":198,"context_line":"        :param map_from_unit: Unit of the source meter to be mapped"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_b73aace4","line":195,"updated":"2015-01-27 14:54:01.000000000","message":"ditto","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b9859387daf1d5871db43673e843bea89b263739","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                 type,"},{"line_number":218,"context_line":"                 scale\u003dNone"},{"line_number":219,"context_line":"                 ):"},{"line_number":220,"context_line":"        \"\"\"Create a new Transformer Target."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        :param map_to_name: name of result meter post mapping"},{"line_number":223,"context_line":"        :param map_to_unit: unit of the result meter post mapping"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_d714984e","line":220,"updated":"2015-01-27 14:54:01.000000000","message":"here and further ditto","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"}],"ceilometer/storage/sqlalchemy/migrate_repo/versions/040_create_pipeline_config_data.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"07d28e144a595dbea59f597288752362e37dcded","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        Column(\u0027sink_name\u0027, String(255), unique\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027publisher_type\u0027, String(255)),"},{"line_number":55,"context_line":"        Column(\u0027sink_transformer_id\u0027, Integer),"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    transformers \u003d Table("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_3a8184c3","line":56,"updated":"2014-12-19 18:09:52.000000000","message":"missing mysql  settings here.","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":7336,"name":"Phil Neal","email":"phil.neal@hp.com","username":"nealph"},"change_message_id":"1de591e27af31c2dcffbe801b58c4f4f638326ab","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        Column(\u0027sink_name\u0027, String(255), unique\u003dTrue),"},{"line_number":54,"context_line":"        Column(\u0027publisher_type\u0027, String(255)),"},{"line_number":55,"context_line":"        Column(\u0027sink_transformer_id\u0027, Integer),"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    transformers \u003d Table("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_c395fc40","line":56,"in_reply_to":"3a961159_3a8184c3","updated":"2014-12-19 19:41:23.000000000","message":"Done","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"462ac764ac07aba48d5c80d6453341a0385dcd04","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        Column(\u0027map_to_unit\u0027, String(255)),"},{"line_number":68,"context_line":"        Column(\u0027map_from_unit\u0027, String(255)),"},{"line_number":69,"context_line":"        Column(\u0027map_to_type\u0027, String(255)),"},{"line_number":70,"context_line":"        Column(\u0027map_from_type\u0027, String(255)),"},{"line_number":71,"context_line":"        Column(\u0027map_to_scale\u0027, String(255)),"},{"line_number":72,"context_line":"        Column(\u0027map_from_scale\u0027, String(255)),"},{"line_number":73,"context_line":"        Column(\u0027timestamp\u0027, DateTime(timezone\u003dFalse), index\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_3570a471","line":70,"updated":"2014-12-21 16:38:21.000000000","message":"from type i dont think we need","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"07d28e144a595dbea59f597288752362e37dcded","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        Column(\u0027map_to_type\u0027, String(255)),"},{"line_number":70,"context_line":"        Column(\u0027map_from_type\u0027, String(255)),"},{"line_number":71,"context_line":"        Column(\u0027map_to_scale\u0027, String(255)),"},{"line_number":72,"context_line":"        Column(\u0027map_from_scale\u0027, String(255)),"},{"line_number":73,"context_line":"        Column(\u0027timestamp\u0027, DateTime(timezone\u003dFalse), index\u003dTrue),"},{"line_number":74,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":75,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_fa4b7c84","line":72,"updated":"2014-12-19 18:09:52.000000000","message":"we could probably shrink the size of all these fields.","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"462ac764ac07aba48d5c80d6453341a0385dcd04","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        Column(\u0027map_to_type\u0027, String(255)),"},{"line_number":70,"context_line":"        Column(\u0027map_from_type\u0027, String(255)),"},{"line_number":71,"context_line":"        Column(\u0027map_to_scale\u0027, String(255)),"},{"line_number":72,"context_line":"        Column(\u0027map_from_scale\u0027, String(255)),"},{"line_number":73,"context_line":"        Column(\u0027timestamp\u0027, DateTime(timezone\u003dFalse), index\u003dTrue),"},{"line_number":74,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":75,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_5569b08a","line":72,"in_reply_to":"3a961159_83a8548d","updated":"2014-12-21 16:38:21.000000000","message":"i think we can drop from_scale as well","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":7336,"name":"Phil Neal","email":"phil.neal@hp.com","username":"nealph"},"change_message_id":"1de591e27af31c2dcffbe801b58c4f4f638326ab","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        Column(\u0027map_to_type\u0027, String(255)),"},{"line_number":70,"context_line":"        Column(\u0027map_from_type\u0027, String(255)),"},{"line_number":71,"context_line":"        Column(\u0027map_to_scale\u0027, String(255)),"},{"line_number":72,"context_line":"        Column(\u0027map_from_scale\u0027, String(255)),"},{"line_number":73,"context_line":"        Column(\u0027timestamp\u0027, DateTime(timezone\u003dFalse), index\u003dTrue),"},{"line_number":74,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":75,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_83a8548d","line":72,"in_reply_to":"3a961159_fa4b7c84","updated":"2014-12-19 19:41:23.000000000","message":"Done","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"07d28e144a595dbea59f597288752362e37dcded","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    source_sink_assoc \u003d Table("},{"line_number":79,"context_line":"        \u0027source_sink_assoc\u0027, meta,"},{"line_number":80,"context_line":"        Column(\u0027source_sink_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":81,"context_line":"        Column(\u0027source_id\u0027, Integer, ForeignKey(\u0027polling_sources.source_id\u0027)),"},{"line_number":82,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027meter_sinks.meter_sink_id\u0027)),"},{"line_number":83,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":84,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_bae2d49d","line":81,"updated":"2014-12-19 18:09:52.000000000","message":"i\u0027d assume we need some sort of link for notification_sources as well.","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"},{"author":{"_account_id":7336,"name":"Phil Neal","email":"phil.neal@hp.com","username":"nealph"},"change_message_id":"1de591e27af31c2dcffbe801b58c4f4f638326ab","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    source_sink_assoc \u003d Table("},{"line_number":79,"context_line":"        \u0027source_sink_assoc\u0027, meta,"},{"line_number":80,"context_line":"        Column(\u0027source_sink_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":81,"context_line":"        Column(\u0027source_id\u0027, Integer, ForeignKey(\u0027polling_sources.source_id\u0027)),"},{"line_number":82,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027meter_sinks.meter_sink_id\u0027)),"},{"line_number":83,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":84,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_43a2ecae","line":81,"in_reply_to":"3a961159_bae2d49d","updated":"2014-12-19 19:41:23.000000000","message":"Yes, as noted in irc, I will have to either drop the fk reference to polling_sources or add notification_source. I\u0027m leaning toward the first option, but I\u0027m not yet clear on whether the sqlalchemy backref will work as expected (I assume yes, based on a quick review of the meter and alarm table definitions).","commit_id":"b27196eed4490c542db91ef3d9fb5b49e5c89c25"}],"ceilometer/storage/sqlalchemy/migrate_repo/versions/041_create_pipeline_config_data.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"def upgrade(migrate_engine):"},{"line_number":24,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":25,"context_line":"    # TODO(rjaiswal): sources and sinks will need a timestamp column"},{"line_number":26,"context_line":"    sources \u003d Table("},{"line_number":27,"context_line":"        \u0027sources\u0027, meta,"},{"line_number":28,"context_line":"        Column(\u0027source_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_1430f59d","line":25,"updated":"2015-02-05 15:37:44.000000000","message":"todo for this patch?","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    sources \u003d Table("},{"line_number":27,"context_line":"        \u0027sources\u0027, meta,"},{"line_number":28,"context_line":"        Column(\u0027source_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":29,"context_line":"        Column(\u0027source_name\u0027, String(127), unique\u003dTrue),"},{"line_number":30,"context_line":"        Column(\u0027interval\u0027, Integer),"},{"line_number":31,"context_line":"        Column(\u0027meter_names_list\u0027, Text()),"},{"line_number":32,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_6f295836","line":29,"updated":"2015-02-05 15:37:44.000000000","message":"smaller...  50? 127 is almost a max twitter message which is huge for a name.\n\njust for reference String(50) \u003d\u003e abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        \u0027sources\u0027, meta,"},{"line_number":28,"context_line":"        Column(\u0027source_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":29,"context_line":"        Column(\u0027source_name\u0027, String(127), unique\u003dTrue),"},{"line_number":30,"context_line":"        Column(\u0027interval\u0027, Integer),"},{"line_number":31,"context_line":"        Column(\u0027meter_names_list\u0027, Text()),"},{"line_number":32,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":33,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_f400c103","line":30,"updated":"2015-02-05 15:37:44.000000000","message":"smallint?","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        Column(\u0027source_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":29,"context_line":"        Column(\u0027source_name\u0027, String(127), unique\u003dTrue),"},{"line_number":30,"context_line":"        Column(\u0027interval\u0027, Integer),"},{"line_number":31,"context_line":"        Column(\u0027meter_names_list\u0027, Text()),"},{"line_number":32,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":33,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":34,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_d4765d05","line":31,"updated":"2015-02-05 15:37:44.000000000","message":"\"meters\"","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    sinks \u003d Table("},{"line_number":37,"context_line":"        \u0027sinks\u0027, meta,"},{"line_number":38,"context_line":"        Column(\u0027sink_id\u0027, Integer, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        Column(\u0027sink_name\u0027, String(127), unique\u003dTrue),"},{"line_number":40,"context_line":"        Column(\u0027publishers\u0027, Text()),"},{"line_number":41,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":42,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_af935059","line":39,"updated":"2015-02-05 15:37:44.000000000","message":"same as above.","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \u0027sinks\u0027, meta,"},{"line_number":38,"context_line":"        Column(\u0027sink_id\u0027, Integer, primary_key\u003dTrue),"},{"line_number":39,"context_line":"        Column(\u0027sink_name\u0027, String(127), unique\u003dTrue),"},{"line_number":40,"context_line":"        Column(\u0027publishers\u0027, Text()),"},{"line_number":41,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":42,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":43,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_4fe734e4","line":40,"updated":"2015-02-05 15:37:44.000000000","message":"this could be something smaller... a string(127)? not sure many parameters we intend to support in our publishers so feel free to counter.","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    transformers \u003d Table("},{"line_number":46,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":47,"context_line":"        Column(\u0027transformer_id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":48,"context_line":"        Column(\u0027transformer_name\u0027, String(127)),"},{"line_number":49,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.sink_id\u0027)),"},{"line_number":50,"context_line":"        Column(\u0027map_to_name\u0027, String(255)),"},{"line_number":51,"context_line":"        Column(\u0027map_from_name\u0027, String(255)),"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_0fcb7c1f","line":48,"updated":"2015-02-05 15:37:44.000000000","message":"same.","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"6847140a7389270c1e4cbd41a6d525645249aafd","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def upgrade(migrate_engine):"},{"line_number":25,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":26,"context_line":"    # TODO(rjaiswal): sources and sinks will need a timestamp column"},{"line_number":27,"context_line":"    sources \u003d Table("},{"line_number":28,"context_line":"        \u0027sources\u0027, meta,"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_3287b2b6","line":25,"updated":"2015-02-06 20:45:12.000000000","message":"@gordc: Timestamp for sources/sinks will be used by the agents (notification and polling) to determine if the pipeline configuration has changed and if they need to reload it.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"314af2f4f0bbcf263302a9db4cd1c28a508ca289","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def upgrade(migrate_engine):"},{"line_number":25,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":26,"context_line":"    # TODO(rjaiswal): sources and sinks will need a timestamp column"},{"line_number":27,"context_line":"    sources \u003d Table("},{"line_number":28,"context_line":"        \u0027sources\u0027, meta,"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_e8f0a693","line":25,"in_reply_to":"da86d52c_3287b2b6","updated":"2015-02-06 22:06:21.000000000","message":"i see... have you considered ORM events? (http://docs.sqlalchemy.org/en/latest/orm/events.html)","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"6847140a7389270c1e4cbd41a6d525645249aafd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027sinks\u0027, meta,"},{"line_number":39,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue),"},{"line_number":40,"context_line":"        Column(\u0027name\u0027, String(50), unique\u003dTrue),"},{"line_number":41,"context_line":"        Column(\u0027publishers\u0027, Text()),"},{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":44,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_9263fe40","line":41,"updated":"2015-02-06 20:45:12.000000000","message":"@gordc: When the kafka blueprint is implemented, the publishers  will be of the format - \nkafka://\u003cbroker_ip\u003e?topic\u003d\u003ctopic_name\u003e. There can be multiple such publishers, so i would like to keep it as Text.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"314af2f4f0bbcf263302a9db4cd1c28a508ca289","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        \u0027sinks\u0027, meta,"},{"line_number":39,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue),"},{"line_number":40,"context_line":"        Column(\u0027name\u0027, String(50), unique\u003dTrue),"},{"line_number":41,"context_line":"        Column(\u0027publishers\u0027, Text()),"},{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":44,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_88b80ae7","line":41,"in_reply_to":"da86d52c_9263fe40","updated":"2015-02-06 22:06:21.000000000","message":"so you plan on storing publishers as a delimited string? apologies if this is shown in a future patch","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a49f24c68faa402d963ae65803a62a13b91d6778","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":50,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":51,"context_line":"        Column(\u0027map_to_name\u0027, String(255)),"},{"line_number":52,"context_line":"        Column(\u0027map_from_name\u0027, String(255)),"},{"line_number":53,"context_line":"        Column(\u0027map_to_unit\u0027, String(255)),"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_09626916","line":50,"updated":"2015-02-06 16:59:54.000000000","message":"i\u0027m still wondering why this exists. i would think it should be a many to many relationship. ie. transformer can be assigned to many sinks, sinks can have many transformers.\n\nalso, this doesn\u0027t seem to maintain the sequencing of transformers. ie. if we have a 2 transformers on a sink, they should be done in a certain order.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"6847140a7389270c1e4cbd41a6d525645249aafd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":50,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":51,"context_line":"        Column(\u0027map_to_name\u0027, String(255)),"},{"line_number":52,"context_line":"        Column(\u0027map_from_name\u0027, String(255)),"},{"line_number":53,"context_line":"        Column(\u0027map_to_unit\u0027, String(255)),"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_ccbcdf09","line":50,"in_reply_to":"da86d52c_09626916","updated":"2015-02-06 20:45:12.000000000","message":"Transformers are contained within a sink. Good example is the rate_of_change transformer at https://github.com/openstack/ceilometer/blob/master/etc/ceilometer/pipeline.yaml. There are 2 transformers with the same name but they apply differently (with different parameters) to each sink context.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"314af2f4f0bbcf263302a9db4cd1c28a508ca289","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":50,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":51,"context_line":"        Column(\u0027map_to_name\u0027, String(255)),"},{"line_number":52,"context_line":"        Column(\u0027map_from_name\u0027, String(255)),"},{"line_number":53,"context_line":"        Column(\u0027map_to_unit\u0027, String(255)),"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_c8f3e29d","line":50,"in_reply_to":"da86d52c_ccbcdf09","updated":"2015-02-06 22:06:21.000000000","message":"right, the comment was more that it should be a m:n relationship but i guess you\u0027re keeping it as a 1:N relationship.\n\ncorrect me if i\u0027m wrong but this still doesn\u0027t address multiple transformers... ie. this all falls apart if you have 2+ transformers in a sink.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"7e84147b29062e1126a4fb7ccc1955611fdec8d3","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def upgrade(migrate_engine):"},{"line_number":25,"context_line":"    meta \u003d MetaData(bind\u003dmigrate_engine)"},{"line_number":26,"context_line":"    # TODO(rjaiswal): sources and sinks will need a timestamp column"},{"line_number":27,"context_line":"    sources \u003d Table("},{"line_number":28,"context_line":"        \u0027sources\u0027, meta,"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_b7e52b0c","line":25,"updated":"2015-02-07 01:06:39.000000000","message":"@gordc sure, i will take a look at sqlalchemy ORM events.\n\n@Mehdi the timestamps will be used in later patch by agents to determine whether the pipeline config in database has changed and needs to be reloaded","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"7e84147b29062e1126a4fb7ccc1955611fdec8d3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    sinks \u003d Table("},{"line_number":38,"context_line":"        \u0027sinks\u0027, meta,"},{"line_number":39,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue),"},{"line_number":40,"context_line":"        Column(\u0027name\u0027, String(50), unique\u003dTrue),"},{"line_number":41,"context_line":"        Column(\u0027publishers\u0027, Text()),"},{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_77b3b30a","line":40,"updated":"2015-02-07 01:06:39.000000000","message":"@gordc yes the storage driver will return a list of publishers when retrieving a pipeline and convert to a comma delimited text when persisting a pipeline.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a0fedff2e8291932e0e4a104497ece0876084987","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    sinks \u003d Table("},{"line_number":38,"context_line":"        \u0027sinks\u0027, meta,"},{"line_number":39,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue),"},{"line_number":40,"context_line":"        Column(\u0027name\u0027, String(50), unique\u003dTrue),"},{"line_number":41,"context_line":"        Column(\u0027publishers\u0027, Text()),"},{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_dfa99525","line":40,"in_reply_to":"da86d52c_77b3b30a","updated":"2015-02-09 23:39:48.000000000","message":"i have a feeling that might become an issue but we can ignore for now.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a0fedff2e8291932e0e4a104497ece0876084987","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    transformers \u003d Table("},{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_df76f505","line":48,"updated":"2015-02-09 23:39:48.000000000","message":"is this suppose to only work for one type of transformer? ie. we have rateofchange which this supports but there\u0027s aggregatortransformer, arithmetictransformer, etc...\n\n\nhttp://docs.openstack.org/developer/ceilometer/configuration.html#transformers","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"3b67cd87d4c6a7acd022596e1dabce18fc44094a","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    transformers \u003d Table("},{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_8ef8c9c5","line":48,"in_reply_to":"da86d52c_df76f505","updated":"2015-02-10 02:06:28.000000000","message":"It should support all types of transformers. The schema that we have in place should accommodate any type of transformer. It just doesn\u0027t capture transformer inheritance (if that is possible).","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"7e84147b29062e1126a4fb7ccc1955611fdec8d3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027map_to_name\u0027, String(255)),"},{"line_number":53,"context_line":"        Column(\u0027map_from_name\u0027, String(255)),"}],"source_content_type":"text/x-python","patch_set":36,"id":"da86d52c_f7c6c367","line":50,"updated":"2015-02-07 01:06:39.000000000","message":"I added sequencing to transformers; for 1+ transformers associated with a sink, the order will be determined by parsing the transformers top-down and storing order for each transformer.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"930fcb213594d514c5bb82fba3a585ceb6ac66ee","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":44,"context_line":"    )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    transformers \u003d Table("},{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"}],"source_content_type":"text/x-python","patch_set":37,"id":"da86d52c_052f41f7","line":46,"updated":"2015-02-10 13:42:24.000000000","message":"just out of curiosity, how do we create a aggregator or accumulator transformer from this?","commit_id":"e417313ce98455b60ab96ede023f51d698751674"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"8548148742149a3320ff493e5040fa3668418f09","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":44,"context_line":"    )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    transformers \u003d Table("},{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":38,"id":"da86d52c_89bb07e4","line":45,"updated":"2015-02-12 08:12:01.000000000","message":"@gordc valid comment, the new schema should handle any transformer with custom parameters.","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"58f30317b035d4bbd19f2353cb0a650dbed8056e","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":43,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":44,"context_line":"    )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    transformers \u003d Table("},{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":38,"id":"da86d52c_3eadcf31","line":45,"in_reply_to":"da86d52c_89bb07e4","updated":"2015-02-12 14:08:44.000000000","message":"so the api will need to convert yaml to json?","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"5ddff5e41e8fb54c5bc0b5a55903b8b9462373be","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":54,"context_line":"        mysql_charset\u003d\u0027utf8\u0027,"},{"line_number":55,"context_line":"    )"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_46ab8c74","line":53,"updated":"2015-02-12 17:59:19.000000000","message":"@gordc:  Yes, the entire pipeline yaml will be parsed into Python objects. For transformer parameters, the resulting object (a dict) will be directly mapped to the underlying parameters column.","commit_id":"86391dadd80ad6f41268ce88f5fe190959c825a7"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"778d9ca3e615d07d21ea1309ef1102682bdd3d8b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":41,"id":"da86d52c_d971e8a9","line":50,"updated":"2015-02-13 19:05:46.000000000","message":"in the spec we have a patch api where user provides pipeline id,... to patch a corresponding transformer do we expect the user to pass in id? maybe we should put a unique constraint on name+id so they don\u0027t need to know what the made up id is?","commit_id":"164e55461fdb098ffb09c0ea5ceb1eb10dbccb6e"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"a00f129b69e238033c63fd7506b5017a60c9bb4d","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_aea3a4af","line":50,"updated":"2015-02-17 18:28:53.000000000","message":"@gordc: not sure if we need pipelineid in the patch api, we expect a single pipeline definition in the backend. The source and sink names are expected to be unique and the transformer names are unique in a sink, so we can have something like /sink/meter_sink/transformers/rate_of_change to uniquely identify a transformer in a sink.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"69131af74b734784a8ff842cf138c10f2ff537cd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_bdcd6532","line":50,"in_reply_to":"da86d52c_1223c005","updated":"2015-02-18 19:58:10.000000000","message":"hmm... but if we make it transformer_id+name it will be too restrictive i think because basically you can\u0027t have the same transformer name in two different sinks? unless that is what you want? i","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"9dd0daef7c076c12f443be4c17c7f24fa08d9a9a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_1223c005","line":50,"in_reply_to":"da86d52c_34e27dd5","updated":"2015-02-18 19:46:55.000000000","message":"@gordc: i think you meant transformer_id+name?, since sink name has a unique constraint.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ee23cce4e9347d682a6b88980869545ee132f418","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_34e27dd5","line":50,"in_reply_to":"da86d52c_aea3a4af","updated":"2015-02-18 15:51:45.000000000","message":"yep, so my suggestion was to have sink_id+name have a unique constraint because right now i don\u0027t think we can actually enforce \u0027transformer name will be unique to sink\u0027.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"078eecce97f4db8b3825ca3158133acb8f6deb12","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        \u0027transformers\u0027, meta,"},{"line_number":48,"context_line":"        Column(\u0027id\u0027, Integer, primary_key\u003dTrue, index\u003dTrue),"},{"line_number":49,"context_line":"        Column(\u0027order\u0027, SmallInteger),"},{"line_number":50,"context_line":"        Column(\u0027name\u0027, String(50)),"},{"line_number":51,"context_line":"        Column(\u0027sink_id\u0027, Integer, ForeignKey(\u0027sinks.id\u0027)),"},{"line_number":52,"context_line":"        Column(\u0027parameters\u0027, Text()),"},{"line_number":53,"context_line":"        mysql_engine\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":43,"id":"da86d52c_f8d0cbf8","line":50,"in_reply_to":"da86d52c_bdcd6532","updated":"2015-02-18 20:16:46.000000000","message":"Yes, since the transformer is very specific to a sink. But i would still prefer to keep this open and not too restrictive as you mentioned. So i will go with unique constraint on name + sink_id.","commit_id":"b5999eba9029991016eec0135b066fd9af3fc390"}],"ceilometer/storage/sqlalchemy/models.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"2dfb35ef6ee94033cafe0dbccf910d85244869f6","unresolved":false,"context_lines":[{"line_number":484,"context_line":""},{"line_number":485,"context_line":"class Transformers(Base):"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    \"\"\"Pipeline configuration transformers"},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    A transformer is used in one or more sinks"},{"line_number":490,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a930d6b_3dc78097","line":487,"updated":"2015-01-27 13:29:07.000000000","message":"ditto","commit_id":"6ee61f9a92b32a1ca9f064c09d431280cef7955b"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b3629e1da57498782350ed34018a20bdc59f91b8","unresolved":false,"context_lines":[{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"class Transformers(Base):"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    \"\"\"Pipeline configuration transformers."},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    A transformer is used in one or more sinks"}],"source_content_type":"text/x-python","patch_set":23,"id":"da86d52c_fc05717a","line":485,"updated":"2015-02-03 12:55:07.000000000","message":"We not need that additional empty line here","commit_id":"ba5958d34c37ba24c1398bef66357195dc55e63d"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":500,"context_line":"    map_from_name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":501,"context_line":"    map_to_unit \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":502,"context_line":"    map_from_unit \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":503,"context_line":"    type \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":504,"context_line":"    scale \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    sink_id \u003d Column(Integer, ForeignKey(\u0027sinks.sink_id\u0027))"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_af618faa","line":503,"updated":"2015-02-05 15:37:44.000000000","message":"nullable\u003dFalse is implied.","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":503,"context_line":"    type \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":504,"context_line":"    scale \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"    sink_id \u003d Column(Integer, ForeignKey(\u0027sinks.sink_id\u0027))"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"class Pipeline(Base):"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_2ffcbfb7","line":506,"updated":"2015-02-05 15:37:44.000000000","message":"i would assume transformers would map to multiple sink_id no?","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"76555cb8581bb4982228d3d351c93d90ba54a262","unresolved":false,"context_lines":[{"line_number":510,"context_line":"    \"\"\"Mapper model."},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    It\u0027s needed as the pipeline configuration work is split"},{"line_number":513,"context_line":"    between Sources, MeterSinks and Transformers tables"},{"line_number":514,"context_line":"    \"\"\""},{"line_number":515,"context_line":"    sources \u003d Sources.__table__"},{"line_number":516,"context_line":"    sinks \u003d Sinks.__table__"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_2f991fc4","line":513,"updated":"2015-02-05 15:37:44.000000000","message":"what\u0027s MeterSinks?","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"69f1869c573ef2f53bbd6903a092354b2e394c37","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    sink \u003d relationship(\"Sinks\", backref\u003d\"source_assocs\")"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# TODO(rjaiswal): Sources and Sinks will need a timestamp column definition"},{"line_number":446,"context_line":"class Sources(Base):"},{"line_number":447,"context_line":"    \"\"\"Pipeline configuration sources."},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_1524530b","line":445,"updated":"2015-02-06 07:39:59.000000000","message":"Just for curiosity, what is the purpose of the timestamp ?","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"fcffa9892440d5664a1f6a1ebde7663ce3a0a576","unresolved":false,"context_lines":[{"line_number":442,"context_line":"    sink \u003d relationship(\"Sinks\", backref\u003d\"source_assocs\")"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# TODO(rjaiswal): Sources and Sinks will need a timestamp column definition"},{"line_number":446,"context_line":"class Sources(Base):"},{"line_number":447,"context_line":"    \"\"\"Pipeline configuration sources."},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_b909b032","line":445,"in_reply_to":"da86d52c_1524530b","updated":"2015-02-06 16:37:25.000000000","message":"When the other two patches will be submitted it will be necessary to identify if changes have been made to the pipeline in the database and agents can re-act reloading the sources and sinks.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"6847140a7389270c1e4cbd41a6d525645249aafd","unresolved":false,"context_lines":[{"line_number":503,"context_line":"    scale \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    sink_id \u003d Column(Integer, ForeignKey(\u0027sinks.id\u0027))"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"class Pipeline(Base):"},{"line_number":509,"context_line":"    \"\"\"Mapper model."}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_b2c00251","line":506,"updated":"2015-02-06 20:45:12.000000000","message":"@gordc Transformers are contained within a sink. Good example is the rate_of_change transformer in https://github.com/openstack/ceilometer/blob/master/etc/ceilometer/pipeline.yaml. There are 2 transformers with the same name (rate_of_change) but each is uniquely customized in the sink context.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"58f30317b035d4bbd19f2353cb0a650dbed8056e","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                       ForeignKey(\u0027sources.id\u0027), primary_key\u003dTrue)"},{"line_number":440,"context_line":"    sink_id \u003d Column(\u0027sink_id\u0027, Integer,"},{"line_number":441,"context_line":"                     ForeignKey(\u0027sinks.id\u0027), primary_key\u003dTrue)"},{"line_number":442,"context_line":"    sink \u003d relationship(\"Sinks\", backref\u003d\"source_assocs\")"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# TODO(rjaiswal): Sources and Sinks will need a timestamp column definition"}],"source_content_type":"text/x-python","patch_set":38,"id":"da86d52c_1efacb74","line":442,"updated":"2015-02-12 14:08:44.000000000","message":"why do we need this relationship?","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"58f30317b035d4bbd19f2353cb0a650dbed8056e","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    name \u003d Column(String(50), unique\u003dTrue)"},{"line_number":461,"context_line":"    interval \u003d Column(SmallInteger, nullable\u003dTrue)"},{"line_number":462,"context_line":"    meters \u003d Column(Text(), default\u003dNone)"},{"line_number":463,"context_line":"    sinks \u003d relationship(\"SourceSinkAssoc\", backref\u003d\"source\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"class Sinks(Base):"}],"source_content_type":"text/x-python","patch_set":38,"id":"da86d52c_7ed4a7e8","line":463,"updated":"2015-02-12 14:08:44.000000000","message":"sources? i assume it\u0027s an M:N relationship","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"58f30317b035d4bbd19f2353cb0a650dbed8056e","unresolved":false,"context_lines":[{"line_number":495,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue)"},{"line_number":496,"context_line":"    order \u003d Column(SmallInteger)"},{"line_number":497,"context_line":"    name \u003d Column(String(50))"},{"line_number":498,"context_line":"    parameters \u003d Column(Text(), default\u003dNone)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    sink_id \u003d Column(Integer, ForeignKey(\u0027sinks.id\u0027))"},{"line_number":501,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"da86d52c_9e915b49","line":498,"updated":"2015-02-12 14:08:44.000000000","message":"why do we need default \u003dNone here... and above.","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"5ddff5e41e8fb54c5bc0b5a55903b8b9462373be","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                       ForeignKey(\u0027sources.id\u0027), primary_key\u003dTrue)"},{"line_number":440,"context_line":"    sink_id \u003d Column(\u0027sink_id\u0027, Integer,"},{"line_number":441,"context_line":"                     ForeignKey(\u0027sinks.id\u0027), primary_key\u003dTrue)"},{"line_number":442,"context_line":"    sink \u003d relationship(\"Sinks\", backref\u003d\"source_assocs\")"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# TODO(rjaiswal): Sources and Sinks will need a timestamp column definition"}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_06dfd469","line":442,"updated":"2015-02-12 17:59:19.000000000","message":"@gordc: I based this on http://docs.sqlalchemy.org/en/rel_0_9/orm/basic_relationships.html#association-object.\n\nHowever, the autoloading didnt work as expected, so i went ahead with explicitly loading the association object (sourcesinkassoc).\n\nThe extra relationship attributes are of no harm and i left them there so we could use them if we find a better way.\n\nDo you know of a better way to achieve autoloading of associations in sqlalchemy?","commit_id":"86391dadd80ad6f41268ce88f5fe190959c825a7"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"5ddff5e41e8fb54c5bc0b5a55903b8b9462373be","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    name \u003d Column(String(50), unique\u003dTrue)"},{"line_number":461,"context_line":"    interval \u003d Column(SmallInteger, nullable\u003dTrue)"},{"line_number":462,"context_line":"    meters \u003d Column(Text(), default\u003dNone)"},{"line_number":463,"context_line":"    sinks \u003d relationship(\"SourceSinkAssoc\", backref\u003d\"source\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"class Sinks(Base):"}],"source_content_type":"text/x-python","patch_set":40,"id":"da86d52c_e67d606e","line":463,"updated":"2015-02-12 17:59:19.000000000","message":"@gordc: I based this on http://docs.sqlalchemy.org/en/rel_0_9/orm/basic_relationships.html#association-object.\n\nHowever, the autoloading didnt work as expected, so i went ahead with explicitly loading the association object (sourcesinkassoc).\n\nThe extra relationship attributes are of no harm and i left them there so we could use them if we find a better way.\n\nDo you know of a better way to achieve autoloading of associations in sqlalchemy?","commit_id":"86391dadd80ad6f41268ce88f5fe190959c825a7"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"3aaa62d8581dd72bea87b9758979210cce0ba2a9","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                       ForeignKey(\u0027sources.id\u0027), primary_key\u003dTrue)"},{"line_number":440,"context_line":"    sink_id \u003d Column(\u0027sink_id\u0027, Integer,"},{"line_number":441,"context_line":"                     ForeignKey(\u0027sinks.id\u0027), primary_key\u003dTrue)"},{"line_number":442,"context_line":"    sink \u003d relationship(\"Sinks\", backref\u003d\"source_assocs\")"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# TODO(rjaiswal): Sources and Sinks will need a timestamp column definition"}],"source_content_type":"text/x-python","patch_set":41,"id":"da86d52c_f13c3ce3","line":442,"updated":"2015-02-12 18:18:01.000000000","message":"@gordc: In continuation to my previous comment on this, i can remove the extra relationship attribute since its not being used currently and if we cant find a way to use it.","commit_id":"164e55461fdb098ffb09c0ea5ceb1eb10dbccb6e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"778d9ca3e615d07d21ea1309ef1102682bdd3d8b","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                       ForeignKey(\u0027sources.id\u0027), primary_key\u003dTrue)"},{"line_number":440,"context_line":"    sink_id \u003d Column(\u0027sink_id\u0027, Integer,"},{"line_number":441,"context_line":"                     ForeignKey(\u0027sinks.id\u0027), primary_key\u003dTrue)"},{"line_number":442,"context_line":"    sink \u003d relationship(\"Sinks\", backref\u003d\"source_assocs\")"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"# TODO(rjaiswal): Sources and Sinks will need a timestamp column definition"}],"source_content_type":"text/x-python","patch_set":41,"id":"da86d52c_56d6a7f2","line":442,"in_reply_to":"da86d52c_f13c3ce3","updated":"2015-02-13 19:05:46.000000000","message":"yeah, i think removing it is better.","commit_id":"164e55461fdb098ffb09c0ea5ceb1eb10dbccb6e"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"3aaa62d8581dd72bea87b9758979210cce0ba2a9","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    name \u003d Column(String(50), unique\u003dTrue)"},{"line_number":461,"context_line":"    interval \u003d Column(SmallInteger, nullable\u003dTrue)"},{"line_number":462,"context_line":"    meters \u003d Column(Text(), default\u003dNone)"},{"line_number":463,"context_line":"    sinks \u003d relationship(\"SourceSinkAssoc\", backref\u003d\"source\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"class Sinks(Base):"}],"source_content_type":"text/x-python","patch_set":41,"id":"da86d52c_f1135c62","line":463,"updated":"2015-02-12 18:18:01.000000000","message":"@gordc: Same as above","commit_id":"164e55461fdb098ffb09c0ea5ceb1eb10dbccb6e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"778d9ca3e615d07d21ea1309ef1102682bdd3d8b","unresolved":false,"context_lines":[{"line_number":460,"context_line":"    name \u003d Column(String(50), unique\u003dTrue)"},{"line_number":461,"context_line":"    interval \u003d Column(SmallInteger, nullable\u003dTrue)"},{"line_number":462,"context_line":"    meters \u003d Column(Text(), default\u003dNone)"},{"line_number":463,"context_line":"    sinks \u003d relationship(\"SourceSinkAssoc\", backref\u003d\"source\")"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"class Sinks(Base):"}],"source_content_type":"text/x-python","patch_set":41,"id":"da86d52c_36c21335","line":463,"in_reply_to":"da86d52c_f1135c62","updated":"2015-02-13 19:05:46.000000000","message":"this relationship is fine (not sure it\u0027s use) but just mentioning a sink can link to multiple sources so the backref will be a list so \u0027sources\u0027 is more accurate.","commit_id":"164e55461fdb098ffb09c0ea5ceb1eb10dbccb6e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"0ad4ec7bd688fd3fae31438613fc251e77d1a576","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class Pipeline(Base):"},{"line_number":457,"context_line":"    \"\"\"Mapper model."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    It\u0027s needed as the pipeline configuration work is split"},{"line_number":460,"context_line":"    between Sources, Sinks and Transformers tables"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_dfe1b19b","line":457,"updated":"2015-02-27 17:40:41.000000000","message":"Pipeline*s* plural?","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"161867664a213532879b4e1a526771c1f88f8e5b","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class Pipeline(Base):"},{"line_number":457,"context_line":"    \"\"\"Mapper model."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    It\u0027s needed as the pipeline configuration work is split"},{"line_number":460,"context_line":"    between Sources, Sinks and Transformers tables"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_61c9ce78","line":457,"in_reply_to":"ba7be1f8_2b836fcd","updated":"2015-03-02 15:06:57.000000000","message":"this is never used anywhere... i think it should be used in get_config_pipeline()","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"ceeef72d4e096233b2441977dea8f399b6cc0273","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class Pipeline(Base):"},{"line_number":457,"context_line":"    \"\"\"Mapper model."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    It\u0027s needed as the pipeline configuration work is split"},{"line_number":460,"context_line":"    between Sources, Sinks and Transformers tables"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_d8d97258","line":457,"in_reply_to":"ba7be1f8_61c9ce78","updated":"2015-03-03 00:43:17.000000000","message":"@gordc: It was not being used anywhere, i removed it.","commit_id":"b9337eea28771c5596109288e46862f7a6500079"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"0870f4164aed238d6441a7ec4393d6a8b36234cd","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"class Pipeline(Base):"},{"line_number":457,"context_line":"    \"\"\"Mapper model."},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"    It\u0027s needed as the pipeline configuration work is split"},{"line_number":460,"context_line":"    between Sources, Sinks and Transformers tables"}],"source_content_type":"text/x-python","patch_set":46,"id":"ba7be1f8_2b836fcd","line":457,"in_reply_to":"ba7be1f8_dfe1b19b","updated":"2015-02-27 18:57:10.000000000","message":"@eoghan: Similar to my earlier comment on Pipeline model","commit_id":"b9337eea28771c5596109288e46862f7a6500079"}],"ceilometer/tests/db.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ebc919233ff84dadc5331a7b14749b37e67842b8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    self.url, \u0027ceilometer.alarm.storage\u0027)"},{"line_number":53,"context_line":"                self.event_connection \u003d storage.get_connection("},{"line_number":54,"context_line":"                    self.url, \u0027ceilometer.event.storage\u0027)"},{"line_number":55,"context_line":"                self.pipeline_connection \u003d storage.get_connection("},{"line_number":56,"context_line":"                    self.url, \u0027ceilometer.pipeline.storage\u0027)"},{"line_number":57,"context_line":"            except storage.StorageBadVersion as e:"},{"line_number":58,"context_line":"                raise testcase.TestSkipped(six.text_type(e))"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_c4a798a5","line":55,"updated":"2015-02-05 09:51:05.000000000","message":"I think these lines should only be added to those Managers, for which the actual implementation is available.","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ebc919233ff84dadc5331a7b14749b37e67842b8","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self.event_conn \u003d self.db_manager.event_connection"},{"line_number":224,"context_line":"        self.event_conn.upgrade()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        self.pipeline_conn \u003d self.db_manager.pipeline_connection"},{"line_number":227,"context_line":"        self.pipeline_conn.upgrade()"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        self.useFixture(mockpatch.Patch(\u0027ceilometer.storage.get_connection\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"da86d52c_04e450df","line":226,"updated":"2015-02-05 09:51:05.000000000","message":"It can be checked that which engine is used for testing, so these two lines can be used for the appropriate engine and you can use self.addCleanup() instead of tearDown() to remove the settings after the tests.","commit_id":"9955802be5a229448f4d702be7ea0694bb972279"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"69f1869c573ef2f53bbd6903a092354b2e394c37","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        self.event_conn \u003d self.db_manager.event_connection"},{"line_number":220,"context_line":"        self.event_conn.upgrade()"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        if ((engine \u003d\u003d \u0027mysql\u0027 or engine \u003d\u003d"},{"line_number":223,"context_line":"             \u0027postgresql\u0027 or engine \u003d\u003d \u0027sqlite\u0027)):"},{"line_number":224,"context_line":"            self.pipeline_conn \u003d self.db_manager.pipeline_connection"},{"line_number":225,"context_line":"            self.pipeline_conn.upgrade()"}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_153d332b","line":222,"updated":"2015-02-06 07:39:59.000000000","message":"The connection should always created, the scenarios stuff automatically skip tests that raise ceilometer.NotImplemented.","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"}],"ceilometer/tests/storage/test_impl_sqlalchemy.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"69f1869c573ef2f53bbd6903a092354b2e394c37","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"@tests_db.run_with(\u0027sqlite\u0027)"},{"line_number":273,"context_line":"class PipelineConfigTest(tests_db.TestBase):"},{"line_number":274,"context_line":"    def test_set_pipeline_config(self):"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        expected_sources \u003d ["}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_dacca8bd","line":273,"updated":"2015-02-06 07:39:59.000000000","message":"This class must be in test_storage_scenarios.py, and must be not restricted to sqlite.\n\nThe tests will be skipped automatically because the base class for your connection object raise NotImplementedError","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"fcffa9892440d5664a1f6a1ebde7663ce3a0a576","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"@tests_db.run_with(\u0027sqlite\u0027)"},{"line_number":273,"context_line":"class PipelineConfigTest(tests_db.TestBase):"},{"line_number":274,"context_line":"    def test_set_pipeline_config(self):"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        expected_sources \u003d ["}],"source_content_type":"text/x-python","patch_set":35,"id":"da86d52c_e9b99516","line":273,"in_reply_to":"da86d52c_dacca8bd","updated":"2015-02-06 16:37:25.000000000","message":"Thanks for the tip","commit_id":"c231394ff191d30021018717aee163c85d18cdd0"}],"setup.cfg":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a0fedff2e8291932e0e4a104497ece0876084987","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    mysql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":245,"context_line":"    sqlite \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":246,"context_line":"    postgresql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":247,"context_line":"    mongodb \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":248,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":249,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":250,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":36,"id":"da86d52c_7f47c977","line":247,"updated":"2015-02-09 23:39:48.000000000","message":"can you just leave these out?","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"3d536f2607252327d13d72e2a87fb68872195b5a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    mysql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":245,"context_line":"    sqlite \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":246,"context_line":"    postgresql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":247,"context_line":"    mongodb \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":248,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":249,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":250,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":36,"id":"da86d52c_cee481ae","line":247,"in_reply_to":"da86d52c_4e41710a","updated":"2015-02-10 02:16:28.000000000","message":"Gordon, we tried but Stevedore is going to complain. Having the base class loaded makes the NotImplemented to take care of things.\nAre you aware of an alternative to solve this problem? If so, please give us pointers.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"3b67cd87d4c6a7acd022596e1dabce18fc44094a","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    mysql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":245,"context_line":"    sqlite \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":246,"context_line":"    postgresql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":247,"context_line":"    mongodb \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":248,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":249,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":250,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":36,"id":"da86d52c_4e41710a","line":247,"in_reply_to":"da86d52c_7f47c977","updated":"2015-02-10 02:06:28.000000000","message":"The storage test scenarios rely on stevedore to load testable drivers (defined in tests/db.py). On not finding a driver, the tests fail. By mapping the other drivers to base.py, we force the scenario tests to catch an NotImplemented Exception and ignore them.","commit_id":"6cd3578d8cf54f90c45ff9c68cd2a79a8c50da19"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"58f30317b035d4bbd19f2353cb0a650dbed8056e","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    sqlite \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":247,"context_line":"    postgresql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":248,"context_line":"    mongodb \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":249,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":250,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":251,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-ttcn-cfg","patch_set":38,"id":"da86d52c_3ed86fee","line":249,"updated":"2015-02-12 14:08:44.000000000","message":"can you try decorating the test cases with @tests_db.run_with(\u0027sqlite\u0027, \u0027mysql\u0027, \u0027pgsql\u0027)\n\nto see if you can remove this.","commit_id":"bde9aa8d976e0e5c3b068b3175cf8818e29a2768"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"5ddff5e41e8fb54c5bc0b5a55903b8b9462373be","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":250,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":251,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"ceilometer.compute.virt \u003d"},{"line_number":254,"context_line":"    libvirt \u003d ceilometer.compute.virt.libvirt.inspector:LibvirtInspector"},{"line_number":255,"context_line":"    hyperv \u003d ceilometer.compute.virt.hyperv.inspector:HyperVInspector"}],"source_content_type":"text/x-ttcn-cfg","patch_set":40,"id":"da86d52c_0656f45b","line":252,"updated":"2015-02-12 17:59:19.000000000","message":"Removing these (ones mapped to base) and decorating the relevant test class doesnt work. The scenarios still fail with a runtime error.","commit_id":"86391dadd80ad6f41268ce88f5fe190959c825a7"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"0ad64ec67eb1d5712aad9b186d7dfcdf0b47c5f3","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    mysql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":260,"context_line":"    sqlite \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":261,"context_line":"    postgresql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":262,"context_line":"    mongodb \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":263,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":264,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":265,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":47,"id":"9a80dd14_9ffd9971","line":262,"updated":"2015-03-10 19:42:00.000000000","message":"I don\u0027t think we need to support mongo and hbase here. I\u0027m sure the log driver would be inappropriate.","commit_id":"1f49e38295e369114679d21d65d22611f863391b"},{"author":{"_account_id":7052,"name":"Fabio Giannetti","email":"fgiannet@cisco.com","username":"fabgia"},"change_message_id":"e1a95faa86bfe8dfba9339c25ee565c2ecfdc583","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    mysql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":260,"context_line":"    sqlite \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":261,"context_line":"    postgresql \u003d ceilometer.configuration.pipeline.storage.impl_sqlalchemy:Connection"},{"line_number":262,"context_line":"    mongodb \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":263,"context_line":"    hbase \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":264,"context_line":"    log \u003d ceilometer.configuration.pipeline.storage.base:Connection"},{"line_number":265,"context_line":"    db2 \u003d ceilometer.configuration.pipeline.storage.base:Connection"}],"source_content_type":"text/x-ttcn-cfg","patch_set":47,"id":"9a80dd14_65ff73ab","line":262,"in_reply_to":"9a80dd14_9ffd9971","updated":"2015-03-10 22:34:37.000000000","message":"These are pointing to the base connection. This is needed to pass the tests. None of these are really implementing the storage layer, just referring to the base impl (which returns a graceful not implemented error).\nThe current tests run on all the potential backends so we need to ensure we do the same.","commit_id":"1f49e38295e369114679d21d65d22611f863391b"}]}
