)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4499cc23e985c2315e162affbc9f42921e549504","unresolved":false,"context_lines":[{"line_number":13,"context_line":"than bailing out right away."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I6f11a9775dea16135f45b00d3266476b39ec4da3"},{"line_number":16,"context_line":"Story: 2001798"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_67b8b929","line":16,"updated":"2018-05-02 12:03:22.000000000","message":"++","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"90493ec0f085521d03a3c8eea0afb2f0f4741d42","unresolved":false,"context_lines":[{"line_number":13,"context_line":"than bailing out right away."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I6f11a9775dea16135f45b00d3266476b39ec4da3"},{"line_number":16,"context_line":"Story: 2001798"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_be05987c","line":16,"updated":"2018-05-01 01:49:32.000000000","message":"nit: missing a task number","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5b06614e803668299c50ee21aef4ea7119b468f9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"than bailing out right away."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I6f11a9775dea16135f45b00d3266476b39ec4da3"},{"line_number":16,"context_line":"Story: 2001798"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_3d340efb","line":16,"in_reply_to":"9f6a8fd7_67b8b929","updated":"2018-05-02 14:15:36.000000000","message":"Done","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5b06614e803668299c50ee21aef4ea7119b468f9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"than bailing out right away."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I6f11a9775dea16135f45b00d3266476b39ec4da3"},{"line_number":16,"context_line":"Story: 2001798"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9f6a8fd7_1d310a0c","line":16,"in_reply_to":"9f6a8fd7_be05987c","updated":"2018-05-02 14:15:36.000000000","message":"Done","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"}],"virtualbmc/vbmc.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"693c39c81aa9c41282dcdcb36e5ad859f2a0b1e5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, retries\u003d5, interval\u003d3, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    while True:"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            return fun()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_7a712c0c","line":75,"range":{"start_line":75,"start_character":57,"end_line":75,"end_character":68},"updated":"2018-05-02 13:09:09.000000000","message":"Lets set domain\u003dself.domain_name if we can, or otherwise see if we can try and call it. That way it gets logged.","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4499cc23e985c2315e162affbc9f42921e549504","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, retries\u003d5, interval\u003d3, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    while True:"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            return fun()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_87b38d4d","line":75,"updated":"2018-05-02 12:03:22.000000000","message":"the arguments 3-5 are not used, please remove them or wire in somewhere. I guess you need to wire in the domain to solve the problem Bob spotted","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5b06614e803668299c50ee21aef4ea7119b468f9","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, retries\u003d5, interval\u003d3, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    while True:"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            return fun()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_78913499","line":75,"range":{"start_line":75,"start_character":57,"end_line":75,"end_character":68},"in_reply_to":"9f6a8fd7_7a712c0c","updated":"2018-05-02 14:15:36.000000000","message":"Done","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5b06614e803668299c50ee21aef4ea7119b468f9","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, retries\u003d5, interval\u003d3, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    while True:"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            return fun()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_d892c09f","line":75,"in_reply_to":"9f6a8fd7_87b38d4d","updated":"2018-05-02 14:15:36.000000000","message":"Done","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"90493ec0f085521d03a3c8eea0afb2f0f4741d42","unresolved":false,"context_lines":[{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, retries\u003d5, interval\u003d3, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    while True:"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            return fun()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        except exc as e:"},{"line_number":81,"context_line":"            LOG.warning(\u0027Error calling %(call)s for %(domain)s: %(error)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_3ef9887f","line":78,"updated":"2018-05-01 01:49:32.000000000","message":"lol, fun! :)","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5b06614e803668299c50ee21aef4ea7119b468f9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, retries\u003d5, interval\u003d3, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    while True:"},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            return fun()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        except exc as e:"},{"line_number":81,"context_line":"            LOG.warning(\u0027Error calling %(call)s for %(domain)s: %(error)s\u0027 %"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_dd3ab2e5","line":78,"in_reply_to":"9f6a8fd7_3ef9887f","updated":"2018-05-02 14:15:36.000000000","message":"Done","commit_id":"0b8a9b8328210fe64adb8730715e75aac85d08f7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8495ccd6c68076983184b9332c185b604dd6b2a0","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    retries \u003d 10"},{"line_number":77,"context_line":"    interval \u003d 3"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_eea49e0a","line":75,"updated":"2018-05-02 15:04:19.000000000","message":"I\u0027d prefer to not have a default value for \u0027domain\u0027","commit_id":"a608b35dd39e162949d83c1e0d39dc5f3086efaf"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"bce06431d53a71ba53e62466b8a3ad0a3a7b1eb3","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    retries \u003d 10"},{"line_number":77,"context_line":"    interval \u003d 3"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_c9cbd447","line":75,"in_reply_to":"9f6a8fd7_eea49e0a","updated":"2018-05-02 16:30:15.000000000","message":"Done","commit_id":"a608b35dd39e162949d83c1e0d39dc5f3086efaf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8495ccd6c68076983184b9332c185b604dd6b2a0","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    retries \u003d 10"},{"line_number":77,"context_line":"    interval \u003d 3"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    for retry in range(1, retries + 1):"},{"line_number":80,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_0ea8f2d8","line":77,"updated":"2018-05-02 15:04:19.000000000","message":"This should (eventually) be configured via the config file","commit_id":"a608b35dd39e162949d83c1e0d39dc5f3086efaf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8c3eb7176cfa229172bd19225dc9a0ce5637d907","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    retries \u003d 10"},{"line_number":77,"context_line":"    interval \u003d 3"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    for retry in range(1, retries + 1):"},{"line_number":80,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_8d6967bf","line":77,"in_reply_to":"9f6a8fd7_0ea8f2d8","updated":"2018-05-02 16:10:36.000000000","message":"Actually, 30 seconds to respond may be too much, esp. if we also enable retries in ironic. Maybe retries\u003d3 and interval\u003d1? or retries\u003d5, but probably no more than 5 seconds.","commit_id":"a608b35dd39e162949d83c1e0d39dc5f3086efaf"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"bce06431d53a71ba53e62466b8a3ad0a3a7b1eb3","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def retry_call(fun, exc\u003dException, domain\u003d\u0027?\u0027):"},{"line_number":76,"context_line":"    retries \u003d 10"},{"line_number":77,"context_line":"    interval \u003d 3"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    for retry in range(1, retries + 1):"},{"line_number":80,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_edba636c","line":77,"in_reply_to":"9f6a8fd7_8d6967bf","updated":"2018-05-02 16:30:15.000000000","message":"Well, the ironic\u0027s default is twice as large e.g. 60 secs.\n\nI think we\u0027ve observed today that 3 * 5 does not reliably help vbmc to get through libvirt outage...\n\nAlso, I do not think that retry count matters much. It\u0027s more  about waiting for libvirt to cough up...","commit_id":"a608b35dd39e162949d83c1e0d39dc5f3086efaf"},{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"652ec82fcb64a9b074697ba7e77bc42936fe27a0","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            # Command failed, but let client to retry"},{"line_number":181,"context_line":"            return IPMI_COMMAND_NODE_BUSY"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @retryable(readonly\u003dTrue, rc\u003dPOWEROFF)"},{"line_number":184,"context_line":"    def get_power_state(self, conn):"},{"line_number":185,"context_line":"        LOG.debug(\u0027Get power state called for domain %s\u0027, self.domain_name)"},{"line_number":186,"context_line":"        domain \u003d utils.get_libvirt_domain(conn, self.domain_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_911239b1","line":183,"range":{"start_line":183,"start_character":30,"end_line":183,"end_character":41},"updated":"2018-05-04 13:22:14.000000000","message":"This should return IPMI_COMMAND_NODE_BUSY, no?","commit_id":"5166c312a7d55c170521fd1d99736e431e91445c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5446b8d59587667c356003801cdd1d494889f627","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            # Command failed, but let client to retry"},{"line_number":181,"context_line":"            return IPMI_COMMAND_NODE_BUSY"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @retryable(readonly\u003dTrue, rc\u003dPOWEROFF)"},{"line_number":184,"context_line":"    def get_power_state(self, conn):"},{"line_number":185,"context_line":"        LOG.debug(\u0027Get power state called for domain %s\u0027, self.domain_name)"},{"line_number":186,"context_line":"        domain \u003d utils.get_libvirt_domain(conn, self.domain_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_74d39839","line":183,"range":{"start_line":183,"start_character":30,"end_line":183,"end_character":41},"in_reply_to":"5f7c97a3_911239b1","updated":"2018-05-08 13:50:22.000000000","message":"Given that we otherwise return POWEROFF... I kind of agree that we might want to return busy. Not doing so kind of just means that it is cheating and making this seem even more reliable....  I\u0027m personally kind of indifferent in that regard.","commit_id":"5166c312a7d55c170521fd1d99736e431e91445c"},{"author":{"_account_id":21909,"name":"Bob Fournier","email":"bfournie@redhat.com","username":"bfournie"},"change_message_id":"652ec82fcb64a9b074697ba7e77bc42936fe27a0","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        LOG.debug(\u0027Power diag called for domain %s\u0027, self.domain_name)"},{"line_number":195,"context_line":"        domain \u003d utils.get_libvirt_domain(conn, self.domain_name)"},{"line_number":196,"context_line":"        if domain.isActive():"},{"line_number":197,"context_line":"            domain.injectNMI(),"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @retryable()"},{"line_number":200,"context_line":"    def power_off(self, conn):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_316c8535","line":197,"range":{"start_line":197,"start_character":30,"end_line":197,"end_character":31},"updated":"2018-05-04 13:22:14.000000000","message":"nit - extra comma","commit_id":"5166c312a7d55c170521fd1d99736e431e91445c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5446b8d59587667c356003801cdd1d494889f627","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        LOG.debug(\u0027Power diag called for domain %s\u0027, self.domain_name)"},{"line_number":195,"context_line":"        domain \u003d utils.get_libvirt_domain(conn, self.domain_name)"},{"line_number":196,"context_line":"        if domain.isActive():"},{"line_number":197,"context_line":"            domain.injectNMI(),"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    @retryable()"},{"line_number":200,"context_line":"    def power_off(self, conn):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_943af495","line":197,"range":{"start_line":197,"start_character":30,"end_line":197,"end_character":31},"in_reply_to":"5f7c97a3_316c8535","updated":"2018-05-08 13:50:22.000000000","message":"I\u0027m surprised it passes validation.","commit_id":"5166c312a7d55c170521fd1d99736e431e91445c"}]}
