)]}'
{"glance/db/sqlalchemy/migrate_repo/versions/028_add_tasks_table.py":[{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"79ebe2bdbd9263d6bd8d929f50f89713002a1b69","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"# Copyright 2013 IBM Corp."},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F7GI%3D","line":3,"updated":"2013-08-20 06:47:02.000000000","message":"Will update the year.","commit_id":"c36808fa6442d17d830850ca80b6ca6afd249dfe"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"79ebe2bdbd9263d6bd8d929f50f89713002a1b69","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    Boolean, DateTime, String, Text, create_tables, drop_tables)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def define_tasks_table(meta):"},{"line_number":26,"context_line":"    tasks \u003d Table(\u0027tasks\u0027,"},{"line_number":27,"context_line":"                   meta,"},{"line_number":28,"context_line":"                   Column(\u0027id\u0027, String(36), primary_key\u003dTrue, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAARn%2F%2F7Fc%3D","line":25,"updated":"2013-08-20 06:47:02.000000000","message":"About started_at and stopped_at, it will depend on the following discussion.","commit_id":"c36808fa6442d17d830850ca80b6ca6afd249dfe"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"ccfd5c0d743f886b0110d11d22e59b41e077e813","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                  Column(\u0027updated_at\u0027, DateTime()),"},{"line_number":38,"context_line":"                  Column(\u0027deleted_at\u0027, DateTime()),"},{"line_number":39,"context_line":"                  Column(\u0027deleted\u0027,"},{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse,"},{"line_number":43,"context_line":"                         index\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2Frds%3D","line":40,"updated":"2013-08-31 00:54:20.000000000","message":"Is the whitespace right here? In my gerrit view it looks like the \"B\" is directly under the \"(\", but it should be under \"\u0027\".","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"c223b5305abd93fad12791009cc2d79a5751eb40","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                  Column(\u0027updated_at\u0027, DateTime()),"},{"line_number":38,"context_line":"                  Column(\u0027deleted_at\u0027, DateTime()),"},{"line_number":39,"context_line":"                  Column(\u0027deleted\u0027,"},{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse,"},{"line_number":43,"context_line":"                         index\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2FrdQ%3D","line":40,"in_reply_to":"AAAASn%2F%2Frds%3D","updated":"2013-08-31 00:58:19.000000000","message":"It\u0027s under \u0027 , otherwise I think pep8 will blame me :)","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"eefa6ccada71cf1a4df8bad834eaa579a8010935","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse,"},{"line_number":43,"context_line":"                         index\u003dTrue),"},{"line_number":44,"context_line":"                  mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":45,"context_line":"                  extend_existing\u003dTrue)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2FhKw%3D","line":43,"updated":"2013-09-03 21:17:00.000000000","message":"any reason this is not below along with other indices?","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8c59a1682a3e1cbef51eb63c246e12c36d388a38","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse,"},{"line_number":43,"context_line":"                         index\u003dTrue),"},{"line_number":44,"context_line":"                  mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":45,"context_line":"                  extend_existing\u003dTrue)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2Ff8U%3D","line":43,"in_reply_to":"AAAASn%2F%2FhKw%3D","updated":"2013-09-04 02:48:40.000000000","message":"No specifc reason, I just follow up the way the other migration scripts is using.","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"28fe530a50b0d81d692f49e7671672137a0c0afa","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                  Column(\u0027type\u0027, String(30), nullable\u003dFalse),"},{"line_number":30,"context_line":"                  Column(\u0027status\u0027, String(30), nullable\u003dFalse),"},{"line_number":31,"context_line":"                  Column(\u0027owner\u0027, String(36), nullable\u003dFalse),"},{"line_number":32,"context_line":"                  Column(\u0027input\u0027, Text()),  # json blob"},{"line_number":33,"context_line":"                  Column(\u0027result\u0027, Text()),  # json blob"},{"line_number":34,"context_line":"                  Column(\u0027message\u0027, Text()),"},{"line_number":35,"context_line":"                  Column(\u0027expires_at\u0027, DateTime()),"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2FU1g%3D","line":32,"updated":"2013-09-06 10:13:34.000000000","message":"Does the \u0027input\u0027 and \u0027result\u0027 column type should be \u0027String\u0027 ? since the JSONEncodedDict type in mode is \u0027String\u0027 type based.","commit_id":"0eee37ac36b50b2cd4c14759f5a64ad5da3f37ef"}],"glance/db/sqlalchemy/migrate_repo/versions/030_add_tasks_table.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"e9e486dd0aa16a9192b6e983115d2c2dbb347ddf","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse,"},{"line_number":43,"context_line":"                         index\u003dTrue),"},{"line_number":44,"context_line":"                  mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":45,"context_line":"                  extend_existing\u003dTrue)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATH%2F%2F9QE%3D","line":43,"updated":"2013-10-07 14:18:18.000000000","message":"Please add index using Index(...) because in this case we can get indexes with different names on different backends.","commit_id":"5414c74bf1040d9c579370f2a2775dc368ecec85"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bbe7402242f38531cfbfb01a13b3d623e65c7fc9","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse,"},{"line_number":43,"context_line":"                         index\u003dTrue),"},{"line_number":44,"context_line":"                  mysql_engine\u003d\u0027InnoDB\u0027,"},{"line_number":45,"context_line":"                  extend_existing\u003dTrue)"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATH%2F%2FzkI%3D","line":43,"in_reply_to":"AAAATH%2F%2F9QE%3D","updated":"2013-10-09 16:06:21.000000000","message":"Done. Make sense. Thanks.","commit_id":"5414c74bf1040d9c579370f2a2775dc368ecec85"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"e9e486dd0aa16a9192b6e983115d2c2dbb347ddf","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def downgrade(migrate_engine):"},{"line_number":62,"context_line":"    meta \u003d MetaData()"},{"line_number":63,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":64,"context_line":"    tables \u003d [define_tasks_table(meta)]"},{"line_number":65,"context_line":"    drop_tables(tables)"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATH%2F%2F9PA%3D","line":64,"updated":"2013-10-07 14:18:18.000000000","message":"nit: You can use autoload\u003dTrue here. For example:\n\n    table \u003d Table(\u0027tasks\u0027, meta, autoload\u003dTrue)\n    table.drop()","commit_id":"5414c74bf1040d9c579370f2a2775dc368ecec85"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bbe7402242f38531cfbfb01a13b3d623e65c7fc9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def downgrade(migrate_engine):"},{"line_number":62,"context_line":"    meta \u003d MetaData()"},{"line_number":63,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":64,"context_line":"    tables \u003d [define_tasks_table(meta)]"},{"line_number":65,"context_line":"    drop_tables(tables)"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATH%2F%2Fzjk%3D","line":64,"in_reply_to":"AAAATH%2F%2F9PA%3D","updated":"2013-10-09 16:06:21.000000000","message":"I would like to keep this way before a fix can update all. I remember there is a fix but I can\u0027t find it now. Thanks.","commit_id":"5414c74bf1040d9c579370f2a2775dc368ecec85"},{"author":{"_account_id":7703,"name":"Venkatesh Sampath","email":"venkatesh.sampath@outlook.com","username":"venkateshsampath"},"change_message_id":"d3c38657a5cefc2baf8e6c8446b72489ce957ff7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    Boolean, DateTime, String, Text, create_tables, drop_tables)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def define_tasks_table(meta):"},{"line_number":26,"context_line":"    tasks \u003d Table(\u0027tasks\u0027,"},{"line_number":27,"context_line":"                  meta,"},{"line_number":28,"context_line":"                  Column(\u0027id\u0027, String(36), primary_key\u003dTrue, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAATH%2F%2FzEQ%3D","line":25,"updated":"2013-10-09 17:21:25.000000000","message":"Hi Fei,\n\nCan you please change this implementation as the following check-in:\n\nhttps://review.openstack.org/#/c/42671/2\n\nBasically, you don\u0027t need this method if you use autoload\u003dTrue as done in Johnannes\u0027s PS.","commit_id":"f263e257e2c410bc328718986b0a35de703ae0a7"},{"author":{"_account_id":7703,"name":"Venkatesh Sampath","email":"venkatesh.sampath@outlook.com","username":"venkateshsampath"},"change_message_id":"0c201fbb083838b29117848f60a483b2d19f978d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    Boolean, DateTime, String, Text, create_tables, drop_tables)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def define_tasks_table(meta):"},{"line_number":26,"context_line":"    tasks \u003d Table(\u0027tasks\u0027,"},{"line_number":27,"context_line":"                  meta,"},{"line_number":28,"context_line":"                  Column(\u0027id\u0027, String(36), primary_key\u003dTrue, nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAATH%2F%2Fxt4%3D","line":25,"in_reply_to":"AAAATH%2F%2FzEQ%3D","updated":"2013-10-09 23:47:37.000000000","message":"Hi Fei,\n\nSorry, in this case you might probably want tasks meta data. please ignore my previous comment.","commit_id":"f263e257e2c410bc328718986b0a35de703ae0a7"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"1d93921b148022d871fca38bf0f513b9fc01f08b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                  Column(\u0027created_at\u0027, DateTime(), nullable\u003dFalse),"},{"line_number":37,"context_line":"                  Column(\u0027updated_at\u0027, DateTime()),"},{"line_number":38,"context_line":"                  Column(\u0027deleted_at\u0027, DateTime()),"},{"line_number":39,"context_line":"                  Column(\u0027deleted\u0027,"},{"line_number":40,"context_line":"                         Boolean(),"},{"line_number":41,"context_line":"                         nullable\u003dFalse,"},{"line_number":42,"context_line":"                         default\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAATH%2F%2FeoA%3D","line":39,"updated":"2013-10-15 17:18:08.000000000","message":"Also I thought we were not keeping deleted takss around, did we change that decision?","commit_id":"f263e257e2c410bc328718986b0a35de703ae0a7"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"6f8814c56771f7542c845339ca34f29c363e8918","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    Index(\u0027ix_tasks_type\u0027, tasks.c.type)"},{"line_number":47,"context_line":"    Index(\u0027ix_tasks_status\u0027, tasks.c.status)"},{"line_number":48,"context_line":"    Index(\u0027ix_tasks_owner\u0027, tasks.c.owner)"},{"line_number":49,"context_line":"    Index(\u0027ix_tasks_deleted\u0027, tasks.c.deleted)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    return tasks"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAATH%2F%2FuGM%3D","line":49,"updated":"2013-10-10 18:11:00.000000000","message":"Hey Fei,\n\nCan you please add a index for updated_at? It seems that the most widely used list of tasks would naturally become descending order by updated_at once the list grows. What do you think?","commit_id":"f263e257e2c410bc328718986b0a35de703ae0a7"},{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"a3da7d152c45d14eef6f96918ac874e6c67fb05b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    Index(\u0027ix_tasks_type\u0027, tasks.c.type)"},{"line_number":47,"context_line":"    Index(\u0027ix_tasks_status\u0027, tasks.c.status)"},{"line_number":48,"context_line":"    Index(\u0027ix_tasks_owner\u0027, tasks.c.owner)"},{"line_number":49,"context_line":"    Index(\u0027ix_tasks_deleted\u0027, tasks.c.deleted)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    return tasks"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAATH%2F%2Fe6I%3D","line":49,"in_reply_to":"AAAATH%2F%2FuGM%3D","updated":"2013-10-15 16:01:47.000000000","message":"I agree with Nikhil. An index on \u0027updated_at\u0027 would help a lot.","commit_id":"f263e257e2c410bc328718986b0a35de703ae0a7"}],"glance/db/sqlalchemy/models.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"d1277c42ceac612bb0f95a3483123fba86a32cfc","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    status \u003d Column(String(30))"},{"line_number":211,"context_line":"    input \u003d Column(JSONEncodedDict())"},{"line_number":212,"context_line":"    result \u003d Column(JSONEncodedDict())"},{"line_number":213,"context_line":"    owner \u003d Column(String(255))"},{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2B18%3D","line":213,"updated":"2013-08-27 08:18:27.000000000","message":"String(36)","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bf505eca905bd5eba7c81bbb5bd8d199fe9ac7fb","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    status \u003d Column(String(30))"},{"line_number":211,"context_line":"    input \u003d Column(JSONEncodedDict())"},{"line_number":212,"context_line":"    result \u003d Column(JSONEncodedDict())"},{"line_number":213,"context_line":"    owner \u003d Column(String(255))"},{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2Byg%3D","line":213,"in_reply_to":"AAAASn%2F%2F%2B18%3D","updated":"2013-08-27 08:37:11.000000000","message":"Given we\u0027re using 255 chars for the owner of Image, so I\u0027d like to keep the consistency.","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"3633b5c3db47399ddcdfa592774f9240558a6f26","unresolved":false,"context_lines":[{"line_number":210,"context_line":"    status \u003d Column(String(30))"},{"line_number":211,"context_line":"    input \u003d Column(JSONEncodedDict())"},{"line_number":212,"context_line":"    result \u003d Column(JSONEncodedDict())"},{"line_number":213,"context_line":"    owner \u003d Column(String(255))"},{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2BiM%3D","line":213,"in_reply_to":"AAAASn%2F%2F%2Byg%3D","updated":"2013-08-27 09:45:01.000000000","message":"so please fix migration script. You have \n\n Column(\u0027owner\u0027, String(36), nullable\u003dFalse),\n\nthere.","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"d1277c42ceac612bb0f95a3483123fba86a32cfc","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def register_models(engine):"},{"line_number":220,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2B14%3D","line":217,"updated":"2013-08-27 08:18:27.000000000","message":"`deleted` column missed","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"bf505eca905bd5eba7c81bbb5bd8d199fe9ac7fb","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def register_models(engine):"},{"line_number":220,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2ByU%3D","line":217,"in_reply_to":"AAAASn%2F%2F%2B14%3D","updated":"2013-08-27 08:37:11.000000000","message":"As Zhi Yan said, those common columns have been defined in ModelBase.","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"dad96f50363007f947059b9e978c22d59ed44c21","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def register_models(engine):"},{"line_number":220,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2B0E%3D","line":217,"in_reply_to":"AAAASn%2F%2F%2B14%3D","updated":"2013-08-27 08:29:16.000000000","message":"IIRC, \u0027ModelBase\u0027 class has those common columns such as \u0027deleted\u0027. @Victor Sergeyev.","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"3633b5c3db47399ddcdfa592774f9240558a6f26","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    message \u003d Column(Text)"},{"line_number":215,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":216,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"def register_models(engine):"},{"line_number":220,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAASn%2F%2F%2Bhs%3D","line":217,"in_reply_to":"AAAASn%2F%2F%2ByU%3D","updated":"2013-08-27 09:45:01.000000000","message":"Yes, but you created column with Index\u003dTrue in migrate script. So it would be nice to add it here","commit_id":"81404eaa133ecfc7dc2ce4e152e4d556f5cfde49"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"877f9f6af10caf1b6a89541523a44c88a72fc663","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d String"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def process_bind_param(self, value, dialect):"},{"line_number":50,"context_line":"        if value is not None:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2F2xE%3D","line":47,"updated":"2013-08-28 20:32:39.000000000","message":"Should this be Text? I think doing string can be very limiting on the row size based on the db backend, also it has Text in the migration","commit_id":"d1c48834c3cc0f637d7774cbe81e0d2ce320f494"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"877f9f6af10caf1b6a89541523a44c88a72fc663","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    owner \u003d Column(String(255))"},{"line_number":215,"context_line":"    message \u003d Column(Text)"},{"line_number":216,"context_line":"    expires_at \u003d Column(DateTime, default\u003dtimeutils.utcnow,"},{"line_number":217,"context_line":"                        nullable\u003dFalse, onupdate\u003dtimeutils.utcnow)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"def register_models(engine):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2F2yA%3D","line":217,"updated":"2013-08-28 20:32:39.000000000","message":"I\u0027m not sure this should be utcnow. I think this should be nullable and then it gets set by the api to the correct value when the task is created.","commit_id":"d1c48834c3cc0f637d7774cbe81e0d2ce320f494"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"ccfd5c0d743f886b0110d11d22e59b41e077e813","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return \u0027INTEGER\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2Frdo%3D","line":44,"updated":"2013-08-31 00:54:20.000000000","message":"I don\u0027t think its necessarily a Dict, is it? if I had the text \u0027\"json string\"\u0027 or the text \u0027[\"a\", \"json\", \"list\"]\u0027 those would work too, I imagine.","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"1b68de3addea26d00de2564e91ed683019341ed9","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return \u0027INTEGER\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2FqTU%3D","line":44,"in_reply_to":"AAAASn%2F%2FrPI%3D","updated":"2013-09-01 01:14:58.000000000","message":"Oh, got your point. How about JSONEncodedText?","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"7284524809251bc09a218a6b3e1bde0d02e8934d","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return \u0027INTEGER\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2FrPI%3D","line":44,"in_reply_to":"AAAASn%2F%2Frcw%3D","updated":"2013-08-31 04:23:49.000000000","message":"Yes, a json blob. I expect the input and output to always be json objects.\n\nI\u0027m really only quibbling over the name of this class. It seems like it would work fine for representing arbitrary json.","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"268d7e56488ca7d30aa27035c92c8e2d906b405f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return \u0027INTEGER\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2Frcw%3D","line":44,"in_reply_to":"AAAASn%2F%2FrdM%3D","updated":"2013-08-31 01:03:13.000000000","message":"IMHO, based on our latest discussion, the input and result column will be a json blob. Is it?","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"c223b5305abd93fad12791009cc2d79a5751eb40","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    return \u0027INTEGER\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAASn%2F%2FrdM%3D","line":44,"in_reply_to":"AAAASn%2F%2Frdo%3D","updated":"2013-08-31 00:58:19.000000000","message":"Unfortunately, nope :)\nI will add more comments soon on this to explain why.","commit_id":"3de5841ee2db1968e752ec871cf48aa8eaf1e209"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5fd2b8327301e0ca3c009940f5c56050d099f56f","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedText(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2FjZ4%3D","line":45,"updated":"2013-09-03 15:41:48.000000000","message":"Should this have three quotes? \"\"\"","commit_id":"fda6a11ec43a0cb4e7b5e67ceef1d61f1737a6de"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8e4f5d345001554ac3d2339385e8341b1e79724a","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedText(TypeDecorator):"},{"line_number":45,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2FjWY%3D","line":45,"in_reply_to":"AAAASn%2F%2FjZ4%3D","updated":"2013-09-03 15:46:44.000000000","message":"Done","commit_id":"fda6a11ec43a0cb4e7b5e67ceef1d61f1737a6de"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"0abe714ea6b44e0d7a897874689bfb7df21f7185","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedText(TypeDecorator):"},{"line_number":45,"context_line":"    \"\"\"Represents an immutable structure as a json-encoded string.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2FjJw%3D","line":45,"updated":"2013-09-03 16:15:30.000000000","message":"can you please remove the period at the end of the docstring now, rather than this being an issue later :)","commit_id":"85a867a18cde8f3ccb82896be6c749ed19eb0e09"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"3f33fde2aa4a2d2a00190c03138bdc0875ffc1a6","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class JSONEncodedText(TypeDecorator):"},{"line_number":45,"context_line":"    \"\"\"Represents an immutable structure as a json-encoded string.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2FjHE%3D","line":45,"in_reply_to":"AAAASn%2F%2FjJw%3D","updated":"2013-09-03 16:20:57.000000000","message":"Done","commit_id":"85a867a18cde8f3ccb82896be6c749ed19eb0e09"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"eefa6ccada71cf1a4df8bad834eaa579a8010935","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def process_bind_param(self, value, dialect):"},{"line_number":50,"context_line":"        if value is not None:"},{"line_number":51,"context_line":"            value \u003d json.dumps(value)"},{"line_number":52,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2FhOo%3D","line":49,"updated":"2013-09-03 21:17:00.000000000","message":"is dialect used anywhere? or is it added cause its overriding a super class method which requires it?","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8c59a1682a3e1cbef51eb63c246e12c36d388a38","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    impl \u003d Text"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def process_bind_param(self, value, dialect):"},{"line_number":50,"context_line":"        if value is not None:"},{"line_number":51,"context_line":"            value \u003d json.dumps(value)"},{"line_number":52,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2Ff%2BE%3D","line":49,"in_reply_to":"AAAASn%2F%2FhOo%3D","updated":"2013-09-04 02:48:40.000000000","message":"It\u0027s used to overriding a super class method.","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"eefa6ccada71cf1a4df8bad834eaa579a8010935","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            value \u003d json.dumps(value)"},{"line_number":52,"context_line":"        return value"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def process_result_value(self, value, dialect):"},{"line_number":55,"context_line":"        if value is not None:"},{"line_number":56,"context_line":"            value \u003d json.loads(value)"},{"line_number":57,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2FhOk%3D","line":54,"updated":"2013-09-03 21:17:00.000000000","message":"same","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8c59a1682a3e1cbef51eb63c246e12c36d388a38","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            value \u003d json.dumps(value)"},{"line_number":52,"context_line":"        return value"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def process_result_value(self, value, dialect):"},{"line_number":55,"context_line":"        if value is not None:"},{"line_number":56,"context_line":"            value \u003d json.loads(value)"},{"line_number":57,"context_line":"        return value"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2Ff94%3D","line":54,"in_reply_to":"AAAASn%2F%2FhOk%3D","updated":"2013-09-04 02:48:40.000000000","message":"Done","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"eefa6ccada71cf1a4df8bad834eaa579a8010935","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                      Index(\u0027ix_tasks_status\u0027, \u0027status\u0027),"},{"line_number":222,"context_line":"                      Index(\u0027ix_tasks_owner\u0027, \u0027owner\u0027),"},{"line_number":223,"context_line":"                      Index(\u0027ix_tasks_deleted\u0027, \u0027deleted\u0027))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue, default\u003duuidutils.generate_uuid)"},{"line_number":226,"context_line":"    type \u003d Column(String(30))"},{"line_number":227,"context_line":"    status \u003d Column(String(30))"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2FhQ0%3D","line":224,"updated":"2013-09-03 21:17:00.000000000","message":"There is no index name specified in the migration for task_deleted","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8c59a1682a3e1cbef51eb63c246e12c36d388a38","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                      Index(\u0027ix_tasks_status\u0027, \u0027status\u0027),"},{"line_number":222,"context_line":"                      Index(\u0027ix_tasks_owner\u0027, \u0027owner\u0027),"},{"line_number":223,"context_line":"                      Index(\u0027ix_tasks_deleted\u0027, \u0027deleted\u0027))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue, default\u003duuidutils.generate_uuid)"},{"line_number":226,"context_line":"    type \u003d Column(String(30))"},{"line_number":227,"context_line":"    status \u003d Column(String(30))"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2Ff98%3D","line":224,"in_reply_to":"AAAASn%2F%2FhQ0%3D","updated":"2013-09-04 02:48:40.000000000","message":"It\u0027s marked inline.","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d650025578c21d855b1ba8b92106637d12446e0d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from sqlalchemy.orm import relationship, backref, object_mapper"},{"line_number":30,"context_line":"from sqlalchemy import Index, UniqueConstraint"},{"line_number":31,"context_line":"from sqlalchemy.types import TypeDecorator"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"from glance.openstack.common import timeutils"},{"line_number":34,"context_line":"from glance.openstack.common import uuidutils"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2FU2o%3D","line":32,"updated":"2013-09-06 10:08:51.000000000","message":"Two questions here for cross-review between #42817 and #45335 ([1] and [2]):\n\n1. Should we import TypeDecorator from sqlalchemy or sqlalchemy.types ?\n2. Should we extract some comm code to a base class for JSONEncodedDict? The different code of JSONEncodedDict between #42817 and #45335 just is wrapped data type (\u0027impl\u0027 member).\n\n[1] https://review.openstack.org/#/c/42817/23/glance/db/sqlalchemy/models.py\n[2] https://review.openstack.org/#/c/45335/2/glance/db/sqlalchemy/models.py","commit_id":"0eee37ac36b50b2cd4c14759f5a64ad5da3f37ef"}],"glance/tests/unit/test_migrations.py":[{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"877f9f6af10caf1b6a89541523a44c88a72fc663","unresolved":false,"context_lines":[{"line_number":789,"context_line":"                      for idx in new_table.indexes]"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        self.assertIn(index_type, index_data)"},{"line_number":792,"context_line":"        self.assertIn(index_status, index_data)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2F2do%3D","line":792,"updated":"2013-08-28 20:32:39.000000000","message":"Can you add checks for indexes on deleted and owner here?","commit_id":"d1c48834c3cc0f637d7774cbe81e0d2ce320f494"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"4166961f82f98159e514ea1c558bd37ca4f2a28b","unresolved":false,"context_lines":[{"line_number":794,"context_line":"        self.assertIn(index_status, index_data)"},{"line_number":795,"context_line":"        self.assertIn(index_owner, index_data)"},{"line_number":796,"context_line":"        self.assertIn(index_deleted, index_data)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    def _post_downgrade_028(self, engine):"},{"line_number":799,"context_line":"        self.assertRaises(sqlalchemy.exc.NoSuchTableError,"},{"line_number":800,"context_line":"                          get_table, engine, \u0027tasks\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2Fo1I%3D","line":797,"updated":"2013-09-02 02:02:37.000000000","message":"FeiLong, I\u0027m not sure do we need also check other columns in here except indexes? such as existability and their type.\n\nBtw, do you think it will be better if we also test JSONEncodedDict in somewhere?","commit_id":"18efc999eac3159e28b15209842f3511029e8b26"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8864ea36a8d47beccc4f9e9beeaa2b8b83a18904","unresolved":false,"context_lines":[{"line_number":794,"context_line":"        self.assertIn(index_status, index_data)"},{"line_number":795,"context_line":"        self.assertIn(index_owner, index_data)"},{"line_number":796,"context_line":"        self.assertIn(index_deleted, index_data)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    def _post_downgrade_028(self, engine):"},{"line_number":799,"context_line":"        self.assertRaises(sqlalchemy.exc.NoSuchTableError,"},{"line_number":800,"context_line":"                          get_table, engine, \u0027tasks\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAASn%2F%2FoqQ%3D","line":797,"in_reply_to":"AAAASn%2F%2Fo1I%3D","updated":"2013-09-02 05:53:45.000000000","message":"Hi Zhi Yan, thanks for the comments. I believe it\u0027s good to add the checking for existability and type.\nFor the test for JSONEncodedDict, seems there is no separate test_models.py to place it. And I believe the db layer unit test can cover it.\n\nAppreciate for the reviewing. It would be great to make this happen in H.","commit_id":"18efc999eac3159e28b15209842f3511029e8b26"},{"author":{"_account_id":177,"name":"Alex Meade","email":"mr.alex.meade@gmail.com","username":"alex-meade"},"change_message_id":"5fd2b8327301e0ca3c009940f5c56050d099f56f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from migrate.versioning.repository import Repository"},{"line_number":36,"context_line":"from oslo.config import cfg"},{"line_number":37,"context_line":"import sqlalchemy"},{"line_number":38,"context_line":"from sqlalchemy import VARCHAR, TEXT, DATETIME, BOOLEAN"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"from glance.common import crypt"},{"line_number":41,"context_line":"import glance.db.migration as migration"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2Fjb4%3D","line":38,"updated":"2013-09-03 15:41:48.000000000","message":"I don\u0027t think these imports are used/needed","commit_id":"fda6a11ec43a0cb4e7b5e67ceef1d61f1737a6de"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8e4f5d345001554ac3d2339385e8341b1e79724a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from migrate.versioning.repository import Repository"},{"line_number":36,"context_line":"from oslo.config import cfg"},{"line_number":37,"context_line":"import sqlalchemy"},{"line_number":38,"context_line":"from sqlalchemy import VARCHAR, TEXT, DATETIME, BOOLEAN"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"from glance.common import crypt"},{"line_number":41,"context_line":"import glance.db.migration as migration"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAASn%2F%2FjWg%3D","line":38,"in_reply_to":"AAAASn%2F%2Fjb4%3D","updated":"2013-09-03 15:46:44.000000000","message":"Done","commit_id":"fda6a11ec43a0cb4e7b5e67ceef1d61f1737a6de"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"eefa6ccada71cf1a4df8bad834eaa579a8010935","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                    u\u0027updated_at\u0027,"},{"line_number":808,"context_line":"                    u\u0027deleted_at\u0027,"},{"line_number":809,"context_line":"                    u\u0027deleted\u0027]"},{"line_number":810,"context_line":"        # Jenkins is using sqlalchemy.dialects.postgresql.base.TIMESTAMP"},{"line_number":811,"context_line":"        # instead of DATETIME, so skip the column type checking for now."},{"line_number":812,"context_line":"        col_data \u003d [col.name for col in tasks_table.columns]"},{"line_number":813,"context_line":"        self.assertEqual(expected, col_data)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2FhL4%3D","line":810,"updated":"2013-09-03 21:17:00.000000000","message":"isnt that a jenkins bug? more likely the bug should be filed there so we can do recheck with bug number, instead of missing on tests. But if you do decide to keep it, can you add a NOTE with your name :)","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8c59a1682a3e1cbef51eb63c246e12c36d388a38","unresolved":false,"context_lines":[{"line_number":807,"context_line":"                    u\u0027updated_at\u0027,"},{"line_number":808,"context_line":"                    u\u0027deleted_at\u0027,"},{"line_number":809,"context_line":"                    u\u0027deleted\u0027]"},{"line_number":810,"context_line":"        # Jenkins is using sqlalchemy.dialects.postgresql.base.TIMESTAMP"},{"line_number":811,"context_line":"        # instead of DATETIME, so skip the column type checking for now."},{"line_number":812,"context_line":"        col_data \u003d [col.name for col in tasks_table.columns]"},{"line_number":813,"context_line":"        self.assertEqual(expected, col_data)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAASn%2F%2Ff8g%3D","line":810,"in_reply_to":"AAAASn%2F%2FhL4%3D","updated":"2013-09-04 02:48:40.000000000","message":"TBH, I\u0027m not sure if it\u0027s bug. Or I would say it\u0027s not a bug. I think the reason is that Jenkins is using postgresql as the backend database and Glance is using sqlite.\n\nBesides, I think the test is fair enough given we never test the column existent and their type against image, image member, etc. Right? :)","commit_id":"de2377d9605c8343042b35c89f2ad6f2fe7d9588"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"cc6dd8fbca600540d4be6844619294565d59d808","unresolved":false,"context_lines":[{"line_number":789,"context_line":"                      for idx in new_table.indexes]"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        self.assertIn(index_type, index_data)"},{"line_number":792,"context_line":"        self.assertIn(index_status, index_data)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2FUz0%3D","line":792,"updated":"2013-09-06 10:18:59.000000000","message":"Hi Nikhil, why you remove the some test code from last PS which flwang added? https://review.openstack.org/#/c/42817/22/glance/tests/unit/test_migrations.py","commit_id":"0eee37ac36b50b2cd4c14759f5a64ad5da3f37ef"}]}
