)]}'
{"nova/scheduler/client.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"6c4dbc7dc400edd707b6b43ef0e81262a9a1d040","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.scheduler_rpcapi \u003d scheduler_rpcapi.SchedulerAPI()"},{"line_number":32,"context_line":"        # NOTE(sbauza): Conductor can initiate Scheduler client, we need"},{"line_number":33,"context_line":"        #               to handle circular dependency"},{"line_number":34,"context_line":"        if conductor is not False:"},{"line_number":35,"context_line":"            self.conductor_api \u003d importutils.import_object(\u0027nova.conductor.\u0027"},{"line_number":36,"context_line":"                                                           \u0027API\u0027)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2a371200","line":34,"updated":"2014-07-08 10:30:20.000000000","message":"if conductor:","commit_id":"9a31647a7745f1b9336f00f26be79845a73b43a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cea2daeab828592deff430638b70fafc578774b5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.scheduler_rpcapi \u003d scheduler_rpcapi.SchedulerAPI()"},{"line_number":32,"context_line":"        # NOTE(sbauza): Conductor can initiate Scheduler client, we need"},{"line_number":33,"context_line":"        #               to handle circular dependency"},{"line_number":34,"context_line":"        if conductor is not False:"},{"line_number":35,"context_line":"            self.conductor_api \u003d importutils.import_object(\u0027nova.conductor.\u0027"},{"line_number":36,"context_line":"                                                           \u0027API\u0027)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_4cd45f47","line":34,"in_reply_to":"baada198_2a371200","updated":"2014-07-08 12:29:53.000000000","message":"well, I prefer explicit conditionals as \u0027if foo\u0027 is just verifying if foo is in memory. Here, we check that foo is a boolean with True value.","commit_id":"9a31647a7745f1b9336f00f26be79845a73b43a1"},{"author":{"_account_id":9550,"name":"Eugeniya Kudryashova","email":"ekudryashova@mirantis.com","username":"ekudryashova"},"change_message_id":"30dd764a4f5d18214c5d8ae798f8d583d9e60303","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.scheduler_rpcapi \u003d scheduler_rpcapi.SchedulerAPI()"},{"line_number":32,"context_line":"        # NOTE(sbauza): Conductor can initiate Scheduler client, we need"},{"line_number":33,"context_line":"        #               to handle circular dependency"},{"line_number":34,"context_line":"        if conductor is not False:"},{"line_number":35,"context_line":"            self.conductor_api \u003d importutils.import_object(\u0027nova.conductor.\u0027"},{"line_number":36,"context_line":"                                                           \u0027API\u0027)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_c8940d39","line":34,"in_reply_to":"baada198_4cd45f47","updated":"2014-07-14 16:50:10.000000000","message":"If so, maybe check \u0027if conductor is True\u0027 will be more readable?","commit_id":"9a31647a7745f1b9336f00f26be79845a73b43a1"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"55cfc36bb9de825bd82a2396374602149eca7bde","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        # NOTE(sbauza): Conductor can initiate Scheduler client, we need"},{"line_number":33,"context_line":"        #               to handle circular dependency"},{"line_number":34,"context_line":"        if conductor is True:"},{"line_number":35,"context_line":"            self.conductor_api \u003d importutils.import_object(\u0027nova.conductor.\u0027"},{"line_number":36,"context_line":"                                                           \u0027API\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def select_destinations(self, context, request_spec, filter_properties):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_de040a17","line":35,"updated":"2014-07-18 13:44:22.000000000","message":"doh... thats annoying.\n\nI think we should actually split this into two classes then...\n\nSchedulerReportClient and SchedulerQueryClient?\n\nThat would follow this OO principle:\nhttp://en.wikipedia.org/wiki/Interface_segregation_principle","commit_id":"f711e96dde80a69a94ec5e7cddb634991407b3ec"}],"nova/scheduler/client/__init__.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e6260f85d8645d2154122d2354a36ae56c98e77","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"Client library for placing calls to the scheduler.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def select_destinations(self, context, request_spec, filter_properties):"},{"line_number":33,"context_line":"        instance \u003d importutils.import_object(\u0027nova.scheduler.client.query.\u0027"},{"line_number":34,"context_line":"                                             \u0027SchedulerQueryClient\u0027)"},{"line_number":35,"context_line":"        return instance.select_destinations("},{"line_number":36,"context_line":"            context, request_spec, filter_properties)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e2a8d7db","line":33,"updated":"2014-07-22 10:47:24.000000000","message":"instance is a bit miss leading because instance is used to mean VM in lots of places.\n\nMaybe scheduler query client?","commit_id":"ffa1155729ed0b1c5c235fbdbe2e7f0901f13510"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b7960c69898269a7ee2c7e59be2f4ac19b85cc61","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"Client library for placing calls to the scheduler.\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def select_destinations(self, context, request_spec, filter_properties):"},{"line_number":33,"context_line":"        instance \u003d importutils.import_object(\u0027nova.scheduler.client.query.\u0027"},{"line_number":34,"context_line":"                                             \u0027SchedulerQueryClient\u0027)"},{"line_number":35,"context_line":"        return instance.select_destinations("},{"line_number":36,"context_line":"            context, request_spec, filter_properties)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f3198724","line":33,"in_reply_to":"baada198_e2a8d7db","updated":"2014-07-22 12:06:18.000000000","message":"sure","commit_id":"ffa1155729ed0b1c5c235fbdbe2e7f0901f13510"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e6260f85d8645d2154122d2354a36ae56c98e77","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def update_resource_stats(self, context, name, stats):"},{"line_number":39,"context_line":"        instance \u003d importutils.import_object(\u0027nova.scheduler.client.report.\u0027"},{"line_number":40,"context_line":"                                             \u0027SchedulerReportClient\u0027)"},{"line_number":41,"context_line":"        instance.update_resource_stats(context, name, stats)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c2d91386","line":40,"updated":"2014-07-22 10:47:24.000000000","message":"I don\u0027t think importing every time is going to be a good idea in the long run. if you want the client to do caching, etc, its going to be very hard this way.\n\nWhy not save the two clients in this object, and only load if they have not yet been loaded?","commit_id":"ffa1155729ed0b1c5c235fbdbe2e7f0901f13510"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b7960c69898269a7ee2c7e59be2f4ac19b85cc61","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def update_resource_stats(self, context, name, stats):"},{"line_number":39,"context_line":"        instance \u003d importutils.import_object(\u0027nova.scheduler.client.report.\u0027"},{"line_number":40,"context_line":"                                             \u0027SchedulerReportClient\u0027)"},{"line_number":41,"context_line":"        instance.update_resource_stats(context, name, stats)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_73bc97dc","line":40,"in_reply_to":"baada198_c2d91386","updated":"2014-07-22 12:06:18.000000000","message":"you probably missed the metaclass from each class which provides a singleton. That\u0027s another way for making sure we load only the first time.\n\nI\u0027ll provide another patchset with a Lazy loader so you can let me know if this is better for you.","commit_id":"ffa1155729ed0b1c5c235fbdbe2e7f0901f13510"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2c617bb1206c71834b07a120b4c128b67cea116a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.queryclient \u003d LazyLoader(importutils.import_class("},{"line_number":43,"context_line":"            \u0027nova.scheduler.client.query.SchedulerQueryClient\u0027))"},{"line_number":44,"context_line":"        self.reportclient \u003d LazyLoader(importutils.import_class("},{"line_number":45,"context_line":"            \u0027nova.scheduler.client.report.SchedulerReportClient\u0027))"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def select_destinations(self, context, request_spec, filter_properties):"},{"line_number":48,"context_line":"        return self.queryclient.select_destinations("}],"source_content_type":"text/x-python","patch_set":14,"id":"1abeadc6_c65e1ee9","line":45,"updated":"2014-08-27 13:45:02.000000000","message":"Its fairly evil we need this, but we need it for now I guess.","commit_id":"b16cd4548d803318e33acd3b89707569e63d449b"}],"nova/scheduler/client/report.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"568e0c4a6209e55fe65cfbb9f680268748411935","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from nova import conductor"},{"line_number":18,"context_line":"from nova import exception"},{"line_number":19,"context_line":"from nova.i18n import _LI"}],"source_content_type":"text/x-python","patch_set":12,"id":"baada198_b71ddbc0","line":16,"updated":"2014-07-31 11:35:08.000000000","message":"Unrelated changes","commit_id":"424c3c219b6eb36ff76422c20d62a9975ef09a63"}]}
