)]}'
{"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"29f797797f8e72882f2d8e2fdf8a6f27993b2f1c","unresolved":false,"context_lines":[{"line_number":2059,"context_line":"        :param body: Query rules for the alarms to be returned."},{"line_number":2060,"context_line":"        \"\"\""},{"line_number":2061,"context_line":"        query \u003d ValidatedComplexQuery(body)"},{"line_number":2062,"context_line":"        query.validate(visibility_field\u003d\"project_id\")"},{"line_number":2063,"context_line":"        conn \u003d pecan.request.storage_conn"},{"line_number":2064,"context_line":"        return [Alarm.from_db_model(s)"},{"line_number":2065,"context_line":"                for s in conn.query_alarms(query.filter_expr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2Frnw%3D","line":2062,"updated":"2014-02-13 16:07:10.000000000","message":"i probably should\u0027ve asked this in previous patch but what\u0027s this visibility_field hardcoded value for?","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"7a88b4c2088930303636577b0d42a349d2d5d65f","unresolved":false,"context_lines":[{"line_number":2059,"context_line":"        :param body: Query rules for the alarms to be returned."},{"line_number":2060,"context_line":"        \"\"\""},{"line_number":2061,"context_line":"        query \u003d ValidatedComplexQuery(body)"},{"line_number":2062,"context_line":"        query.validate(visibility_field\u003d\"project_id\")"},{"line_number":2063,"context_line":"        conn \u003d pecan.request.storage_conn"},{"line_number":2064,"context_line":"        return [Alarm.from_db_model(s)"},{"line_number":2065,"context_line":"                for s in conn.query_alarms(query.filter_expr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FX2Q%3D","line":2062,"in_reply_to":"AAAAUX%2F%2FYIA%3D","updated":"2014-02-13 17:27:59.000000000","message":"As the parametrization is already in the samples patch, and Eoghan pointed why it is needed, I would keep it, if it is ok with you too.","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"53b7a55cdd00bbc7c219db6645bdc06ca22b6164","unresolved":false,"context_lines":[{"line_number":2059,"context_line":"        :param body: Query rules for the alarms to be returned."},{"line_number":2060,"context_line":"        \"\"\""},{"line_number":2061,"context_line":"        query \u003d ValidatedComplexQuery(body)"},{"line_number":2062,"context_line":"        query.validate(visibility_field\u003d\"project_id\")"},{"line_number":2063,"context_line":"        conn \u003d pecan.request.storage_conn"},{"line_number":2064,"context_line":"        return [Alarm.from_db_model(s)"},{"line_number":2065,"context_line":"                for s in conn.query_alarms(query.filter_expr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FYIA%3D","line":2062,"in_reply_to":"AAAAUX%2F%2Frnw%3D","updated":"2014-02-13 16:17:43.000000000","message":"It\u0027s parameterized here so that it can be set to \u0027on_behalf_of\u0027 in the subsequent alarm history patch:\n\n  https://review.openstack.org/#/c/62159/15/ceilometer/api/controllers/v2.py\n\nArguable whether to keep the parameterization in this patch, or just introduce that flexibility in the next.","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"41bd75326bd6f387a806e2e080a47c9bfb8da8b9","unresolved":false,"context_lines":[{"line_number":1052,"context_line":"            a.update(alarm)"},{"line_number":1053,"context_line":"            del a[\u0027_id\u0027]"},{"line_number":1054,"context_line":"            self._ensure_encapsulated_rule_format(a)"},{"line_number":1055,"context_line":"            yield models.Alarm(**a)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FFiA%3D","line":1055,"updated":"2014-01-17 15:39:04.000000000","message":"Nitpick: can the copy\u0027n\u0027paste between this method and get_alarms be rationalized any?","commit_id":"92146b1d949bae1ade3aa28bb33c95dd7c7daf0b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9db1967def20d3206ebe7f6ad23775fc55010313","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                                      [(\"timestamp\", pymongo.DESCENDING)],"},{"line_number":780,"context_line":"                                      limit)"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    def _retrieve_data(self, filter_expr, orderby, limit, table):"},{"line_number":783,"context_line":"        if limit \u003d\u003d 0:"},{"line_number":784,"context_line":"            return []"},{"line_number":785,"context_line":"        query_filter \u003d {}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FYdc%3D","line":782,"updated":"2014-02-13 15:52:42.000000000","message":"\"table\" is a bit SQLesque for the mongo driver.\n\nHow about: s/table/model/","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"7a88b4c2088930303636577b0d42a349d2d5d65f","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                                      [(\"timestamp\", pymongo.DESCENDING)],"},{"line_number":780,"context_line":"                                      limit)"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    def _retrieve_data(self, filter_expr, orderby, limit, table):"},{"line_number":783,"context_line":"        if limit \u003d\u003d 0:"},{"line_number":784,"context_line":"            return []"},{"line_number":785,"context_line":"        query_filter \u003d {}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FX1U%3D","line":782,"in_reply_to":"AAAAUX%2F%2FYdc%3D","updated":"2014-02-13 17:27:59.000000000","message":"Done","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9db1967def20d3206ebe7f6ad23775fc55010313","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        if table \u003d\u003d models.Meter:"},{"line_number":794,"context_line":"            return self._retrieve_samples(query_filter, orderby_filter, limit)"},{"line_number":795,"context_line":"        if table \u003d\u003d models.Alarm:"},{"line_number":796,"context_line":"            return self._retrieve_alarms(query_filter, orderby_filter, limit)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    def query_samples(self, filter_expr\u003dNone, orderby\u003dNone, limit\u003dNone):"},{"line_number":799,"context_line":"        return self._retrieve_data(filter_expr, orderby, limit, models.Meter)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FYoI%3D","line":796,"updated":"2014-02-13 15:52:42.000000000","message":"Clearer/more pythonic as?\n \n  retrieve \u003d {models.Meter: self._retrieve_samples,\n              models.Alarm: self._retrieve_alarms}\n  return retrieve[model](query_filter, orderby_filter, limit)","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"7a88b4c2088930303636577b0d42a349d2d5d65f","unresolved":false,"context_lines":[{"line_number":793,"context_line":"        if table \u003d\u003d models.Meter:"},{"line_number":794,"context_line":"            return self._retrieve_samples(query_filter, orderby_filter, limit)"},{"line_number":795,"context_line":"        if table \u003d\u003d models.Alarm:"},{"line_number":796,"context_line":"            return self._retrieve_alarms(query_filter, orderby_filter, limit)"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"    def query_samples(self, filter_expr\u003dNone, orderby\u003dNone, limit\u003dNone):"},{"line_number":799,"context_line":"        return self._retrieve_data(filter_expr, orderby, limit, models.Meter)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FXz0%3D","line":796,"in_reply_to":"AAAAUX%2F%2FYoI%3D","updated":"2014-02-13 17:27:59.000000000","message":"Done","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"29f797797f8e72882f2d8e2fdf8a6f27993b2f1c","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"        \"\"\""},{"line_number":1071,"context_line":"        self.db.alarm_history.insert(alarm_change)"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":"    def query_alarms(self, filter_expr\u003dNone, orderby\u003dNone, limit\u003dNone):"},{"line_number":1074,"context_line":"        \"\"\"Return an iterable of model.Alarm objects."},{"line_number":1075,"context_line":"        \"\"\""},{"line_number":1076,"context_line":"        return self._retrieve_data(filter_expr, orderby, limit, models.Alarm)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FrNg%3D","line":1073,"updated":"2014-02-13 16:07:10.000000000","message":"should filter_expr default to {} and orderby default to []? just asking because that\u0027s what we default on line 982 and 994","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"7a88b4c2088930303636577b0d42a349d2d5d65f","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"        \"\"\""},{"line_number":1071,"context_line":"        self.db.alarm_history.insert(alarm_change)"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":"    def query_alarms(self, filter_expr\u003dNone, orderby\u003dNone, limit\u003dNone):"},{"line_number":1074,"context_line":"        \"\"\"Return an iterable of model.Alarm objects."},{"line_number":1075,"context_line":"        \"\"\""},{"line_number":1076,"context_line":"        return self._retrieve_data(filter_expr, orderby, limit, models.Alarm)"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FXvE%3D","line":1073,"in_reply_to":"AAAAUX%2F%2FrNg%3D","updated":"2014-02-13 17:27:59.000000000","message":"This function calls the _retrieve_data function, instead of the _retrieve_samples, which is called by the get_alarms function. That is why the default values are different.","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"35d7aec7e9af36eb2ac1407f0f21d3c5a1af0fbe","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        alarm[\u0027rule\u0027][\u0027query\u0027] \u003d query"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def _retrieve_alarms(self, query_filter, orderby, limit):"},{"line_number":953,"context_line":"        if limit is not None:"},{"line_number":954,"context_line":"            alarms \u003d self.db.alarm.find(query_filter,"},{"line_number":955,"context_line":"                                        limit\u003dlimit,"},{"line_number":956,"context_line":"                                        sort\u003dorderby)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2FANY%3D","line":953,"updated":"2014-02-17 17:49:28.000000000","message":"i think you can just default limit to 0 if not set... if 0, it\u0027ll represent no limit according to docs... that way we can get rid of this if/else clause.\n\nwe can also fix it in retrieve_samples too since a limit of 0 makes no logical sense anyways. that said, if you think there\u0027s a reason for limit\u003d0 then please let me know.\n\nhttp://api.mongodb.org/python/current/api/pymongo/cursor.html#pymongo.cursor.Cursor.limit","commit_id":"ff83a9d1ea231ad4648e0f8b10068497a983f503"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"fe6cfa4b9eb97ffc2710ac0c16673c0e79ce726c","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        alarm[\u0027rule\u0027][\u0027query\u0027] \u003d query"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def _retrieve_alarms(self, query_filter, orderby, limit):"},{"line_number":953,"context_line":"        if limit is not None:"},{"line_number":954,"context_line":"            alarms \u003d self.db.alarm.find(query_filter,"},{"line_number":955,"context_line":"                                        limit\u003dlimit,"},{"line_number":956,"context_line":"                                        sort\u003dorderby)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2B%2FFU%3D","line":953,"in_reply_to":"AAAAUX%2F%2FACc%3D","updated":"2014-02-17 19:58:33.000000000","message":"i don\u0027t think it\u0027ll change legacy behaviour since get_samples will break out and skip retrieve_samples anyways...\n\ni\u0027d personally prefer 0 to be ignored as mongo does it but since mysql does the opposite i guess this is what it is.","commit_id":"ff83a9d1ea231ad4648e0f8b10068497a983f503"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"63109a571771faffbd28fe0b6d450d4fbe7f2c7f","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        alarm[\u0027rule\u0027][\u0027query\u0027] \u003d query"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def _retrieve_alarms(self, query_filter, orderby, limit):"},{"line_number":953,"context_line":"        if limit is not None:"},{"line_number":954,"context_line":"            alarms \u003d self.db.alarm.find(query_filter,"},{"line_number":955,"context_line":"                                        limit\u003dlimit,"},{"line_number":956,"context_line":"                                        sort\u003dorderby)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2FACc%3D","line":953,"in_reply_to":"AAAAUX%2F%2FAH0%3D","updated":"2014-02-17 18:06:46.000000000","message":"One additional thing is that we do not want to change legacy behavior, by using 0 as default value for limit.","commit_id":"ff83a9d1ea231ad4648e0f8b10068497a983f503"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"b6f6f873c9b65fa7e61259e5ecc6979f3ce7b955","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        alarm[\u0027rule\u0027][\u0027query\u0027] \u003d query"},{"line_number":951,"context_line":""},{"line_number":952,"context_line":"    def _retrieve_alarms(self, query_filter, orderby, limit):"},{"line_number":953,"context_line":"        if limit is not None:"},{"line_number":954,"context_line":"            alarms \u003d self.db.alarm.find(query_filter,"},{"line_number":955,"context_line":"                                        limit\u003dlimit,"},{"line_number":956,"context_line":"                                        sort\u003dorderby)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUX%2F%2FAH0%3D","line":953,"in_reply_to":"AAAAUX%2F%2FANY%3D","updated":"2014-02-17 17:57:12.000000000","message":"But in get_samples, if limit is set to 0, then it will return an empty list: https://github.com/openstack/ceilometer/blob/master/ceilometer/storage/impl_mongodb.py#L774","commit_id":"ff83a9d1ea231ad4648e0f8b10068497a983f503"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"9db1967def20d3206ebe7f6ad23775fc55010313","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                                                      orderby,"},{"line_number":604,"context_line":"                                                      limit,"},{"line_number":605,"context_line":"                                                      table)"},{"line_number":606,"context_line":"            return (self._row_to_alarm_model(x) for x in query.all())"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def query_samples(self, filter_expr\u003dNone, orderby\u003dNone, limit\u003dNone):"},{"line_number":609,"context_line":"        return self._retrieve_data(filter_expr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FYig%3D","line":606,"updated":"2014-02-13 15:52:42.000000000","message":"I\u0027m not loving how this code is structured, a little asymmetric around samples versus alarms, unlike the mongo code.\n\nAlso _additional_options_to_query is a little long-winded.\n\nHow about adding a method _retrieve_alarms as an analogue to _retrieve_samples?\n\nSomething like:\n\n  def _retrieve_alarms(self, query, orderby, limit, model):\n      query \u003d self._apply_options(query, orderby, limit, model)\n      return (self._row_to_alarm_model(x) for x in query.all())\n\n  ...\n\n    retrieve \u003d {models.Meter: self._retrieve_samples,\n                models.Alarm: self._retrieve_alarms}\n    return retrieve[model](query, orderby, limit, model)","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"7a88b4c2088930303636577b0d42a349d2d5d65f","unresolved":false,"context_lines":[{"line_number":603,"context_line":"                                                      orderby,"},{"line_number":604,"context_line":"                                                      limit,"},{"line_number":605,"context_line":"                                                      table)"},{"line_number":606,"context_line":"            return (self._row_to_alarm_model(x) for x in query.all())"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"    def query_samples(self, filter_expr\u003dNone, orderby\u003dNone, limit\u003dNone):"},{"line_number":609,"context_line":"        return self._retrieve_data(filter_expr,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUX%2F%2FXlM%3D","line":606,"in_reply_to":"AAAAUX%2F%2FYig%3D","updated":"2014-02-13 17:27:59.000000000","message":"Done","commit_id":"4776273dfc604f11e8ec980a3b19923878ead268"}]}
