• P
    Remove forceEos mechanism for TCP interconnect · 041d9399
    Pengzhou Tang 提交于
    In TCP interconnect, the sender used to force an EOS messages to the
    receiver in two cases:
    1. cancelUnfinished is true in mppExecutorFinishup.
    2. an error occurs.
    
    For case1, the comment says: to finish a cursor, the QD used to send
    a cancel to the QEs, QEs then set the cancelUnfinished flag and did
    a normal executor finish up. We now use QueryFinishPending mechanism
    to stop a cursor, so case1 logic is invalid for a long time.
    
    For case2, the purpose is: when an error occurs, we force an EOS to
    the receiver so the receiver didn't report an interconnect error and
    QD then will check the dispatch results and report the errors in the
    QEs. From the view of interconnect, we have selectedd to the end of
    the query and no error in the interconnect, this logic has two
    problems:
    1. it doesn't work for initplan, initplan will not check the dispatch
    results and throw the errors, so when an error occurs in the QEs for
    the initplan, the QD cannot notice that.
    2. it doesn't work for cursors, for example:
       DECLARE c1 cursor for select i from t1 where i / 0 = 1;
       FETCH all from c1;
       FETCH all from c1;
    All FETCH commands don't report errors which is not expected.
    
    This commit removed the forceEos mechanism, for the case2, the
    receiver will report an interconnect error without forceEos, this is
    ok because when multiple errors reports from QEs, the QD is inclined
    to report non-interconnect error.
    041d9399
ic.out 18.1 KB