)]}'
{"nova/objects/compute_node.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"13bc82349da6bd05a37e6f42a65f88ba8e8b11df","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def destroy(self):"},{"line_number":278,"context_line":"        db.compute_node_delete(self._context, self.id)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @property"},{"line_number":281,"context_line":"    def service(self):"},{"line_number":282,"context_line":"        if not hasattr(self, \u0027_cached_service\u0027):"},{"line_number":283,"context_line":"            self._cached_service \u003d objects.Service.get_by_id(self._context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_2cd2a9d1","side":"PARENT","line":280,"updated":"2015-06-01 07:47:30.000000000","message":"if we are removing code then we need to at least bump the version. say i have a very old version of nova that is using this object and it access service then that will break","commit_id":"7be2c4c4754afbc06ecf8400aab8797a374fab03"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"3a8d2fefca7571b643cd99c8e726f3ff772bfc16","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def destroy(self):"},{"line_number":278,"context_line":"        db.compute_node_delete(self._context, self.id)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @property"},{"line_number":281,"context_line":"    def service(self):"},{"line_number":282,"context_line":"        if not hasattr(self, \u0027_cached_service\u0027):"},{"line_number":283,"context_line":"            self._cached_service \u003d objects.Service.get_by_id(self._context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_af89eb70","side":"PARENT","line":280,"in_reply_to":"7a016987_2cd2a9d1","updated":"2015-06-01 07:59:31.000000000","message":"That should not be necessary here. This is not a remotable interface so its just used (or in this case not used) by the current codebase. Older versions of this object still has the property and it will continue to work as before.","commit_id":"7be2c4c4754afbc06ecf8400aab8797a374fab03"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2c62647deecbcc7f53ad5bcf6aa6f968d3e97615","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def destroy(self):"},{"line_number":278,"context_line":"        db.compute_node_delete(self._context, self.id)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    @property"},{"line_number":281,"context_line":"    def service(self):"},{"line_number":282,"context_line":"        if not hasattr(self, \u0027_cached_service\u0027):"},{"line_number":283,"context_line":"            self._cached_service \u003d objects.Service.get_by_id(self._context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_f2ac6aee","side":"PARENT","line":280,"in_reply_to":"7a016987_af89eb70","updated":"2015-06-01 08:39:56.000000000","message":"Full agreement with what Hans explains : we only need to do version updates when it is declared as a remotable method.\n\nHere, we just need to make sure no callers are using the service attribute to the ComputeNode object (and as per my findings, yes since we modified the /hypervisors API resource to call the service objects instead of using the nested service field)","commit_id":"7be2c4c4754afbc06ecf8400aab8797a374fab03"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"13bc82349da6bd05a37e6f42a65f88ba8e8b11df","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return base.obj_make_list(context, cls(context), objects.ComputeNode,"},{"line_number":347,"context_line":"                                  db_computes)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    @classmethod"},{"line_number":350,"context_line":"    def get_by_service(cls, context, service, use_slave\u003dFalse):"},{"line_number":351,"context_line":"        return cls._get_by_service(context, service.id, use_slave\u003duse_slave)"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_0cb36d99","side":"PARENT","line":349,"updated":"2015-06-01 07:47:30.000000000","message":"same point as above","commit_id":"7be2c4c4754afbc06ecf8400aab8797a374fab03"},{"author":{"_account_id":6450,"name":"Hans Lindgren","email":"hanlind@kth.se","username":"hanlind"},"change_message_id":"3a8d2fefca7571b643cd99c8e726f3ff772bfc16","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return base.obj_make_list(context, cls(context), objects.ComputeNode,"},{"line_number":347,"context_line":"                                  db_computes)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    @classmethod"},{"line_number":350,"context_line":"    def get_by_service(cls, context, service, use_slave\u003dFalse):"},{"line_number":351,"context_line":"        return cls._get_by_service(context, service.id, use_slave\u003duse_slave)"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a016987_0f4ebf3a","side":"PARENT","line":349,"in_reply_to":"7a016987_0cb36d99","updated":"2015-06-01 07:59:31.000000000","message":"Same here. The remotable method _get_by_service() is kept though since that needs to stay in case an older client calls it.","commit_id":"7be2c4c4754afbc06ecf8400aab8797a374fab03"}]}
