)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"7a201b1c297f70886a2e508d73a67d5d1a58e139","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix the return of statistic with getting no sample"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In mysql scenario, when getting statistics with getting no"},{"line_number":10,"context_line":"sample(this can be presented withinvalid sample filter), ceilometer"},{"line_number":11,"context_line":"will raise an error about NoneType."},{"line_number":12,"context_line":"like other API of ceilometer, it should return a empty list."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAWH%2F946Y%3D","line":10,"updated":"2014-04-01 11:58:49.000000000","message":"I think there is typo here. Could you correct it, please?","commit_id":"8205dc3f999f7501615e3aab856f479ae75d2e88"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"70a18e9301fe1dfa46ae733b0a24eebb518d7050","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix the return of statistic with getting no sample"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In mysql scenario, when getting statistics with getting no"},{"line_number":10,"context_line":"sample(this can be presented withinvalid sample filter), ceilometer"},{"line_number":11,"context_line":"will raise an error about NoneType."},{"line_number":12,"context_line":"like other API of ceilometer, it should return a empty list."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAWH%2F94KU%3D","line":10,"in_reply_to":"AAAAWH%2F946Y%3D","updated":"2014-04-01 13:42:20.000000000","message":"thanks","commit_id":"8205dc3f999f7501615e3aab856f479ae75d2e88"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"6110e9aaad704d77cda8c039e1281363c3e90cbe","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the return of statistic with getting no sample"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In mysql scenario, when getting statistics with no sample"},{"line_number":10,"context_line":"(this can be presented with invalid sample filter), ceilometer"},{"line_number":11,"context_line":"will raise an error about NoneType."},{"line_number":12,"context_line":"Like other API of ceilometer, it should return a empty list."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAWn%2F%2F9Kk%3D","line":9,"updated":"2014-04-08 09:11:11.000000000","message":"Is it really \u0027invalid\u0027 filter? As I understood in the scenario you are describing filter just doesn\u0027t contain start or end or both. If filter is \u0027invalid\u0027 we should fix validation not db-related-code","commit_id":"978af00edbcd4097cb4bb585a8fac90c1b049a61"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"66b6de550c4eebf14a172c691a4fab6f960865fd","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the return of statistic with getting no sample"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In mysql scenario, when getting statistics with no sample"},{"line_number":10,"context_line":"(this can be presented with invalid sample filter), ceilometer"},{"line_number":11,"context_line":"will raise an error about NoneType."},{"line_number":12,"context_line":"Like other API of ceilometer, it should return a empty list."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAW3%2F%2FgUs%3D","line":9,"in_reply_to":"AAAAWn%2F%2F9Kk%3D","updated":"2014-04-14 06:32:02.000000000","message":"“invalid” filter here means no sample can be get with the \"filter\", such as \"user\u003duser-not-exists\".\n\nit would better use \"invalid value of filters\" :)","commit_id":"978af00edbcd4097cb4bb585a8fac90c1b049a61"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"6110e9aaad704d77cda8c039e1281363c3e90cbe","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In mysql scenario, when getting statistics with no sample"},{"line_number":10,"context_line":"(this can be presented with invalid sample filter), ceilometer"},{"line_number":11,"context_line":"will raise an error about NoneType."},{"line_number":12,"context_line":"Like other API of ceilometer, it should return a empty list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I07cbc3f03f7a5e6751e6851f14ed1cdc16ee4a4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAWn%2F%2F9Jw%3D","line":11,"updated":"2014-04-08 09:11:11.000000000","message":"\u0027a empty list\u0027 \u003d\u003e \u0027an empty list\u0027","commit_id":"978af00edbcd4097cb4bb585a8fac90c1b049a61"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"66b6de550c4eebf14a172c691a4fab6f960865fd","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In mysql scenario, when getting statistics with no sample"},{"line_number":10,"context_line":"(this can be presented with invalid sample filter), ceilometer"},{"line_number":11,"context_line":"will raise an error about NoneType."},{"line_number":12,"context_line":"Like other API of ceilometer, it should return a empty list."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I07cbc3f03f7a5e6751e6851f14ed1cdc16ee4a4c"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAW3%2F%2FgUo%3D","line":11,"in_reply_to":"AAAAWn%2F%2F9Jw%3D","updated":"2014-04-14 06:32:02.000000000","message":"Done","commit_id":"978af00edbcd4097cb4bb585a8fac90c1b049a61"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"d998cbcf16a2e6a903ab92eb4fd225fa214f77d3","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                sample_filter.end or res.tsmax,"},{"line_number":817,"context_line":"                period):"},{"line_number":818,"context_line":"            q \u003d query.filter(models.Sample.timestamp \u003e\u003d period_start)"},{"line_number":819,"context_line":"            q \u003d q.filter(models.Sample.timestamp \u003c period_end)"},{"line_number":820,"context_line":"            for r in q.all():"},{"line_number":821,"context_line":"                if r.count:"},{"line_number":822,"context_line":"                    yield self._stats_result_to_model("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FNCc%3D","line":819,"updated":"2014-03-19 13:40:35.000000000","message":"What if r.count is never \u003e 0? Should we add any fix here? Could you please add the test that will check this part of code and all r.count is 0","commit_id":"189584c79ed4e7e954023002d75bcfd84d8b81c5"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"a3dd2924fa4d42d93225fac093c5f324a6bc5664","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                sample_filter.end or res.tsmax,"},{"line_number":817,"context_line":"                period):"},{"line_number":818,"context_line":"            q \u003d query.filter(models.Sample.timestamp \u003e\u003d period_start)"},{"line_number":819,"context_line":"            q \u003d q.filter(models.Sample.timestamp \u003c period_end)"},{"line_number":820,"context_line":"            for r in q.all():"},{"line_number":821,"context_line":"                if r.count:"},{"line_number":822,"context_line":"                    yield self._stats_result_to_model("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2B8I0%3D","line":819,"in_reply_to":"AAAAWH%2F%2FAA4%3D","updated":"2014-03-21 14:42:31.000000000","message":"hm, I think the problem is in  line (sample_filter.start or res.tsmin, sample_filter.end or res.tsmax,). Looks line  res.tsmin and res.tsmax is always None. In this case the \"new\" bug that you described can be explained. Could you please check this? Because I think that your current fix resolves the bug partially","commit_id":"189584c79ed4e7e954023002d75bcfd84d8b81c5"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"dc9355db53e6e59a90833f056d87b0580243adc0","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                sample_filter.end or res.tsmax,"},{"line_number":817,"context_line":"                period):"},{"line_number":818,"context_line":"            q \u003d query.filter(models.Sample.timestamp \u003e\u003d period_start)"},{"line_number":819,"context_line":"            q \u003d q.filter(models.Sample.timestamp \u003c period_end)"},{"line_number":820,"context_line":"            for r in q.all():"},{"line_number":821,"context_line":"                if r.count:"},{"line_number":822,"context_line":"                    yield self._stats_result_to_model("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2FAA4%3D","line":819,"in_reply_to":"AAAAWH%2F%2FNCc%3D","updated":"2014-03-21 01:58:36.000000000","message":"thanks for your reviewing\n\nthe res.count is to judge if there is any sample in db.\n\nas your said if the r.count always is 0, the statistics will be an empty list,you can use the following command to verify it:\n\nceilometer statistics -m instance -p 36000 -q \"start\u003d2012-03-20T04:07:57;end\u003d2013-03-10T06:17:57\"\n\nhere,you can ignore the for cyclic sentence of \"for r in q.all()\",because the q.all() always has only 1 item.\n\nIn conclusion, IMHO this patch can solve the bug.\n\nbut, additionally, I have find a problem, if I use command:\n\nceilometer statistics -m instance -p 36000 -q \"start\u003d2012-03-20T04:07:57;end\u003d2014-03-20T06:17:57\"\n\nthe outer loop(for period_start, period_end...) will also loop the 2012-2014 year.\n\nthis should loop from the res.tsmin. I will report the bug:)\n\nMy Best\n\nliusheng","commit_id":"189584c79ed4e7e954023002d75bcfd84d8b81c5"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"3e296358f6edfd85cc3fbd36d600d19210102af9","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BC6g%3D","line":743,"updated":"2014-03-31 10:17:36.000000000","message":"I think that we should use smth like:\nquery \u003d self._make_stats_query(sample_filter, None, aggregate)\ncount \u003d query.count()\nif count \u003d\u003d 0:\n   return\nres \u003d query.first() \u003c- btw, I wonder, why only first?\n....","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fad1814324002945fd7ca94942efc1479807ee69","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F98S4%3D","line":743,"in_reply_to":"AAAAWH%2F%2BC6g%3D","updated":"2014-04-01 03:48:07.000000000","message":"* thanks for your comments, here we can\u0027t use the count, with selectable aggregates, the res.count may or may not exist.\n* res \u003d query.first(), I think this is because the query is base on aggregates, the result of query is a list with 1 item (the paremeter \"goupby\" is none).\nthe return of query.all() like this:\n  [(u\u0027instance\u0027, datetime.datetime(2014, 4, 1, 1, 46, 21), datetime.datetime(2014, 4, 1, 3, 10, 10), 24L, 1.0, 24.0, 1.0, 1.0)]\n\nso the first() can get the only item.","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"940b2f408a50a1a320c9489562a21ce960ebab11","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F9trE%3D","line":743,"in_reply_to":"AAAAWH%2F95Uk%3D","updated":"2014-04-02 16:14:54.000000000","message":"Yep! It\u0027s very strange for me that count \u003d\u003d 1 with [(None, None, None, None)]. Looks wrong for me. As for me one of these Nones was compared with user\u003dnot-exists-user and this entry (None, None, None, None) was considered as matching to request (None \u003d\u003d not-exists-user returns True). \nIf the behaviour is as above then we cannot apply fix that you propose. Because in some other backend  None\u003d\u003dnot-exists-user returns False and res.tsmin may produce \"None is not None\" error. The same situation as Gordon described earlier with res.count.","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"ffc748088eff51b9f8484d865c36f8d7859b4c83","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F95Uk%3D","line":743,"in_reply_to":"AAAAWH%2F96iQ%3D","updated":"2014-04-01 11:17:15.000000000","message":"sorry for my mistake. thanks\n\nbut IMHO, I think self._make_stats_query(sample_filter, None, aggregate).count() is also not reasonable.\n\nI have pdb the code like this:\n\nstep1:  I run command:\n    ceilometer statistics -m instance -q \"start\u003d2014-04-01T02:10:12;user\u003dnot-exists-user\" -p 600 -a sum\n\nstep2: I pdb the code like belows:\n\n\u003e /opt/stack/ceilometer/ceilometer/storage/impl_sqlalchemy.py(744)get_meter_statistics()\n\n-\u003e if not sample_filter.start or not sample_filter.end:\n\n(Pdb) p self._make_stats_query(sample_filter,None,aggregate).count()\n\n1L\n\n(Pdb) p self._make_stats_query(sample_filter,None,aggregate).first()\n\n(None, None, None, None)\n\n(Pdb) p self._make_stats_query(sample_filter,None,aggregate).all()\n\n[(None, None, None, None)]\n\nyou can see, here I specified an non-exist user, the self._make_stats_query(sample_filter,None,aggregate).count()\nis \"1L\",because the query contain a item. we should return in this situation.\n\nhere the return of first():(None, None, None, None) is corresponding to (\u0027unit\u0027, \u0027tsmin\u0027, \u0027tsmax\u0027, \u0027sum\u0027)\n\nSo here it would better use \"if not res.tsmin or not res.tsmax:\"\n\nMy Best\n\nliu sheng","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"e9e66a8a9ced346404514e6ec3e4d665e8f171ea","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F96iQ%3D","line":743,"in_reply_to":"AAAAWH%2F98S4%3D","updated":"2014-04-01 08:30:46.000000000","message":"Please note that I propose self._make_stats_query(sample_filter, None, aggregate).count() and not self._make_stats_query(sample_filter, None, aggregate).first().count","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"1add583a0cfdbbb0a1772f12c70417560e36139c","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWn%2F%2F9Ug%3D","line":743,"in_reply_to":"AAAAWH%2F9gNM%3D","updated":"2014-04-08 08:55:03.000000000","message":"omg, I think I see your point now...The query result cannot be empty because it contains \"default\" values of functions: all Nones. That\u0027s exactly what I wanted to understand! Thank you for explanation","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"eb3cf1533db7fa177263c4a514e043f2c6a239a6","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F9gNM%3D","line":743,"in_reply_to":"AAAAWH%2F9mFk%3D","updated":"2014-04-04 04:57:54.000000000","message":"the first() entry (None, None, None, None) matches (\u0027unit\u0027, \u0027tsmin\u0027, \u0027tsmax\u0027, \u0027sum\u0027).\nand the \"unit\"/\"tsmin\"/\"tsmax\" match the selectable aggregate functions \"unit\"/\"min\"/\"max\" which are hardcoded in method:\n\n    def _make_stats_query(self, sample_filter, groupby, aggregate):\n\n        select \u003d [\n            models.Meter.unit,\n            func.min(models.Sample.timestamp).label(\u0027tsmin\u0027),\n            func.max(models.Sample.timestamp).label(\u0027tsmax\u0027),\n        ]\n        ......\n\nthe \"sum\" depend on the parameter \"-a sum\" specified.\n\nI think that self._make_stats_query(sample_filter,None,aggregate).count() \u003d\u003d 1 is because the len([(None, None, None, None)]) \u003d\u003d 1.\nso we can\u0027t use it to judge. this \"count\" is different with the \"res.count\". the \"res.count\"(Gordon mentioned) is a selectable aggregate function like \"sum\". if we specify parameter \"-a sum\",\nthe \"res\" will has only  selectable aggregate function \"sum\" (except unit, min, max). if we don\u0027t specify any  aggregate function (no \"-a\"), the res will contain the result of all aggregate functions, include:(\u0027unit\u0027, \u0027tsmin\u0027, \u0027tsmax\u0027, \u0027sum\u0027,\"avg\",\"count\" ).\n\nBest\n\nliu sheng","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"b67ed8713864057166e86a7c209fba34de9402e5","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F9mFk%3D","line":743,"in_reply_to":"AAAAWH%2F9nV8%3D","updated":"2014-04-03 13:27:54.000000000","message":"So my concern is that self._make_stats_query(sample_filter,None,aggregate).count() \u003d\u003d 1 and first() entry is (None, None...), It means that (None, None...) entry matches sample filter, doesn\u0027t it?","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"010e5cd46185a8595832bc4a91b0f4cebe973840","unresolved":false,"context_lines":[{"line_number":740,"context_line":"                                                      aggregate)"},{"line_number":741,"context_line":"            return"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F9nV8%3D","line":743,"in_reply_to":"AAAAWH%2F9trE%3D","updated":"2014-04-03 10:56:53.000000000","message":"sorry, I am confused @_@. the “not-exists-user” in query field is equal to \"no samples in db\". in this situation the res.tsmax and res.tsmin is None, we should return and yield no statistic.\n\nGordon said that is because if we specified selectable aggregate functions( by parameter \"-a sum\"), there is no \"res.count\" in the result of the query. so we shouldn\u0027t use \"res.count\".\n\nplease forgive my poor English, I am afraid I haven\u0027t get what you said:-).\n\nthanks   liusheng","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"6110e9aaad704d77cda8c039e1281363c3e90cbe","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        if not sample_filter.start or not sample_filter.end:"},{"line_number":744,"context_line":"            res \u003d self._make_stats_query(sample_filter,"},{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"},{"line_number":747,"context_line":"            if not res.tsmin or not res.tsmax:"},{"line_number":748,"context_line":"                return"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWn%2F%2F9NA%3D","line":746,"updated":"2014-04-08 09:11:11.000000000","message":"Could you please add some DEBUG before return?","commit_id":"978af00edbcd4097cb4bb585a8fac90c1b049a61"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"2378299bacb83fa2285248b19040a1bbccb9d634","unresolved":false,"context_lines":[{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"},{"line_number":747,"context_line":"            if not res.tsmin or not res.tsmax:"},{"line_number":748,"context_line":"                LOG.warn(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":749,"context_line":"                return"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXH%2F%2FS3s%3D","line":748,"updated":"2014-04-22 17:27:37.000000000","message":"Is there a reason you chose warn instead of debug? This could just be debug so we dont unnecessarily warn user.","commit_id":"64e5d1532a92a77ffb87b62dcc0bce404895649b"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"31b6dcc66f8d345b5c60de84bbeed1ad2871ec5e","unresolved":false,"context_lines":[{"line_number":745,"context_line":"                                         None,"},{"line_number":746,"context_line":"                                         aggregate).first()"},{"line_number":747,"context_line":"            if not res.tsmin or not res.tsmax:"},{"line_number":748,"context_line":"                LOG.warn(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":749,"context_line":"                return"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAXX%2F%2F9hc%3D","line":748,"in_reply_to":"AAAAXH%2F%2FS3s%3D","updated":"2014-04-25 01:06:40.000000000","message":"may be you are right, but I think warning because of the exceptional situation to get statistics:), done","commit_id":"64e5d1532a92a77ffb87b62dcc0bce404895649b"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"97762f03ac778105e39fa77c780c7744b5a15b60","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F64g%3D","line":738,"updated":"2014-04-25 09:34:35.000000000","message":"Please add the sample filter to the log message, with which the result is empty.","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"c9f7825db13e3608b7cc438bd7f851af7d074224","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F0u8%3D","line":738,"in_reply_to":"AAAAXX%2F%2F2qY%3D","updated":"2014-04-26 01:34:14.000000000","message":"gordon chung,Ildiko Vancsa, thanks for your review, so I will remove the log message. but I tend slightly to keep it, because  this method is get_meter_statistics(),  this log message can identify the \"No sample\" is the reason of \"No statistics\"","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ffe8951bf752271b03bfca99df0b46df827fc29b","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F4Pk%3D","line":738,"in_reply_to":"AAAAXX%2F%2F42Y%3D","updated":"2014-04-25 15:47:05.000000000","message":"i feel like it\u0027s safe to not log anything here... there are many other scenarios where we return empty and logs aren\u0027t needed to justify why.  please add a note comment if you feel like we\u0027ll forget why this code exists.","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"3d6ec904f05b30b2875b0c881b163bbb8f97a2a4","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F2qY%3D","line":738,"in_reply_to":"AAAAXX%2F%2F4Pk%3D","updated":"2014-04-25 19:00:44.000000000","message":"@liusheng: I just wanted to highlight here that if we do not serialize the sample_filter into the LOG message, then this log message is simply not usable, it does not have any added value, therefore it just uses the disk space.\n\n@Gordon: Yes, agreed, I just wanted to suggest this option as, by thinking it over, it does not seem to worth the effort generating a useful LOG message here.","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"b985f9570af2892938b4fdb4b7ae4a39970361ad","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F42Y%3D","line":738,"in_reply_to":"AAAAXX%2F%2F5W0%3D","updated":"2014-04-25 14:39:26.000000000","message":"Yes, I hope I have got your idea :-),  But the sample_filter is an object of ceilometer.storage.SampleFilter which have some attributes, such as: user, project, start,end...e.g.\nthe None \"res\" can be caused by any attribute specified with inappropriate values (like user\u003d\"non-exists-user\"), or even because there is no sample in db of this meter.\n\nIf I add the sample_filter in log message, it may like \"object\u003cxxxxxxx\u003e of ceilometer.storage.SampleFilter \", I don\u0027t think this is valuable.\n\nBest Regards\nLiu sheng","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e119291947ac2ae0347a122ba206202476560ea3","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F5W0%3D","line":738,"in_reply_to":"AAAAXX%2F%2F5pY%3D","updated":"2014-04-25 13:25:15.000000000","message":"Do you think or do you know? :) Because, I think that according to this debug log it cannot be decoded that which request ended up in this branch. But correct me, if I\u0027m wrong here.","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f2e052de252a8f22da4af278c1f98005bc543f9c","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                         None,"},{"line_number":736,"context_line":"                                         aggregate).first()"},{"line_number":737,"context_line":"            if not res:"},{"line_number":738,"context_line":"                LOG.debug(_(\u0027No sample has found with sample filter(s)\u0027))"},{"line_number":739,"context_line":"                return"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        query \u003d self._make_stats_query(sample_filter, groupby, aggregate)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAXX%2F%2F5pY%3D","line":738,"in_reply_to":"AAAAXX%2F%2F64g%3D","updated":"2014-04-25 12:48:16.000000000","message":"Hi Ildiko, I have thought about that ,but the sample_filter is an object of ceilometer.storage.SampleFilter, it is hard to be record in log message,and I think the filter info should be recorded in upstream :)","commit_id":"1ec6fe5720c76b163a7373fab290f2dd586ffd70"}],"ceilometer/tests/storage/test_storage_scenarios.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"a3dd2924fa4d42d93225fac093c5f324a6bc5664","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"        self.assertEqual(results.max, 7)"},{"line_number":1364,"context_line":"        self.assertEqual(results.sum, 18)"},{"line_number":1365,"context_line":"        self.assertEqual(results.avg, 6)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    def test_with_no_sample(self):"},{"line_number":1368,"context_line":"        f \u003d storage.SampleFilter("},{"line_number":1369,"context_line":"            user\u003d\u0027user-not-exists\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAWH%2F%2B8PQ%3D","line":1366,"updated":"2014-03-21 14:42:31.000000000","message":"I\u0027ve tried your test and it doesn\u0027t cover the lines you have fixed. Please add \"period\" param and it will :)","commit_id":"189584c79ed4e7e954023002d75bcfd84d8b81c5"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"3e296358f6edfd85cc3fbd36d600d19210102af9","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"        self.assertEqual(results.max, 7)"},{"line_number":1364,"context_line":"        self.assertEqual(results.sum, 18)"},{"line_number":1365,"context_line":"        self.assertEqual(results.avg, 6)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    def test_with_no_sample(self):"},{"line_number":1368,"context_line":"        f \u003d storage.SampleFilter("},{"line_number":1369,"context_line":"            user\u003d\u0027user-not-exists\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BDU0%3D","line":1366,"updated":"2014-03-31 10:17:36.000000000","message":"You forgot to point period so test doesn\u0027t check the changed code.","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fad1814324002945fd7ca94942efc1479807ee69","unresolved":false,"context_lines":[{"line_number":1363,"context_line":"        self.assertEqual(results.max, 7)"},{"line_number":1364,"context_line":"        self.assertEqual(results.sum, 18)"},{"line_number":1365,"context_line":"        self.assertEqual(results.avg, 6)"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    def test_with_no_sample(self):"},{"line_number":1368,"context_line":"        f \u003d storage.SampleFilter("},{"line_number":1369,"context_line":"            user\u003d\u0027user-not-exists\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F98NY%3D","line":1366,"in_reply_to":"AAAAWH%2F%2BDU0%3D","updated":"2014-04-01 03:48:07.000000000","message":"thanks,right, I forgot that","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"3e296358f6edfd85cc3fbd36d600d19210102af9","unresolved":false,"context_lines":[{"line_number":1368,"context_line":"        f \u003d storage.SampleFilter("},{"line_number":1369,"context_line":"            user\u003d\u0027user-not-exists\u0027,"},{"line_number":1370,"context_line":"            meter\u003d\u0027volume.size\u0027,"},{"line_number":1371,"context_line":"        )"},{"line_number":1372,"context_line":"        results \u003d list(self.conn.get_meter_statistics(f))"},{"line_number":1373,"context_line":"        self.assertEqual([], results)"},{"line_number":1374,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2BC5k%3D","line":1371,"updated":"2014-03-31 10:17:36.000000000","message":"If we add res \u003d list(self.conn.get_samples(f)) the res \u003d []. But the code from impl_sqlalchemy \n            res \u003d self._make_stats_query(sample_filter,\n                                         None,\n                                         aggregate)\n            print res.count()\nreturns 1.\nMaybe it\u0027s correct but looks wierd. Could you please check that?","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fad1814324002945fd7ca94942efc1479807ee69","unresolved":false,"context_lines":[{"line_number":1368,"context_line":"        f \u003d storage.SampleFilter("},{"line_number":1369,"context_line":"            user\u003d\u0027user-not-exists\u0027,"},{"line_number":1370,"context_line":"            meter\u003d\u0027volume.size\u0027,"},{"line_number":1371,"context_line":"        )"},{"line_number":1372,"context_line":"        results \u003d list(self.conn.get_meter_statistics(f))"},{"line_number":1373,"context_line":"        self.assertEqual([], results)"},{"line_number":1374,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F98Ls%3D","line":1371,"in_reply_to":"AAAAWH%2F%2BC5k%3D","updated":"2014-04-01 03:48:07.000000000","message":"in the abandoned patch https://review.openstack.org/#/c/82048/3\ngordon chung have pointed out that res.count() is not a reasonable condition","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"e9e66a8a9ced346404514e6ec3e4d665e8f171ea","unresolved":false,"context_lines":[{"line_number":1368,"context_line":"        f \u003d storage.SampleFilter("},{"line_number":1369,"context_line":"            user\u003d\u0027user-not-exists\u0027,"},{"line_number":1370,"context_line":"            meter\u003d\u0027volume.size\u0027,"},{"line_number":1371,"context_line":"        )"},{"line_number":1372,"context_line":"        results \u003d list(self.conn.get_meter_statistics(f))"},{"line_number":1373,"context_line":"        self.assertEqual([], results)"},{"line_number":1374,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F96hg%3D","line":1371,"in_reply_to":"AAAAWH%2F98Ls%3D","updated":"2014-04-01 08:30:46.000000000","message":"Please take a look on comment in impl_sqlalchemy","commit_id":"0af441435309dc58f0db1b5d45bdc0a2bdbfbcab"}]}
