)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cf0a09b549128866f11335d4ff4208cf9b98434e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"is called from alembic migration on upgrade in"},{"line_number":33,"context_line":"gate-grenade-dsvm-neutron."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Next part probably should go as release notes."},{"line_number":36,"context_line":"Expected workflow of migrating to pluggable ipam:"},{"line_number":37,"context_line":"- Upgrade to Mitaka (if not done already)"},{"line_number":38,"context_line":"- Turn off neutron-server (if enabled)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_1efeb66b","line":35,"updated":"2016-02-10 12:55:30.000000000","message":"please add a re;ease note","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"86af2e0ae15b1ff1b1fa79a4bd185f5182284a5f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"is called from alembic migration on upgrade in"},{"line_number":33,"context_line":"gate-grenade-dsvm-neutron."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Next part probably should go as release notes."},{"line_number":36,"context_line":"Expected workflow of migrating to pluggable ipam:"},{"line_number":37,"context_line":"- Upgrade to Mitaka (if not done already)"},{"line_number":38,"context_line":"- Turn off neutron-server (if enabled)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_8026c066","line":35,"in_reply_to":"3a57f1b5_1efeb66b","updated":"2016-02-10 14:11:47.000000000","message":"sure, will do","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add script for migrating to reference ipam driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To be able to use pluggable ipam driver for greyfield deployments"},{"line_number":10,"context_line":"data migration script is needed. Migrate script populates information"},{"line_number":11,"context_line":"from built-in ipam implementation to reference ipam driver."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Built-in ipam implementation uses next ipam related db models:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_9e085fdb","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":47},"updated":"2016-02-26 23:19:51.000000000","message":"nit:  *It","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add script for migrating to reference ipam driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To be able to use pluggable ipam driver for greyfield deployments"},{"line_number":10,"context_line":"data migration script is needed. Migrate script populates information"},{"line_number":11,"context_line":"from built-in ipam implementation to reference ipam driver."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Built-in ipam implementation uses next ipam related db models:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_7e6d9b97","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":4},"updated":"2016-02-26 23:19:51.000000000","message":"nit:  *a data","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add script for migrating to reference ipam driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"To be able to use pluggable ipam driver for greyfield deployments"},{"line_number":10,"context_line":"data migration script is needed. Migrate script populates information"},{"line_number":11,"context_line":"from built-in ipam implementation to reference ipam driver."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Built-in ipam implementation uses next ipam related db models:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_76a3c4b2","line":10,"range":{"start_line":10,"start_character":33,"end_line":10,"end_character":47},"in_reply_to":"9aed3d3a_9e085fdb","updated":"2016-02-29 13:09:50.000000000","message":"will fix","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":24,"context_line":"migration remapping from neutron_subnet_id to ipam_subnet_id is needed."},{"line_number":25,"context_line":"IpamSubnet does not have index on neutron_subnet_id field, so joining"},{"line_number":26,"context_line":"by this field would be extremely slow. To achieve O(1) time for lookup"},{"line_number":27,"context_line":"neutron_subnet_id to ipam_subnet_id mapping is stored as a dict."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Data migration can be done in both directions from built-in ipam to"},{"line_number":30,"context_line":"pluggable and vise versa."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_de294739","line":27,"range":{"start_line":27,"start_character":44,"end_line":27,"end_character":63},"updated":"2016-02-26 23:19:51.000000000","message":"Is this just in the context of the migration script?","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":24,"context_line":"migration remapping from neutron_subnet_id to ipam_subnet_id is needed."},{"line_number":25,"context_line":"IpamSubnet does not have index on neutron_subnet_id field, so joining"},{"line_number":26,"context_line":"by this field would be extremely slow. To achieve O(1) time for lookup"},{"line_number":27,"context_line":"neutron_subnet_id to ipam_subnet_id mapping is stored as a dict."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Data migration can be done in both directions from built-in ipam to"},{"line_number":30,"context_line":"pluggable and vise versa."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_84be1a63","line":27,"range":{"start_line":27,"start_character":44,"end_line":27,"end_character":63},"in_reply_to":"9aed3d3a_de294739","updated":"2016-02-29 13:09:50.000000000","message":"yes, it is stored in memory during script execution only.","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":27,"context_line":"neutron_subnet_id to ipam_subnet_id mapping is stored as a dict."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Data migration can be done in both directions from built-in ipam to"},{"line_number":30,"context_line":"pluggable and vise versa."},{"line_number":31,"context_line":"To migrate back to built-in implementation \u0027rebuild\u0027 flag has to be"},{"line_number":32,"context_line":"used. It cause availability ranges rebuild. All other \u0027built-in\u0027 ipam"},{"line_number":33,"context_line":"tables are receiving updates even if pluggable ipam driver is used"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_634a28ae","line":30,"range":{"start_line":30,"start_character":14,"end_line":30,"end_character":24},"updated":"2016-02-26 23:19:51.000000000","message":"femto nit:  *vice versa.  And, actually, \"vice versa\" is redundant in this sentence with \"in both directions.\"  :)","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":27,"context_line":"neutron_subnet_id to ipam_subnet_id mapping is stored as a dict."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Data migration can be done in both directions from built-in ipam to"},{"line_number":30,"context_line":"pluggable and vise versa."},{"line_number":31,"context_line":"To migrate back to built-in implementation \u0027rebuild\u0027 flag has to be"},{"line_number":32,"context_line":"used. It cause availability ranges rebuild. All other \u0027built-in\u0027 ipam"},{"line_number":33,"context_line":"tables are receiving updates even if pluggable ipam driver is used"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_a7f6c0f6","line":30,"range":{"start_line":30,"start_character":14,"end_line":30,"end_character":24},"in_reply_to":"9aed3d3a_634a28ae","updated":"2016-02-29 13:09:50.000000000","message":"I\u0027ll rephrase it a bit.","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Data migration can be done in both directions from built-in ipam to"},{"line_number":30,"context_line":"pluggable and vise versa."},{"line_number":31,"context_line":"To migrate back to built-in implementation \u0027rebuild\u0027 flag has to be"},{"line_number":32,"context_line":"used. It cause availability ranges rebuild. All other \u0027built-in\u0027 ipam"},{"line_number":33,"context_line":"tables are receiving updates even if pluggable ipam driver is used"},{"line_number":34,"context_line":"(these tables are API exposed and still have to be updated)."},{"line_number":35,"context_line":"To migrate data back to built-in ipam implementation there is no"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_1ed9ef83","line":32,"range":{"start_line":32,"start_character":9,"end_line":32,"end_character":14},"updated":"2016-02-26 23:19:51.000000000","message":"nit:  * causes availability ranges to be rebuilt","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":37,"context_line":"data."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"So running \u0027neutron-populate-ipam-data --rebuild\u0027 on any backend any"},{"line_number":40,"context_line":"count of times will populate database with all needed data for current"},{"line_number":41,"context_line":"backend."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Added release notes with steps to migrate from built-in ipam to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_1e644fe3","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":14},"updated":"2016-02-26 23:19:51.000000000","message":"Are you trying to say it is idempotent?","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":37,"context_line":"data."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"So running \u0027neutron-populate-ipam-data --rebuild\u0027 on any backend any"},{"line_number":40,"context_line":"count of times will populate database with all needed data for current"},{"line_number":41,"context_line":"backend."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Added release notes with steps to migrate from built-in ipam to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_16ed18ef","line":40,"range":{"start_line":40,"start_character":0,"end_line":40,"end_character":14},"in_reply_to":"9aed3d3a_1e644fe3","updated":"2016-02-29 13:09:50.000000000","message":"Well, yes, but main idea here is that it is safe to run in any starting conditions.","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":41,"context_line":"backend."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"Added release notes with steps to migrate from built-in ipam to"},{"line_number":44,"context_line":"pluggalbe ipam."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Note:"},{"line_number":47,"context_line":"Currently migration script is tested in dependent patch, where"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9aed3d3a_fe6ecbc7","line":44,"range":{"start_line":44,"start_character":0,"end_line":44,"end_character":9},"updated":"2016-02-26 23:19:51.000000000","message":"nit:  *pluggable","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"}],"neutron/cmd/populate_ipam_data.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"dfcb22429b827076f66924837c3188bbf2103c87","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# Copyright (c) 2015 Infoblox Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_62084f92","line":2,"range":{"start_line":2,"start_character":16,"end_line":2,"end_character":20},"updated":"2016-02-10 21:54:46.000000000","message":"nit: 2016?","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"028db6b5162ab93f0307de55c64ec2bf67259356","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env python"},{"line_number":2,"context_line":"# Copyright (c) 2015 Infoblox Inc."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_76ff9c67","line":2,"range":{"start_line":2,"start_character":16,"end_line":2,"end_character":20},"in_reply_to":"3a57f1b5_62084f92","updated":"2016-02-11 10:02:07.000000000","message":"yeah, will fix","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"dfcb22429b827076f66924837c3188bbf2103c87","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            context.session.add(ipam_pool)"},{"line_number":59,"context_line":"            # Note(pbondar): alternatively we could force availability"},{"line_number":60,"context_line":"            # ranges rebuild once allocation_pools and ip_allocations are in"},{"line_number":61,"context_line":"            # place, but it might be much slower than direct copy"},{"line_number":62,"context_line":"            for av_range in pool.available_ranges:"},{"line_number":63,"context_line":"                ipam_range \u003d db_models.IpamAvailabilityRange("},{"line_number":64,"context_line":"                    allocation_pool_id\u003dipam_pool.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_e2919f53","line":61,"updated":"2016-02-10 21:54:46.000000000","message":"Is there any upside to forcing a rebuild? I tend to agree that a direct copy of the the ranges is preferable. I like what I see here.","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"f77eff4003937e2fa035edb0231fc7c540586592","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            context.session.add(ipam_pool)"},{"line_number":59,"context_line":"            # Note(pbondar): alternatively we could force availability"},{"line_number":60,"context_line":"            # ranges rebuild once allocation_pools and ip_allocations are in"},{"line_number":61,"context_line":"            # place, but it might be much slower than direct copy"},{"line_number":62,"context_line":"            for av_range in pool.available_ranges:"},{"line_number":63,"context_line":"                ipam_range \u003d db_models.IpamAvailabilityRange("},{"line_number":64,"context_line":"                    allocation_pool_id\u003dipam_pool.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_49b3c1e9","line":61,"in_reply_to":"3a57f1b5_65cb6073","updated":"2016-02-11 18:38:14.000000000","message":"I see, so once you move to pluggable IPAM we don\u0027t have a clean way to support toggling back and forth.  I think the intent is to deprecate the non-pluggable backend, so if we just make sure to document the scenario you described I think this will be just fine.","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"028db6b5162ab93f0307de55c64ec2bf67259356","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            context.session.add(ipam_pool)"},{"line_number":59,"context_line":"            # Note(pbondar): alternatively we could force availability"},{"line_number":60,"context_line":"            # ranges rebuild once allocation_pools and ip_allocations are in"},{"line_number":61,"context_line":"            # place, but it might be much slower than direct copy"},{"line_number":62,"context_line":"            for av_range in pool.available_ranges:"},{"line_number":63,"context_line":"                ipam_range \u003d db_models.IpamAvailabilityRange("},{"line_number":64,"context_line":"                    allocation_pool_id\u003dipam_pool.id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_65cb6073","line":61,"in_reply_to":"3a57f1b5_e2919f53","updated":"2016-02-11 10:02:07.000000000","message":"For usual workflow where operator switches from built-in to pluggable ipam only once there is no point in rebuilding availability ranges from pools and ip allocations, because availability ranges in built in implementation are up to date.\nBut if we allow to operator to go from built-in to pluggable implementation back and forward multiple times, then availability ranges could be messed up at some point.\nSource tables (models_v2.Subnet, models_v2.IPAllocationPool, models_v2.IPAllocation) will be up to date even when pluggable ipam is used for a while, but models_v2.IPAvailabilityRange is specific for built-in implementation and stop receiving updates.\nSo ability (for example with --force flag) to rebuild availability ranges might be useful in this case.\n\nBut not sure if it is real use case and worth additional development effort.\nSo I assume that for this patch it is ok to have direct copy approach. If we decide that rebuilding av ranges might be useful, then it can be implemented as dependent review.","commit_id":"e6c16025fa31aea25dc3821912fca8ebe7dfbe56"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    By default data is copied from built-in ipam tables. Some of them stop"},{"line_number":181,"context_line":"    updating after switching to pluggable ipam, so second migration run might"},{"line_number":182,"context_line":"    mess up availability ranges. To fix it you can force availability ranges"},{"line_number":183,"context_line":"    rebuild by \u0027--rebuild\u0027 flag. This flag cause availability ranges"},{"line_number":184,"context_line":"    recalculation, so it is slower than direct copy from ipam tables (default"},{"line_number":185,"context_line":"    approach)."},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_1210c3a7","line":183,"range":{"start_line":183,"start_character":16,"end_line":183,"end_character":25},"updated":"2016-02-26 23:19:51.000000000","message":"Is it ever wrong to specify this other than just taking longer?  Is it just slower?  How much so?  What would the consequence be if we just enabled it all of the time and didn\u0027t bother the operator with this detail?","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    By default data is copied from built-in ipam tables. Some of them stop"},{"line_number":181,"context_line":"    updating after switching to pluggable ipam, so second migration run might"},{"line_number":182,"context_line":"    mess up availability ranges. To fix it you can force availability ranges"},{"line_number":183,"context_line":"    rebuild by \u0027--rebuild\u0027 flag. This flag cause availability ranges"},{"line_number":184,"context_line":"    recalculation, so it is slower than direct copy from ipam tables (default"},{"line_number":185,"context_line":"    approach)."},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_15e35234","line":183,"range":{"start_line":183,"start_character":16,"end_line":183,"end_character":25},"in_reply_to":"9aed3d3a_1210c3a7","updated":"2016-02-29 13:09:50.000000000","message":"It is always safe to specify \u0027--rebuild\u0027 flag, but it is just slower. I\u0027ll to try to do some performance tests to see how much slower it is, and I\u0027ll post results here.","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    To migrate data back to built-in ipam use \u0027--rebuild\u0027 flag:"},{"line_number":188,"context_line":"    - turn off \u0027neutron-server\u0027 service"},{"line_number":189,"context_line":"    - remove \u0027ipam_driver \u003d internal\u0027 from neutron.conf"},{"line_number":190,"context_line":"    - run \u0027neutron-populate-ipam-data --rebuild\u0027"},{"line_number":191,"context_line":"    - turn on \u0027neutron-server\u0027"},{"line_number":192,"context_line":"    \"\"\""},{"line_number":193,"context_line":"    register_cli_opts()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_a1ba6321","line":190,"range":{"start_line":190,"start_character":11,"end_line":190,"end_character":47},"updated":"2016-02-26 23:19:51.000000000","message":"It might be easier to understand if you just had two simple commands:\n\n  neutron-migrate-ipam --build-in-to-pluggable\n  neutron-migrate-ipam --pluggable-to-built-in\n\nOr, if you just look at the config file, you can do the right thing based on what they have configured, maybe.  I\u0027m really just brainstorming.\n\nI thought about this because I was a little confused myself about the semantics of the --rebuild flag and how that relates to migrating IPAM.  Operators are likely to be confused too.\n\nI guess you kind of need to expose the --rebuild flag if you keep the semantics you describe on L183.  Do you think we could make this simpler for the operator?","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6423870c8290b367fa28d7c825180edb22156b4a","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    To migrate data back to built-in ipam use \u0027--rebuild\u0027 flag:"},{"line_number":188,"context_line":"    - turn off \u0027neutron-server\u0027 service"},{"line_number":189,"context_line":"    - remove \u0027ipam_driver \u003d internal\u0027 from neutron.conf"},{"line_number":190,"context_line":"    - run \u0027neutron-populate-ipam-data --rebuild\u0027"},{"line_number":191,"context_line":"    - turn on \u0027neutron-server\u0027"},{"line_number":192,"context_line":"    \"\"\""},{"line_number":193,"context_line":"    register_cli_opts()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_03a94590","line":190,"range":{"start_line":190,"start_character":11,"end_line":190,"end_character":47},"in_reply_to":"9aed3d3a_70d58c1a","updated":"2016-02-29 17:54:24.000000000","message":"You could also use two script names:\n\n  neutron-migrate-ipam-to-pluggable\n  neutron-migrate-ipam-to-built-in\n\n... or something like that.  Otherwise, I like the idea.  The only advantage of using two script names is that if the operator is using tab-complete, it would help by showing both options.","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    To migrate data back to built-in ipam use \u0027--rebuild\u0027 flag:"},{"line_number":188,"context_line":"    - turn off \u0027neutron-server\u0027 service"},{"line_number":189,"context_line":"    - remove \u0027ipam_driver \u003d internal\u0027 from neutron.conf"},{"line_number":190,"context_line":"    - run \u0027neutron-populate-ipam-data --rebuild\u0027"},{"line_number":191,"context_line":"    - turn on \u0027neutron-server\u0027"},{"line_number":192,"context_line":"    \"\"\""},{"line_number":193,"context_line":"    register_cli_opts()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_70d58c1a","line":190,"range":{"start_line":190,"start_character":11,"end_line":190,"end_character":47},"in_reply_to":"9aed3d3a_a1ba6321","updated":"2016-02-29 13:09:50.000000000","message":"I like the idea where we ask operator to type exact option that describes desirable effect:\n\u0027--build-in-to-pluggable\u0027 or \u0027--pluggable-to-built-in\u0027\nThe command is really self explanatory in this case and amount of automagic seen by operator is low.\n\nI also think about removing \u0027--rebuild\u0027 from options and just making it default. So these command will do rebuild by default:\n\n  neutron-migrate-ipam --build-in-to-pluggable\n  neutron-migrate-ipam --pluggable-to-built-in\n\nFor deployments that have huge datasets we could add option \u0027--quick\u0027 (which is just opposite for \u0027--rebuild\u0027) and describe all it\u0027s limitations:\n- can be used to migrate from built-in to ipam only;\n- can be executed only once (second execution may corrupt data);\nCommand with quick flag will look like:\n\n  neutron-migrate-ipam --built-in-to-pluggable --quick\n\nIf data is corrupted due to multiple execution with \u0027--quick\u0027 flag, then \u0027neutron-migrate-ipam\u0027 has to be called without this flag to rebuild corrupted data.\n\nHow does it sound to you?","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"6418df68411c14814b008786e65707f24175ee35","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    context \u003d ctxt.get_admin_context()"},{"line_number":197,"context_line":"    if config.cfg.CONF.ipam_driver \u003d\u003d \u0027internal\u0027:"},{"line_number":198,"context_line":"        LOG.info(_LI(\"Populating data for reference ipam driver\"))"},{"line_number":199,"context_line":"        migrate_to_reference_driver(context, config.cfg.CONF.rebuild)"},{"line_number":200,"context_line":"    else:"},{"line_number":201,"context_line":"        if config.cfg.CONF.rebuild:"},{"line_number":202,"context_line":"            LOG.info(_LI(\"Rebuilding availability ranges for built-in \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_553d15ba","line":199,"range":{"start_line":199,"start_character":19,"end_line":199,"end_character":28},"updated":"2016-02-26 23:19:51.000000000","message":"\"reference\" is ambiguous.  Both internal and pluggable are \"reference\".","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"b905cc653b451194b3cd96d62ff7429c35ca7aed","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    context \u003d ctxt.get_admin_context()"},{"line_number":197,"context_line":"    if config.cfg.CONF.ipam_driver \u003d\u003d \u0027internal\u0027:"},{"line_number":198,"context_line":"        LOG.info(_LI(\"Populating data for reference ipam driver\"))"},{"line_number":199,"context_line":"        migrate_to_reference_driver(context, config.cfg.CONF.rebuild)"},{"line_number":200,"context_line":"    else:"},{"line_number":201,"context_line":"        if config.cfg.CONF.rebuild:"},{"line_number":202,"context_line":"            LOG.info(_LI(\"Rebuilding availability ranges for built-in \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9aed3d3a_10ed20ef","line":199,"range":{"start_line":199,"start_character":19,"end_line":199,"end_character":28},"in_reply_to":"9aed3d3a_553d15ba","updated":"2016-02-29 13:09:50.000000000","message":"will replace with \u0027pluggable\u0027","commit_id":"1f6aa0406afa2324a51639b2d86ff932c1bf7061"}],"neutron/tests/unit/cmd/test_migrate_ipam.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"11102ba1ef965166d74a6483dfaa2f76afdb7cb7","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                    session.add(allocation)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def _count_rows(self, model):"},{"line_number":102,"context_line":"        return len(self.ctx.session.query(model).all())"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_clean_up_ipam_tables(self):"},{"line_number":105,"context_line":"        self._create_ipam_data(self.ctx.session)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5aef4532_8fab3889","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":55},"updated":"2016-03-07 21:55:35.000000000","message":"nit:\n\n  return self.ctx.session.query(model).count()","commit_id":"c81a3fc5b83d7be94113ba88743422f472b3506d"}]}
