)]}'
{"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"28eef50bb4e3177d23c40aeff7b7787102db4867","unresolved":false,"context_lines":[{"line_number":693,"context_line":"            try:"},{"line_number":694,"context_line":"                # NOTE(boris-42): To get existing address we have to do each"},{"line_number":695,"context_line":"                #                  time session.flush().."},{"line_number":696,"context_line":"                model.save(session\u003dsession)"},{"line_number":697,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":698,"context_line":"                raise exception.FloatingIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":699,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FlSs%3D","line":696,"updated":"2013-05-02 22:48:22.000000000","message":"I am concerned that there is a performance impact using model.save inside the for loop, because internally it will call\n\n  with session.begin(subtransactions\u003dtrue):\n    session.add()\n    session.flush()\n\nInstead, perhaps you can just session.add and let sqlalchemy flush it all at once outside the loop? You could still catch the DBDuplciateEntry, eg:\n\n  try:\n    with session.begin():\n      for ip in ips:\n        model \u003d ...\n        model.update(ip)\n        session.add(model)\n  except db_exc.DBDuplicateEntry:\n    raise ...","commit_id":"2cade2f27c72df491a79ceea9d55b3e6281bec7d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0ea5ab05c732647f22cadb9c0fd288d0c0b7012f","unresolved":false,"context_lines":[{"line_number":693,"context_line":"            try:"},{"line_number":694,"context_line":"                # NOTE(boris-42): To get existing address we have to do each"},{"line_number":695,"context_line":"                #                  time session.flush().."},{"line_number":696,"context_line":"                model.save(session\u003dsession)"},{"line_number":697,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":698,"context_line":"                raise exception.FloatingIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":699,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FlB4%3D","line":696,"in_reply_to":"AAAAOn%2F%2FlSs%3D","updated":"2013-05-03 06:33:58.000000000","message":"We should get address of ip that produce duplicate exception, so we should run each time explicit session.flush() //to execute query.\n\nBut you are partial right \n\n  session.add()\n  session.flush() \n\nwill work faster then\n\n   model.save(session)","commit_id":"2cade2f27c72df491a79ceea9d55b3e6281bec7d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"28eef50bb4e3177d23c40aeff7b7787102db4867","unresolved":false,"context_lines":[{"line_number":900,"context_line":"    session \u003d get_session()"},{"line_number":901,"context_line":"    with session.begin():"},{"line_number":902,"context_line":"        float_ip_ref \u003d _floating_ip_get_by_address(context, address, session)"},{"line_number":903,"context_line":"        float_ip_ref.update(values)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FlSg%3D","line":903,"updated":"2013-05-02 22:48:22.000000000","message":"should you catch DBDuplicateEntry here too, just in case someone tries to change \u0027address\u0027?","commit_id":"2cade2f27c72df491a79ceea9d55b3e6281bec7d"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0ea5ab05c732647f22cadb9c0fd288d0c0b7012f","unresolved":false,"context_lines":[{"line_number":900,"context_line":"    session \u003d get_session()"},{"line_number":901,"context_line":"    with session.begin():"},{"line_number":902,"context_line":"        float_ip_ref \u003d _floating_ip_get_by_address(context, address, session)"},{"line_number":903,"context_line":"        float_ip_ref.update(values)"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":""},{"line_number":906,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAOn%2F%2FlB0%3D","line":903,"in_reply_to":"AAAAOn%2F%2FlSg%3D","updated":"2013-05-03 06:33:58.000000000","message":"Agree","commit_id":"2cade2f27c72df491a79ceea9d55b3e6281bec7d"}]}
