)]}'
{"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f43e0c9860e8fdff2b55c897ca3fb5dd2094c7f1","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        # It means that we should take a look on all qualifiers with \u0027m_\u0027"},{"line_number":349,"context_line":"        # prefix in resource table, so query should be extended"},{"line_number":350,"context_line":"        if start_rts:"},{"line_number":351,"context_line":"            filter_value \u003d start_rts + \u0027+\u0027 + source if source else start_rts"},{"line_number":352,"context_line":"            mq.append(self._QualifierFilter(\"\u003c\u003d\", filter_value))"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        if end_rts:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_94a2a898","line":351,"updated":"2014-06-10 08:17:16.000000000","message":"how about put the construction of the filter_value into a function, and put that function near _format_meter_reference()? so that in case of future modification, we don\u0027t miss anything.","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"8b80d0ebe3869f8ecea420b036a48e07fff4303f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        # It means that we should take a look on all qualifiers with \u0027m_\u0027"},{"line_number":349,"context_line":"        # prefix in resource table, so query should be extended"},{"line_number":350,"context_line":"        if start_rts:"},{"line_number":351,"context_line":"            filter_value \u003d start_rts + \u0027+\u0027 + source if source else start_rts"},{"line_number":352,"context_line":"            mq.append(self._QualifierFilter(\"\u003c\u003d\", filter_value))"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        if end_rts:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_bafceb40","line":351,"in_reply_to":"1ae5cdf2_94a2a898","updated":"2014-06-10 09:04:14.000000000","message":"will do","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f43e0c9860e8fdff2b55c897ca3fb5dd2094c7f1","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            gen \u003d resource_table.scan(filter\u003dq)"},{"line_number":367,"context_line":"            for resource_id, data in gen:"},{"line_number":368,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":369,"context_line":"                if not meters:"},{"line_number":370,"context_line":"                    continue"},{"line_number":371,"context_line":"                else:"},{"line_number":372,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_545ae083","line":369,"updated":"2014-06-10 08:17:16.000000000","message":"according the logic in record_metering_data(), I don\u0027t understand how we could end up here.","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"bd809f30a134c84432d921f0a1be7a39b3e5103b","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            gen \u003d resource_table.scan(filter\u003dq)"},{"line_number":367,"context_line":"            for resource_id, data in gen:"},{"line_number":368,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":369,"context_line":"                if not meters:"},{"line_number":370,"context_line":"                    continue"},{"line_number":371,"context_line":"                else:"},{"line_number":372,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_62ec792a","line":369,"in_reply_to":"1ae5cdf2_0e6204d8","updated":"2014-06-10 10:53:45.000000000","message":"I\u0027m sure that some tests were failing on real HBase if I remove this line. But now I cannot find this scenario. I will think about it more","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"8b80d0ebe3869f8ecea420b036a48e07fff4303f","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            gen \u003d resource_table.scan(filter\u003dq)"},{"line_number":367,"context_line":"            for resource_id, data in gen:"},{"line_number":368,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":369,"context_line":"                if not meters:"},{"line_number":370,"context_line":"                    continue"},{"line_number":371,"context_line":"                else:"},{"line_number":372,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_fa8af362","line":369,"in_reply_to":"1ae5cdf2_545ae083","updated":"2014-06-10 09:04:14.000000000","message":"meters list may be empty if filter returns nothing. E.g. start-end filter.\nThe main idea of patch is fetching meters from Resource table. In Resource table we have the following structure:\n\nresource_id    user_id:UUID,project_id:UUID,..., m_meter_names:{meter structure}\n\nSo all meters are stored near corresponding resource.","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"5a93b9760036b3cfae67ce926d1e37f134d815e2","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            gen \u003d resource_table.scan(filter\u003dq)"},{"line_number":367,"context_line":"            for resource_id, data in gen:"},{"line_number":368,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":369,"context_line":"                if not meters:"},{"line_number":370,"context_line":"                    continue"},{"line_number":371,"context_line":"                else:"},{"line_number":372,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_0e6204d8","line":369,"in_reply_to":"1ae5cdf2_fa8af362","updated":"2014-06-10 09:15:11.000000000","message":"if filter returns nothing, I don\u0027t think we will enter in the for loop in Ln367, right? So why need this?","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"f43e0c9860e8fdff2b55c897ca3fb5dd2094c7f1","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":379,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":380,"context_line":"                    row \u003d resource_table.row("},{"line_number":381,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"},{"line_number":382,"context_line":"                                              \u0027f:resource_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_54b6608b","line":379,"updated":"2014-06-10 08:17:16.000000000","message":"according the logic in record_metering_data(), I don\u0027t understand how we could end up here, no project_id and user_id but have meters returned.","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"8b80d0ebe3869f8ecea420b036a48e07fff4303f","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":379,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":380,"context_line":"                    row \u003d resource_table.row("},{"line_number":381,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"},{"line_number":382,"context_line":"                                              \u0027f:resource_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_dae457ae","line":379,"in_reply_to":"1ae5cdf2_54b6608b","updated":"2014-06-10 09:04:14.000000000","message":"It\u0027s specific of filtering in HBase. During this method two filters may be used: Qualifier and SimpleColumnValue. If only Qualifier is used then HBase returns only values for needed qualifier. So it doesn\u0027t return the whole entry. That\u0027s why we ask HBase to return qualifiers  [\u0027f:project_id\u0027, \u0027f:user_id\u0027, \u0027f:resource_metadata\u0027] separately. So project_id and user_id exist but are not returned by HBase if we use QualifierFilter, we ask these values separately","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"5a93b9760036b3cfae67ce926d1e37f134d815e2","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":379,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":380,"context_line":"                    row \u003d resource_table.row("},{"line_number":381,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"},{"line_number":382,"context_line":"                                              \u0027f:resource_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_4e824c53","line":379,"in_reply_to":"1ae5cdf2_dae457ae","updated":"2014-06-10 09:15:11.000000000","message":"Thanks for the explanation.","commit_id":"578bf68cabc61c4c04b2482d85f4c0a640cba609"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"            resource_metadata \u003d data.get(\u0027resource_metadata\u0027, {})"},{"line_number":288,"context_line":"            # Determine the name of new meter"},{"line_number":289,"context_line":"            rts \u003d reverse_timestamp(data[\u0027timestamp\u0027])"},{"line_number":290,"context_line":"            new_meter \u003d _format_meter_reference("},{"line_number":291,"context_line":"                data[\u0027counter_name\u0027], data[\u0027counter_type\u0027],"},{"line_number":292,"context_line":"                data[\u0027counter_unit\u0027], rts, data[\u0027source\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_44d30d38","line":289,"updated":"2014-06-10 10:36:55.000000000","message":"Conflict with the changes to reverse_timestamp in Igor\u0027s patch?:\n\n  https://review.openstack.org/#/c/91408/13/ceilometer/storage/impl_hbase.py","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"4f30aad4c67944ca5e129e9a0c29d3c8c7e5fc4f","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"            resource_metadata \u003d data.get(\u0027resource_metadata\u0027, {})"},{"line_number":288,"context_line":"            # Determine the name of new meter"},{"line_number":289,"context_line":"            rts \u003d reverse_timestamp(data[\u0027timestamp\u0027])"},{"line_number":290,"context_line":"            new_meter \u003d _format_meter_reference("},{"line_number":291,"context_line":"                data[\u0027counter_name\u0027], data[\u0027counter_type\u0027],"},{"line_number":292,"context_line":"                data[\u0027counter_unit\u0027], rts, data[\u0027source\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_a2cda1b9","line":289,"in_reply_to":"1ae5cdf2_44d30d38","updated":"2014-06-11 12:54:56.000000000","message":"yep :)","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                \u0027resource_id\u0027: data[\u0027resource_id\u0027],"},{"line_number":300,"context_line":"                \u0027project_id\u0027: data[\u0027project_id\u0027], \u0027user_id\u0027: data[\u0027user_id\u0027]})"},{"line_number":301,"context_line":"            # Here we put entry in HBase with our own timestamp. This is needed"},{"line_number":302,"context_line":"            # when samples come in unusual order: old comes earlier then new."},{"line_number":303,"context_line":"            # If we use timestamp\u003ddata[\u0027timestamp\u0027] the newest data will be"},{"line_number":304,"context_line":"            # automatically \u0027on the top\u0027. It is useful for metadata especially."},{"line_number":305,"context_line":"            resource_table.put(data[\u0027resource_id\u0027], resource,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_64a489b9","line":302,"updated":"2014-06-10 10:36:55.000000000","message":"Non-blocking itpick:\n\n  s/samples come in unusual order: old comes earlier then new./sample arrive out-of-order/","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            # Here we put entry in HBase with our own timestamp. This is needed"},{"line_number":302,"context_line":"            # when samples come in unusual order: old comes earlier then new."},{"line_number":303,"context_line":"            # If we use timestamp\u003ddata[\u0027timestamp\u0027] the newest data will be"},{"line_number":304,"context_line":"            # automatically \u0027on the top\u0027. It is useful for metadata especially."},{"line_number":305,"context_line":"            resource_table.put(data[\u0027resource_id\u0027], resource,"},{"line_number":306,"context_line":"                               int(time.mktime("},{"line_number":307,"context_line":"                                   data[\u0027timestamp\u0027].timetuple()) * 1000))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_24ed21b8","line":304,"updated":"2014-06-10 10:36:55.000000000","message":"It\u0027s kind of required, as opposed to just useful, or?","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"4f30aad4c67944ca5e129e9a0c29d3c8c7e5fc4f","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            # Here we put entry in HBase with our own timestamp. This is needed"},{"line_number":302,"context_line":"            # when samples come in unusual order: old comes earlier then new."},{"line_number":303,"context_line":"            # If we use timestamp\u003ddata[\u0027timestamp\u0027] the newest data will be"},{"line_number":304,"context_line":"            # automatically \u0027on the top\u0027. It is useful for metadata especially."},{"line_number":305,"context_line":"            resource_table.put(data[\u0027resource_id\u0027], resource,"},{"line_number":306,"context_line":"                               int(time.mktime("},{"line_number":307,"context_line":"                                   data[\u0027timestamp\u0027].timetuple()) * 1000))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_bde10d2c","line":304,"in_reply_to":"1ae5cdf2_24ed21b8","updated":"2014-06-11 12:54:56.000000000","message":"Actually it\u0027s needed, I have fixed comment in patch 10.","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"060ff7aeb4071209feea093ceaeb43d85a14aa22","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            # Here we put entry in HBase with our own timestamp. This is needed"},{"line_number":302,"context_line":"            # when samples come in unusual order: old comes earlier then new."},{"line_number":303,"context_line":"            # If we use timestamp\u003ddata[\u0027timestamp\u0027] the newest data will be"},{"line_number":304,"context_line":"            # automatically \u0027on the top\u0027. It is useful for metadata especially."},{"line_number":305,"context_line":"            resource_table.put(data[\u0027resource_id\u0027], resource,"},{"line_number":306,"context_line":"                               int(time.mktime("},{"line_number":307,"context_line":"                                   data[\u0027timestamp\u0027].timetuple()) * 1000))"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_637711d5","line":304,"in_reply_to":"1ae5cdf2_24ed21b8","updated":"2014-06-10 16:13:55.000000000","message":"it\u0027s useful, as all other tables are sorted \"newest on the top\", so to have this order here we need small hack. Plus I guess Nadya\u0027s commit message is describing this as well.","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            # automatically \u0027on the top\u0027. It is useful for metadata especially."},{"line_number":305,"context_line":"            resource_table.put(data[\u0027resource_id\u0027], resource,"},{"line_number":306,"context_line":"                               int(time.mktime("},{"line_number":307,"context_line":"                                   data[\u0027timestamp\u0027].timetuple()) * 1000))"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            #TODO(nprivalova): improve uniqueness"},{"line_number":310,"context_line":"            # Rowkey consists of reversed timestamp, meter and an md5 of"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_4404ed7d","line":307,"updated":"2014-06-10 10:36:55.000000000","message":"Non-blocking nitpick: this timestamp calculation would be better factored out to a utility method.","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":354,"context_line":"            resource_table \u003d conn.table(self.RESOURCE_TABLE)"},{"line_number":355,"context_line":"            LOG.debug(_(\"Query Resource table: %s\") % q)"},{"line_number":356,"context_line":"            gen \u003d resource_table.scan(filter\u003dq)"},{"line_number":357,"context_line":"            for resource_id, data in gen:"},{"line_number":358,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":359,"context_line":"                if not meters:"},{"line_number":360,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_474dcf71","line":357,"updated":"2014-06-10 10:36:55.000000000","message":"Clearer to dispense with the gen variable?","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"},{"line_number":363,"context_line":"                    # HBase. So that\u0027s why it\u0027s needed to find min and max"},{"line_number":364,"context_line":"                    # manually"},{"line_number":365,"context_line":"                    first_ts \u003d min(meters, key\u003dlambda t: t[1])[1]"},{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_44314d0a","line":365,"updated":"2014-06-10 10:36:55.000000000","message":"Could that lambda could be replaced with the builtin operator, e.g.\n\n  first_ts \u003d min(meters, key\u003doperator.itemgetter(1))[1]","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"060ff7aeb4071209feea093ceaeb43d85a14aa22","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"},{"line_number":363,"context_line":"                    # HBase. So that\u0027s why it\u0027s needed to find min and max"},{"line_number":364,"context_line":"                    # manually"},{"line_number":365,"context_line":"                    first_ts \u003d min(meters, key\u003dlambda t: t[1])[1]"},{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_e3040180","line":365,"in_reply_to":"1ae5cdf2_44314d0a","updated":"2014-06-10 16:13:55.000000000","message":"thanks, it\u0027s  good idea","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                    # HBase. So that\u0027s why it\u0027s needed to find min and max"},{"line_number":364,"context_line":"                    # manually"},{"line_number":365,"context_line":"                    first_ts \u003d min(meters, key\u003dlambda t: t[1])[1]"},{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":369,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_a43e91d8","line":366,"updated":"2014-06-10 10:36:55.000000000","message":"Similarly.","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"060ff7aeb4071209feea093ceaeb43d85a14aa22","unresolved":false,"context_lines":[{"line_number":363,"context_line":"                    # HBase. So that\u0027s why it\u0027s needed to find min and max"},{"line_number":364,"context_line":"                    # manually"},{"line_number":365,"context_line":"                    first_ts \u003d min(meters, key\u003dlambda t: t[1])[1]"},{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":369,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_03080d90","line":366,"in_reply_to":"1ae5cdf2_a43e91d8","updated":"2014-06-10 16:13:55.000000000","message":"yep","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    first_ts \u003d min(meters, key\u003dlambda t: t[1])[1]"},{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":369,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":370,"context_line":"                    row \u003d resource_table.row("},{"line_number":371,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_2401a106","line":368,"updated":"2014-06-10 10:36:55.000000000","message":"The use of this magical \u0027+\u0027 sign makes me a bit nervous. Is the above logic splitting a string that includes a meter name? Do we exclude the plus sign from meter names?","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"060ff7aeb4071209feea093ceaeb43d85a14aa22","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    first_ts \u003d min(meters, key\u003dlambda t: t[1])[1]"},{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":369,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":370,"context_line":"                    row \u003d resource_table.row("},{"line_number":371,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_f6503d0c","line":368,"in_reply_to":"1ae5cdf2_2401a106","updated":"2014-06-10 16:13:55.000000000","message":"There is a bug about \u0027+\u0027 we\u0027re going to fix later. Currently this \u0027+\u0027 is ok in the meters. here it is: https://bugs.launchpad.net/ceilometer/+bug/1328114","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":369,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":370,"context_line":"                    row \u003d resource_table.row("},{"line_number":371,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"},{"line_number":372,"context_line":"                                              \u0027f:resource_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_e7625bd8","line":369,"updated":"2014-06-10 10:36:55.000000000","message":"Can you add a comment explaining the case where the subsequent query is required, i.e. where the project_id and user_id are absent from f_res?","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"4f30aad4c67944ca5e129e9a0c29d3c8c7e5fc4f","unresolved":false,"context_lines":[{"line_number":366,"context_line":"                    last_ts \u003d max(meters, key\u003dlambda t: t[1])[1]"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"                source \u003d meters[0][0].split(\u0027+\u0027)[1]"},{"line_number":369,"context_line":"                if \u0027project_id\u0027 not in f_res and \u0027user_id\u0027 not in f_res:"},{"line_number":370,"context_line":"                    row \u003d resource_table.row("},{"line_number":371,"context_line":"                        resource_id, columns\u003d[\u0027f:project_id\u0027, \u0027f:user_id\u0027,"},{"line_number":372,"context_line":"                                              \u0027f:resource_metadata\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_3dcdfdb7","line":369,"in_reply_to":"1ae5cdf2_e7625bd8","updated":"2014-06-11 12:54:56.000000000","message":"Done in patch 10","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":411,"context_line":"            for ignored, data in gen:"},{"line_number":412,"context_line":"                flatten_result, s, meters, md \u003d deserialize_entry(data)"},{"line_number":413,"context_line":"                for m in meters:"},{"line_number":414,"context_line":"                    m_rts, m_source, m_raw \u003d m[0].split(\"+\")"},{"line_number":415,"context_line":"                    name, type, unit \u003d m_raw.split(\u0027!\u0027)"},{"line_number":416,"context_line":"                    meter_dict \u003d {\u0027name\u0027: name,"},{"line_number":417,"context_line":"                                  \u0027type\u0027: type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_27b9a315","line":414,"updated":"2014-06-10 10:36:55.000000000","message":"m_rts is not used subsequently?\n\nClearer as:\n\n  _, m_source, m_raw \u003d m[0].split(\"+\")\n\npossibly?","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"060ff7aeb4071209feea093ceaeb43d85a14aa22","unresolved":false,"context_lines":[{"line_number":411,"context_line":"            for ignored, data in gen:"},{"line_number":412,"context_line":"                flatten_result, s, meters, md \u003d deserialize_entry(data)"},{"line_number":413,"context_line":"                for m in meters:"},{"line_number":414,"context_line":"                    m_rts, m_source, m_raw \u003d m[0].split(\"+\")"},{"line_number":415,"context_line":"                    name, type, unit \u003d m_raw.split(\u0027!\u0027)"},{"line_number":416,"context_line":"                    meter_dict \u003d {\u0027name\u0027: name,"},{"line_number":417,"context_line":"                                  \u0027type\u0027: type,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_a3903996","line":414,"in_reply_to":"1ae5cdf2_27b9a315","updated":"2014-06-10 16:13:55.000000000","message":"well, I think it\u0027ll be better to use _m_rts here, as simply _ is used by the i18n in OpenStack.","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    if frozen_meter in result:"},{"line_number":424,"context_line":"                        continue"},{"line_number":425,"context_line":"                    result.add(frozen_meter)"},{"line_number":426,"context_line":"                    meter_dict.update({\u0027source\u0027:"},{"line_number":427,"context_line":"                                       m_source if m_source else None})"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"                    yield models.Meter(**meter_dict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_2767e3b8","line":426,"updated":"2014-06-10 10:36:55.000000000","message":"Wondering if the ternary is needed there?\n\nIs that handling the case where m_source is False but not None (e.g. 0, \"\", [], ... etc.)","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"060ff7aeb4071209feea093ceaeb43d85a14aa22","unresolved":false,"context_lines":[{"line_number":423,"context_line":"                    if frozen_meter in result:"},{"line_number":424,"context_line":"                        continue"},{"line_number":425,"context_line":"                    result.add(frozen_meter)"},{"line_number":426,"context_line":"                    meter_dict.update({\u0027source\u0027:"},{"line_number":427,"context_line":"                                       m_source if m_source else None})"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"                    yield models.Meter(**meter_dict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_63e71113","line":426,"in_reply_to":"1ae5cdf2_2767e3b8","updated":"2014-06-10 16:13:55.000000000","message":"I\u0027m not sure what logic should be here - here it\u0027ll ignore all other false m_source and will make it None... Probably we need to discuss one more time if we need source globally and then fix it everywhere.","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"c2ad804928f18cb5f22767b3584a2ad688f8af1c","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        return ((k, self.row(k)) for k in keys)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def put(self, key, data, ts\u003dNone):"},{"line_number":595,"context_line":"        # Note: Now we use \u0027timestamped\u0027 put only for one Resource table."},{"line_number":596,"context_line":"        # That\u0027s why we may put ts\u003d\u00270\u0027 in case when ts is None. If it is"},{"line_number":597,"context_line":"        # needed to use 2 types of put in one table ts\u003d0 cannot be used."},{"line_number":598,"context_line":"        if ts is None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1ae5cdf2_870fd7e0","line":595,"updated":"2014-06-10 10:36:55.000000000","message":"Typo?\n\n  s/put only/but only/","commit_id":"20a63779d6f6b495bee495bb9f7495d9d0c28bc3"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ba21e0f6595b427e52b26afc3e05b73dec46944c","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            # If we use timestamp\u003ddata[\u0027timestamp\u0027] the newest data will be"},{"line_number":323,"context_line":"            # automatically \u0027on the top\u0027. It is useful for metadata especially."},{"line_number":324,"context_line":"            ts \u003d int(time.mktime(data[\u0027timestamp\u0027].timetuple()) * 1000)"},{"line_number":325,"context_line":"            resource_table.put(data[\u0027resource_id\u0027], resource, int(ts))"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            #TODO(nprivalova): improve uniqueness"},{"line_number":328,"context_line":"            # Rowkey consists of reversed timestamp, meter and an md5 of"}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_ef5ea0e8","line":325,"updated":"2014-06-10 17:39:21.000000000","message":"nit: there are two int() conversions for \u0027ts\u0027, one of these can be dropped.","commit_id":"e1520a82251a84c90085e612cf2964f3bb6e6798"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ba21e0f6595b427e52b26afc3e05b73dec46944c","unresolved":false,"context_lines":[{"line_number":847,"context_line":"        return r"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    @staticmethod"},{"line_number":850,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":851,"context_line":"    def ColumnPrefixFilter(args, rows):"},{"line_number":852,"context_line":"        \"\"\"This is filter for testing \"in-memory HBase\"."},{"line_number":853,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_2fe96880","line":850,"updated":"2014-06-10 17:39:21.000000000","message":"Please remove this line.","commit_id":"e1520a82251a84c90085e612cf2964f3bb6e6798"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ba21e0f6595b427e52b26afc3e05b73dec46944c","unresolved":false,"context_lines":[{"line_number":1192,"context_line":""},{"line_number":1193,"context_line":"        if mq:"},{"line_number":1194,"context_line":"            meter_q \u003d \" AND \".join(mq)"},{"line_number":1195,"context_line":"            meter_q \u003d _QualifierFilter(\"\u003e\u003d\", \u0027\u0027) + \" AND \" + meter_q"},{"line_number":1196,"context_line":"            query \u003d meter_q if not query else query + \u0027 AND \u0027 + meter_q"},{"line_number":1197,"context_line":"        return query"},{"line_number":1198,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_4a7222ae","line":1195,"updated":"2014-06-10 17:39:21.000000000","message":"Why do we need this: \u0027_QualifierFilter(\"\u003e\u003d\", \u0027\u0027)\u0027 here?","commit_id":"e1520a82251a84c90085e612cf2964f3bb6e6798"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"416cad9f4cea2aa15f6d89398c9b5e8d0200f1d4","unresolved":false,"context_lines":[{"line_number":1192,"context_line":""},{"line_number":1193,"context_line":"        if mq:"},{"line_number":1194,"context_line":"            meter_q \u003d \" AND \".join(mq)"},{"line_number":1195,"context_line":"            meter_q \u003d _QualifierFilter(\"\u003e\u003d\", \u0027\u0027) + \" AND \" + meter_q"},{"line_number":1196,"context_line":"            query \u003d meter_q if not query else query + \u0027 AND \u0027 + meter_q"},{"line_number":1197,"context_line":"        return query"},{"line_number":1198,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1ae5cdf2_dd833954","line":1195,"in_reply_to":"1ae5cdf2_4a7222ae","updated":"2014-06-11 12:52:00.000000000","message":"I\u0027ve describe this in comment in the 10 patch. To determine that if there is Qualifier filtering on meters we should do it only on qualifiers that starts with m_. _QualifierFilter(\"\u003e\u003d\", \u0027\u0027) returns \"(QualifierFilter (\u003e\u003d, \u0027binaryprefix:m_\u0027)\". But anyway I should change a sign here. It should be \u0027\u003d\u0027 instead of \u0027\u003e\u003d\u0027.","commit_id":"e1520a82251a84c90085e612cf2964f3bb6e6798"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2e9522e4ac9a61ba09ea23e60ebca234e50d5693","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            for resource_id, data in resource_table.scan(filter\u003dq):"},{"line_number":375,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":376,"context_line":"                if not meters:"},{"line_number":377,"context_line":"                    continue"},{"line_number":378,"context_line":"                else:"},{"line_number":379,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"},{"line_number":380,"context_line":"                    # HBase. So that\u0027s why it\u0027s needed to find min and max"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_29f7a3f6","line":377,"updated":"2014-06-10 19:42:59.000000000","message":"how is this scenario possible... to have a resource but no meters?","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"332a00ca4f054a42be908ceaced9f667fb449431","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            for resource_id, data in resource_table.scan(filter\u003dq):"},{"line_number":375,"context_line":"                f_res, sources, meters, md \u003d deserialize_entry(data)"},{"line_number":376,"context_line":"                if not meters:"},{"line_number":377,"context_line":"                    continue"},{"line_number":378,"context_line":"                else:"},{"line_number":379,"context_line":"                    # Unfortunately happybase doesn\u0027t keep ordered result from"},{"line_number":380,"context_line":"                    # HBase. So that\u0027s why it\u0027s needed to find min and max"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_f941ea63","line":377,"in_reply_to":"1ae5cdf2_29f7a3f6","updated":"2014-06-11 12:50:09.000000000","message":"I\u0027ve fixed that. The problem was the following: when use QualifierFilter(\"\u003e\u003d\" \"m_blablabla\") qualifiers like m_str satisfies the filter because filter looks only on string prefix. That\u0027s why we get additional resources","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2e9522e4ac9a61ba09ea23e60ebca234e50d5693","unresolved":false,"context_lines":[{"line_number":733,"context_line":"    def row(self, key, columns\u003dNone):"},{"line_number":734,"context_line":"        if key not in self._rows_with_ts:"},{"line_number":735,"context_line":"            return {}"},{"line_number":736,"context_line":"        res \u003d copy.copy(sorted(self._rows_with_ts.get(key).iteritems())[-1][1])"},{"line_number":737,"context_line":"        if columns:"},{"line_number":738,"context_line":"            keys \u003d res.keys()"},{"line_number":739,"context_line":"            for key in keys:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_126f6cc6","line":736,"updated":"2014-06-10 19:42:59.000000000","message":"should be using six.iteritems","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"332a00ca4f054a42be908ceaced9f667fb449431","unresolved":false,"context_lines":[{"line_number":733,"context_line":"    def row(self, key, columns\u003dNone):"},{"line_number":734,"context_line":"        if key not in self._rows_with_ts:"},{"line_number":735,"context_line":"            return {}"},{"line_number":736,"context_line":"        res \u003d copy.copy(sorted(self._rows_with_ts.get(key).iteritems())[-1][1])"},{"line_number":737,"context_line":"        if columns:"},{"line_number":738,"context_line":"            keys \u003d res.keys()"},{"line_number":739,"context_line":"            for key in keys:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_595c9e4b","line":736,"in_reply_to":"1ae5cdf2_126f6cc6","updated":"2014-06-11 12:50:09.000000000","message":"Done","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2e9522e4ac9a61ba09ea23e60ebca234e50d5693","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        # sorted by ts, i.e. in this list ts_2 is the most latest."},{"line_number":769,"context_line":"        # To get result as HBase provides we should iterate in reverse order"},{"line_number":770,"context_line":"        # and get from \"latest\" data only key-values that are not in newer data"},{"line_number":771,"context_line":"        res \u003d sorted(self._rows_with_ts[row].iteritems())"},{"line_number":772,"context_line":"        data \u003d {}"},{"line_number":773,"context_line":"        for i in res[::-1]:"},{"line_number":774,"context_line":"            temp_data \u003d i[1]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_12212c9f","line":771,"updated":"2014-06-10 19:42:59.000000000","message":"this could be a lot simpler (ie. no need to sort and traverse in reverse.)\n\ndata \u003d {}\nfor i in six.iteritems(self._rows_with_ts[row]):\n    data.update(i[1])\nreturn data","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3b09c0dd63fa3d19c94524acd4f97a64f9e05e0c","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        # sorted by ts, i.e. in this list ts_2 is the most latest."},{"line_number":769,"context_line":"        # To get result as HBase provides we should iterate in reverse order"},{"line_number":770,"context_line":"        # and get from \"latest\" data only key-values that are not in newer data"},{"line_number":771,"context_line":"        res \u003d sorted(self._rows_with_ts[row].iteritems())"},{"line_number":772,"context_line":"        data \u003d {}"},{"line_number":773,"context_line":"        for i in res[::-1]:"},{"line_number":774,"context_line":"            temp_data \u003d i[1]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_52f8147c","line":771,"in_reply_to":"1ae5cdf2_12212c9f","updated":"2014-06-10 20:10:34.000000000","message":"err...apparently you need to sort:\n\ndata \u003d {}\nfor i in sorted(six.iteritems(self._rows_with_ts[row])):\n    data.update(i[1])\nreturn data","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"332a00ca4f054a42be908ceaced9f667fb449431","unresolved":false,"context_lines":[{"line_number":768,"context_line":"        # sorted by ts, i.e. in this list ts_2 is the most latest."},{"line_number":769,"context_line":"        # To get result as HBase provides we should iterate in reverse order"},{"line_number":770,"context_line":"        # and get from \"latest\" data only key-values that are not in newer data"},{"line_number":771,"context_line":"        res \u003d sorted(self._rows_with_ts[row].iteritems())"},{"line_number":772,"context_line":"        data \u003d {}"},{"line_number":773,"context_line":"        for i in res[::-1]:"},{"line_number":774,"context_line":"            temp_data \u003d i[1]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_9952a633","line":771,"in_reply_to":"1ae5cdf2_52f8147c","updated":"2014-06-11 12:50:09.000000000","message":"Done","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2e9522e4ac9a61ba09ea23e60ebca234e50d5693","unresolved":false,"context_lines":[{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        if columns:"},{"line_number":792,"context_line":"            ret \u003d {}"},{"line_number":793,"context_line":"            for row, data in rows.iteritems():"},{"line_number":794,"context_line":"                for key in data:"},{"line_number":795,"context_line":"                    if key in columns:"},{"line_number":796,"context_line":"                        ret[row] \u003d data"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_726350dd","line":793,"updated":"2014-06-10 19:42:59.000000000","message":"six.iteritems","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"332a00ca4f054a42be908ceaced9f667fb449431","unresolved":false,"context_lines":[{"line_number":790,"context_line":""},{"line_number":791,"context_line":"        if columns:"},{"line_number":792,"context_line":"            ret \u003d {}"},{"line_number":793,"context_line":"            for row, data in rows.iteritems():"},{"line_number":794,"context_line":"                for key in data:"},{"line_number":795,"context_line":"                    if key in columns:"},{"line_number":796,"context_line":"                        ret[row] \u003d data"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_f9380af0","line":793,"in_reply_to":"1ae5cdf2_726350dd","updated":"2014-06-11 12:50:09.000000000","message":"Done","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"f3d231a2223a71974c322d101572eea76a6ab288","unresolved":false,"context_lines":[{"line_number":892,"context_line":"                                              \"RowFilter doesn\u0027t support \""},{"line_number":893,"context_line":"                                              \"the %s operation yet\" % op)"},{"line_number":894,"context_line":"            except AttributeError:"},{"line_number":895,"context_line":"                pass"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    @staticmethod"},{"line_number":898,"context_line":"    def QualifierFilter(args, rows):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_37c5238e","line":895,"updated":"2014-06-11 09:38:24.000000000","message":"\"return\" is lost in this function","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"332a00ca4f054a42be908ceaced9f667fb449431","unresolved":false,"context_lines":[{"line_number":892,"context_line":"                                              \"RowFilter doesn\u0027t support \""},{"line_number":893,"context_line":"                                              \"the %s operation yet\" % op)"},{"line_number":894,"context_line":"            except AttributeError:"},{"line_number":895,"context_line":"                pass"},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"    @staticmethod"},{"line_number":898,"context_line":"    def QualifierFilter(args, rows):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_193e96da","line":895,"in_reply_to":"1ae5cdf2_37c5238e","updated":"2014-06-11 12:50:09.000000000","message":"Done","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2e9522e4ac9a61ba09ea23e60ebca234e50d5693","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        if mq:"},{"line_number":1193,"context_line":"            meter_q \u003d \" AND \".join(mq)"},{"line_number":1194,"context_line":"            meter_q \u003d _QualifierFilter(\"\u003e\u003d\", \u0027\u0027) + \" AND \" + meter_q"},{"line_number":1195,"context_line":"            query \u003d meter_q if not query else query + \u0027 AND \u0027 + meter_q"},{"line_number":1196,"context_line":"        return query"},{"line_number":1197,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_09e90780","line":1194,"updated":"2014-06-10 19:42:59.000000000","message":"what is this for?","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"332a00ca4f054a42be908ceaced9f667fb449431","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        if mq:"},{"line_number":1193,"context_line":"            meter_q \u003d \" AND \".join(mq)"},{"line_number":1194,"context_line":"            meter_q \u003d _QualifierFilter(\"\u003e\u003d\", \u0027\u0027) + \" AND \" + meter_q"},{"line_number":1195,"context_line":"            query \u003d meter_q if not query else query + \u0027 AND \u0027 + meter_q"},{"line_number":1196,"context_line":"        return query"},{"line_number":1197,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_7d3f85b4","line":1194,"in_reply_to":"1ae5cdf2_09e90780","updated":"2014-06-11 12:50:09.000000000","message":"I\u0027ve describen in comment in the next patch. To determine that if there is Qualifier filtering on meters we should do it only on qualifiers that starts with m_. _QualifierFilter(\"\u003e\u003d\", \u0027\u0027) returns \"(QualifierFilter (\u003e\u003d, \u0027binaryprefix:m_\u0027)\". But anyway I should change a sign here. It should be \u0027\u003d\u0027 instead of \u0027\u003e\u003d\u0027.","commit_id":"9f7968a3e532c467905b974cf8257ac1c3c77b99"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e334bf5aa0aa7e14ce7141fe8d7c13325ad77ea","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            return"},{"line_number":452,"context_line":"        with self.conn_pool.connection() as conn:"},{"line_number":453,"context_line":"            meter_table \u003d conn.table(self.METER_TABLE)"},{"line_number":454,"context_line":"            q, start, stop, columns \u003d make_sample_query_from_filter("},{"line_number":455,"context_line":"                sample_filter, require_meter\u003dFalse)"},{"line_number":456,"context_line":"            LOG.debug(_(\"Query Meter Table: %s\") % q)"},{"line_number":457,"context_line":"            gen \u003d meter_table.scan(filter\u003dq, row_start\u003dstart, row_stop\u003dstop,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_fd1e356f","line":454,"updated":"2014-06-11 13:43:21.000000000","message":"nit: columns can be replaced by __","commit_id":"a0667fe0404f097658752259de577ea011582391"}]}
