)]}'
{"subunit2sql/db/api.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"97e40db0904989c47be358c4ce2e432e9eb4fb28","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"        models.Run.run_at.desc()).limit(num_runs).all()"},{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"def get_runs_counts_by_run_metadata(key, value, start_date\u003dNone, session\u003dNone):"},{"line_number":1575,"context_line":"    \"\"\"Check runs for a given run metadata pair"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    :param str key: The run_metadata key to check runs"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_c7970bea","line":1574,"updated":"2016-06-02 05:43:42.000000000","message":"No stop date param?","commit_id":"55b030f51330e9fa2f1b604c96ab4e939a5484bf"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"5e9e443c0258c18f1efd84bb23346c7690be00a0","unresolved":false,"context_lines":[{"line_number":1571,"context_line":"        models.Run.run_at.desc()).limit(num_runs).all()"},{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"def get_runs_counts_by_run_metadata(key, value, start_date\u003dNone, session\u003dNone):"},{"line_number":1575,"context_line":"    \"\"\"Check runs for a given run metadata pair"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    :param str key: The run_metadata key to check runs"}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_a2bf55ce","line":1574,"in_reply_to":"9abb7d3a_c7970bea","updated":"2016-06-02 06:06:43.000000000","message":"I\u0027m fine with adding it if you want. I just copy\u0026paste the get_recent_failed_runs_by_run_metadata() code :-P","commit_id":"55b030f51330e9fa2f1b604c96ab4e939a5484bf"},{"author":{"_account_id":9725,"name":"Dong Ma","email":"winterma.dong@gmail.com","username":"larainema"},"change_message_id":"34177d3ce08dd35cb895909897ff0069d00cd6c6","unresolved":false,"context_lines":[{"line_number":1581,"context_line":"    :param session: Optional session object if one isn\u0027t provided a new session"},{"line_number":1582,"context_line":"                    will be acquired for the duration of this operation"},{"line_number":1583,"context_line":""},{"line_number":1584,"context_line":"    :return boolean: True - The key-value pair exists. False - It doesn\u0027t."},{"line_number":1585,"context_line":"    \"\"\""},{"line_number":1586,"context_line":"    session \u003d session or get_session()"},{"line_number":1587,"context_line":"    query \u003d db_utils.model_query(models.Run, session).join("}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_9d31d0a4","line":1584,"updated":"2016-06-02 06:38:28.000000000","message":"I understood this method to validate a\nkey-value pair existence. But I thought the return result should be the count for a given run metadata pair here","commit_id":"55b030f51330e9fa2f1b604c96ab4e939a5484bf"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"a163983a7b6a66d12421fe870aa091dbce07399c","unresolved":false,"context_lines":[{"line_number":1581,"context_line":"    :param session: Optional session object if one isn\u0027t provided a new session"},{"line_number":1582,"context_line":"                    will be acquired for the duration of this operation"},{"line_number":1583,"context_line":""},{"line_number":1584,"context_line":"    :return boolean: True - The key-value pair exists. False - It doesn\u0027t."},{"line_number":1585,"context_line":"    \"\"\""},{"line_number":1586,"context_line":"    session \u003d session or get_session()"},{"line_number":1587,"context_line":"    query \u003d db_utils.model_query(models.Run, session).join("}],"source_content_type":"text/x-python","patch_set":2,"id":"9abb7d3a_fd39fcf2","line":1584,"in_reply_to":"9abb7d3a_9d31d0a4","updated":"2016-06-02 06:45:34.000000000","message":"wow, nice catch. I forgot to update this doc. I was thinking this at first. But I changed my mind.\n\nDONE","commit_id":"55b030f51330e9fa2f1b604c96ab4e939a5484bf"},{"author":{"_account_id":9725,"name":"Dong Ma","email":"winterma.dong@gmail.com","username":"larainema"},"change_message_id":"a3c39fe3c6f1979f23869bb4a525f42f81bcaab0","unresolved":false,"context_lines":[{"line_number":1572,"context_line":""},{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"def get_runs_counts_by_run_metadata(key, value, start_date\u003dNone, session\u003dNone):"},{"line_number":1575,"context_line":"    \"\"\"Check runs for a given run metadata pair"},{"line_number":1576,"context_line":""},{"line_number":1577,"context_line":"    :param str key: The run_metadata key to check runs"},{"line_number":1578,"context_line":"    :param str value: The run_metadata value to check runs"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_644570b2","line":1575,"updated":"2016-06-02 09:52:10.000000000","message":"Sorry, I missed this line, this docstring also need update?","commit_id":"cdd16df4b163173827db28aa94f0916c7b5dda1b"},{"author":{"_account_id":6488,"name":"Clint Byrum","email":"clint@fewbar.com","username":"clint-fewbar"},"change_message_id":"6a1bab345deb02aa91d34691ce67b15208dbcc0d","unresolved":false,"context_lines":[{"line_number":1589,"context_line":"        models.RunMetadata, models.Run.id \u003d\u003d models.RunMetadata.run_id).filter("},{"line_number":1590,"context_line":"            models.RunMetadata.key \u003d\u003d key,"},{"line_number":1591,"context_line":"            models.RunMetadata.value \u003d\u003d value)"},{"line_number":1592,"context_line":"    query \u003d _filter_runs_by_date(query, start_date)"},{"line_number":1593,"context_line":"    return query.count()"},{"line_number":1594,"context_line":""},{"line_number":1595,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7aa08908_9ed94df6","line":1592,"updated":"2016-06-12 13:40:25.000000000","message":"This query is GREAT when start_date is within the last 30 days or so. However, because there\u0027s no index on the run_at column, it gets worse and worse the older the data:\n\nmysql\u003e EXPLAIN SELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-06-08\u0027;\n--------------\nEXPLAIN SELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-06-08\u0027\n--------------\n\n+----+-------------+--------------+-------+---------------------------+-----------+---------+---------------------+-------+--------------------------+\n| id | select_type | table        | type  | possible_keys             | key       | key_len | ref                 | rows  | Extra                    |\n+----+-------------+--------------+-------+---------------------------+-----------+---------+---------------------+-------+--------------------------+\n|  1 | SIMPLE      | runs         | range | PRIMARY,ix_run_at         | ix_run_at | 6       | NULL                | 12170 | Using where; Using index |\n|  1 | SIMPLE      | run_metadata | ref   | uq_run_metadata,ix_run_id | ix_run_id | 9       | subunit2sql.runs.id |     6 | Using index              |\n+----+-------------+--------------+-------+---------------------------+-----------+---------+---------------------+-------+--------------------------+\n2 rows in set (0.06 sec)\n\nmysql\u003e SELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-06-08\u0027;\n--------------\nSELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-06-08\u0027\n--------------\n\n+----------+\n| COUNT(*) |\n+----------+\n|    87076 |\n+----------+\n1 row in set (0.14 sec)\n\n\nmysql\u003e SELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-01-01\u0027 AND `key` \u003d \u0027build_branch\u0027 AND `value` \u003d \u0027master\u0027;\n--------------\nSELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-01-01\u0027 AND `key` \u003d \u0027build_branch\u0027 AND `value` \u003d \u0027master\u0027\n--------------\n\n+----------+\n| COUNT(*) |\n+----------+\n|    93308 |\n+----------+\n1 row in set (2.23 sec)\n\nmysql\u003e EXPLAIN SELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-01-01\u0027 AND `key` \u003d \u0027build_branch\u0027 AND `value` \u003d \u0027master\u0027;\n--------------\nEXPLAIN SELECT COUNT(*) FROM run_metadata INNER JOIN runs ON runs.id \u003d run_metadata.run_id WHERE runs.run_at \u003e\u003d \u00272016-01-01\u0027 AND `key` \u003d \u0027build_branch\u0027 AND `value` \u003d \u0027master\u0027\n--------------\n\n+----+-------------+--------------+-------+--------------------------------------------+-----------------+---------+---------------------------------+-------+--------------------------+\n| id | select_type | table        | type  | possible_keys                              | key             | key_len | ref                             | rows  | Extra                    |\n+----+-------------+--------------+-------+--------------------------------------------+-----------------+---------+---------------------------------+-------+--------------------------+\n|  1 | SIMPLE      | runs         | range | PRIMARY,ix_run_at                          | ix_run_at       | 6       | NULL                            | 62725 | Using where; Using index |\n|  1 | SIMPLE      | run_metadata | ref   | uq_run_metadata,ix_run_key_value,ix_run_id | uq_run_metadata | 1545    | subunit2sql.runs.id,const,const |     1 | Using where; Using index |\n+----+-------------+--------------+-------+--------------------------------------------+-----------------+---------+---------------------------------+-------+--------------------------+\n2 rows in set (0.06 sec)\n\n\nStill, 2.23 seconds is probably a lot better than some of the other queries we already have.","commit_id":"cdd16df4b163173827db28aa94f0916c7b5dda1b"}]}
