)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"826e4a231d318af5f7d1c43d67ec4f0b730a5856","unresolved":false,"context_lines":[{"line_number":14,"context_line":"api.py, cli,py, and env.py modules to support this enhancement."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I597d6ab50fe117e725f1d8de9b359ac9fbb79eb3"},{"line_number":17,"context_line":"Implements: blueprint mysql-cluster-support"},{"line_number":18,"context_line":"Depends-On: I9f1fd2a87fdf75332de2339d3ff4f08ce9220dcf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a1ff146_b6bf2dfa","line":17,"updated":"2017-03-15 21:58:08.000000000","message":"I don\u0027t think such a fix requires a blueprint, this change needs a release note btw.","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"6e4342f452d98d555f6b9d7f17b1db131541422e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"api.py, cli,py, and env.py modules to support this enhancement."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I597d6ab50fe117e725f1d8de9b359ac9fbb79eb3"},{"line_number":17,"context_line":"Implements: blueprint mysql-cluster-support"},{"line_number":18,"context_line":"Depends-On: I9f1fd2a87fdf75332de2339d3ff4f08ce9220dcf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1a1ced50_63ef02b1","line":17,"in_reply_to":"3a1ff146_b6bf2dfa","updated":"2017-03-16 16:13:03.000000000","message":"I\u0027ll remove the blueprint and work on adding a release note.","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"825a5915f0102a22166e9062d15205b0594e1e85","unresolved":false,"context_lines":[{"line_number":10,"context_line":"Neutron to support the MySQL Cluster DB. This includes the usage"},{"line_number":11,"context_line":"of the boolean mysql_enable_ndb setting from oslo.db from bug 1564110."},{"line_number":12,"context_line":"This allows operators to select from MySQL (InnoDB) or MySQL Cluster"},{"line_number":13,"context_line":"(NDB) as the storage engine backend. Additionally, this fixes the"},{"line_number":14,"context_line":"api.py, cli,py, and env.py modules to support this enhancement."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Co-Authored-By: Paul Bourke \u003cpaul.bourke@oracle.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"bf659307_ae0f7adf","line":13,"range":{"start_line":13,"start_character":1,"end_line":13,"end_character":4},"updated":"2018-03-28 15:57:31.000000000","message":"Wonder if it is possible to setup CI jobs to verify this fix. Ideally, the CI can capture any regression that will break Neutron in the NDB mode. Perhaps, a tempest job can be introduced to install MySQL in cluster mode and run the test cases? or a pep8 job can be introduced to do the code scanning to capture some NDB-incompatible change? Just throw out some ideas.","commit_id":"2995589568e41e074415ce12d819445059ac5adf"}],"neutron/conf/db/migration_cli.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"369a7e412cd6feb4d1c644fce6c0caa8ee0f8ef2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    cfg.BoolOpt(\u0027mysql_enable_ndb\u0027,"},{"line_number":52,"context_line":"               default\u003dFalse,"},{"line_number":53,"context_line":"               help\u003d_(\u0027If True, transparently enables support for handling \u0027"},{"line_number":54,"context_line":"                      \u0027MySQL Cluster (NDB).\u0027))"},{"line_number":55,"context_line":"]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"1f493fa4_0912c709","line":54,"updated":"2020-05-08 10:31:14.000000000","message":"I think that would be good to add here also info that this should be used only for new installations and not for the upgrade of the existing one with InnoDB.","commit_id":"9d647baebd91b433d047d338dea9cea02d6ff550"}],"neutron/db/api.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6e9e8c91bbabc5f6ecbc8e0fff89032be6462801","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"},{"line_number":236,"context_line":"        except exc.InvalidRequestError:"},{"line_number":237,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dFalse, nested\u003dFalse)"},{"line_number":238,"context_line":"        finally:"},{"line_number":239,"context_line":"            with session_context as tx:"},{"line_number":240,"context_line":"                yield tx"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ffa3b31_519b6271","line":237,"updated":"2017-04-16 08:00:24.000000000","message":"This will change the semantics of what happens on duplicatekey violations because this branch will result in the entire transaction failing. We depend on being able to catch duplicate key and continuing in cases so this can\u0027t be changed like this. I think we will instead need to work to get rid of the existing usage of \u0027autonested_transaction\u0027 if we don\u0027t have support for nested transactions.","commit_id":"d9042e35f4b9aacd3fc9497f78482d2d1ebd0330"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"21e99ee75f7cf1f96edc93588f5d9aacbce04b23","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"},{"line_number":236,"context_line":"        except exc.InvalidRequestError:"},{"line_number":237,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dFalse, nested\u003dFalse)"},{"line_number":238,"context_line":"        finally:"},{"line_number":239,"context_line":"            with session_context as tx:"},{"line_number":240,"context_line":"                yield tx"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ffa3b31_5f99f66b","line":237,"in_reply_to":"7ffa3b31_519b6271","updated":"2017-04-18 15:12:42.000000000","message":"MySQL Cluster does not support savepoints and rollbacks, so nesting and sub transactions have to be disabled. Where is the code for trying to capture duplicate keys and what is the expected behavior? I\u0027m sure we can figure out another way to implement that functionality without depending on this functionality.","commit_id":"d9042e35f4b9aacd3fc9497f78482d2d1ebd0330"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"04829697d96a7475ab512c2acbd0682b995ce59c","unresolved":false,"context_lines":[{"line_number":229,"context_line":"@contextlib.contextmanager"},{"line_number":230,"context_line":"def autonested_transaction(sess):"},{"line_number":231,"context_line":"    \"\"\"This is a convenience method to not bother with \u0027nested\u0027 parameter.\"\"\""},{"line_number":232,"context_line":"    # If we are using MySQL Cluster (NDB), disable nesting."},{"line_number":233,"context_line":"    if ndb.ndb_status(sess.get_bind()):"},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_3af5d9ed","line":232,"updated":"2017-06-02 17:20:30.000000000","message":"In order to see how this breaks, just disable nesting entirely. We should have consistent behavior WRT transactions independent of the backend.","commit_id":"1e04b163cb67424d0b643719500cbb44f56446c0"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"51031c10bc390a06efcac02a92fb59b0a460f5f0","unresolved":false,"context_lines":[{"line_number":229,"context_line":"@contextlib.contextmanager"},{"line_number":230,"context_line":"def autonested_transaction(sess):"},{"line_number":231,"context_line":"    \"\"\"This is a convenience method to not bother with \u0027nested\u0027 parameter.\"\"\""},{"line_number":232,"context_line":"    # If we are using MySQL Cluster (NDB), disable nesting."},{"line_number":233,"context_line":"    if ndb.ndb_status(sess.get_bind()):"},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_33e4dfdf","line":232,"in_reply_to":"df140735_276dbdcb","updated":"2017-06-02 22:11:12.000000000","message":"Yes, we need to disable nesting entirely if the suggestion is that we don\u0027t depend on nested transactions. It\u0027s feasible that some of the duplicate detection could be easily replaced,  and if that\u0027s the case then there is no reason to depend on nested transactions at all.","commit_id":"1e04b163cb67424d0b643719500cbb44f56446c0"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"70cdc3bfa517d697f1f21c15f6088ffe2ad1a801","unresolved":false,"context_lines":[{"line_number":229,"context_line":"@contextlib.contextmanager"},{"line_number":230,"context_line":"def autonested_transaction(sess):"},{"line_number":231,"context_line":"    \"\"\"This is a convenience method to not bother with \u0027nested\u0027 parameter.\"\"\""},{"line_number":232,"context_line":"    # If we are using MySQL Cluster (NDB), disable nesting."},{"line_number":233,"context_line":"    if ndb.ndb_status(sess.get_bind()):"},{"line_number":234,"context_line":"        try:"},{"line_number":235,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df140735_276dbdcb","line":232,"in_reply_to":"df140735_3af5d9ed","updated":"2017-06-02 19:35:30.000000000","message":"My team has been testing this for a while without any issues. Is neutron primarily using nesting to catch duplicates and deadlocks? Or is it a performance issue? I know with NDB, it\u0027s better to have a bunch of smaller transactions because of the way it scales out. If you think it makes sense to disable nesting altogether, I can work on that next and post an updated revision.","commit_id":"1e04b163cb67424d0b643719500cbb44f56446c0"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"44d1eedaf2b5c59c3eb039567016fdc369edf532","unresolved":false,"context_lines":[{"line_number":212,"context_line":"@contextlib.contextmanager"},{"line_number":213,"context_line":"def autonested_transaction(sess):"},{"line_number":214,"context_line":"    \"\"\"This is a convenience method to not bother with \u0027nested\u0027 parameter.\"\"\""},{"line_number":215,"context_line":"    # If we are using MySQL Cluster (NDB), disable nesting."},{"line_number":216,"context_line":"    if ndb.ndb_status(sess.get_bind()):"},{"line_number":217,"context_line":"        try:"},{"line_number":218,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_04135d68","line":215,"range":{"start_line":215,"start_character":43,"end_line":215,"end_character":59},"updated":"2017-10-30 23:48:16.000000000","message":"can you explain why this is safe?","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"},{"author":{"_account_id":23479,"name":"Murali Annamneni","email":"murali.annamneni@oracle.com","username":"mannamne"},"change_message_id":"92b789c7cbb844b521437b6d62cacdd1a3175807","unresolved":false,"context_lines":[{"line_number":212,"context_line":"@contextlib.contextmanager"},{"line_number":213,"context_line":"def autonested_transaction(sess):"},{"line_number":214,"context_line":"    \"\"\"This is a convenience method to not bother with \u0027nested\u0027 parameter.\"\"\""},{"line_number":215,"context_line":"    # If we are using MySQL Cluster (NDB), disable nesting."},{"line_number":216,"context_line":"    if ndb.ndb_status(sess.get_bind()):"},{"line_number":217,"context_line":"        try:"},{"line_number":218,"context_line":"            session_context \u003d sess.begin(subtransactions\u003dTrue, nested\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_1ac47bf4","line":215,"range":{"start_line":215,"start_character":43,"end_line":215,"end_character":59},"in_reply_to":"3f4b6375_04135d68","updated":"2017-11-02 15:59:55.000000000","message":"NDB doesn\u0027t support nested transactions. So, disable nesting only if the engine is ndb","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"}],"neutron/db/migration/alembic_migrations/agent_init_ops.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"744e524e5ccfbfa418b08fc8b2e9827b18a81e3f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    op.create_table("},{"line_number":28,"context_line":"        \u0027agents\u0027,"},{"line_number":29,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":30,"context_line":"        sa.Column(\u0027agent_type\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sa.Column(\u0027binary\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sa.Column(\u0027topic\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sa.Column(\u0027host\u0027, sa.String(length\u003d255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a1ff146_87ee76b2","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":60},"updated":"2017-03-16 06:35:58.000000000","message":"Why we have difference here?","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"75980567e3c4e891bf0871a269004abf68d69454","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    op.create_table("},{"line_number":28,"context_line":"        \u0027agents\u0027,"},{"line_number":29,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":30,"context_line":"        sa.Column(\u0027agent_type\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sa.Column(\u0027binary\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sa.Column(\u0027topic\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sa.Column(\u0027host\u0027, sa.String(length\u003d255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_ef9f3fb2","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":60},"in_reply_to":"1a1ced50_2081734b","updated":"2017-03-17 05:50:39.000000000","message":"I think TinyText is better option, but I think we need to change it in model too. I\u0027m concerned about inconsistency here. \nAnd, what about scenario when existing deployment decided to be upgraded and switched to use ndb engine, is it possible scenario?","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"c86d2c8960ca1d3bc2bd73bc49d4314a9a736c35","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    op.create_table("},{"line_number":28,"context_line":"        \u0027agents\u0027,"},{"line_number":29,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":30,"context_line":"        sa.Column(\u0027agent_type\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sa.Column(\u0027binary\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sa.Column(\u0027topic\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sa.Column(\u0027host\u0027, sa.String(length\u003d255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_2081734b","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":60},"in_reply_to":"1a1ced50_371d4010","updated":"2017-03-16 21:30:11.000000000","message":"Ann, I can use the same ndb.Auto* changes to model.py. Or I can change these to TinyText. Which would you prefer?","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"6d1f89daf0c6a3d42ab1483b35bf9cf16884c86c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    op.create_table("},{"line_number":28,"context_line":"        \u0027agents\u0027,"},{"line_number":29,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":30,"context_line":"        sa.Column(\u0027agent_type\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sa.Column(\u0027binary\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sa.Column(\u0027topic\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sa.Column(\u0027host\u0027, sa.String(length\u003d255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_371d4010","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":60},"in_reply_to":"1a1ced50_43776602","updated":"2017-03-16 17:35:26.000000000","message":"We need to have the same number of chars, that we have set in model. Making size different should be a separate change and I don\u0027t think is really needed.","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"6e4342f452d98d555f6b9d7f17b1db131541422e","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    op.create_table("},{"line_number":28,"context_line":"        \u0027agents\u0027,"},{"line_number":29,"context_line":"        sa.Column(\u0027id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":30,"context_line":"        sa.Column(\u0027agent_type\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sa.Column(\u0027binary\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sa.Column(\u0027topic\u0027, ndb.AutoStringSize(255, 128), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sa.Column(\u0027host\u0027, sa.String(length\u003d255), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_43776602","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":60},"in_reply_to":"3a1ff146_87ee76b2","updated":"2017-03-16 16:13:03.000000000","message":"This is to keep the table rows within the 14k limit of NDB. This function will determine if we are using InnoDB or NDB and set the size based on the two parameters passed. I cut the size here because I couldn\u0027t find any examples in the code base where this would take up more than 128 chars. If we want to preserve the 255 chars for the string, we can instead convert this to TinyText.","commit_id":"f4eb050ba625c8dd0723692350ece65f24c05629"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"21d850d8c522168b30e3aff670a439e87603ae04","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        sa.Column(\u0027agent_type\u0027, ndb.AutoStringTinyText(255), nullable\u003dFalse),"},{"line_number":31,"context_line":"        sa.Column(\u0027binary\u0027, ndb.AutoStringTinyText(255), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sa.Column(\u0027topic\u0027, ndb.AutoStringTinyText(255), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sa.Column(\u0027host\u0027, sa.String(length\u003d255), nullable\u003dFalse),"},{"line_number":34,"context_line":"        sa.Column(\u0027admin_state_up\u0027, sa.Boolean(), nullable\u003dFalse,"},{"line_number":35,"context_line":"                  server_default\u003dsa.sql.true()),"},{"line_number":36,"context_line":"        sa.Column(\u0027created_at\u0027, sa.DateTime(), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_65c5803c","line":33,"range":{"start_line":33,"start_character":26,"end_line":33,"end_character":35},"updated":"2017-04-06 06:47:20.000000000","message":"why are random items changed","commit_id":"7d5bfea77fb77288b7426001edc005d2ad0a3160"}],"neutron/db/migration/alembic_migrations/dvr_init_opts.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"6e9e8c91bbabc5f6ecbc8e0fff89032be6462801","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027vif_type\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027vif_details\u0027, ndb.AutoStringText(4095),"},{"line_number":38,"context_line":"                  nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027vnic_type\u0027, sa.String(length\u003d64),"},{"line_number":40,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027normal\u0027),"},{"line_number":41,"context_line":"        sa.Column(\u0027profile\u0027, ndb.AutoStringText(4095),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ffa3b31_719e5e64","line":38,"updated":"2017-04-16 08:00:24.000000000","message":"does this not support server_default? if not, that\u0027s a significant change and will likely be a blocker.","commit_id":"d9042e35f4b9aacd3fc9497f78482d2d1ebd0330"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"21e99ee75f7cf1f96edc93588f5d9aacbce04b23","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":36,"context_line":"        sa.Column(\u0027vif_type\u0027, sa.String(length\u003d64), nullable\u003dFalse),"},{"line_number":37,"context_line":"        sa.Column(\u0027vif_details\u0027, ndb.AutoStringText(4095),"},{"line_number":38,"context_line":"                  nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027vnic_type\u0027, sa.String(length\u003d64),"},{"line_number":40,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027normal\u0027),"},{"line_number":41,"context_line":"        sa.Column(\u0027profile\u0027, ndb.AutoStringText(4095),"}],"source_content_type":"text/x-python","patch_set":7,"id":"7ffa3b31_3f118aad","line":38,"in_reply_to":"7ffa3b31_719e5e64","updated":"2017-04-18 15:12:42.000000000","message":"I can put the server_default back in, that\u0027s not a problem. I noticed that this wasn\u0027t used else where and since it\u0027s set to nothing it seems useless here. Any explanation on why we need it since it\u0027s not set to anything?","commit_id":"d9042e35f4b9aacd3fc9497f78482d2d1ebd0330"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c85a35dadfc40ab9b483388016d39d5cc392c312","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027vnic_type\u0027, sa.String(length\u003d64),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027normal\u0027),"},{"line_number":40,"context_line":"        sa.Column(\u0027profile\u0027, sa.String(length\u003d4095),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027\u0027),"},{"line_number":42,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(16), nullable\u003dFalse),"},{"line_number":43,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":44,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_879414ea","side":"PARENT","line":41,"updated":"2017-07-21 22:47:43.000000000","message":"why are the server defaults being removed?","commit_id":"b6395a5f639a07a01decce9db104eb76bbe9aefa"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"6bcd6232755007029eb036671f2d330d0422114c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027vnic_type\u0027, sa.String(length\u003d64),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027normal\u0027),"},{"line_number":40,"context_line":"        sa.Column(\u0027profile\u0027, sa.String(length\u003d4095),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027\u0027),"},{"line_number":42,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(16), nullable\u003dFalse),"},{"line_number":43,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":44,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"bf3e73b7_bfc02e52","side":"PARENT","line":41,"in_reply_to":"ff346bd7_0d8ff02a","updated":"2017-08-07 08:35:18.000000000","message":"As far as I concern we have server_default\u003d\u0027\u0027 as we have nullable\u003dFalse, so it is required.","commit_id":"b6395a5f639a07a01decce9db104eb76bbe9aefa"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"e08b6e61a2465fb95ae43836626404bc91667918","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027vnic_type\u0027, sa.String(length\u003d64),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027normal\u0027),"},{"line_number":40,"context_line":"        sa.Column(\u0027profile\u0027, sa.String(length\u003d4095),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027\u0027),"},{"line_number":42,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(16), nullable\u003dFalse),"},{"line_number":43,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":44,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_8f78aaf8","side":"PARENT","line":41,"in_reply_to":"ff346bd7_879414ea","updated":"2017-07-22 02:22:47.000000000","message":"agree, has this been happening on any of the other reviews?   I\u0027ve not had the chance to review them all.","commit_id":"b6395a5f639a07a01decce9db104eb76bbe9aefa"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"d4983bbfde9c417a2941d4004f2bc31360c42135","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027vnic_type\u0027, sa.String(length\u003d64),"},{"line_number":39,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027normal\u0027),"},{"line_number":40,"context_line":"        sa.Column(\u0027profile\u0027, sa.String(length\u003d4095),"},{"line_number":41,"context_line":"                  nullable\u003dFalse, server_default\u003d\u0027\u0027),"},{"line_number":42,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(16), nullable\u003dFalse),"},{"line_number":43,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":44,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_0d8ff02a","side":"PARENT","line":41,"in_reply_to":"ff346bd7_8f78aaf8","updated":"2017-07-24 23:38:08.000000000","message":"I\u0027ll have to go back and figure out why these were dropped. I believe that neutron is the only one where I\u0027ve seen the server_default\u003d\u0027\u0027. Any reason why these are here anyways? Normally you\u0027d use them if you were setting it to something like sys date or some other format.","commit_id":"b6395a5f639a07a01decce9db104eb76bbe9aefa"}],"neutron/db/migration/alembic_migrations/env.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"b08f2a84a01f5e443a0e28072443da30865d09dd","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        if neutron_config.database.mysql_enable_ndb:"},{"line_number":50,"context_line":"            mysql_engine \u003d \u0027NDBCLUSTER\u0027"},{"line_number":51,"context_line":"            CONF.database.mysql_enable_ndb \u003d neutron_config.\\"},{"line_number":52,"context_line":"                database.mysql_enable_ndb"},{"line_number":53,"context_line":"        else:"},{"line_number":54,"context_line":"            mysql_engine \u003d neutron_config.command.mysql_engine"},{"line_number":55,"context_line":"    except cfg.NoSuchOptError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_413f18d6","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":41},"updated":"2017-03-15 21:20:22.000000000","message":"We avoid using backslash to continue lines. Please see secod bullet here: https://docs.openstack.org/developer/hacking/#general.\n\nThe following would be better:\n\nCONF.database.mysql_enable_ndb \u003d (\n    neutron_config.database.mysql_enable_ndb)","commit_id":"c6442061bc52f503541159e6898b34f35b2ad4c2"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"6a32cc254d2f1a9bf6047880062ea61e588f105e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    try:"},{"line_number":49,"context_line":"        if neutron_config.database.mysql_enable_ndb:"},{"line_number":50,"context_line":"            mysql_engine \u003d \u0027NDBCLUSTER\u0027"},{"line_number":51,"context_line":"            CONF.database.mysql_enable_ndb \u003d neutron_config.\\"},{"line_number":52,"context_line":"                database.mysql_enable_ndb"},{"line_number":53,"context_line":"        else:"},{"line_number":54,"context_line":"            mysql_engine \u003d neutron_config.command.mysql_engine"},{"line_number":55,"context_line":"    except cfg.NoSuchOptError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a1ff146_936403e6","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":41},"in_reply_to":"3a1ff146_413f18d6","updated":"2017-03-15 21:25:56.000000000","message":"Thank you for the pointer. I\u0027ve corrected this and updated the patch.","commit_id":"c6442061bc52f503541159e6898b34f35b2ad4c2"}],"neutron/db/migration/alembic_migrations/ml2_init_ops.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"44d1eedaf2b5c59c3eb039567016fdc369edf532","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        sa.Column(\u0027profile\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":98,"context_line":"                  nullable\u003dFalse),"},{"line_number":99,"context_line":"        sa.Column(\u0027vif_details\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":100,"context_line":"                  nullable\u003dFalse),"},{"line_number":101,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":102,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":103,"context_line":"        sa.PrimaryKeyConstraint(\u0027port_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_e449618b","line":100,"updated":"2017-10-30 23:48:16.000000000","message":"why server_default are removed?\nisn\u0027t another migration necessary for the existing installations?\nanyway i guess this ought to be a separate change.","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"1dd695ebf9f9c7df73d200c81b582474314de750","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        sa.Column(\u0027profile\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":98,"context_line":"                  nullable\u003dFalse),"},{"line_number":99,"context_line":"        sa.Column(\u0027vif_details\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":100,"context_line":"                  nullable\u003dFalse),"},{"line_number":101,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":102,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":103,"context_line":"        sa.PrimaryKeyConstraint(\u0027port_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_127450ce","line":100,"in_reply_to":"3f4b6375_4077a4a1","updated":"2017-11-03 05:11:13.000000000","message":"Nullable is False for this column, but these parameters can be set separately, so we have server_default here. Have you tested that removing does not break anything?","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"b63796481f912796b822db4e025d1bf603cd8c53","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        sa.Column(\u0027profile\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":98,"context_line":"                  nullable\u003dFalse),"},{"line_number":99,"context_line":"        sa.Column(\u0027vif_details\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":100,"context_line":"                  nullable\u003dFalse),"},{"line_number":101,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":102,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":103,"context_line":"        sa.PrimaryKeyConstraint(\u0027port_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_f2e358a3","line":100,"in_reply_to":"3f4b6375_e449618b","updated":"2017-10-31 07:29:14.000000000","message":"+1 for YAMAMOTO","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"},{"author":{"_account_id":23479,"name":"Murali Annamneni","email":"murali.annamneni@oracle.com","username":"mannamne"},"change_message_id":"d0561b7112e22843d34939aeee6ea05bc62ff2f2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        sa.Column(\u0027profile\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":98,"context_line":"                  nullable\u003dFalse),"},{"line_number":99,"context_line":"        sa.Column(\u0027vif_details\u0027, String(4095, mysql_ndb_type\u003dTEXT),"},{"line_number":100,"context_line":"                  nullable\u003dFalse),"},{"line_number":101,"context_line":"        sa.ForeignKeyConstraint([\u0027port_id\u0027], [\u0027ports.id\u0027],"},{"line_number":102,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":103,"context_line":"        sa.PrimaryKeyConstraint(\u0027port_id\u0027))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_4077a4a1","line":100,"in_reply_to":"3f4b6375_e449618b","updated":"2017-11-02 16:30:34.000000000","message":"since it\u0027s set to nothing it seems useless here. Any explanation on why we need it since it\u0027s not set to anything?","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"}],"neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py":[{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"e08b6e61a2465fb95ae43836626404bc91667918","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                  server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE and"},{"line_number":52,"context_line":"            ndb.ndb_status(engine) is False):"},{"line_number":53,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":54,"context_line":"                   \"ADD PRIMARY KEY(port_id, host);\")"},{"line_number":55,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_cf7592fc","line":52,"updated":"2017-07-22 02:22:47.000000000","message":"nit:   \"not ndb.ndb_status(engine)\", don\u0027t need explicit False","commit_id":"33753b7700165eafad52a8445f2de82136fccba9"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"d4983bbfde9c417a2941d4004f2bc31360c42135","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                  server_default\u003dconstants.PORT_BINDING_STATUS_ACTIVE))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    if (engine.name \u003d\u003d MYSQL_ENGINE and"},{"line_number":52,"context_line":"            ndb.ndb_status(engine) is False):"},{"line_number":53,"context_line":"        op.execute(\"ALTER TABLE ml2_port_bindings DROP PRIMARY KEY,\""},{"line_number":54,"context_line":"                   \"ADD PRIMARY KEY(port_id, host);\")"},{"line_number":55,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_8d9f604f","line":52,"in_reply_to":"ff346bd7_cf7592fc","updated":"2017-07-24 23:38:08.000000000","message":"I can change this.","commit_id":"33753b7700165eafad52a8445f2de82136fccba9"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"e08b6e61a2465fb95ae43836626404bc91667918","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    else:"},{"line_number":56,"context_line":"        inspector \u003d insp.from_engine(bind)"},{"line_number":57,"context_line":"        fk_name \u003d _get_fk_name(inspector, \u0027ml2_port_bindings\u0027, \u0027port_id\u0027)"},{"line_number":58,"context_line":"        op.drop_constraint(fk_name, ML2_PORT_BINDING, type_\u003d\u0027foreignkey\u0027)"},{"line_number":59,"context_line":"        pk_constraint \u003d inspector.get_pk_constraint(ML2_PORT_BINDING)"},{"line_number":60,"context_line":"        op.drop_constraint(pk_constraint.get(\u0027name\u0027), ML2_PORT_BINDING,"},{"line_number":61,"context_line":"                           type_\u003d\u0027primary\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_ef685622","line":58,"updated":"2017-07-22 02:22:47.000000000","message":"I\u0027d prefer if all this extra logic could be within \"if ndb.ndb_status(engine)\", DB\u0027s like Postgresql and others don\u0027t need this","commit_id":"33753b7700165eafad52a8445f2de82136fccba9"},{"author":{"_account_id":19283,"name":"Octave Orgeron","email":"octave.orgeron@oracle.com","username":"oorgeron"},"change_message_id":"d4983bbfde9c417a2941d4004f2bc31360c42135","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    else:"},{"line_number":56,"context_line":"        inspector \u003d insp.from_engine(bind)"},{"line_number":57,"context_line":"        fk_name \u003d _get_fk_name(inspector, \u0027ml2_port_bindings\u0027, \u0027port_id\u0027)"},{"line_number":58,"context_line":"        op.drop_constraint(fk_name, ML2_PORT_BINDING, type_\u003d\u0027foreignkey\u0027)"},{"line_number":59,"context_line":"        pk_constraint \u003d inspector.get_pk_constraint(ML2_PORT_BINDING)"},{"line_number":60,"context_line":"        op.drop_constraint(pk_constraint.get(\u0027name\u0027), ML2_PORT_BINDING,"},{"line_number":61,"context_line":"                           type_\u003d\u0027primary\u0027)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ff346bd7_c80d5638","line":58,"in_reply_to":"ff346bd7_ef685622","updated":"2017-07-24 23:38:08.000000000","message":"I\u0027m all for moving the get_fk_name to oslo.db. But I\u0027d also argue that dropping FKCs before making changes is still the proper thing to do if we are concerned about portability. If we are going to get into Postgresql, we also need an operation here to update the FKC and validate it. Otherwise, it could be stale/broken by this table change. Also, this is the only FKC drop/recreate for neutron that\u0027s in this patch. So, the impact is pretty small here and it\u0027s not like the FKC is lost or anything.","commit_id":"33753b7700165eafad52a8445f2de82136fccba9"}],"neutron/objects/base.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"44d1eedaf2b5c59c3eb039567016fdc369edf532","unresolved":false,"context_lines":[{"line_number":436,"context_line":"            raise o_exc.NeutronPrimaryKeyMissing(object_class\u003dcls.__name__,"},{"line_number":437,"context_line":"                                                 missing_keys\u003dmissing_keys)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        with context.session.begin(subtransactions\u003dTrue, nested\u003dFalse):"},{"line_number":440,"context_line":"            db_obj \u003d obj_db_api.get_object("},{"line_number":441,"context_line":"                context, cls.db_model,"},{"line_number":442,"context_line":"                **cls.modify_fields_to_db(kwargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_84586d56","line":439,"updated":"2017-10-30 23:48:16.000000000","message":"is this necessary?  i thought it was the default.","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"44d1eedaf2b5c59c3eb039567016fdc369edf532","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        \"\"\""},{"line_number":461,"context_line":"        if validate_filters:"},{"line_number":462,"context_line":"            cls.validate_filters(**kwargs)"},{"line_number":463,"context_line":"        with context.session.begin(subtransactions\u003dTrue, nested\u003dFalse):"},{"line_number":464,"context_line":"            db_objs \u003d obj_db_api.get_objects("},{"line_number":465,"context_line":"                context, cls.db_model, _pager\u003d_pager,"},{"line_number":466,"context_line":"                **cls.modify_fields_to_db(kwargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_6455711d","line":463,"updated":"2017-10-30 23:48:16.000000000","message":"ditto","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"44d1eedaf2b5c59c3eb039567016fdc369edf532","unresolved":false,"context_lines":[{"line_number":507,"context_line":"        \"\"\""},{"line_number":508,"context_line":"        if validate_filters:"},{"line_number":509,"context_line":"            cls.validate_filters(**kwargs)"},{"line_number":510,"context_line":"        with context.session.begin(subtransactions\u003dTrue, nested\u003dFalse):"},{"line_number":511,"context_line":"            return obj_db_api.delete_objects("},{"line_number":512,"context_line":"                context, cls.db_model, **cls.modify_fields_to_db(kwargs))"},{"line_number":513,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3f4b6375_44303508","line":510,"updated":"2017-10-30 23:48:16.000000000","message":"ditto","commit_id":"94e86bafa15cbfea15cd1a25785fb842c8da7e1a"}]}
