)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ea75bb749870669aef5b68d8727d91e53d9ab7be","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-05-21 19:01:46 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Split instance resize operation into 2 phases"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Resize operation call compute.manager. using cast"},{"line_number":10,"context_line":"this doen\u0027t allow to notify user that there is something"},{"line_number":11,"context_line":"goes wrong. For example attempt to resize instance down"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a016987_c1584f8c","line":8,"updated":"2015-05-25 13:25:25.000000000","message":"You should list the two phases:\nPhase1: validate if the resize is possible (this is a call)\nPhase2: the actual resize (this is the cast)","commit_id":"01acb1ddece5e2dc97bfafb498443e6e3b14ef5c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e74a23824098928b0523a668ea81aa1383c64927","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-05-21 19:01:46 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Split instance resize operation into 2 phases"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Resize operation call compute.manager. using cast"},{"line_number":10,"context_line":"this doen\u0027t allow to notify user that there is something"},{"line_number":11,"context_line":"goes wrong. For example attempt to resize instance down"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3afb71cf_3d081891","line":8,"in_reply_to":"7a016987_c1584f8c","updated":"2015-06-08 08:29:19.000000000","message":"Done","commit_id":"01acb1ddece5e2dc97bfafb498443e6e3b14ef5c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ea75bb749870669aef5b68d8727d91e53d9ab7be","unresolved":false,"context_lines":[{"line_number":14,"context_line":"checks requirements before resize and notify user if something goes"},{"line_number":15,"context_line":"wrong, second \u0027async over cast\u0027 execute resize process."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-bug: #1455460"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I820c4a8ccc58e140f24597a52f2e01444cd6d134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a016987_c19def0a","line":17,"updated":"2015-05-25 13:25:25.000000000","message":"I think that this may help a little but it will not solve the actual issue at hand.","commit_id":"01acb1ddece5e2dc97bfafb498443e6e3b14ef5c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e74a23824098928b0523a668ea81aa1383c64927","unresolved":false,"context_lines":[{"line_number":14,"context_line":"checks requirements before resize and notify user if something goes"},{"line_number":15,"context_line":"wrong, second \u0027async over cast\u0027 execute resize process."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-bug: #1455460"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I820c4a8ccc58e140f24597a52f2e01444cd6d134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3afb71cf_d8deb26c","line":17,"in_reply_to":"7a016987_c19def0a","updated":"2015-06-08 08:29:19.000000000","message":"garyk, at least check before process itself starts to notify user that something goes wrong. What else do you think we could do?","commit_id":"01acb1ddece5e2dc97bfafb498443e6e3b14ef5c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f4f58369824850bac217c9e24e40e005ab7d68e","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Create class hierarchy for tasks in conductor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Created MigrationTask class to move all cold-migration"},{"line_number":10,"context_line":"logic there."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I820c4a8ccc58e140f24597a52f2e01444cd6d134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"fa32b979_19161f4c","line":10,"updated":"2015-06-24 16:49:16.000000000","message":"Timofei, please try to improve this commit message. Focus on the *why* and the *how*, not just the *what*. Explain to us why you are moving all cold migrate logic into a task class, and what the end-goals of this patch series are.\n\nAlso, is there a spec or a bug link for this work? If not, please create a quick Wishlist bug to track this work.","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"d9b2d574131d5e282445c892bf014fcb6d6e7371","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Create class hierarchy for tasks in conductor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Created MigrationTask class to move all cold-migration"},{"line_number":10,"context_line":"logic there."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I820c4a8ccc58e140f24597a52f2e01444cd6d134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"fa32b979_1297adec","line":10,"in_reply_to":"fa32b979_19161f4c","updated":"2015-06-25 12:52:24.000000000","message":"Done","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Create class hierarchy for tasks in conductor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place(code located into manager itself)"},{"line_number":11,"context_line":"- over tasks (for each operation created new task class"},{"line_number":12,"context_line":"that, where all logic is located)"},{"line_number":13,"context_line":"Second approach allows to implement single responsibility"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_10d6be4e","line":10,"updated":"2015-07-03 13:16:49.000000000","message":"s/place(code located into/place (the code is located in/","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Create class hierarchy for tasks in conductor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place(code located into manager itself)"},{"line_number":11,"context_line":"- over tasks (for each operation created new task class"},{"line_number":12,"context_line":"that, where all logic is located)"},{"line_number":13,"context_line":"Second approach allows to implement single responsibility"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_c0e07efd","line":10,"in_reply_to":"ba3cc151_10d6be4e","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place(code located into manager itself)"},{"line_number":11,"context_line":"- over tasks (for each operation created new task class"},{"line_number":12,"context_line":"that, where all logic is located)"},{"line_number":13,"context_line":"Second approach allows to implement single responsibility"},{"line_number":14,"context_line":"to each method."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_90c2ce83","line":11,"updated":"2015-07-03 13:16:49.000000000","message":"s/over/in/\n\ns/created/creates/","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place(code located into manager itself)"},{"line_number":11,"context_line":"- over tasks (for each operation created new task class"},{"line_number":12,"context_line":"that, where all logic is located)"},{"line_number":13,"context_line":"Second approach allows to implement single responsibility"},{"line_number":14,"context_line":"to each method."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_60e65218","line":11,"in_reply_to":"ba3cc151_90c2ce83","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place(code located into manager itself)"},{"line_number":11,"context_line":"- over tasks (for each operation created new task class"},{"line_number":12,"context_line":"that, where all logic is located)"},{"line_number":13,"context_line":"Second approach allows to implement single responsibility"},{"line_number":14,"context_line":"to each method."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_d042960e","line":12,"updated":"2015-07-03 13:16:49.000000000","message":"s/that, //","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place(code located into manager itself)"},{"line_number":11,"context_line":"- over tasks (for each operation created new task class"},{"line_number":12,"context_line":"that, where all logic is located)"},{"line_number":13,"context_line":"Second approach allows to implement single responsibility"},{"line_number":14,"context_line":"to each method."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_80e35605","line":12,"in_reply_to":"ba3cc151_d042960e","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Second approach allows to implement single responsibility"},{"line_number":14,"context_line":"to each method."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"In this patch class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to it\u0027s"},{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_306bc286","line":16,"updated":"2015-07-03 13:16:49.000000000","message":"s/patch class/patch, a class/","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"Second approach allows to implement single responsibility"},{"line_number":14,"context_line":"to each method."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"In this patch class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to it\u0027s"},{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_40ed4eee","line":16,"in_reply_to":"ba3cc151_306bc286","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"In this patch class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to it\u0027s"},{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"},{"line_number":20,"context_line":"by making them cleaner. Also all new support methods for"},{"line_number":21,"context_line":"cold migration should be placed in new task class, as it\u0027s"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_10647eb6","line":18,"updated":"2015-07-03 13:16:49.000000000","message":"s/it\u0027s/its/","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"In this patch class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to it\u0027s"},{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"},{"line_number":20,"context_line":"by making them cleaner. Also all new support methods for"},{"line_number":21,"context_line":"cold migration should be placed in new task class, as it\u0027s"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_e0b822eb","line":18,"in_reply_to":"ba3cc151_10647eb6","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":16,"context_line":"In this patch class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to it\u0027s"},{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"},{"line_number":20,"context_line":"by making them cleaner. Also all new support methods for"},{"line_number":21,"context_line":"cold migration should be placed in new task class, as it\u0027s"},{"line_number":22,"context_line":"done for live-migration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_b00d92e9","line":19,"updated":"2015-07-03 13:16:49.000000000","message":"s/allow to simplify/simplifies/","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"In this patch class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to it\u0027s"},{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"},{"line_number":20,"context_line":"by making them cleaner. Also all new support methods for"},{"line_number":21,"context_line":"cold migration should be placed in new task class, as it\u0027s"},{"line_number":22,"context_line":"done for live-migration."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_00be66d4","line":19,"in_reply_to":"ba3cc151_b00d92e9","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"},{"line_number":20,"context_line":"by making them cleaner. Also all new support methods for"},{"line_number":21,"context_line":"cold migration should be placed in new task class, as it\u0027s"},{"line_number":22,"context_line":"done for live-migration."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: #1468696"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_10c0fe4e","line":22,"updated":"2015-07-03 13:16:49.000000000","message":"You can remove this last sentence from the commit message.","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":19,"context_line":"new task class. This change allow to simplify unit tests,"},{"line_number":20,"context_line":"by making them cleaner. Also all new support methods for"},{"line_number":21,"context_line":"cold migration should be placed in new task class, as it\u0027s"},{"line_number":22,"context_line":"done for live-migration."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Closes-Bug: #1468696"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba3cc151_a0b21a05","line":22,"in_reply_to":"ba3cc151_10c0fe4e","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Create class hierarchy for tasks in conductor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place (code located in manager itself)"},{"line_number":11,"context_line":"- in tasks (for each operation creates new task class"},{"line_number":12,"context_line":"where all logic is located)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"ba3cc151_55a5fcb2","line":9,"updated":"2015-07-05 14:15:30.000000000","message":"hande \u003d\u003e handle","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Create class hierarchy for tasks in conductor"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Conductor has 2 approaches to hande rpc api calls:"},{"line_number":10,"context_line":"- in place (code located in manager itself)"},{"line_number":11,"context_line":"- in tasks (for each operation creates new task class"},{"line_number":12,"context_line":"where all logic is located)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"ba3cc151_8dc042e2","line":9,"in_reply_to":"ba3cc151_55a5fcb2","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84f393a3f0d98eabd3e8749577894e0cee3dd7e8","unresolved":false,"context_lines":[{"line_number":19,"context_line":"new task class. This change simplifies unit tests,"},{"line_number":20,"context_line":"by making them cleaner."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: #1468696"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I820c4a8ccc58e140f24597a52f2e01444cd6d134"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"ba3cc151_985c907e","line":22,"updated":"2015-07-08 13:28:30.000000000","message":"This isn\u0027t really a bug, this is just a refactor series.  This is a bit misleading IMO.","commit_id":"a812002b610993aea5ca1aeb2adfad8f67e814e0"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b828422c9fb379b34e3abc8779aadad74208b5c4","unresolved":false,"context_lines":[{"line_number":16,"context_line":"In this patch, a class hierarchy for tasks is introduced."},{"line_number":17,"context_line":"It allows share same public interface between tasks."},{"line_number":18,"context_line":"Cold-migration/resize logic is also  moved to its"},{"line_number":19,"context_line":"new task class. This change simplifies unit tests,"},{"line_number":20,"context_line":"by making them cleaner."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Closes-Bug: #1468696"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":27,"id":"1a4dcd0f_2a033fba","line":19,"updated":"2015-08-03 14:57:42.000000000","message":"It really would have been best to have this change in a second patch.","commit_id":"83787211b3ea2734e62edc746d42ecfa72fb0386"}],"nova/compute/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e099bb7445e4629e350cab3202d50d6998915bbe","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2659,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":2660,"context_line":"                                                        context, instance.uuid)"},{"line_number":2661,"context_line":"        self.compute_rpcapi.check_can_resize_instance(context, instance,"},{"line_number":2662,"context_line":"                                                          new_instance_type,"},{"line_number":2663,"context_line":"                                                          bdms,"},{"line_number":2664,"context_line":"                                                          instance.host)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_4dab1fd7","line":2661,"updated":"2015-06-08 11:11:37.000000000","message":"alignment here is dodgy","commit_id":"046369b97a156b1cded4f43ce65532d0d4d91492"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"b36fcb88bc4eaca98710e572928b42ec89d0e9ac","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2659,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":2660,"context_line":"                                                        context, instance.uuid)"},{"line_number":2661,"context_line":"        self.compute_rpcapi.check_can_resize_instance(context, instance,"},{"line_number":2662,"context_line":"                                                          new_instance_type,"},{"line_number":2663,"context_line":"                                                          bdms,"},{"line_number":2664,"context_line":"                                                          instance.host)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3afb71cf_b3e790e3","line":2661,"in_reply_to":"3afb71cf_4dab1fd7","updated":"2015-06-08 12:03:51.000000000","message":"Done","commit_id":"046369b97a156b1cded4f43ce65532d0d4d91492"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"23d08c399e8e65bbc4e844a0d15b556db377281d","unresolved":false,"context_lines":[{"line_number":2658,"context_line":"        scheduler_hint \u003d {\u0027filter_properties\u0027: filter_properties}"},{"line_number":2659,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":2660,"context_line":"                                                        context, instance.uuid)"},{"line_number":2661,"context_line":"        self.compute_rpcapi.check_can_resize_instance(context, instance,"},{"line_number":2662,"context_line":"                                                      new_instance_type,"},{"line_number":2663,"context_line":"                                                      bdms, instance.host)"},{"line_number":2664,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3afb71cf_138f84cd","line":2661,"updated":"2015-06-08 12:16:10.000000000","message":"there is a problem here, you should really call the destination host, not the source host.\n\nI feel this really needs to follow the same pattern as live-migrate:\nhttps://github.com/openstack/nova/blob/master/nova/compute/api.py#L3230\nhttps://github.com/openstack/nova/blob/master/nova/conductor/manager.py#L628\nhttps://github.com/openstack/nova/blob/master/nova/conductor/tasks/live_migrate.py#L61","commit_id":"809df5032f842ee94264857a9bbaed18ed832bb7"}],"nova/compute/manager.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"3701c8880fd6c063bfe5beaea650187c0e98f177","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":644,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"    target \u003d messaging.Target(version\u003d\u00274.0\u0027)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    # How long to wait in seconds before re-issuing a shutdown"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_895d3949","line":645,"updated":"2015-05-20 14:01:02.000000000","message":"my understanding is that we should bump version number here","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"309a5de570000f63c8e50763532d705e9aff92cd","unresolved":false,"context_lines":[{"line_number":642,"context_line":""},{"line_number":643,"context_line":"class ComputeManager(manager.Manager):"},{"line_number":644,"context_line":"    \"\"\"Manages the running instances from creation to destruction.\"\"\""},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"    target \u003d messaging.Target(version\u003d\u00274.0\u0027)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"    # How long to wait in seconds before re-issuing a shutdown"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_cf00d168","line":645,"in_reply_to":"7a016987_895d3949","updated":"2015-05-20 14:58:39.000000000","message":"Done","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"3701c8880fd6c063bfe5beaea650187c0e98f177","unresolved":false,"context_lines":[{"line_number":3592,"context_line":"        self.driver.check_can_resize_instance(instance,"},{"line_number":3593,"context_line":"                                              instance_type,"},{"line_number":3594,"context_line":"                                              block_device_info)"},{"line_number":3595,"context_line":"        return dict()"},{"line_number":3596,"context_line":""},{"line_number":3597,"context_line":"    @wrap_exception()"},{"line_number":3598,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_093829ee","line":3595,"updated":"2015-05-20 14:01:02.000000000","message":"hmm, do we really need to return anything here?","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"309a5de570000f63c8e50763532d705e9aff92cd","unresolved":false,"context_lines":[{"line_number":3592,"context_line":"        self.driver.check_can_resize_instance(instance,"},{"line_number":3593,"context_line":"                                              instance_type,"},{"line_number":3594,"context_line":"                                              block_device_info)"},{"line_number":3595,"context_line":"        return dict()"},{"line_number":3596,"context_line":""},{"line_number":3597,"context_line":"    @wrap_exception()"},{"line_number":3598,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_6fd9dd21","line":3595,"in_reply_to":"7a016987_093829ee","updated":"2015-05-20 14:58:39.000000000","message":"When we don\u0027t return anything here rpc method caller side fails because method is synchronous and no response received.","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ee98087df061fe902841feded824ac7370a6497e","unresolved":false,"context_lines":[{"line_number":3592,"context_line":"        self.driver.check_can_resize_instance(instance,"},{"line_number":3593,"context_line":"                                              instance_type,"},{"line_number":3594,"context_line":"                                              block_device_info)"},{"line_number":3595,"context_line":"        return dict()"},{"line_number":3596,"context_line":""},{"line_number":3597,"context_line":"    @wrap_exception()"},{"line_number":3598,"context_line":"    @reverts_task_state"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_41ab9575","line":3595,"in_reply_to":"7a016987_6fd9dd21","updated":"2015-05-20 15:22:06.000000000","message":"Seems that there were some other issues on my env that causes timeouts, rechecked that - everything is OK if method doent\u0027s have explicit return statement","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"4afd254a84af311411c8566cff755a1f65d7bd5c","unresolved":false,"context_lines":[{"line_number":3585,"context_line":"    @wrap_instance_event"},{"line_number":3586,"context_line":"    @wrap_instance_fault"},{"line_number":3587,"context_line":"    def check_can_resize_instance(self, context, instance, instance_type):"},{"line_number":3588,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":3589,"context_line":"                    context, instance.uuid)"},{"line_number":3590,"context_line":"        block_device_info \u003d self._get_instance_block_device_info("},{"line_number":3591,"context_line":"                                context, instance, bdms\u003dbdms)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_88fabe41","line":3588,"updated":"2015-05-21 11:00:59.000000000","message":"This will roundtrip back to conductor to get bdms info from the db. Maybe better to instead move this lookup to the calling side and send here as a parameter.","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f37cf298b6041518fbceeb80b87cc596abe3a9f4","unresolved":false,"context_lines":[{"line_number":3585,"context_line":"    @wrap_instance_event"},{"line_number":3586,"context_line":"    @wrap_instance_fault"},{"line_number":3587,"context_line":"    def check_can_resize_instance(self, context, instance, instance_type):"},{"line_number":3588,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":3589,"context_line":"                    context, instance.uuid)"},{"line_number":3590,"context_line":"        block_device_info \u003d self._get_instance_block_device_info("},{"line_number":3591,"context_line":"                                context, instance, bdms\u003dbdms)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_63f7a359","line":3588,"in_reply_to":"7a016987_88fabe41","updated":"2015-05-21 12:00:49.000000000","message":"OK I\u0027ll move this to conductor","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"}],"nova/compute/rpcapi.py":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"4afd254a84af311411c8566cff755a1f65d7bd5c","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        cctxt.cast(ctxt, \u0027prep_resize\u0027, **msg_args)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def check_can_resize_instance(self, ctxt, instance, instance_type, host):"},{"line_number":584,"context_line":"        instance_type_p \u003d jsonutils.to_primitive(instance_type)"},{"line_number":585,"context_line":"        msg_args \u003d {\u0027instance\u0027: instance,"},{"line_number":586,"context_line":"                    \u0027instance_type\u0027: instance_type_p"},{"line_number":587,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_68f78259","line":584,"updated":"2015-05-21 11:00:59.000000000","message":"Why convert this to a primitive?","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"b35cba77e1b7cf4816eebdb034e8657a5bb1a707","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        cctxt.cast(ctxt, \u0027prep_resize\u0027, **msg_args)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def check_can_resize_instance(self, ctxt, instance, instance_type, host):"},{"line_number":584,"context_line":"        instance_type_p \u003d jsonutils.to_primitive(instance_type)"},{"line_number":585,"context_line":"        msg_args \u003d {\u0027instance\u0027: instance,"},{"line_number":586,"context_line":"                    \u0027instance_type\u0027: instance_type_p"},{"line_number":587,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_de119005","line":584,"in_reply_to":"7a016987_43bee765","updated":"2015-05-21 12:32:43.000000000","message":"Why not just send it as an object? You don\u0027t need this to serialize the information. Btw. better name this flavor instead of instance_type.","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f37cf298b6041518fbceeb80b87cc596abe3a9f4","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        cctxt.cast(ctxt, \u0027prep_resize\u0027, **msg_args)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def check_can_resize_instance(self, ctxt, instance, instance_type, host):"},{"line_number":584,"context_line":"        instance_type_p \u003d jsonutils.to_primitive(instance_type)"},{"line_number":585,"context_line":"        msg_args \u003d {\u0027instance\u0027: instance,"},{"line_number":586,"context_line":"                    \u0027instance_type\u0027: instance_type_p"},{"line_number":587,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_43bee765","line":584,"in_reply_to":"7a016987_68f78259","updated":"2015-05-21 12:00:49.000000000","message":"useful TODO was lost, I ll add it in next patchset:\n# TODO(danms): This needs to be fixed for objects!","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"e8ab8e0824e4fa74135307334803a0f0ac545e17","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        cctxt.cast(ctxt, \u0027prep_resize\u0027, **msg_args)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def check_can_resize_instance(self, ctxt, instance, instance_type, host):"},{"line_number":584,"context_line":"        instance_type_p \u003d jsonutils.to_primitive(instance_type)"},{"line_number":585,"context_line":"        msg_args \u003d {\u0027instance\u0027: instance,"},{"line_number":586,"context_line":"                    \u0027instance_type\u0027: instance_type_p"},{"line_number":587,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_f4da2b4a","line":584,"in_reply_to":"7a016987_9e0b182a","updated":"2015-05-21 14:09:40.000000000","message":"There are others working on that like https://review.openstack.org/161860 so not adding more of this would be enough I think.","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"a4b6610d1cde57107e7c2c7236a1ed92df53d2f8","unresolved":false,"context_lines":[{"line_number":581,"context_line":"        cctxt.cast(ctxt, \u0027prep_resize\u0027, **msg_args)"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def check_can_resize_instance(self, ctxt, instance, instance_type, host):"},{"line_number":584,"context_line":"        instance_type_p \u003d jsonutils.to_primitive(instance_type)"},{"line_number":585,"context_line":"        msg_args \u003d {\u0027instance\u0027: instance,"},{"line_number":586,"context_line":"                    \u0027instance_type\u0027: instance_type_p"},{"line_number":587,"context_line":"                    }"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_9e0b182a","line":584,"in_reply_to":"7a016987_de119005","updated":"2015-05-21 13:02:54.000000000","message":"checked code, there is lot of such transformation in this rpcapi. If they are no longer valid, I can get rid of them in this patch too?","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"}],"nova/conductor/manager.py":[{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"4afd254a84af311411c8566cff755a1f65d7bd5c","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            filter_properties.pop(\u0027context\u0027, None)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"            (host, node) \u003d (host_state[\u0027host\u0027], host_state[\u0027nodename\u0027])"},{"line_number":589,"context_line":"            self.compute_rpcapi.check_can_resize_instance(context, instance,"},{"line_number":590,"context_line":"                                                          flavor,"},{"line_number":591,"context_line":"                                                          instance.host)"},{"line_number":592,"context_line":"            self.compute_rpcapi.prep_resize("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_e8ea5273","line":589,"updated":"2015-05-21 11:00:59.000000000","message":"Could this call be done somewhere in compute_api.resize() instead? If placed here it will run on each retry attempt, which I guess is unnecessary.","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"b35cba77e1b7cf4816eebdb034e8657a5bb1a707","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            filter_properties.pop(\u0027context\u0027, None)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"            (host, node) \u003d (host_state[\u0027host\u0027], host_state[\u0027nodename\u0027])"},{"line_number":589,"context_line":"            self.compute_rpcapi.check_can_resize_instance(context, instance,"},{"line_number":590,"context_line":"                                                          flavor,"},{"line_number":591,"context_line":"                                                          instance.host)"},{"line_number":592,"context_line":"            self.compute_rpcapi.prep_resize("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_dead109c","line":589,"in_reply_to":"7a016987_e3ea7373","updated":"2015-05-21 12:32:43.000000000","message":"Yes. I see no problems with that, there are 55 direct calls from in there to compute already :)\n\nI think it is ok also because this is more like validation before running a task than part of the task itself.","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f37cf298b6041518fbceeb80b87cc596abe3a9f4","unresolved":false,"context_lines":[{"line_number":586,"context_line":"            filter_properties.pop(\u0027context\u0027, None)"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"            (host, node) \u003d (host_state[\u0027host\u0027], host_state[\u0027nodename\u0027])"},{"line_number":589,"context_line":"            self.compute_rpcapi.check_can_resize_instance(context, instance,"},{"line_number":590,"context_line":"                                                          flavor,"},{"line_number":591,"context_line":"                                                          instance.host)"},{"line_number":592,"context_line":"            self.compute_rpcapi.prep_resize("}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_e3ea7373","line":589,"in_reply_to":"7a016987_e8ea5273","updated":"2015-05-21 12:00:49.000000000","message":"Do you mean to move this call to nova/compute/api.py? Would it be correct to add direct call from api to compute, or it is required to add same method to conductor api?","commit_id":"1ff5f59ecf121e8fa44dd33d2d90fa75c0f31b88"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"1a6f5d32f68d3f4c53ed1d8c89cdb7a66b3a165b","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                reservations, request_spec\u003drequest_spec,"},{"line_number":590,"context_line":"                filter_properties\u003dfilter_properties, node\u003dnode,"},{"line_number":591,"context_line":"                clean_shutdown\u003dclean_shutdown)"},{"line_number":592,"context_line":"        except Exception as ex:"},{"line_number":593,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":594,"context_line":"                updates \u003d {\u0027vm_state\u0027: instance.vm_state,"},{"line_number":595,"context_line":"                           \u0027task_state\u0027: None}"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_b2005a03","side":"PARENT","line":592,"updated":"2015-06-18 12:47:21.000000000","message":"After delete this try section, \"except Exception as ex\" will affect on line 544-547. As I understand these deleted lines of code were moved to the MigrationTask. \n\nSo we will catch ALL of exceptions from MigrationTask. But before this patch we catch Exception only from the second part of code. Is it normal?","commit_id":"042947a13f8bc2a6f9062a5bec6ed43a8b24344a"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"95e1513a92410e461ef8141a349b1f3827f4d2ee","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                reservations, request_spec\u003drequest_spec,"},{"line_number":590,"context_line":"                filter_properties\u003dfilter_properties, node\u003dnode,"},{"line_number":591,"context_line":"                clean_shutdown\u003dclean_shutdown)"},{"line_number":592,"context_line":"        except Exception as ex:"},{"line_number":593,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":594,"context_line":"                updates \u003d {\u0027vm_state\u0027: instance.vm_state,"},{"line_number":595,"context_line":"                           \u0027task_state\u0027: None}"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_3f089227","side":"PARENT","line":592,"in_reply_to":"fa32b979_b2005a03","updated":"2015-06-18 13:07:20.000000000","message":"As new version doesn\u0027t suppress any exception I think that\u0027s would be OK.","commit_id":"042947a13f8bc2a6f9062a5bec6ed43a8b24344a"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            task \u003d migrate.MigrationTask(context, instance, flavor,"},{"line_number":545,"context_line":"                                            filter_properties, request_spec,"},{"line_number":546,"context_line":"                                            reservations, clean_shutdown)"},{"line_number":547,"context_line":"            task.execute()"},{"line_number":548,"context_line":"        except exception.NoValidHost as ex:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_0bef731e","line":545,"updated":"2015-07-03 13:16:49.000000000","message":"femtonit: pls align lines 545-546 with the parens in line 543.","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            task \u003d migrate.MigrationTask(context, instance, flavor,"},{"line_number":545,"context_line":"                                            filter_properties, request_spec,"},{"line_number":546,"context_line":"                                            reservations, clean_shutdown)"},{"line_number":547,"context_line":"            task.execute()"},{"line_number":548,"context_line":"        except exception.NoValidHost as ex:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_2cdfead6","line":545,"in_reply_to":"ba3cc151_0bef731e","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":541,"context_line":"            context, image, [instance], instance_type\u003dflavor)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            task \u003d migrate.MigrationTask(context, instance, flavor,"},{"line_number":545,"context_line":"                                         filter_properties, request_spec,"},{"line_number":546,"context_line":"                                         reservations, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_95d704ed","line":543,"updated":"2015-07-05 14:15:30.000000000","message":"the task \u003d migrate.MigrationTask does not need to be in the try. Only the execute.","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        request_spec \u003d scheduler_utils.build_request_spec("},{"line_number":541,"context_line":"            context, image, [instance], instance_type\u003dflavor)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            task \u003d migrate.MigrationTask(context, instance, flavor,"},{"line_number":545,"context_line":"                                         filter_properties, request_spec,"},{"line_number":546,"context_line":"                                         reservations, clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_0d8204c9","line":543,"in_reply_to":"ba3cc151_95d704ed","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":541,"context_line":"            context, image, [instance], instance_type\u003dflavor)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            task \u003d migrate.MigrationTask(context, instance, flavor,"},{"line_number":545,"context_line":"                                         filter_properties, request_spec,"},{"line_number":546,"context_line":"                                         reservations, clean_shutdown)"},{"line_number":547,"context_line":"            task.execute()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_75c36039","line":544,"updated":"2015-07-05 14:15:30.000000000","message":"do we need to pass the flavor here. The fact that we have an instance means that we can use instance.flavor - this is not really importnat - but up to you at the end of the day","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":541,"context_line":"            context, image, [instance], instance_type\u003dflavor)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        try:"},{"line_number":544,"context_line":"            task \u003d migrate.MigrationTask(context, instance, flavor,"},{"line_number":545,"context_line":"                                         filter_properties, request_spec,"},{"line_number":546,"context_line":"                                         reservations, clean_shutdown)"},{"line_number":547,"context_line":"            task.execute()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_6d7dd0e6","line":544,"in_reply_to":"ba3cc151_75c36039","updated":"2015-07-06 15:04:15.000000000","message":"garyk, flavor param here is new target for instance resize","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            self._set_vm_state_and_notify(context, instance.uuid,"},{"line_number":554,"context_line":"                                          \u0027migrate_server\u0027,"},{"line_number":555,"context_line":"                                          updates, ex, request_spec)"},{"line_number":556,"context_line":"            task.rollback()"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"            # if the flavor IDs match, it\u0027s migrate; otherwise resize"},{"line_number":559,"context_line":"            if flavor[\u0027id\u0027] \u003d\u003d instance.instance_type_id:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_1539b441","line":556,"updated":"2015-07-05 14:15:30.000000000","message":"i wonder if we need the rollback here - ideally if we can treat this within the execute then it would be great. That is - if we are pulling in the quoats to the execute then maybe there if there is an exception we should do the rollback of the quotas. So at least we can try and save this from the calling code - that is what if tomorrow a new exception is raised, how should i know that i need to do a rollback. Unless we add in a \u0027finally\u0027 here.","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":553,"context_line":"            self._set_vm_state_and_notify(context, instance.uuid,"},{"line_number":554,"context_line":"                                          \u0027migrate_server\u0027,"},{"line_number":555,"context_line":"                                          updates, ex, request_spec)"},{"line_number":556,"context_line":"            task.rollback()"},{"line_number":557,"context_line":""},{"line_number":558,"context_line":"            # if the flavor IDs match, it\u0027s migrate; otherwise resize"},{"line_number":559,"context_line":"            if flavor[\u0027id\u0027] \u003d\u003d instance.instance_type_id:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_4dc6cc17","line":556,"in_reply_to":"ba3cc151_1539b441","updated":"2015-07-06 15:04:15.000000000","message":"see new decorator for this in last patch, Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        migration.create()"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        try:"},{"line_number":621,"context_line":"            task \u003d live_migrate.LiveMigrationTask(context, instance,"},{"line_number":622,"context_line":"                                                  destination, block_migration,"},{"line_number":623,"context_line":"                                                  disk_over_commit, migration)"},{"line_number":624,"context_line":"            task.execute()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_15021470","line":621,"range":{"start_line":621,"start_character":12,"end_line":621,"end_character":49},"updated":"2015-07-05 14:15:30.000000000","message":"the task \u003d live_migrate.LiveMigrationTask does not need to be in the try - only the execute","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":618,"context_line":"        migration.create()"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        try:"},{"line_number":621,"context_line":"            task \u003d live_migrate.LiveMigrationTask(context, instance,"},{"line_number":622,"context_line":"                                                  destination, block_migration,"},{"line_number":623,"context_line":"                                                  disk_over_commit, migration)"},{"line_number":624,"context_line":"            task.execute()"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_6603a377","line":621,"in_reply_to":"ba3cc151_15021470","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"}],"nova/conductor/tasks/base.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"7b03e6172553185266b06293f2b4fc8a068f9809","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def rollback_wrapper(original):"},{"line_number":20,"context_line":"        def wrap(self):"},{"line_number":21,"context_line":"            try:"},{"line_number":22,"context_line":"                return original(self)"},{"line_number":23,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_6894cce7","line":20,"updated":"2015-07-06 15:25:50.000000000","message":"nit: weird indent here\n\nnit: please use https://docs.python.org/2/library/functools.html#functools.wraps for wrap() function","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ce61f975e8b18fd3bbd87d23b6a5371ce96b89c1","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def rollback_wrapper(original):"},{"line_number":20,"context_line":"        def wrap(self):"},{"line_number":21,"context_line":"            try:"},{"line_number":22,"context_line":"                return original(self)"},{"line_number":23,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_1fdd2670","line":20,"in_reply_to":"ba3cc151_6894cce7","updated":"2015-07-07 14:04:09.000000000","message":"Done","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"7b03e6172553185266b06293f2b4fc8a068f9809","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, context, instance):"},{"line_number":32,"context_line":"        self.context \u003d context"},{"line_number":33,"context_line":"        self.instance \u003d instance"},{"line_number":34,"context_line":"        self.compute_rpcapi \u003d compute_rpcapi.ComputeAPI()"},{"line_number":35,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":36,"context_line":"        self.scheduler_client \u003d scheduler_client.SchedulerClient()"},{"line_number":37,"context_line":"        self.image_api \u003d image.API()"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_8867d024","line":34,"updated":"2015-07-06 15:25:50.000000000","message":"I wonder, if this allocates new resources like RPC connections? or just reuses existing ones?\n\n+\n\nditto 2 lines below","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ce61f975e8b18fd3bbd87d23b6a5371ce96b89c1","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def __init__(self, context, instance):"},{"line_number":32,"context_line":"        self.context \u003d context"},{"line_number":33,"context_line":"        self.instance \u003d instance"},{"line_number":34,"context_line":"        self.compute_rpcapi \u003d compute_rpcapi.ComputeAPI()"},{"line_number":35,"context_line":"        self.servicegroup_api \u003d servicegroup.API()"},{"line_number":36,"context_line":"        self.scheduler_client \u003d scheduler_client.SchedulerClient()"},{"line_number":37,"context_line":"        self.image_api \u003d image.API()"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_a37160aa","line":34,"in_reply_to":"ba3cc151_8867d024","updated":"2015-07-07 14:04:09.000000000","message":"Roman, this initialization already was used for live-migration task. To change this I\u0027ve created 2 factory methods in conductor.manager, that build task object, populating them with service fields. Done","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.context \u003d context"},{"line_number":31,"context_line":"        self.instance \u003d instance"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @rollback_wrapper"},{"line_number":34,"context_line":"    def execute(self):"},{"line_number":35,"context_line":"        \"\"\"Run task\u0027s logic"},{"line_number":36,"context_line":"        Descendants should place task\u0027s logic here, while resource"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_aa5e0ce7","line":33,"updated":"2015-07-07 16:24:03.000000000","message":"(just an idea, separate patch maybe) Perhaps, the API would be cleaner if we had 2 separate methods: execute() (implements the logic) and run() (actually starts the execution of the task).\n\nAs right now subclasses must remember to decorate each execute() with rollback_wrapper() explicitly. And if a developer forgets to do that, rollback() will never be called on failure.\n\nAs is, we could probably fix this by the means of a metaclass :P","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.context \u003d context"},{"line_number":31,"context_line":"        self.instance \u003d instance"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @rollback_wrapper"},{"line_number":34,"context_line":"    def execute(self):"},{"line_number":35,"context_line":"        \"\"\"Run task\u0027s logic"},{"line_number":36,"context_line":"        Descendants should place task\u0027s logic here, while resource"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_2b273bcb","line":33,"in_reply_to":"ba3cc151_aa5e0ce7","updated":"2015-07-08 10:42:40.000000000","message":"I suppose that first approach should be clearer than metaclass. Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        Descendants should implement this method to allow task user to"},{"line_number":44,"context_line":"        rollback status to state before execute method  was call"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_6a7c8472","line":46,"updated":"2015-07-07 16:24:03.000000000","message":"Maybe we should make overriding of this method optional? (so that subclasses don\u0027t have to explicitly define a no-op rollback() just for the sake of execute() not failing with AttributeException on any failure)","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        Descendants should implement this method to allow task user to"},{"line_number":44,"context_line":"        rollback status to state before execute method  was call"},{"line_number":45,"context_line":"        \"\"\""},{"line_number":46,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_21120158","line":46,"in_reply_to":"ba3cc151_6a7c8472","updated":"2015-07-08 10:42:40.000000000","message":"Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a8318e0aebf3ee7c1d30e3d0f0899e8246c51aac","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            return original(self)"},{"line_number":23,"context_line":"        except Exception:"},{"line_number":24,"context_line":"            self.rollback()"},{"line_number":25,"context_line":"            raise"},{"line_number":26,"context_line":"    return wrap"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_98a7b00a","line":25,"updated":"2015-07-08 13:23:25.000000000","message":"Hmm, I think excutils.save_and_reraise_exception() should be used here?","commit_id":"a812002b610993aea5ca1aeb2adfad8f67e814e0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8240d73cb3e48f805fc5a1944b22d0fd130f863b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            return original(self)"},{"line_number":23,"context_line":"        except Exception:"},{"line_number":24,"context_line":"            self.rollback()"},{"line_number":25,"context_line":"            raise"},{"line_number":26,"context_line":"    return wrap"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ba3cc151_d80a188a","line":25,"in_reply_to":"ba3cc151_98a7b00a","updated":"2015-07-08 13:27:04.000000000","message":"+1, the point is to do things that could fail but we don\u0027t care as we don\u0027t want to lose the original exception, so save_and_reraise_exception around the rollback() call is appropriate here.","commit_id":"a812002b610993aea5ca1aeb2adfad8f67e814e0"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6236285d519e9451774ef6ccc117ce8447b0d894","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import abc"},{"line_number":14,"context_line":"import functools"},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_utils import excutils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_6e7706a0","line":15,"updated":"2015-07-30 12:05:27.000000000","message":"i think that six is third party so it should be in the group below","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"df01a15b9a9deb780ed95107f7b0f0896ba9764c","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import abc"},{"line_number":14,"context_line":"import functools"},{"line_number":15,"context_line":"import six"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_utils import excutils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_06af422c","line":15,"in_reply_to":"3a50d1a3_6e7706a0","updated":"2015-07-30 14:52:02.000000000","message":"Done","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6236285d519e9451774ef6ccc117ce8447b0d894","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def _execute(self):"},{"line_number":46,"context_line":"        \"\"\"Descendants should place task\u0027s logic here, while resource"},{"line_number":47,"context_line":"        initialization should be performed over __init__"},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def rollback(self):"},{"line_number":51,"context_line":"        \"\"\"Rollback failed task"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_ce3f3ab4","line":48,"updated":"2015-07-30 12:05:27.000000000","message":"maybe for completeness have pass here","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"df01a15b9a9deb780ed95107f7b0f0896ba9764c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def _execute(self):"},{"line_number":46,"context_line":"        \"\"\"Descendants should place task\u0027s logic here, while resource"},{"line_number":47,"context_line":"        initialization should be performed over __init__"},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def rollback(self):"},{"line_number":51,"context_line":"        \"\"\"Rollback failed task"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_c6915af3","line":48,"in_reply_to":"3a50d1a3_ce3f3ab4","updated":"2015-07-30 14:52:02.000000000","message":"Done","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"}],"nova/conductor/tasks/live_migrate.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"43db81110a0ae72f689a895047e0fb23d7663771","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # but this will make sense only once we pull in the compute"},{"line_number":78,"context_line":"        # calls, since this class currently makes no state changes,"},{"line_number":79,"context_line":"        # except to call the compute method, that has no matching"},{"line_number":80,"context_line":"        # rollback call right now."},{"line_number":81,"context_line":"        raise NotImplementedError()"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _check_instance_is_active(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_32555c1d","line":80,"updated":"2015-07-08 14:47:13.000000000","message":"we should change this to \u0027pass\u0027.\n\nas you execute rollback in the baseclass line 27 of https://review.openstack.org/#/c/184495/22/nova/conductor/tasks/base.py\n\nIf we raise NotImplementedError at here, that means any exception raised, then finally hide by this NotImplementedError","commit_id":"b9609addd5e1993491470fd000c9303c459e3df0"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e91ca3feef80f87be8e4ec3c09f24a9fcefe8eba","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        # but this will make sense only once we pull in the compute"},{"line_number":78,"context_line":"        # calls, since this class currently makes no state changes,"},{"line_number":79,"context_line":"        # except to call the compute method, that has no matching"},{"line_number":80,"context_line":"        # rollback call right now."},{"line_number":81,"context_line":"        raise NotImplementedError()"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _check_instance_is_active(self):"}],"source_content_type":"text/x-python","patch_set":22,"id":"ba3cc151_01efa487","line":80,"in_reply_to":"ba3cc151_32555c1d","updated":"2015-07-08 15:54:00.000000000","message":"yep, thanks a lot, Alex!","commit_id":"b9609addd5e1993491470fd000c9303c459e3df0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f00a7619cb81b3bca347ec3db0d2e96d080e751c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                 servicegroup_api, scheduler_client):"},{"line_number":40,"context_line":"        super(LiveMigrationTask, self).__init__(context, instance)"},{"line_number":41,"context_line":"        self.context \u003d context"},{"line_number":42,"context_line":"        self.instance \u003d instance"},{"line_number":43,"context_line":"        self.destination \u003d destination"},{"line_number":44,"context_line":"        self.block_migration \u003d block_migration"},{"line_number":45,"context_line":"        self.disk_over_commit \u003d disk_over_commit"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_f368caf7","line":42,"updated":"2015-07-13 08:43:37.000000000","message":"line 41 and 42 is needless, they executed in the base class also.","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"325021f0615bd536bb298cf0a41898dd7bf3484f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                 servicegroup_api, scheduler_client):"},{"line_number":40,"context_line":"        super(LiveMigrationTask, self).__init__(context, instance)"},{"line_number":41,"context_line":"        self.context \u003d context"},{"line_number":42,"context_line":"        self.instance \u003d instance"},{"line_number":43,"context_line":"        self.destination \u003d destination"},{"line_number":44,"context_line":"        self.block_migration \u003d block_migration"},{"line_number":45,"context_line":"        self.disk_over_commit \u003d disk_over_commit"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_447712d3","line":42,"in_reply_to":"9a41bdd9_f368caf7","updated":"2015-07-14 18:48:47.000000000","message":"Done","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"906c167dfd519d1938004221c321463ae6db8de9","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # calls, since this class currently makes no state changes,"},{"line_number":79,"context_line":"        # except to call the compute method, that has no matching"},{"line_number":80,"context_line":"        # rollback call right now."},{"line_number":81,"context_line":"        pass"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _check_instance_is_active(self):"},{"line_number":84,"context_line":"        if self.instance.power_state not in (power_state.RUNNING,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_b30b507d","line":81,"updated":"2015-07-11 02:43:32.000000000","message":"Are we concerned that someone may call this and not notice that this was not implemented?","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"b23cd49a5cf956f9430aaf407d3f0f877d0e4020","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # calls, since this class currently makes no state changes,"},{"line_number":79,"context_line":"        # except to call the compute method, that has no matching"},{"line_number":80,"context_line":"        # rollback call right now."},{"line_number":81,"context_line":"        pass"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _check_instance_is_active(self):"},{"line_number":84,"context_line":"        if self.instance.power_state not in (power_state.RUNNING,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_f6043816","line":81,"in_reply_to":"9a41bdd9_b30b507d","updated":"2015-07-13 08:27:18.000000000","message":"dims, nope, this should not be a problem.","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f00a7619cb81b3bca347ec3db0d2e96d080e751c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        # calls, since this class currently makes no state changes,"},{"line_number":79,"context_line":"        # except to call the compute method, that has no matching"},{"line_number":80,"context_line":"        # rollback call right now."},{"line_number":81,"context_line":"        pass"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _check_instance_is_active(self):"},{"line_number":84,"context_line":"        if self.instance.power_state not in (power_state.RUNNING,"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_73527a69","line":81,"in_reply_to":"9a41bdd9_b30b507d","updated":"2015-07-13 08:43:37.000000000","message":"hi, Davanum, maybe this can give you answer https://review.openstack.org/#/c/184495/22/nova/conductor/tasks/live_migrate.py\n\n\nAnd .... I may lead just put a \u0027pass\u0027 at here. If there is nothing to do, we can just remove this function at here. As there is same definition in the base class...","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"}],"nova/conductor/tasks/migrate.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        image \u003d utils.get_image_from_system_metadata("},{"line_number":34,"context_line":"            self.instance.system_metadata)"},{"line_number":35,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":36,"context_line":"                                                  self.reservations,"},{"line_number":37,"context_line":"                                                  instance\u003dself.instance)"},{"line_number":38,"context_line":"        scheduler_utils.setup_instance_group(self.context, self.request_spec,"},{"line_number":39,"context_line":"                                                 self.filter_properties)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_358e3828","line":36,"updated":"2015-07-05 14:15:30.000000000","message":"indentation is a little dodgy here","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        image \u003d utils.get_image_from_system_metadata("},{"line_number":34,"context_line":"            self.instance.system_metadata)"},{"line_number":35,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":36,"context_line":"                                                  self.reservations,"},{"line_number":37,"context_line":"                                                  instance\u003dself.instance)"},{"line_number":38,"context_line":"        scheduler_utils.setup_instance_group(self.context, self.request_spec,"},{"line_number":39,"context_line":"                                                 self.filter_properties)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_ed8560ad","line":36,"in_reply_to":"ba3cc151_358e3828","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                                  self.reservations,"},{"line_number":37,"context_line":"                                                  instance\u003dself.instance)"},{"line_number":38,"context_line":"        scheduler_utils.setup_instance_group(self.context, self.request_spec,"},{"line_number":39,"context_line":"                                                 self.filter_properties)"},{"line_number":40,"context_line":"        scheduler_utils.populate_retry(self.filter_properties,"},{"line_number":41,"context_line":"                                       self.instance.uuid)"},{"line_number":42,"context_line":"        hosts \u003d self.scheduler_client.select_destinations(self.context,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_5593bc4f","line":39,"updated":"2015-07-05 14:15:30.000000000","message":"ditto","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                                  self.reservations,"},{"line_number":37,"context_line":"                                                  instance\u003dself.instance)"},{"line_number":38,"context_line":"        scheduler_utils.setup_instance_group(self.context, self.request_spec,"},{"line_number":39,"context_line":"                                                 self.filter_properties)"},{"line_number":40,"context_line":"        scheduler_utils.populate_retry(self.filter_properties,"},{"line_number":41,"context_line":"                                       self.instance.uuid)"},{"line_number":42,"context_line":"        hosts \u003d self.scheduler_client.select_destinations(self.context,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_cd889cc9","line":39,"in_reply_to":"ba3cc151_5593bc4f","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        scheduler_utils.populate_retry(self.filter_properties,"},{"line_number":41,"context_line":"                                       self.instance.uuid)"},{"line_number":42,"context_line":"        hosts \u003d self.scheduler_client.select_destinations(self.context,"},{"line_number":43,"context_line":"                                    self.request_spec, self.filter_properties)"},{"line_number":44,"context_line":"        host_state \u003d hosts[0]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        scheduler_utils.populate_filter_properties(self.filter_properties,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_f5977038","line":43,"updated":"2015-07-05 14:15:30.000000000","message":"ditto","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        scheduler_utils.populate_retry(self.filter_properties,"},{"line_number":41,"context_line":"                                       self.instance.uuid)"},{"line_number":42,"context_line":"        hosts \u003d self.scheduler_client.select_destinations(self.context,"},{"line_number":43,"context_line":"                                    self.request_spec, self.filter_properties)"},{"line_number":44,"context_line":"        host_state \u003d hosts[0]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        scheduler_utils.populate_filter_properties(self.filter_properties,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_0d9e8407","line":43,"in_reply_to":"ba3cc151_f5977038","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        host_state \u003d hosts[0]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        scheduler_utils.populate_filter_properties(self.filter_properties,"},{"line_number":47,"context_line":"                                                       host_state)"},{"line_number":48,"context_line":"        # context is not serializable"},{"line_number":49,"context_line":"        self.filter_properties.pop(\u0027context\u0027, None)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_159d3459","line":47,"updated":"2015-07-05 14:15:30.000000000","message":"ditto","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        host_state \u003d hosts[0]"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        scheduler_utils.populate_filter_properties(self.filter_properties,"},{"line_number":47,"context_line":"                                                       host_state)"},{"line_number":48,"context_line":"        # context is not serializable"},{"line_number":49,"context_line":"        self.filter_properties.pop(\u0027context\u0027, None)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_6d99501f","line":47,"in_reply_to":"ba3cc151_159d3459","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.filter_properties.pop(\u0027context\u0027, None)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        (host, node) \u003d (host_state[\u0027host\u0027], host_state[\u0027nodename\u0027])"},{"line_number":52,"context_line":"        self.compute_rpcapi.prep_resize(self.context, image, self.instance,"},{"line_number":53,"context_line":"                                    self.flavor, host, self.reservations,"},{"line_number":54,"context_line":"                                    request_spec\u003dself.request_spec,"},{"line_number":55,"context_line":"                                    filter_properties\u003dself.filter_properties,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_75acc08c","line":52,"updated":"2015-07-05 14:15:30.000000000","message":"ditto","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.filter_properties.pop(\u0027context\u0027, None)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        (host, node) \u003d (host_state[\u0027host\u0027], host_state[\u0027nodename\u0027])"},{"line_number":52,"context_line":"        self.compute_rpcapi.prep_resize(self.context, image, self.instance,"},{"line_number":53,"context_line":"                                    self.flavor, host, self.reservations,"},{"line_number":54,"context_line":"                                    request_spec\u003dself.request_spec,"},{"line_number":55,"context_line":"                                    filter_properties\u003dself.filter_properties,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_4d948ce7","line":52,"in_reply_to":"ba3cc151_75acc08c","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f00a7619cb81b3bca347ec3db0d2e96d080e751c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.filter_properties \u003d filter_properties"},{"line_number":28,"context_line":"        self.flavor \u003d flavor"},{"line_number":29,"context_line":"        self.bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":30,"context_line":"                                                        context, instance.uuid)"},{"line_number":31,"context_line":"        self.quotas \u003d None"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.compute_rpcapi \u003d compute_rpcapi"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_b62b1030","line":30,"updated":"2015-07-13 08:43:37.000000000","message":"I didn\u0027t find out anywhere use it?","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"325021f0615bd536bb298cf0a41898dd7bf3484f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self.filter_properties \u003d filter_properties"},{"line_number":28,"context_line":"        self.flavor \u003d flavor"},{"line_number":29,"context_line":"        self.bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":30,"context_line":"                                                        context, instance.uuid)"},{"line_number":31,"context_line":"        self.quotas \u003d None"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self.compute_rpcapi \u003d compute_rpcapi"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_2e6bd2f2","line":30,"in_reply_to":"9a41bdd9_b62b1030","updated":"2015-07-14 18:48:47.000000000","message":"moved this to the next patch in this series","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f00a7619cb81b3bca347ec3db0d2e96d080e751c","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _execute(self):"},{"line_number":37,"context_line":"        image \u003d utils.get_image_from_system_metadata("},{"line_number":38,"context_line":"            self.instance.system_metadata)"},{"line_number":39,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":40,"context_line":"                                                       self.reservations,"},{"line_number":41,"context_line":"                                                       instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_365380e3","line":38,"updated":"2015-07-13 08:43:37.000000000","message":"we needn\u0027t rebuild this from system_metadata again. It already in the self.request_spec","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"325021f0615bd536bb298cf0a41898dd7bf3484f","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def _execute(self):"},{"line_number":37,"context_line":"        image \u003d utils.get_image_from_system_metadata("},{"line_number":38,"context_line":"            self.instance.system_metadata)"},{"line_number":39,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":40,"context_line":"                                                       self.reservations,"},{"line_number":41,"context_line":"                                                       instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9a41bdd9_0eb04e89","line":38,"in_reply_to":"9a41bdd9_365380e3","updated":"2015-07-14 18:48:47.000000000","message":"Done","commit_id":"b9c760763976dc2605d232264e1f0bea50bbdbe4"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d50aea3c4eb88edc2ebf19566a1533e9465cffd8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.scheduler_client \u003d scheduler_client"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def _execute(self):"},{"line_number":34,"context_line":"        image \u003d self.request_spec.get(\u0027image\u0027)"},{"line_number":35,"context_line":"        self.quotas \u003d objects.Quotas.from_reservations(self.context,"},{"line_number":36,"context_line":"                                                       self.reservations,"},{"line_number":37,"context_line":"                                                       instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3a50d1a3_76087bda","line":34,"updated":"2015-07-23 09:29:31.000000000","message":"nit, self.request_spec[\u0027image\u0027] is better.","commit_id":"e1a9cad8a37a0bc64a412b1f36e3d79954197b61"}],"nova/conductor/tasks/migrate_server.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f4f58369824850bac217c9e24e40e005ab7d68e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_c479aa94","line":1,"updated":"2015-06-24 16:49:16.000000000","message":"Please name this file just migrate.py, not migrate_server.py, to be consistent with the live_migrate.py module naming.","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"d9b2d574131d5e282445c892bf014fcb6d6e7371","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_ecb11b02","line":1,"in_reply_to":"fa32b979_c479aa94","updated":"2015-06-25 12:52:24.000000000","message":"Done","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"}],"nova/conductor/tasks/task_base.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f4f58369824850bac217c9e24e40e005ab7d68e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_59a34700","line":1,"updated":"2015-06-24 16:49:16.000000000","message":"You could rename this file to just base.py. The \"task_\" part is already known because we\u0027re in the conductor/tasks/ directory/module...","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"d9b2d574131d5e282445c892bf014fcb6d6e7371","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_cce4570e","line":1,"in_reply_to":"fa32b979_59a34700","updated":"2015-06-25 12:52:24.000000000","message":"Done","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f4f58369824850bac217c9e24e40e005ab7d68e","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.scheduler_client \u003d scheduler_client.SchedulerClient()"},{"line_number":27,"context_line":"        self.image_api \u003d image.API()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def execute(self):"},{"line_number":30,"context_line":"        raise NotImplementedError()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def rollback(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_59f10700","line":29,"updated":"2015-06-24 16:49:16.000000000","message":"Please provide docstrings for both of these methods that detail the expected behaviour of the subclasses\u0027 implementation, the exceptions that may be raised, any side-effects that may occur from the method call and any returned result.","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"d9b2d574131d5e282445c892bf014fcb6d6e7371","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        self.scheduler_client \u003d scheduler_client.SchedulerClient()"},{"line_number":27,"context_line":"        self.image_api \u003d image.API()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def execute(self):"},{"line_number":30,"context_line":"        raise NotImplementedError()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def rollback(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_a0131200","line":29,"in_reply_to":"fa32b979_59f10700","updated":"2015-06-25 12:52:24.000000000","message":"Done","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"1a6f5d32f68d3f4c53ed1d8c89cdb7a66b3a165b","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"            # To test instance w/ different project id than context (admin)"},{"line_number":1262,"context_line":"            params[\u0027project_id\u0027] \u003d project_id"},{"line_number":1263,"context_line":"        fake_inst \u003d self._create_instance_obj(params\u003dparams)"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":"        self.mox.StubOutWithMock(flavors, \u0027get_flavor_by_flavor_id\u0027)"},{"line_number":1266,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027_upsize_quota_delta\u0027)"},{"line_number":1267,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027_reserve_quota_delta\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_4d612fa8","side":"PARENT","line":1264,"updated":"2015-06-18 12:47:21.000000000","message":"nit: I don\u0027t mind, but some of reviewers may ask you \"why you removed it?\"","commit_id":"042947a13f8bc2a6f9062a5bec6ed43a8b24344a"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"95e1513a92410e461ef8141a349b1f3827f4d2ee","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"            # To test instance w/ different project id than context (admin)"},{"line_number":1262,"context_line":"            params[\u0027project_id\u0027] \u003d project_id"},{"line_number":1263,"context_line":"        fake_inst \u003d self._create_instance_obj(params\u003dparams)"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":"        self.mox.StubOutWithMock(flavors, \u0027get_flavor_by_flavor_id\u0027)"},{"line_number":1266,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027_upsize_quota_delta\u0027)"},{"line_number":1267,"context_line":"        self.mox.StubOutWithMock(self.compute_api, \u0027_reserve_quota_delta\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_6d6993f8","side":"PARENT","line":1264,"in_reply_to":"fa32b979_4d612fa8","updated":"2015-06-18 13:07:20.000000000","message":"Done","commit_id":"042947a13f8bc2a6f9062a5bec6ed43a8b24344a"}],"nova/tests/unit/conductor/tasks/test_base.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"7b03e6172553185266b06293f2b4fc8a068f9809","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def setUp(self):"},{"line_number":40,"context_line":"        super(TaskBaseTestCase, self).setUp()"},{"line_number":41,"context_line":"        self.task \u003d FakeTask(mock.MagicMock(), mock.MagicMock())"},{"line_number":42,"context_line":"        self.task.rollback \u003d mock.MagicMock()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @mock.patch.object(compute_rpcapi, \u0027ComputeAPI\u0027)"},{"line_number":45,"context_line":"    def test_wrapper_exception(self, rpc_api):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_4e13115d","line":42,"updated":"2015-07-06 15:25:50.000000000","message":"this is more like a hack, rather than a proper mock :)\n\n(as you simply override the method by creating a new instance attribute)\n\ncan we just use a mock decorator on test methods? or mock.patch()?","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ce61f975e8b18fd3bbd87d23b6a5371ce96b89c1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def setUp(self):"},{"line_number":40,"context_line":"        super(TaskBaseTestCase, self).setUp()"},{"line_number":41,"context_line":"        self.task \u003d FakeTask(mock.MagicMock(), mock.MagicMock())"},{"line_number":42,"context_line":"        self.task.rollback \u003d mock.MagicMock()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @mock.patch.object(compute_rpcapi, \u0027ComputeAPI\u0027)"},{"line_number":45,"context_line":"    def test_wrapper_exception(self, rpc_api):"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_7fe1d2fd","line":42,"in_reply_to":"ba3cc151_4e13115d","updated":"2015-07-07 14:04:09.000000000","message":"Done","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(TaskBaseTestCase, self).setUp()"},{"line_number":41,"context_line":"        self.task \u003d FakeTask(mock.MagicMock(), mock.MagicMock())"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @mock.patch.object(compute_rpcapi, \u0027ComputeAPI\u0027)"},{"line_number":44,"context_line":"    @mock.patch.object(FakeTask, \u0027rollback\u0027)"},{"line_number":45,"context_line":"    def test_wrapper_exception(self, fake_rollback, rpc_api):"},{"line_number":46,"context_line":"        self.task.fail \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_ca66f028","line":43,"updated":"2015-07-07 16:24:03.000000000","message":"hmm, do we really need to mock ComputeAPI here?","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(TaskBaseTestCase, self).setUp()"},{"line_number":41,"context_line":"        self.task \u003d FakeTask(mock.MagicMock(), mock.MagicMock())"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @mock.patch.object(compute_rpcapi, \u0027ComputeAPI\u0027)"},{"line_number":44,"context_line":"    @mock.patch.object(FakeTask, \u0027rollback\u0027)"},{"line_number":45,"context_line":"    def test_wrapper_exception(self, fake_rollback, rpc_api):"},{"line_number":46,"context_line":"        self.task.fail \u003d True"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_6637bf4d","line":43,"in_reply_to":"ba3cc151_ca66f028","updated":"2015-07-08 10:42:40.000000000","message":"It\u0027s not necessary after moving ownership of task services to conductor. Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            pass"},{"line_number":51,"context_line":"        fake_rollback.assert_called_once_with()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @mock.patch.object(compute_rpcapi, \u0027ComputeAPI\u0027)"},{"line_number":54,"context_line":"    @mock.patch.object(FakeTask, \u0027rollback\u0027)"},{"line_number":55,"context_line":"    def test_wrapper_no_exception(self, fake_rollback, rpc_api):"},{"line_number":56,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_6a6d6403","line":53,"updated":"2015-07-07 16:24:03.000000000","message":"ditto","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            pass"},{"line_number":51,"context_line":"        fake_rollback.assert_called_once_with()"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    @mock.patch.object(compute_rpcapi, \u0027ComputeAPI\u0027)"},{"line_number":54,"context_line":"    @mock.patch.object(FakeTask, \u0027rollback\u0027)"},{"line_number":55,"context_line":"    def test_wrapper_no_exception(self, fake_rollback, rpc_api):"},{"line_number":56,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_064113a9","line":53,"in_reply_to":"ba3cc151_6a6d6403","updated":"2015-07-08 10:42:40.000000000","message":"Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"}],"nova/tests/unit/conductor/tasks/test_migrate.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        task.execute()"},{"line_number":72,"context_line":"        bdms_mock.assert_called_once_with(self.context, self.instance.uuid)"},{"line_number":73,"context_line":"        image_mock.assert_called_once_with(self.instance.system_metadata)"},{"line_number":74,"context_line":"        self.assertTrue(task.quotas)"},{"line_number":75,"context_line":"        sig_mock.assert_called_once_with(self.context, self.request_spec,"},{"line_number":76,"context_line":"                                         self.filter_properties)"},{"line_number":77,"context_line":"        task.scheduler_client.select_destinations.\\"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_7da12293","line":74,"updated":"2015-07-03 13:16:49.000000000","message":"Hmm, the above should be asserting that task.quotas is something other than True, right? You need to mock out the call to objects.Quotas.from_reservations() to return a mock, and then assert that the returned mock\u0027s rollback() method is not called.","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        task.execute()"},{"line_number":72,"context_line":"        bdms_mock.assert_called_once_with(self.context, self.instance.uuid)"},{"line_number":73,"context_line":"        image_mock.assert_called_once_with(self.instance.system_metadata)"},{"line_number":74,"context_line":"        self.assertTrue(task.quotas)"},{"line_number":75,"context_line":"        sig_mock.assert_called_once_with(self.context, self.request_spec,"},{"line_number":76,"context_line":"                                         self.filter_properties)"},{"line_number":77,"context_line":"        task.scheduler_client.select_destinations.\\"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_60dc1275","line":74,"in_reply_to":"ba3cc151_7da12293","updated":"2015-07-03 16:13:57.000000000","message":"Actually, I\u0027ve decided to check whether quotas object initialized or not. Changed logic, according to your comment. Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                    request_spec\u003dself.request_spec,"},{"line_number":85,"context_line":"                                    filter_properties\u003dself.filter_properties,"},{"line_number":86,"context_line":"                                    node\u003dself.hosts[0][\u0027nodename\u0027],"},{"line_number":87,"context_line":"                                    clean_shutdown\u003dself.clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_9d9d060c","line":87,"updated":"2015-07-03 13:16:49.000000000","message":"You need to add a unit test that stresses the rollback() method of the task and asserts that the task.quotas object has its rollback() method called.","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                                    request_spec\u003dself.request_spec,"},{"line_number":85,"context_line":"                                    filter_properties\u003dself.filter_properties,"},{"line_number":86,"context_line":"                                    node\u003dself.hosts[0][\u0027nodename\u0027],"},{"line_number":87,"context_line":"                                    clean_shutdown\u003dself.clean_shutdown)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_00ed0625","line":87,"in_reply_to":"ba3cc151_9d9d060c","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"83d6fbfb51951a2fb924fd8b35afcae792815349","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        bdms_mock.assert_called_once_with(self.context, self.instance.uuid)"},{"line_number":76,"context_line":"        image_mock.assert_called_once_with(self.instance.system_metadata)"},{"line_number":77,"context_line":"        quotas_mock.assert_called_once_with(self.context, self.reservations,"},{"line_number":78,"context_line":"                                            instance\u003dself.instance)"},{"line_number":79,"context_line":"        sig_mock.assert_called_once_with(self.context, self.request_spec,"},{"line_number":80,"context_line":"                                         self.filter_properties)"},{"line_number":81,"context_line":"        task.scheduler_client.select_destinations.\\"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba3cc151_40722e4b","line":78,"updated":"2015-07-03 16:17:12.000000000","message":"++ good.","commit_id":"1d6ab71f1c6c34404c4461a58954e822bb594819"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"83d6fbfb51951a2fb924fd8b35afcae792815349","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                                    filter_properties\u003dself.filter_properties,"},{"line_number":90,"context_line":"                                    node\u003dself.hosts[0][\u0027nodename\u0027],"},{"line_number":91,"context_line":"                                    clean_shutdown\u003dself.clean_shutdown)"},{"line_number":92,"context_line":"        self.assertEqual(False, quotas_mock_return_value.rollback.called)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_rollback(self):"},{"line_number":95,"context_line":"        self._generate_task()"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba3cc151_c09cfe5f","line":92,"updated":"2015-07-03 16:17:12.000000000","message":"nit: please use self.assertFalse(quotas_mock.return_value.rollback.called)","commit_id":"1d6ab71f1c6c34404c4461a58954e822bb594819"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"158c044ddf6a6981db884038a4f6c951a403365f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                                    filter_properties\u003dself.filter_properties,"},{"line_number":90,"context_line":"                                    node\u003dself.hosts[0][\u0027nodename\u0027],"},{"line_number":91,"context_line":"                                    clean_shutdown\u003dself.clean_shutdown)"},{"line_number":92,"context_line":"        self.assertEqual(False, quotas_mock_return_value.rollback.called)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_rollback(self):"},{"line_number":95,"context_line":"        self._generate_task()"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba3cc151_03867065","line":92,"in_reply_to":"ba3cc151_c09cfe5f","updated":"2015-07-03 16:36:19.000000000","message":"Done","commit_id":"1d6ab71f1c6c34404c4461a58954e822bb594819"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                             \u0027instance_properties\u0027: {}}"},{"line_number":43,"context_line":"        self.hosts \u003d [dict(host\u003d\u0027host1\u0027, nodename\u003dNone, limits\u003d{})]"},{"line_number":44,"context_line":"        self.filter_properties \u003d {\u0027limits\u0027: {},"},{"line_number":45,"context_line":"                             \u0027retry\u0027: {\u0027num_attempts\u0027: 1,"},{"line_number":46,"context_line":"                                       \u0027hosts\u0027: [[\u0027host1\u0027, None]]}}"},{"line_number":47,"context_line":"        self.reservations \u003d []"},{"line_number":48,"context_line":"        self.clean_shutdown \u003d True"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_95a9447e","line":45,"updated":"2015-07-05 14:15:30.000000000","message":"indentation is a little dodgy","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                             \u0027instance_properties\u0027: {}}"},{"line_number":43,"context_line":"        self.hosts \u003d [dict(host\u003d\u0027host1\u0027, nodename\u003dNone, limits\u003d{})]"},{"line_number":44,"context_line":"        self.filter_properties \u003d {\u0027limits\u0027: {},"},{"line_number":45,"context_line":"                             \u0027retry\u0027: {\u0027num_attempts\u0027: 1,"},{"line_number":46,"context_line":"                                       \u0027hosts\u0027: [[\u0027host1\u0027, None]]}}"},{"line_number":47,"context_line":"        self.reservations \u003d []"},{"line_number":48,"context_line":"        self.clean_shutdown \u003d True"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_0d40c406","line":45,"in_reply_to":"ba3cc151_95a9447e","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f3732f1b2c4e0465f3a784da32c5d559a2e8b947","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        task.scheduler_client.select_destinations.\\"},{"line_number":82,"context_line":"            assert_called_once_with(self.context, self.request_spec,"},{"line_number":83,"context_line":"                                    self.filter_properties)"},{"line_number":84,"context_line":"        prep_resize_mock.\\"},{"line_number":85,"context_line":"            assert_called_once_with(self.context, \u0027image\u0027, self.instance,"},{"line_number":86,"context_line":"                                    self.flavor, self.hosts[0][\u0027host\u0027],"},{"line_number":87,"context_line":"                                    self.reservations,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_35b5d8cf","line":84,"updated":"2015-07-05 14:15:30.000000000","message":"can we try and write this without the \\","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e6bc766bd9651ec550b88b81ffd3def1eb0a5c4f","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        task.scheduler_client.select_destinations.\\"},{"line_number":82,"context_line":"            assert_called_once_with(self.context, self.request_spec,"},{"line_number":83,"context_line":"                                    self.filter_properties)"},{"line_number":84,"context_line":"        prep_resize_mock.\\"},{"line_number":85,"context_line":"            assert_called_once_with(self.context, \u0027image\u0027, self.instance,"},{"line_number":86,"context_line":"                                    self.flavor, self.hosts[0][\u0027host\u0027],"},{"line_number":87,"context_line":"                                    self.reservations,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba3cc151_2d026870","line":84,"in_reply_to":"ba3cc151_35b5d8cf","updated":"2015-07-06 15:04:15.000000000","message":"Done","commit_id":"27e0466bee1cf848a4fce032ffaf0bca4669e3e8"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"7b03e6172553185266b06293f2b4fc8a068f9809","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        brs_mock.return_value \u003d self.request_spec"},{"line_number":70,"context_line":"        sel_dest_mock.return_value \u003d self.hosts"},{"line_number":71,"context_line":"        self._generate_task()"},{"line_number":72,"context_line":"        task \u003d self.task"},{"line_number":73,"context_line":"        task.execute()"},{"line_number":74,"context_line":"        bdms_mock.assert_called_once_with(self.context, self.instance.uuid)"},{"line_number":75,"context_line":"        image_mock.assert_called_once_with(self.instance.system_metadata)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_ae72ddab","line":72,"updated":"2015-07-06 15:25:50.000000000","message":"nit: adding empty lines between \u0027setup\u0027 code block and \u0027asserts\u0027 block would improve readability","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ce61f975e8b18fd3bbd87d23b6a5371ce96b89c1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        brs_mock.return_value \u003d self.request_spec"},{"line_number":70,"context_line":"        sel_dest_mock.return_value \u003d self.hosts"},{"line_number":71,"context_line":"        self._generate_task()"},{"line_number":72,"context_line":"        task \u003d self.task"},{"line_number":73,"context_line":"        task.execute()"},{"line_number":74,"context_line":"        bdms_mock.assert_called_once_with(self.context, self.instance.uuid)"},{"line_number":75,"context_line":"        image_mock.assert_called_once_with(self.instance.system_metadata)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_5faace86","line":72,"in_reply_to":"ba3cc151_ae72ddab","updated":"2015-07-07 14:04:09.000000000","message":"Done","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"7b03e6172553185266b06293f2b4fc8a068f9809","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def test_rollback(self, bdms_mock):"},{"line_number":92,"context_line":"        self._generate_task()"},{"line_number":93,"context_line":"        quota_rollback \u003d mock.MagicMock()"},{"line_number":94,"context_line":"        quota_rollback.rollback \u003d mock.MagicMock()"},{"line_number":95,"context_line":"        self.task.quotas \u003d quota_rollback"},{"line_number":96,"context_line":"        self.task.rollback()"},{"line_number":97,"context_line":"        quota_rollback.rollback.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_0e90a994","line":94,"updated":"2015-07-06 15:25:50.000000000","message":"nit: mock are automatically create on attribute access","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"ce61f975e8b18fd3bbd87d23b6a5371ce96b89c1","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def test_rollback(self, bdms_mock):"},{"line_number":92,"context_line":"        self._generate_task()"},{"line_number":93,"context_line":"        quota_rollback \u003d mock.MagicMock()"},{"line_number":94,"context_line":"        quota_rollback.rollback \u003d mock.MagicMock()"},{"line_number":95,"context_line":"        self.task.quotas \u003d quota_rollback"},{"line_number":96,"context_line":"        self.task.rollback()"},{"line_number":97,"context_line":"        quota_rollback.rollback.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba3cc151_bfa51ab6","line":94,"in_reply_to":"ba3cc151_0e90a994","updated":"2015-07-07 14:04:09.000000000","message":"Done","commit_id":"a0831bc17005b3f3cce10b7fc8ee837964c3b4ad"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            scheduler_client.SchedulerClient())"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @mock.patch.object(utils, \u0027get_image_from_system_metadata\u0027,"},{"line_number":57,"context_line":"                                                        return_value\u003d\u0027image\u0027)"},{"line_number":58,"context_line":"    @mock.patch.object(scheduler_utils, \u0027build_request_spec\u0027)"},{"line_number":59,"context_line":"    @mock.patch.object(scheduler_utils, \u0027setup_instance_group\u0027)"},{"line_number":60,"context_line":"    @mock.patch.object(scheduler_client.SchedulerClient, \u0027select_destinations\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_456411e4","line":57,"updated":"2015-07-07 16:24:03.000000000","message":"nit: placing this right under `utils` on the previous line would probably make this more readable","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            scheduler_client.SchedulerClient())"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @mock.patch.object(utils, \u0027get_image_from_system_metadata\u0027,"},{"line_number":57,"context_line":"                                                        return_value\u003d\u0027image\u0027)"},{"line_number":58,"context_line":"    @mock.patch.object(scheduler_utils, \u0027build_request_spec\u0027)"},{"line_number":59,"context_line":"    @mock.patch.object(scheduler_utils, \u0027setup_instance_group\u0027)"},{"line_number":60,"context_line":"    @mock.patch.object(scheduler_client.SchedulerClient, \u0027select_destinations\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_c69c8b6c","line":57,"in_reply_to":"ba3cc151_456411e4","updated":"2015-07-08 10:42:40.000000000","message":"Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        bdms_mock.return_value \u003d fake_bdms"},{"line_number":70,"context_line":"        brs_mock.return_value \u003d self.request_spec"},{"line_number":71,"context_line":"        sel_dest_mock.return_value \u003d self.hosts"},{"line_number":72,"context_line":"        self._generate_task()"},{"line_number":73,"context_line":"        task \u003d self.task"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        task.execute()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_65f3550b","line":72,"updated":"2015-07-07 16:24:03.000000000","message":"nit: do we really need _generate_task() to set the \u0027task\u0027 attribute? just return the value maybe?","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        bdms_mock.return_value \u003d fake_bdms"},{"line_number":70,"context_line":"        brs_mock.return_value \u003d self.request_spec"},{"line_number":71,"context_line":"        sel_dest_mock.return_value \u003d self.hosts"},{"line_number":72,"context_line":"        self._generate_task()"},{"line_number":73,"context_line":"        task \u003d self.task"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        task.execute()"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_e6998f7a","line":72,"in_reply_to":"ba3cc151_65f3550b","updated":"2015-07-08 10:42:40.000000000","message":"Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"}],"nova/tests/unit/conductor/tasks/test_migrate_server.py":[{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"1a6f5d32f68d3f4c53ed1d8c89cdb7a66b3a165b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.assertEqual(True,"},{"line_number":71,"context_line":"                         task.scheduler_client.select_destinations.called)"},{"line_number":72,"context_line":"        self.assertEqual(True, check_can_resize_mock.called)"},{"line_number":73,"context_line":"        self.assertEqual(True, prep_resize_mock.called)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_6d32f3a8","line":73,"updated":"2015-06-18 12:47:21.000000000","message":"I think you should you here just assertTrue(...","commit_id":"e174957be38b9f6b06203c93abb50a71aa6f868c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"95e1513a92410e461ef8141a349b1f3827f4d2ee","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.assertEqual(True,"},{"line_number":71,"context_line":"                         task.scheduler_client.select_destinations.called)"},{"line_number":72,"context_line":"        self.assertEqual(True, check_can_resize_mock.called)"},{"line_number":73,"context_line":"        self.assertEqual(True, prep_resize_mock.called)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_cd7a1fbd","line":73,"in_reply_to":"fa32b979_6d32f3a8","updated":"2015-06-18 13:07:20.000000000","message":"Done","commit_id":"e174957be38b9f6b06203c93abb50a71aa6f868c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f4f58369824850bac217c9e24e40e005ab7d68e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova import utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class MigrationTaskTaskTestCase(test.TestCase):"},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(MigrationTaskTaskTestCase, self).setUp()"},{"line_number":31,"context_line":"        self.user_id \u003d \u0027fake\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_593fc786","line":28,"updated":"2015-06-24 16:49:16.000000000","message":"MigrationTaskTask? :)\n\n\nAlso, please derive from test.NoDBTestCase, not test.TestCase","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"d9b2d574131d5e282445c892bf014fcb6d6e7371","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from nova import utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class MigrationTaskTaskTestCase(test.TestCase):"},{"line_number":29,"context_line":"    def setUp(self):"},{"line_number":30,"context_line":"        super(MigrationTaskTaskTestCase, self).setUp()"},{"line_number":31,"context_line":"        self.user_id \u003d \u0027fake\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_ec235b56","line":28,"in_reply_to":"fa32b979_593fc786","updated":"2015-06-25 12:52:24.000000000","message":"Done","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5f4f58369824850bac217c9e24e40e005ab7d68e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.assertTrue(image_mock.called)"},{"line_number":67,"context_line":"        self.assertTrue(sig_mock.called)"},{"line_number":68,"context_line":"        self.assertTrue(task.scheduler_client.select_destinations.called)"},{"line_number":69,"context_line":"        self.assertTrue(prep_resize_mock.called)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_d97517fa","line":69,"updated":"2015-06-24 16:49:16.000000000","message":"Please change the above assertTrue(mock.called) assertions into calls that validate a *specific* set of call args.\n\nFor instance:\n\n task.scheduler_client.select_destinations.assert_called_once_with(...)","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"d9b2d574131d5e282445c892bf014fcb6d6e7371","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.assertTrue(image_mock.called)"},{"line_number":67,"context_line":"        self.assertTrue(sig_mock.called)"},{"line_number":68,"context_line":"        self.assertTrue(task.scheduler_client.select_destinations.called)"},{"line_number":69,"context_line":"        self.assertTrue(prep_resize_mock.called)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa32b979_e3a5a102","line":69,"in_reply_to":"fa32b979_d97517fa","updated":"2015-06-25 12:52:24.000000000","message":"Done","commit_id":"6cadccc3657d82f8bd66bc9a8eab01c14e1da218"}],"nova/tests/unit/conductor/test_conductor.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ea75bb749870669aef5b68d8727d91e53d9ab7be","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        filter_properties \u003d {\u0027limits\u0027: {},"},{"line_number":976,"context_line":"                             \u0027retry\u0027: {\u0027num_attempts\u0027: 1,"},{"line_number":977,"context_line":"                                       \u0027hosts\u0027: [[\u0027host1\u0027, None]]}}"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        self.conductor_manager.compute_rpcapi.prep_resize("},{"line_number":980,"context_line":"            self.context, \u0027image\u0027, mox.IsA(objects.Instance),"},{"line_number":981,"context_line":"            mox.IsA(objects.Flavor), \u0027host1\u0027, [], request_spec\u003drequest_spec,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a016987_e1cc6b36","side":"PARENT","line":978,"updated":"2015-05-25 13:25:25.000000000","message":"this change is unrelated","commit_id":"98f7e8dae391ddcf31d28fb002a525bbdba4cca7"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e74a23824098928b0523a668ea81aa1383c64927","unresolved":false,"context_lines":[{"line_number":975,"context_line":"        filter_properties \u003d {\u0027limits\u0027: {},"},{"line_number":976,"context_line":"                             \u0027retry\u0027: {\u0027num_attempts\u0027: 1,"},{"line_number":977,"context_line":"                                       \u0027hosts\u0027: [[\u0027host1\u0027, None]]}}"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":"        self.conductor_manager.compute_rpcapi.prep_resize("},{"line_number":980,"context_line":"            self.context, \u0027image\u0027, mox.IsA(objects.Instance),"},{"line_number":981,"context_line":"            mox.IsA(objects.Flavor), \u0027host1\u0027, [], request_spec\u003drequest_spec,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_fda2804a","side":"PARENT","line":978,"in_reply_to":"7a016987_e1cc6b36","updated":"2015-06-08 08:29:19.000000000","message":"Done","commit_id":"98f7e8dae391ddcf31d28fb002a525bbdba4cca7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ea75bb749870669aef5b68d8727d91e53d9ab7be","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"        expected_filter_props \u003d {\u0027retry\u0027: {\u0027num_attempts\u0027: 1,"},{"line_number":1863,"context_line":"                                 \u0027hosts\u0027: []}}"},{"line_number":1864,"context_line":""},{"line_number":1865,"context_line":"        self.conductor.compute_rpcapi.prep_resize("},{"line_number":1866,"context_line":"                self.context, image, inst_obj,"},{"line_number":1867,"context_line":"                \u0027flavor\u0027, hosts[0][\u0027host\u0027], [resvs],"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a016987_c1cf2f27","side":"PARENT","line":1864,"updated":"2015-05-25 13:25:25.000000000","message":"ditto","commit_id":"98f7e8dae391ddcf31d28fb002a525bbdba4cca7"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e74a23824098928b0523a668ea81aa1383c64927","unresolved":false,"context_lines":[{"line_number":1861,"context_line":""},{"line_number":1862,"context_line":"        expected_filter_props \u003d {\u0027retry\u0027: {\u0027num_attempts\u0027: 1,"},{"line_number":1863,"context_line":"                                 \u0027hosts\u0027: []}}"},{"line_number":1864,"context_line":""},{"line_number":1865,"context_line":"        self.conductor.compute_rpcapi.prep_resize("},{"line_number":1866,"context_line":"                self.context, image, inst_obj,"},{"line_number":1867,"context_line":"                \u0027flavor\u0027, hosts[0][\u0027host\u0027], [resvs],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_dd8a24bf","side":"PARENT","line":1864,"in_reply_to":"7a016987_c1cf2f27","updated":"2015-06-08 08:29:19.000000000","message":"Done","commit_id":"98f7e8dae391ddcf31d28fb002a525bbdba4cca7"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"cbf54b8e6168d580ab4fbd043210799ff74c5f11","unresolved":false,"context_lines":[{"line_number":987,"context_line":"            [mox.IsA(objects.Instance)],"},{"line_number":988,"context_line":"            instance_type\u003dmox.IsA(objects.Flavor)).AndReturn(request_spec)"},{"line_number":989,"context_line":"        task \u003d migrate.MigrationTask(self.context, inst_obj, flavor,"},{"line_number":990,"context_line":"                                            filter_properties, request_spec,"},{"line_number":991,"context_line":"                                            [], clean_shutdown\u003dclean_shutdown)"},{"line_number":992,"context_line":"        task.execute()"},{"line_number":993,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_5db3fe97","line":990,"updated":"2015-07-03 13:16:49.000000000","message":"nit: alignment...","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"bac82e66c63ece455a4e9b557636d972fe23dca5","unresolved":false,"context_lines":[{"line_number":987,"context_line":"            [mox.IsA(objects.Instance)],"},{"line_number":988,"context_line":"            instance_type\u003dmox.IsA(objects.Flavor)).AndReturn(request_spec)"},{"line_number":989,"context_line":"        task \u003d migrate.MigrationTask(self.context, inst_obj, flavor,"},{"line_number":990,"context_line":"                                            filter_properties, request_spec,"},{"line_number":991,"context_line":"                                            [], clean_shutdown\u003dclean_shutdown)"},{"line_number":992,"context_line":"        task.execute()"},{"line_number":993,"context_line":"        self.mox.ReplayAll()"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_6c009234","line":990,"in_reply_to":"ba3cc151_5db3fe97","updated":"2015-07-03 16:13:57.000000000","message":"Done","commit_id":"339f8cdaadafacbe7906c6056b43dd381449df94"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            self, rollback_mock, notify_mock, select_dest_mock, quotas_mock,"},{"line_number":1652,"context_line":"            metadata_mock, sig_mock, brs_mock, bdms_mock):"},{"line_number":1653,"context_line":"        quotas_mock_return_value \u003d mock.MagicMock()"},{"line_number":1654,"context_line":"        quotas_mock.return_value \u003d quotas_mock_return_value"},{"line_number":1655,"context_line":"        flavor \u003d flavors.get_flavor_by_name(\u0027m1.tiny\u0027)"},{"line_number":1656,"context_line":"        inst_obj \u003d objects.Instance("},{"line_number":1657,"context_line":"            image_ref\u003d\u0027fake-image_ref\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_a505ddc2","line":1654,"updated":"2015-07-07 16:24:03.000000000","message":"nit: the return value of quotas_mock() is already a mock, you don\u0027t have to define it explicitly","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":1651,"context_line":"            self, rollback_mock, notify_mock, select_dest_mock, quotas_mock,"},{"line_number":1652,"context_line":"            metadata_mock, sig_mock, brs_mock, bdms_mock):"},{"line_number":1653,"context_line":"        quotas_mock_return_value \u003d mock.MagicMock()"},{"line_number":1654,"context_line":"        quotas_mock.return_value \u003d quotas_mock_return_value"},{"line_number":1655,"context_line":"        flavor \u003d flavors.get_flavor_by_name(\u0027m1.tiny\u0027)"},{"line_number":1656,"context_line":"        inst_obj \u003d objects.Instance("},{"line_number":1657,"context_line":"            image_ref\u003d\u0027fake-image_ref\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_060ef33a","line":1654,"in_reply_to":"ba3cc151_a505ddc2","updated":"2015-07-08 10:42:40.000000000","message":"Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"0e7bab011b33ec22683912720aa8301d73571e59","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"            self, prep_resize_mock, rollback_mock, notify_mock,"},{"line_number":1837,"context_line":"            select_dest_mock, quotas_mock, metadata_mock, sig_mock, brs_mock,"},{"line_number":1838,"context_line":"            bdms_mock):"},{"line_number":1839,"context_line":"        quotas_mock_return_value \u003d mock.MagicMock()"},{"line_number":1840,"context_line":"        quotas_mock.return_value \u003d quotas_mock_return_value"},{"line_number":1841,"context_line":"        flavor \u003d flavors.get_flavor_by_name(\u0027m1.tiny\u0027)"},{"line_number":1842,"context_line":"        inst_obj \u003d objects.Instance("}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_a52cfd4a","line":1839,"updated":"2015-07-07 16:24:03.000000000","message":"ditto","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"540e9ae9ebfbb6443548aa1cfd33611c10353ab7","unresolved":false,"context_lines":[{"line_number":1836,"context_line":"            self, prep_resize_mock, rollback_mock, notify_mock,"},{"line_number":1837,"context_line":"            select_dest_mock, quotas_mock, metadata_mock, sig_mock, brs_mock,"},{"line_number":1838,"context_line":"            bdms_mock):"},{"line_number":1839,"context_line":"        quotas_mock_return_value \u003d mock.MagicMock()"},{"line_number":1840,"context_line":"        quotas_mock.return_value \u003d quotas_mock_return_value"},{"line_number":1841,"context_line":"        flavor \u003d flavors.get_flavor_by_name(\u0027m1.tiny\u0027)"},{"line_number":1842,"context_line":"        inst_obj \u003d objects.Instance("}],"source_content_type":"text/x-python","patch_set":20,"id":"ba3cc151_a61e276e","line":1839,"in_reply_to":"ba3cc151_a52cfd4a","updated":"2015-07-08 10:42:40.000000000","message":"Done","commit_id":"32db3e913bb14edb8f55c33176c349ef5a1d75cb"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5768789c3221aeceb67ec7a75330b6d62b971895","unresolved":false,"context_lines":[{"line_number":1764,"context_line":"                              side_effect\u003dexc.NoValidHost(reason\u003d\"\")),"},{"line_number":1765,"context_line":"            mock.patch.object(migrate.MigrationTask, \u0027rollback\u0027)"},{"line_number":1766,"context_line":"        ) as (image_mock, brs_mock, set_vm_mock, task_execute_mock,"},{"line_number":1767,"context_line":"                                                        task_rollback_mock):"},{"line_number":1768,"context_line":"            nvh \u003d self.assertRaises(exc.NoValidHost,"},{"line_number":1769,"context_line":"                                    self.conductor._cold_migrate, self.context,"},{"line_number":1770,"context_line":"                                    inst_obj, flavor, filter_props, [resvs],"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_65ffc301","line":1767,"updated":"2015-07-27 17:14:23.000000000","message":"nit: alignment on task_rollback_mock variable is off...","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"df01a15b9a9deb780ed95107f7b0f0896ba9764c","unresolved":false,"context_lines":[{"line_number":1764,"context_line":"                              side_effect\u003dexc.NoValidHost(reason\u003d\"\")),"},{"line_number":1765,"context_line":"            mock.patch.object(migrate.MigrationTask, \u0027rollback\u0027)"},{"line_number":1766,"context_line":"        ) as (image_mock, brs_mock, set_vm_mock, task_execute_mock,"},{"line_number":1767,"context_line":"                                                        task_rollback_mock):"},{"line_number":1768,"context_line":"            nvh \u003d self.assertRaises(exc.NoValidHost,"},{"line_number":1769,"context_line":"                                    self.conductor._cold_migrate, self.context,"},{"line_number":1770,"context_line":"                                    inst_obj, flavor, filter_props, [resvs],"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_663e46dc","line":1767,"in_reply_to":"3a50d1a3_65ffc301","updated":"2015-07-30 14:52:02.000000000","message":"Done","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5768789c3221aeceb67ec7a75330b6d62b971895","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"            node\u003dhosts[0][\u0027nodename\u0027], clean_shutdown\u003dTrue)"},{"line_number":1873,"context_line":"        notify_mock.assert_called_once_with(self.context, inst_obj.uuid,"},{"line_number":1874,"context_line":"                                              \u0027migrate_server\u0027, updates,"},{"line_number":1875,"context_line":"                                              exc_info, request_spec)"},{"line_number":1876,"context_line":"        rollback_mock.assert_called_once_with()"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"    def test_resize_no_valid_host_error_msg(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_050fdf2e","line":1875,"updated":"2015-07-27 17:14:23.000000000","message":"nit: alignment...","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"df01a15b9a9deb780ed95107f7b0f0896ba9764c","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"            node\u003dhosts[0][\u0027nodename\u0027], clean_shutdown\u003dTrue)"},{"line_number":1873,"context_line":"        notify_mock.assert_called_once_with(self.context, inst_obj.uuid,"},{"line_number":1874,"context_line":"                                              \u0027migrate_server\u0027, updates,"},{"line_number":1875,"context_line":"                                              exc_info, request_spec)"},{"line_number":1876,"context_line":"        rollback_mock.assert_called_once_with()"},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"    def test_resize_no_valid_host_error_msg(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a50d1a3_062422c4","line":1875,"in_reply_to":"3a50d1a3_050fdf2e","updated":"2015-07-30 14:52:02.000000000","message":"Done","commit_id":"5b9398b50e3892f98c37100903a6fbd465da6c44"}],"nova/virt/driver.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"3701c8880fd6c063bfe5beaea650187c0e98f177","unresolved":false,"context_lines":[{"line_number":537,"context_line":""},{"line_number":538,"context_line":"    def check_can_resize_instance(self, instance, flavor,"},{"line_number":539,"context_line":"                                  block_device_info\u003dNone):"},{"line_number":540,"context_line":"        \"\"\"Checks whether it possible to resize instance or not"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        \"\"\""},{"line_number":543,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_f41da462","line":540,"updated":"2015-05-20 14:01:02.000000000","message":"We should probably document it raises an exception, if an instance can\u0027t be resized","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"309a5de570000f63c8e50763532d705e9aff92cd","unresolved":false,"context_lines":[{"line_number":537,"context_line":""},{"line_number":538,"context_line":"    def check_can_resize_instance(self, instance, flavor,"},{"line_number":539,"context_line":"                                  block_device_info\u003dNone):"},{"line_number":540,"context_line":"        \"\"\"Checks whether it possible to resize instance or not"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"        \"\"\""},{"line_number":543,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_4f1bc1ca","line":540,"in_reply_to":"7a016987_f41da462","updated":"2015-05-20 14:58:39.000000000","message":"Done","commit_id":"0ddc8b5ccada2f57170c8b708f9acf293ca732d3"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ea75bb749870669aef5b68d8727d91e53d9ab7be","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        flavor."},{"line_number":543,"context_line":"        Raises MigrationPreCheckError in other insufficient conditions"},{"line_number":544,"context_line":"        :param context: the context for the migration/resize"},{"line_number":545,"context_line":"        :param instance: nova.objects.instance.Instance being migrated/resized"},{"line_number":546,"context_line":"        :param block_device_info: instance volume block device info"},{"line_number":547,"context_line":"        \"\"\""},{"line_number":548,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a016987_21df23d7","line":545,"updated":"2015-05-25 13:25:25.000000000","message":"what about the flavor param?","commit_id":"01acb1ddece5e2dc97bfafb498443e6e3b14ef5c"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e74a23824098928b0523a668ea81aa1383c64927","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        flavor."},{"line_number":543,"context_line":"        Raises MigrationPreCheckError in other insufficient conditions"},{"line_number":544,"context_line":"        :param context: the context for the migration/resize"},{"line_number":545,"context_line":"        :param instance: nova.objects.instance.Instance being migrated/resized"},{"line_number":546,"context_line":"        :param block_device_info: instance volume block device info"},{"line_number":547,"context_line":"        \"\"\""},{"line_number":548,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3afb71cf_5d9634f1","line":545,"in_reply_to":"7a016987_21df23d7","updated":"2015-06-08 08:29:19.000000000","message":"Done","commit_id":"01acb1ddece5e2dc97bfafb498443e6e3b14ef5c"}]}
