)]}'
{"oslo_messaging/rpc/client.py":[{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"af39edefbc6ecb1c005af2a497dc19935cdac69b","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                      0 means no retry is attempted."},{"line_number":348,"context_line":"                      N means attempt at most N retries."},{"line_number":349,"context_line":"        :type retry: int"},{"line_number":350,"context_line":"        :param heartbeat_timeout: an optional timeout for active call"},{"line_number":351,"context_line":"                                  heartbeating."},{"line_number":352,"context_line":"        :type heartbeat_timeout: int"},{"line_number":353,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_51b71c3b","line":350,"updated":"2018-03-14 20:52:42.000000000","message":"Why not just make this a boolean and use timeout/2 as the heartbeat interval?\n\nIf the timeout parameter is not given there\u0027s no real need for a heartbeat since the call will never time out.\n\nOtherwise any heartbeat interval \u003c timeout/2 is probably overkill, and anything larger makes dropping a heartbeat likely to cause a timeout.\n\nI\u0027m ok with just having a boolean heartbeat parameter (off by default).","commit_id":"52c78ee0e4c014041b64237b85ecc25b792ff249"},{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"c9aaaab5d9f78ef8f817123f7bc25f31f251d3ad","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                      0 means no retry is attempted."},{"line_number":348,"context_line":"                      N means attempt at most N retries."},{"line_number":349,"context_line":"        :type retry: int"},{"line_number":350,"context_line":"        :param heartbeat_timeout: an optional timeout for active call"},{"line_number":351,"context_line":"                                  heartbeating."},{"line_number":352,"context_line":"        :type heartbeat_timeout: int"},{"line_number":353,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_c79a7c60","line":350,"in_reply_to":"9f6a8fd7_c4291a37","updated":"2018-04-24 15:16:56.000000000","message":"Ah!  I think I misunderstood the semantics of the api change.\n\nI thought this change would re-interpret the value of \u0027timeout\u0027 to apply to the heartbeat interval, essentially dictating the maximum time interval before the failure is detected.  That assumption means that there would effectively be no overall timeout - as long as the client was getting timely heartbeats the call would block indefinitely (e.g. there would be no hard deadline).  Only a heartbeat or connection/hard failure would terminate the call.\n\nSo the proposed behavior is to allow for a reasonably short heartbeat and a hard deadline?\n\nFor instance:\n\n# calls made by this client will fail if no heartbeat \n# is received within 30 second interval, OR after 1hour\n# if no rpc reply has been received (whichever occurs first\n#\nclient \u003d om.RPCClient(tport,\n                      target,\n                      timeout\u003d60*60,\n                      heartbeat_timeout\u003d30)\n\nIs that the proposed behavior?","commit_id":"52c78ee0e4c014041b64237b85ecc25b792ff249"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"77b81fe33251d4b85069374f334f97ec3fa5741b","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                      0 means no retry is attempted."},{"line_number":348,"context_line":"                      N means attempt at most N retries."},{"line_number":349,"context_line":"        :type retry: int"},{"line_number":350,"context_line":"        :param heartbeat_timeout: an optional timeout for active call"},{"line_number":351,"context_line":"                                  heartbeating."},{"line_number":352,"context_line":"        :type heartbeat_timeout: int"},{"line_number":353,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_ca5da179","line":350,"in_reply_to":"9f6a8fd7_c79a7c60","updated":"2018-04-24 16:04:53.000000000","message":"Yep, exactly. Probably confusing because I have\u0027t implemented the soft and hard deadlines in the code yet... Working on that in conjunction with a functional test now.","commit_id":"52c78ee0e4c014041b64237b85ecc25b792ff249"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fcca3b599d31c1f3192ac7e4529d99bf2aa8ce39","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                      0 means no retry is attempted."},{"line_number":348,"context_line":"                      N means attempt at most N retries."},{"line_number":349,"context_line":"        :type retry: int"},{"line_number":350,"context_line":"        :param heartbeat_timeout: an optional timeout for active call"},{"line_number":351,"context_line":"                                  heartbeating."},{"line_number":352,"context_line":"        :type heartbeat_timeout: int"},{"line_number":353,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_c4291a37","line":350,"in_reply_to":"df7087c5_51b71c3b","updated":"2018-04-24 14:44:46.000000000","message":"Well, I\u0027m thinking about how we would use this from Nova for something like live migration.\n\nLet\u0027s say we need to have our overall timeout be ten minutes for large guests (which is not at all unreasonable). If I don\u0027t have control over this then I would not know for five minutes that the other end isn\u0027t even there anymore, which is kinda the point of this heartbeating - to allow for long overall runtimes, but still be able to tell quickly when the remote has died.\n\nIf you want to stick to a boolean, how about if we take the heartbeat timeout to be:\n\n  min(60, timeout/2)\n\n?\n\nThat way we never get super long heartbeat intervals, but we also don\u0027t have to provide two timeouts?","commit_id":"52c78ee0e4c014041b64237b85ecc25b792ff249"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7b23bb7432ecf131d6608ea92b742cb4e03ab7a9","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def __init__(self, transport, target,"},{"line_number":329,"context_line":"                 timeout\u003dNone, version_cap\u003dNone, serializer\u003dNone, retry\u003dNone,"},{"line_number":330,"context_line":"                 heartbeat_timeout\u003dNone):"},{"line_number":331,"context_line":"        \"\"\"Construct an RPC client."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        :param transport: a messaging transport handle"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_851ddc74","line":330,"range":{"start_line":330,"start_character":17,"end_line":330,"end_character":39},"updated":"2018-05-08 15:59:56.000000000","message":"Testing this with real nova, if I pass this to the client it never gets used. Works if I pass it to prepare() though.","commit_id":"7f9eaab08a22fd784c8f280b03f139a3b81d278e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"217c6982d2e9a77efe85e92f774e30e45bb74afc","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def __init__(self, transport, target,"},{"line_number":329,"context_line":"                 timeout\u003dNone, version_cap\u003dNone, serializer\u003dNone, retry\u003dNone,"},{"line_number":330,"context_line":"                 heartbeat_timeout\u003dNone):"},{"line_number":331,"context_line":"        \"\"\"Construct an RPC client."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        :param transport: a messaging transport handle"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_40b572cc","line":330,"range":{"start_line":330,"start_character":17,"end_line":330,"end_character":39},"in_reply_to":"5f7c97a3_851ddc74","updated":"2018-05-08 16:24:17.000000000","message":"Nevermind, I missed a place where we regenerate the rpc client in nova. So, this is working fine.","commit_id":"7f9eaab08a22fd784c8f280b03f139a3b81d278e"}],"oslo_messaging/rpc/dispatcher.py":[{"author":{"_account_id":8770,"name":"Ken Giusti","email":"kgiusti@gmail.com","username":"kgiusti"},"change_message_id":"af39edefbc6ecb1c005af2a497dc19935cdac69b","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                    try:"},{"line_number":264,"context_line":"                        return self._do_dispatch(endpoint, method, ctxt, args)"},{"line_number":265,"context_line":"                    finally:"},{"line_number":266,"context_line":"                        completion_event.set()"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            found_compatible \u003d True"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_213d772a","line":266,"updated":"2018-03-14 20:52:42.000000000","message":"Probably want to join the watchdog thread before returning.  That way we\u0027re sure no heartbeats come after the reply is sent.","commit_id":"52c78ee0e4c014041b64237b85ecc25b792ff249"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fcca3b599d31c1f3192ac7e4529d99bf2aa8ce39","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                    try:"},{"line_number":264,"context_line":"                        return self._do_dispatch(endpoint, method, ctxt, args)"},{"line_number":265,"context_line":"                    finally:"},{"line_number":266,"context_line":"                        completion_event.set()"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            found_compatible \u003d True"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_e4d53e1d","line":266,"in_reply_to":"df7087c5_213d772a","updated":"2018-04-24 14:44:46.000000000","message":"Indeed :)","commit_id":"52c78ee0e4c014041b64237b85ecc25b792ff249"}]}
