Github user afine commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/411#discussion_r147883484
  
    --- Diff: 
src/java/main/org/apache/zookeeper/server/quorum/CommitProcessor.java ---
    @@ -255,24 +255,23 @@ public void run() {
                             // If session queue != null, then it is also not 
empty.
                             Request topPending = sessionQueue.poll();
                             if (request.cxid != topPending.cxid) {
    -                            LOG.error(
    -                                    "Got cxid 0x"
    -                                            + 
Long.toHexString(request.cxid)
    -                                            + " expected 0x" + 
Long.toHexString(
    -                                                    topPending.cxid)
    -                                    + " for client session id "
    -                                    + Long.toHexString(request.sessionId));
    -                            throw new IOException("Error: unexpected cxid 
for"
    -                                    + "client session");
    +                            // we can get commit requests that are not at 
the queue head after
    +                            // a session moved (see ZOOKEEPER-2684). We 
will just pass the
    +                            // commit to the next processor and put the 
pending back with
    +                            // a warning, we should not see this often 
under normal load
    +                            LOG.warn("Got request " + request +
    +                                    " but we are expecting request " + 
topPending);
    +                            sessionQueue.addFirst(topPending);
    +                        } else {
    +                            /*
    +                             * We want to send our version of the request. 
the
    +                             * pointer to the connection in the request
    +                             */
    +                            topPending.setHdr(request.getHdr());
    --- End diff --
    
    Would you mind explaining why we normally want to send our version of the 
request and why it is ok not to in this case?


---

Reply via email to