)]}'
{"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"9180b30fc89ac112bdcaaa62547a849d5dbdb531","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class Connection(base.Connection):"},{"line_number":59,"context_line":"    \"\"\"Put the data into a HBase database"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    Collections:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    - user"},{"line_number":64,"context_line":"      - row_key: user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_c65e8476","line":61,"updated":"2014-05-21 08:40:19.000000000","message":"user and project description look unneeded anymore","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"763365d97299e1488cc71f426b3c10bdbf2443ce","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class Connection(base.Connection):"},{"line_number":59,"context_line":"    \"\"\"Put the data into a HBase database"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    Collections:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    - user"},{"line_number":64,"context_line":"      - row_key: user_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_0178562a","line":61,"in_reply_to":"7adec928_c65e8476","updated":"2014-05-21 09:06:26.000000000","message":"Done","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"9180b30fc89ac112bdcaaa62547a849d5dbdb531","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    CAPABILITIES \u003d utils.update_nested(base.Connection.CAPABILITIES,"},{"line_number":125,"context_line":"                                       AVAILABLE_CAPABILITIES)"},{"line_number":126,"context_line":"    _memory_instance \u003d None"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    PROJECT_TABLE \u003d \"project\""},{"line_number":129,"context_line":"    USER_TABLE \u003d \"user\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_26764807","line":126,"updated":"2014-05-21 08:40:19.000000000","message":"I guess PROJECT_TABLE and USER_TABLE may be removed. Please see the next comment","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"763365d97299e1488cc71f426b3c10bdbf2443ce","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    CAPABILITIES \u003d utils.update_nested(base.Connection.CAPABILITIES,"},{"line_number":125,"context_line":"                                       AVAILABLE_CAPABILITIES)"},{"line_number":126,"context_line":"    _memory_instance \u003d None"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    PROJECT_TABLE \u003d \"project\""},{"line_number":129,"context_line":"    USER_TABLE \u003d \"user\""}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_41a97e7a","line":126,"in_reply_to":"7adec928_26764807","updated":"2014-05-21 09:06:26.000000000","message":"Done","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"9180b30fc89ac112bdcaaa62547a849d5dbdb531","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            self.conn_pool \u003d self._get_connection_pool(opts)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def upgrade(self):"},{"line_number":156,"context_line":"        with self.conn_pool.connection() as conn:"},{"line_number":157,"context_line":"            self._clear_tables([self.USER_TABLE, self.PROJECT_TABLE])"},{"line_number":158,"context_line":"            conn.create_table(self.RESOURCE_TABLE, {\u0027f\u0027: dict(max_versions\u003d1)})"},{"line_number":159,"context_line":"            conn.create_table(self.METER_TABLE, {\u0027f\u0027: dict(max_versions\u003d1)})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_c6a3e44d","line":156,"updated":"2014-05-21 08:40:19.000000000","message":"As for now tables in HBase are not created automatically. I don\u0027t think it make sense to ask user create \u0027user\u0027 and \u0027project\u0027 manually and remove it in upgrade method... I think it\u0027s ok just \u0027forget\u0027 about user and project in HBase impl.","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"763365d97299e1488cc71f426b3c10bdbf2443ce","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            self.conn_pool \u003d self._get_connection_pool(opts)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def upgrade(self):"},{"line_number":156,"context_line":"        with self.conn_pool.connection() as conn:"},{"line_number":157,"context_line":"            self._clear_tables([self.USER_TABLE, self.PROJECT_TABLE])"},{"line_number":158,"context_line":"            conn.create_table(self.RESOURCE_TABLE, {\u0027f\u0027: dict(max_versions\u003d1)})"},{"line_number":159,"context_line":"            conn.create_table(self.METER_TABLE, {\u0027f\u0027: dict(max_versions\u003d1)})"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_e1c8ca58","line":156,"in_reply_to":"7adec928_c6a3e44d","updated":"2014-05-21 09:06:26.000000000","message":"Ok, I\u0027m hbase newbie :p, Done","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"9180b30fc89ac112bdcaaa62547a849d5dbdb531","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            conn.create_table(self.ALARM_HISTORY_TABLE, {\u0027f\u0027: dict()})"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def clear(self):"},{"line_number":164,"context_line":"        LOG.debug(_(\u0027Dropping HBase schema...\u0027))"},{"line_number":165,"context_line":"        self._clear_tables([self.RESOURCE_TABLE,"},{"line_number":166,"context_line":"                            self.METER_TABLE,"},{"line_number":167,"context_line":"                            self.ALARM_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_86cb9c1d","line":164,"updated":"2014-05-21 08:40:19.000000000","message":"I prefer to keep previous approach. Table deletion is the most expensive operation in HBase and it\u0027s better to be done within one connection","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"763365d97299e1488cc71f426b3c10bdbf2443ce","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            conn.create_table(self.ALARM_HISTORY_TABLE, {\u0027f\u0027: dict()})"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def clear(self):"},{"line_number":164,"context_line":"        LOG.debug(_(\u0027Dropping HBase schema...\u0027))"},{"line_number":165,"context_line":"        self._clear_tables([self.RESOURCE_TABLE,"},{"line_number":166,"context_line":"                            self.METER_TABLE,"},{"line_number":167,"context_line":"                            self.ALARM_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7adec928_01c69649","line":164,"in_reply_to":"7adec928_86cb9c1d","updated":"2014-05-21 09:06:26.000000000","message":"Done","commit_id":"1e0d1ad1e33ce94e7b01418d41254fe856e157ec"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"6230341afd2d0ddcf8bc934d5fce851019626519","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            result.resources.push(curr.resource_id);"},{"line_number":95,"context_line":"        if (result.users.indexOf(curr.user_id) \u003c 0)"},{"line_number":96,"context_line":"            result.users.push(curr.user_id);"},{"line_number":97,"context_line":"        if (result.projects.indexOf(curr.project_id) \u003c 0)"},{"line_number":98,"context_line":"            result.projects.push(curr.project_id);"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":"    \"\"\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_8d72edab","line":97,"updated":"2014-05-20 18:25:22.000000000","message":"Shouldn\u0027t the users and projects references in this reduction go also?","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"581fd96904dfc683b6d9f60e25291214de431c44","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            result.resources.push(curr.resource_id);"},{"line_number":95,"context_line":"        if (result.users.indexOf(curr.user_id) \u003c 0)"},{"line_number":96,"context_line":"            result.users.push(curr.user_id);"},{"line_number":97,"context_line":"        if (result.projects.indexOf(curr.project_id) \u003c 0)"},{"line_number":98,"context_line":"            result.projects.push(curr.project_id);"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":"    \"\"\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_66edb08e","line":97,"in_reply_to":"7adec928_8d72edab","updated":"2014-05-21 09:06:20.000000000","message":"Good catch, this is no more useful.","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"}],"ceilometer/storage/sqlalchemy/migrate_repo/versions/035_drop_user_project_tables.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"39c5eb6106a3bca4d69d767d385100dce4a25c7f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from sqlalchemy.sql.expression import select, Alias, not_, and_, exists"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"TABLES_DROP \u003d [\u0027user\u0027, \u0027project\u0027]"},{"line_number":20,"context_line":"TABLES \u003d [\u0027user\u0027, \u0027project\u0027, \u0027alarm\u0027, \u0027sourceassoc\u0027, \u0027sample\u0027,"},{"line_number":21,"context_line":"          \u0027resource\u0027, \u0027alarm_history\u0027]"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"INDEXES \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_ee70d209","line":20,"updated":"2014-05-20 15:19:27.000000000","message":"alarm table doesn\u0027t seem to be used ever.","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"581fd96904dfc683b6d9f60e25291214de431c44","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from sqlalchemy.sql.expression import select, Alias, not_, and_, exists"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"TABLES_DROP \u003d [\u0027user\u0027, \u0027project\u0027]"},{"line_number":20,"context_line":"TABLES \u003d [\u0027user\u0027, \u0027project\u0027, \u0027alarm\u0027, \u0027sourceassoc\u0027, \u0027sample\u0027,"},{"line_number":21,"context_line":"          \u0027resource\u0027, \u0027alarm_history\u0027]"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"INDEXES \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_665f7076","line":20,"in_reply_to":"7adec928_ee70d209","updated":"2014-05-21 09:06:20.000000000","message":"Done, alarm constraints have already been dropped in script 027_remove_alarm_fk_constraints.py","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"39c5eb6106a3bca4d69d767d385100dce4a25c7f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                fk_table_name \u003d table_name"},{"line_number":50,"context_line":"                if migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":51,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, fk_table_name, column))"},{"line_number":52,"context_line":"                if migrate_engine.name \u003d\u003d \"postgresql\" or \\"},{"line_number":53,"context_line":"                        table_name \u003d\u003d \u0027alarm_history\u0027:"},{"line_number":54,"context_line":"                    # The fk contains the old table name"},{"line_number":55,"context_line":"                    if table_name \u003d\u003d \"sample\":"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_ae924a54","line":52,"updated":"2014-05-20 15:19:27.000000000","message":"out of curiosity, what\u0027s this postgresql condition for? we aren\u0027t usually required to pass in FK name for postgresql","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"581fd96904dfc683b6d9f60e25291214de431c44","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                fk_table_name \u003d table_name"},{"line_number":50,"context_line":"                if migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":51,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, fk_table_name, column))"},{"line_number":52,"context_line":"                if migrate_engine.name \u003d\u003d \"postgresql\" or \\"},{"line_number":53,"context_line":"                        table_name \u003d\u003d \u0027alarm_history\u0027:"},{"line_number":54,"context_line":"                    # The fk contains the old table name"},{"line_number":55,"context_line":"                    if table_name \u003d\u003d \"sample\":"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_9e23fdbd","line":52,"in_reply_to":"7adec928_ae924a54","updated":"2014-05-21 09:06:20.000000000","message":"We have two case:\n\n* In case of postgresql, the migration script \u0027030_rename_meter_table\u0027 won\u0027t rename \u0027sample\u0027  constraint for postgresql. So, the automatic name built by sqlalchemy to drop the constraint is false, it contains \u0027sample\u0027 but the real constraint contains \u0027meter\u0027.\n\n* In case of alarm_history, migration script 015_add_alarm_history_table.py haven\u0027t set the foreignkey name for mysql, so the format is \u0027blabla_blabla_fkey\u0027 instead of \u0027fk_blabla_blabla\u0027.\n\nI have rewritten the these predicate to make them more clear","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"39c5eb6106a3bca4d69d767d385100dce4a25c7f","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    sample \u003d load_tables[\u0027sample\u0027]"},{"line_number":142,"context_line":"    q \u003d select([sample.c.user_id, sample.c.project_id])\\"},{"line_number":143,"context_line":"        .where(sample.c.id \u003d\u003d sourceassoc.c.sample_id)"},{"line_number":144,"context_line":"    sourceassoc.update().values(q.as_scalar())"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    # Restore the user/project columns and constraints in all tables"},{"line_number":147,"context_line":"    for table_name, indexes in INDEXES.items():"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_c9e310a2","line":144,"updated":"2014-05-20 15:19:27.000000000","message":"i\u0027m not sure this recreates the original case. as i understand it, the rows in sourceassoc are pair values of source_id and \u003cuser/project/resource/sample\u003e_id.\n\nthat said, even if this doesn\u0027t support this, i\u0027m not sure how much effort we want to put into trying to make downgrade work. i\u0027m ok if we just skip trying to revert sourceassoc change","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"581fd96904dfc683b6d9f60e25291214de431c44","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    sample \u003d load_tables[\u0027sample\u0027]"},{"line_number":142,"context_line":"    q \u003d select([sample.c.user_id, sample.c.project_id])\\"},{"line_number":143,"context_line":"        .where(sample.c.id \u003d\u003d sourceassoc.c.sample_id)"},{"line_number":144,"context_line":"    sourceassoc.update().values(q.as_scalar())"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    # Restore the user/project columns and constraints in all tables"},{"line_number":147,"context_line":"    for table_name, indexes in INDEXES.items():"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_464a74ad","line":144,"in_reply_to":"7adec928_c9e310a2","updated":"2014-05-21 09:06:20.000000000","message":"Done, I have removed that.","commit_id":"c07918df1a15c5aa9be99d3b255587009f88df7b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"8ca32aa10876400ef1a71914dd03b8ed58659693","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                          \u0027refcolumns\u0027: [ref_table.c[ref_column_name]]}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                if table_name \u003d\u003d \u0027alarm_history\u0027:"},{"line_number":51,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((table_name, column, \u0027fkey\u0027))"},{"line_number":52,"context_line":"                elif migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":53,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))"},{"line_number":54,"context_line":"                elif migrate_engine.name \u003d\u003d \"postgresql\" and \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_29f45886","line":51,"updated":"2014-05-21 11:12:39.000000000","message":"I\u0027m a bit confused as to why the special case naming of foreign key constraints for mysql verus postgres is not needed only in the alarm_history case.\n\nI see the indices being named in an engine-independent way here:\n\nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/storage/sqlalchemy/migrate_repo/versions/015_add_alarm_history_table.py#L47\n\nbut are the FK constraints still named by default in an engine-specific way?:\n\nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/storage/sqlalchemy/migrate_repo/versions/015_add_alarm_history_table.py#L59","commit_id":"97e5e73a3210636ccc9ef01534145173c9cfc467"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"77afa3e8410163f6e5d5128f05e01e573cd7f613","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                          \u0027refcolumns\u0027: [ref_table.c[ref_column_name]]}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                if table_name \u003d\u003d \u0027alarm_history\u0027:"},{"line_number":51,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((table_name, column, \u0027fkey\u0027))"},{"line_number":52,"context_line":"                elif migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":53,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))"},{"line_number":54,"context_line":"                elif migrate_engine.name \u003d\u003d \"postgresql\" and \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_fd75cacc","line":51,"in_reply_to":"7adec928_29f45886","updated":"2014-05-21 13:37:33.000000000","message":"The fact is the FK name have always been set for mysql in previous migration scripts except for the alarm_history table, so we have to use the sqlalchemy default name for alarm_history and mysql.\n\nI have rewrote this parts to make it clearer and let sqlalchemy discover the name:\n\n  if migrate_engine.name \u003d\u003d \"mysql\" and table_name !\u003d \u0027alarm_history\u0027:\n      params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))\n  elif migrate_engine.name \u003d\u003d \"postgresql\" and table_name \u003d\u003d \"sample\":\n      params[\u0027name\u0027] \u003d \"_\".join((\u0027meter\u0027, column, \u0027fkey\u0027))\n\n\nAlso, I don\u0027t know the reason of the FK name have been forced for mysql.","commit_id":"97e5e73a3210636ccc9ef01534145173c9cfc467"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f8016a81aa4c4ad2d020a292c964e4a88e5dfbf9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                          \u0027refcolumns\u0027: [ref_table.c[ref_column_name]]}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                if table_name \u003d\u003d \u0027alarm_history\u0027:"},{"line_number":51,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((table_name, column, \u0027fkey\u0027))"},{"line_number":52,"context_line":"                elif migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":53,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))"},{"line_number":54,"context_line":"                elif migrate_engine.name \u003d\u003d \"postgresql\" and \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_82029eb2","line":51,"in_reply_to":"7adec928_f875d8cc","updated":"2014-05-21 14:15:38.000000000","message":"On postgresql, it\u0027s always \u0027alarm_history_\u003ccolumn\u003e_fkey\u0027, previously it was explicit for postgresql, now is implicit.\n\nAnd yes, now the foreign key is the one built by sqlalchemy that is correct.\n\nI have done this, to have exactly the reverse of how they was created/changed before. ie:\n\n* 012_add_missing_foreign_keys.py creates all FK (except alarm_history) with name set only for mysql \n* 015_add_alarm_history_table.py creates FK without name set.\n* 030_rename_meter_table.py, rename FK from \u0027meter\u0027 to \u0027sample\u0027 with name set only for mysql \n  (so postgres keep \u0027meter\u0027 in the name, because the autoloaded Table used to rename the FK is the old one \u0027meter\u0027 instead of the new one \u0027sample\u0027 )","commit_id":"97e5e73a3210636ccc9ef01534145173c9cfc467"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"6f5039fafbbd377e8911dce1624d47f28cadaa24","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                          \u0027refcolumns\u0027: [ref_table.c[ref_column_name]]}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"                if table_name \u003d\u003d \u0027alarm_history\u0027:"},{"line_number":51,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((table_name, column, \u0027fkey\u0027))"},{"line_number":52,"context_line":"                elif migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":53,"context_line":"                    params[\u0027name\u0027] \u003d \"_\".join((\u0027fk\u0027, table_name, column))"},{"line_number":54,"context_line":"                elif migrate_engine.name \u003d\u003d \"postgresql\" and \\"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_f875d8cc","line":51,"in_reply_to":"7adec928_fd75cacc","updated":"2014-05-21 13:58:55.000000000","message":"Hmmm, IINM the new conditional doesn\u0027t seem equivalent to the old.\n\nPreviously in the case where table_name\u003d\u003d\u0027alarm_history\u0027, the name was set to alarm_history_\u003ccolumn\u003e_fkey regardless of whether the engine is mysql or postgres.\n\nWhereas now, seems to be no explicit setting for the FK name when the table is alarm_history. Does sql-a just \"do the right thing\" in that case?","commit_id":"97e5e73a3210636ccc9ef01534145173c9cfc467"}],"ceilometer/storage/sqlalchemy/models.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"c205fb74d0452553d23fc182d96f93914f928b21","unresolved":false,"context_lines":[{"line_number":117,"context_line":"Index(\u0027idx_ss\u0027, sourceassoc.c[\u0027source_id\u0027], sourceassoc.c[\u0027sample_id\u0027]),"},{"line_number":118,"context_line":"Index(\u0027ix_sourceassoc_source_id\u0027, sourceassoc.c[\u0027source_id\u0027])"},{"line_number":119,"context_line":"UniqueConstraint(sourceassoc.c[\u0027sample_id\u0027], sourceassoc.c[\u0027user_id\u0027],"},{"line_number":120,"context_line":"                 name\u003d\u0027uniq_sourceassoc0sample_id0user_id\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class Source(Base):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_33fe9a06","side":"PARENT","line":120,"updated":"2014-05-20 19:29:41.000000000","message":"035 migration creates uniq_sourceassoc0sample_id constraint","commit_id":"6a7d6ec198451687ad4389787338988012e6a1fe"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"581fd96904dfc683b6d9f60e25291214de431c44","unresolved":false,"context_lines":[{"line_number":117,"context_line":"Index(\u0027idx_ss\u0027, sourceassoc.c[\u0027source_id\u0027], sourceassoc.c[\u0027sample_id\u0027]),"},{"line_number":118,"context_line":"Index(\u0027ix_sourceassoc_source_id\u0027, sourceassoc.c[\u0027source_id\u0027])"},{"line_number":119,"context_line":"UniqueConstraint(sourceassoc.c[\u0027sample_id\u0027], sourceassoc.c[\u0027user_id\u0027],"},{"line_number":120,"context_line":"                 name\u003d\u0027uniq_sourceassoc0sample_id0user_id\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class Source(Base):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7adec928_e6c8e058","side":"PARENT","line":120,"in_reply_to":"7adec928_33fe9a06","updated":"2014-05-21 09:06:20.000000000","message":"Done","commit_id":"6a7d6ec198451687ad4389787338988012e6a1fe"}]}
