)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4fdd1c9f8c6cb2cf68534e5f5932361316b9c98b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Victor Sergeyev \u003cvsergeyev@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-05-16 17:07:40 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add unique constraints to FixedIp and FloatingIp."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a missing unique constraint (\u0027address\u0027, \u0027deleted\u0027) to FloatingIp"},{"line_number":10,"context_line":"model (this constraint was in db schema but not in model definition)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAPH%2F%2Fj4I%3D","line":7,"updated":"2013-05-30 14:53:31.000000000","message":"only to fixed","commit_id":"6d5a1541d58735ba80c313d0cd9328bf9380c832"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bec94c51cf65466b2df4960eb62a0adf41d94be7","unresolved":false,"context_lines":[{"line_number":1064,"context_line":"            model \u003d models.FixedIp()"},{"line_number":1065,"context_line":"            model.update(ip)"},{"line_number":1066,"context_line":"            try:"},{"line_number":1067,"context_line":"                # NOTE: To get existing address we have to do each time"},{"line_number":1068,"context_line":"                #       session.flush(). See related note at line 697."},{"line_number":1069,"context_line":"                session.add(model)"},{"line_number":1070,"context_line":"                session.flush()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAO3%2F%2F8p0%3D","line":1067,"updated":"2013-05-16 13:41:49.000000000","message":"pls write your gerit name\n\nNOTE(your_gerrit_name)","commit_id":"a4475d17d477bd264fe200d38ae1c0c72877c884"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"e4250409469756a371e21180eb9effef685d62ca","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        for ip in ips:"},{"line_number":1067,"context_line":"            model \u003d models.FixedIp()"},{"line_number":1068,"context_line":"            model.update(ip)"},{"line_number":1069,"context_line":"            try:"},{"line_number":1070,"context_line":"                # NOTE (vsergeyev): To get existing address we have to do each"},{"line_number":1071,"context_line":"                #                   time session.flush()."},{"line_number":1072,"context_line":"                #                   See related note at line 697."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FeT0%3D","line":1069,"updated":"2013-06-03 00:45:51.000000000","message":"What happens with the 8th element in a list of 10 fails? Does the first 7 get added and the 9/10th don\u0027t get added? If this is the case, Can we please change the logic to ensure that none of the ips make it to the database?","commit_id":"26f834fcb8092d7cdd75ce10cfbd5a41a4874d7c"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"5a3ba83164fa075d6592f2988f25fa624e14391a","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        for ip in ips:"},{"line_number":1067,"context_line":"            model \u003d models.FixedIp()"},{"line_number":1068,"context_line":"            model.update(ip)"},{"line_number":1069,"context_line":"            try:"},{"line_number":1070,"context_line":"                # NOTE (vsergeyev): To get existing address we have to do each"},{"line_number":1071,"context_line":"                #                   time session.flush()."},{"line_number":1072,"context_line":"                #                   See related note at line 697."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2Fd%2FM%3D","line":1069,"in_reply_to":"AAAAPH%2F%2FeBI%3D","updated":"2013-06-03 07:50:27.000000000","message":"Victor +1. \n\nWe should add all or nothing. And in case of transaction, we will \nadd all or nothing.","commit_id":"26f834fcb8092d7cdd75ce10cfbd5a41a4874d7c"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"c02f46bfbc911c4f222d401b61a7db467598cb38","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        for ip in ips:"},{"line_number":1067,"context_line":"            model \u003d models.FixedIp()"},{"line_number":1068,"context_line":"            model.update(ip)"},{"line_number":1069,"context_line":"            try:"},{"line_number":1070,"context_line":"                # NOTE (vsergeyev): To get existing address we have to do each"},{"line_number":1071,"context_line":"                #                   time session.flush()."},{"line_number":1072,"context_line":"                #                   See related note at line 697."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FeBI%3D","line":1069,"in_reply_to":"AAAAPH%2F%2FeT0%3D","updated":"2013-06-03 07:47:23.000000000","message":"It happens within a single transaction so in this case the transaction will be rollbacked and none of the ips will make it to the database.","commit_id":"26f834fcb8092d7cdd75ce10cfbd5a41a4874d7c"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3f93e9c0c6ff6d9db2017d82be3a1d6f23b85882","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fz%2BI%3D","line":1074,"updated":"2013-06-20 16:38:45.000000000","message":"It may be worth noting that the input list of ips will be partially stored in the database even if one of them already exists there.  Not certain there\u0027s anything we can do about it, though…","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b40fe2dc396df82d734657e54b2735f07102d6fb","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FeoM%3D","line":1074,"in_reply_to":"AAAAPn%2F%2FoTU%3D","updated":"2013-07-01 02:21:20.000000000","message":"@Roman\n\nAgree with that\u003d) \n\nBut it doesn\u0027t change my opinion. That this should be merged. And then we should discuss on mailing list. \n\nIs it better to change this behavior (and change it together with FloatingIp)","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"4776e39b5df801d630cb4308b2a4963202d44dc9","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FoTU%3D","line":1074,"in_reply_to":"AAAAPn%2F%2FoXs%3D","updated":"2013-06-26 12:45:37.000000000","message":"@Boris\n\nThe point was, using Core part instead of ORM, we could actually do a bulk insert without assigning ID values.\n\nAs for skip/revert: we are running these inserts inside a transaction. If one of them fails, the transaction will be aborted. So to implement the logic with saving part of IPs in DB we have to run each insert in a separate transaction (i.e try/except and flush calls aren\u0027t enough).\n\ndevel\u003d# \\d testtbl;\n    Table \"public.testtbl\"\n Column |  Type   | Modifiers \n--------+---------+-----------\n a      | integer | \n b      | integer | \nIndexes:\n    \"test_unique\" UNIQUE CONSTRAINT, btree (a)\n\ndevel\u003d# begin;\n\nBEGIN\n\ndevel\u003d# insert into testtbl values (1, 2);\n\nINSERT 0 1\n\ndevel\u003d# insert into testtbl values (3, 4);\n\nINSERT 0 1\n\ndevel\u003d# insert into testtbl values (3, 5);\n\nERROR:  duplicate key value violates unique constraint \"test_unique\"\n\nDETAIL:  Key (a)\u003d(3) already exists.\n\ndevel\u003d# insert into testtbl values (3, 6);\n\nERROR:  current transaction is aborted, commands ignored until end of transaction block","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"6c378796abc8ccc9f41d1a945be04806315481fa","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FoXs%3D","line":1074,"in_reply_to":"AAAAPn%2F%2FoY8%3D","updated":"2013-06-26 12:17:18.000000000","message":"@Roman\n\nI read this article about 5 months ago. \nBulk insert will be runed only if you set by hand \u0027ID\u0027 values in all entries. In our cases it will be N request to DB, with flush each time or flush one time pro 1k requests.\n\nAnd with flush / 1k will be a little bit faster, because you run a lot  of sqla logic one time pro 1k instead of each time.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c3988ca9b78ee0c38e5fbc4889bc7d3270c89f7a","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FoY8%3D","line":1074,"in_reply_to":"AAAAPn%2F%2Foas%3D","updated":"2013-06-26 12:07:23.000000000","message":"@Boris\n\nBulk inserts are actually there in both ORM and Core parts of SQLAlchemy (http://stackoverflow.com/questions/11769366/why-is-sqlalchemy-insert-with-sqlite-25-times-slower-than-using-sqlite3-directly/11769768#11769768)","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f9e003600db1cfb123e948998f35c2127d72fddc","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Foas%3D","line":1074,"in_reply_to":"AAAAPn%2F%2Fq%2Bo%3D","updated":"2013-06-26 11:59:03.000000000","message":"@Devananda.\n\nFirst of all there is no bulk insert in sqla. We are always make N inserts.. \u003d(\n\nSecond this case was not handled at all. In previous version duplicated fixed IP was added in DB, and now we are speaking about new feature. What to do with duplicated entry. (revert all) all just skip duplicated (instead of adding it to db). \n\n@Matt \nI am not sure that users will be happy with such approach. If you are creating 1kk address (it will work pretty long) and then if it fails because of the last IP it will be sad to wait one more time to create all these addresses. Also the result of operation (if skip already created) is the same as if we create all without skiping. So I think that it is better to create with skiping\u003d)","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"2aa54a5dc825de14da9c70987b55f5b1869d46e9","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fod8%3D","line":1074,"in_reply_to":"AAAAPn%2F%2FrHY%3D","updated":"2013-06-26 11:39:30.000000000","message":"@Devananda\n\nAha... Currently Oslo wrapper just extracts column names of a unique constraint, but, I believe, it can be modified to extract values fairly easy.\n\nBoth MySQL and PostgreSQL exceptions contain the information about duplicating value. SQLite doesn\u0027t, but it should not be a big deal as we don\u0027t use it in production.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"eacb907c07f19ea7dbb7c1fe3ed4fc4f8501d67f","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fq%2Bo%3D","line":1074,"in_reply_to":"AAAAPn%2F%2FrJI%3D","updated":"2013-06-25 15:21:15.000000000","message":"My vote is that the they *all* fail if one fails. The reasoning is the method is called \"bulk_create\" not \"bulk_create_some_if_we_can_and_the_weather_is_ok_and_junk\" As such, I\u0027m fine with taking it to the mailing list, but I\u0027d much prefer the old way to the new way.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"860ea0b589547bc8244d2c96e2557a40f9d92b81","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FrHY%3D","line":1074,"in_reply_to":"AAAAPn%2F%2Frvo%3D","updated":"2013-06-25 14:49:10.000000000","message":"@Roman, The purpose here was to be able to tell the admin which IP caused the error. Will the Oslo db wrapper be able to extract that? If so, great!\n\nOn a side note, there is a significant performance impact to calling flush() for every inserted row. When creating eg. 1M IP addresses, it will be significantly faster (read: I expect at least one or two orders of magnitude) to do a bulk insert and commit, as opposed to insert-flush-insert-flush...-commit.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"860ea0b589547bc8244d2c96e2557a40f9d92b81","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FrJI%3D","line":1074,"in_reply_to":"AAAAPn%2F%2Fvk0%3D","updated":"2013-06-25 14:49:10.000000000","message":"@Boris, I think you\u0027re suggesting a pretty substantial change in behavior.\n\nPrior/current - create all requested IPs, or fail and create none.\nSuggested - create all that worked, and log an error for any which don\u0027t, but still return \"success\".\n\nI think a change like this should be discussed on the list.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"b8fad079e592cd158ae91a264dfa66cb57210cc8","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Frvo%3D","line":1074,"in_reply_to":"AAAAPn%2F%2Fvk0%3D","updated":"2013-06-25 11:21:45.000000000","message":"Does it makes sense to call flush() for each FixedIp instance? The whole loop is executed inside a transactional block. In case of a duplicate error, none of IPs will make it to the database anyway and Oslo DB code has a Session wrapper that parses duplicate entries errors, so we can raise a proper high-level exception.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"b69a27d480e5d86d7e18294faee70f5a42a44fa9","unresolved":false,"context_lines":[{"line_number":1071,"context_line":"                session.add(model)"},{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2Fvk0%3D","line":1074,"in_reply_to":"AAAAPn%2F%2Fz%2BI%3D","updated":"2013-06-23 10:24:06.000000000","message":"I agree with Kevin. Because if you are creating 1kk addresses and it fails, then it will be painful for sys admin.\n\nSo probably we should just log that we weren\u0027t able to create some of fixed ips.","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f9e003600db1cfb123e948998f35c2127d72fddc","unresolved":false,"context_lines":[{"line_number":1072,"context_line":"                session.flush()"},{"line_number":1073,"context_line":"            except db_exc.DBDuplicateEntry:"},{"line_number":1074,"context_line":"                raise exception.FixedIpExists(address\u003dip[\u0027address\u0027])"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":"@require_context"},{"line_number":1078,"context_line":"def fixed_ip_disassociate(context, address):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPn%2F%2FoaQ%3D","line":1075,"updated":"2013-06-26 11:59:03.000000000","message":"@Devananda @Mark @Kevin\nHowever I think that it will be Ok if we merge this (as it fix the problem in the same way as FloatingIP), and continue discussion about SKIP or REVERT (in both cases) in mailing list. \nOK?","commit_id":"328dd3624d5542594f5719e253494a0011a4e18f"}],"nova/db/sqlalchemy/migrate_repo/versions/180_add_fixed_ip_uc.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bec94c51cf65466b2df4960eb62a0adf41d94be7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.db.sqlalchemy import utils"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"UC_NAME \u003d \"uniq_fixed_ips_x_address_x_deleted\""},{"line_number":27,"context_line":"COLUMNS \u003d (\u0027address\u0027, \u0027deleted\u0027)"},{"line_number":28,"context_line":"TABLE_NAME \u003d \u0027fixed_ips\u0027"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAO3%2F%2F8pg%3D","line":26,"updated":"2013-05-16 13:41:49.000000000","message":"bad UC_NAME. At this moment It should be uniq_address_x_deleted","commit_id":"a4475d17d477bd264fe200d38ae1c0c72877c884"}],"nova/tests/db/test_db_api.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"415208d0c7d67c2fd55840d874c8b46b87541db4","unresolved":false,"context_lines":[{"line_number":3101,"context_line":""},{"line_number":3102,"context_line":"        self.assertRaises(exception.FixedIpExists, db.fixed_ip_bulk_create,"},{"line_number":3103,"context_line":"                          self.ctxt, params)"},{"line_number":3104,"context_line":"        # In this case the transaction will be rollbacked and none of the ips"},{"line_number":3105,"context_line":"        # will make it to the database."},{"line_number":3106,"context_line":"        self.assertRaises(exception.FixedIpNotFoundForAddress,"},{"line_number":3107,"context_line":"                          db.fixed_ip_get_by_address, self.ctxt, address_1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPX%2F%2Frrs%3D","line":3104,"updated":"2013-06-12 21:04:27.000000000","message":"s/rollbacked/rolled back/","commit_id":"37d62cf9a551765ba792cbba6a5fee990dccfe74"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"881af5b871bbbc55ee6a66668bee2cab546538b0","unresolved":false,"context_lines":[{"line_number":3095,"context_line":"                          db.fixed_ip_get_by_address_detailed, self.ctxt, \u0027x\u0027)"},{"line_number":3096,"context_line":""},{"line_number":3097,"context_line":"    def test_fixed_ip_get_by_address_detailed_sucsess(self):"},{"line_number":3098,"context_line":"        adress \u003d \u0027fixed_ip_adress_123\u0027"},{"line_number":3099,"context_line":"        address \u003d \u0027fixed_ip_address\u0027"},{"line_number":3100,"context_line":"        instance_uuid \u003d self._create_instance()"},{"line_number":3101,"context_line":"        network_id \u003d db.network_create_safe(self.ctxt, {})[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F26E%3D","line":3098,"updated":"2013-06-19 17:07:53.000000000","message":"Why have both \"adress\" and \"address\" in this test? It looks like the first is unused","commit_id":"a5993c31bea9ab6869db69dd147c75e7b9a20407"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"17f0dcde18f4e5ba6cd53db21fcb5b3be9b3bffb","unresolved":false,"context_lines":[{"line_number":3095,"context_line":"                          db.fixed_ip_get_by_address_detailed, self.ctxt, \u0027x\u0027)"},{"line_number":3096,"context_line":""},{"line_number":3097,"context_line":"    def test_fixed_ip_get_by_address_detailed_sucsess(self):"},{"line_number":3098,"context_line":"        adress \u003d \u0027fixed_ip_adress_123\u0027"},{"line_number":3099,"context_line":"        address \u003d \u0027fixed_ip_address\u0027"},{"line_number":3100,"context_line":"        instance_uuid \u003d self._create_instance()"},{"line_number":3101,"context_line":"        network_id \u003d db.network_create_safe(self.ctxt, {})[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2F1Gw%3D","line":3098,"in_reply_to":"AAAAPn%2F%2F26E%3D","updated":"2013-06-20 08:31:00.000000000","message":"Done","commit_id":"a5993c31bea9ab6869db69dd147c75e7b9a20407"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"58af4d4f96ce52a289cde641c7513b47e370670c","unresolved":false,"context_lines":[{"line_number":3194,"context_line":"    def test_fixed_ip_update_not_found_for_address(self):"},{"line_number":3195,"context_line":"        self.assertRaises(exception.FixedIpNotFoundForAddress,"},{"line_number":3196,"context_line":"                          db.fixed_ip_update, self.ctxt,"},{"line_number":3197,"context_line":"                          \u0027fixed_ip_address\u0027, {})"},{"line_number":3198,"context_line":""},{"line_number":3199,"context_line":"    def test_fixed_ip_update(self):"},{"line_number":3200,"context_line":"        instance_uuid_1 \u003d self._create_instance()"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAPn%2F%2FQrs%3D","line":3197,"updated":"2013-07-05 19:29:36.000000000","message":"In the future, please try to avoid unnecessary formatting changes","commit_id":"280f4ef33153ec4d541b8e2c1fe919b35b7b5789"}],"nova/tests/test_db_api.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"2f4f817d857a11a2c358227d76386f932a27bfd5","unresolved":false,"context_lines":[{"line_number":3014,"context_line":"        self.assertRaises(exception.FixedIpExists, db.fixed_ip_bulk_create,"},{"line_number":3015,"context_line":"                          self.ctxt, params)"},{"line_number":3016,"context_line":""},{"line_number":3017,"context_line":"    def test_fixed_ip_bulk_create_sucsess(self):"},{"line_number":3018,"context_line":"        address_1 \u003d \u0027fixed_ip_address_1\u0027"},{"line_number":3019,"context_line":"        address_2 \u003d \u0027fixed_ip_address_2\u0027"},{"line_number":3020,"context_line":"        instance_uuid \u003d self._create_instance()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPX%2F%2F%2BzU%3D","line":3017,"updated":"2013-06-04 16:47:12.000000000","message":"s/sucsess/success/","commit_id":"26f834fcb8092d7cdd75ce10cfbd5a41a4874d7c"}]}
