Repository: incubator-trafodion Updated Branches: refs/heads/master e8bdaba98 -> d283c95ee
TRAFODION-2717 odb give wrong data and dcsmaster hang Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/3b9cb971 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/3b9cb971 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/3b9cb971 Branch: refs/heads/master Commit: 3b9cb971136e93a65ad9e8570a15bf8180dad273 Parents: 93bb3df Author: mashengchen <mashengc...@gmail.com> Authored: Wed Aug 16 03:25:22 2017 +0000 Committer: mashengchen <mashengc...@gmail.com> Committed: Wed Aug 16 03:25:22 2017 +0000 ---------------------------------------------------------------------- .../dcs/master/listener/ListenerWorker.java | 64 +++++++++++--------- .../dcs/master/listener/RequestCancelQuery.java | 10 ++- .../master/listener/RequestGetObjectRef.java | 8 ++- .../dcs/master/listener/RequestUnknown.java | 6 +- 4 files changed, 52 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b9cb971/dcs/src/main/java/org/trafodion/dcs/master/listener/ListenerWorker.java ---------------------------------------------------------------------- diff --git a/dcs/src/main/java/org/trafodion/dcs/master/listener/ListenerWorker.java b/dcs/src/main/java/org/trafodion/dcs/master/listener/ListenerWorker.java index 182e437..3683618 100644 --- a/dcs/src/main/java/org/trafodion/dcs/master/listener/ListenerWorker.java +++ b/dcs/src/main/java/org/trafodion/dcs/master/listener/ListenerWorker.java @@ -86,39 +86,43 @@ public class ListenerWorker extends Thread { DataEvent dataEvent; while(true) { - // Wait for data to become available - synchronized(queue) { - while(queue.isEmpty()) { - try { - queue.wait(); - } catch (InterruptedException e) { + try { + // Wait for data to become available + synchronized(queue) { + while(queue.isEmpty()) { + try { + queue.wait(); + } catch (InterruptedException e) { + } } + dataEvent = queue.remove(0); } - dataEvent = queue.remove(0); - } - SelectionKey key = dataEvent.key; - SocketChannel client = (SocketChannel) key.channel(); - Socket s = client.socket(); - ClientData clientData = (ClientData) key.attachment(); - ListenerService server = dataEvent.server; - dataEvent.key = null; - dataEvent.server = null; - - switch (clientData.hdr.getOperationId()){ - case ListenerConstants.DCS_MASTER_GETSRVRAVAILABLE: - clientData = requestGetObjectRef.processRequest(clientData, s); - break; - case ListenerConstants.DCS_MASTER_CANCELQUERY: - clientData = requestCancelQuery.processRequest(clientData, s); - break; - default: - clientData = requestUnknown.processRequest(clientData, s); - break; + SelectionKey key = dataEvent.key; + SocketChannel client = (SocketChannel) key.channel(); + Socket s = client.socket(); + ClientData clientData = (ClientData) key.attachment(); + ListenerService server = dataEvent.server; + dataEvent.key = null; + dataEvent.server = null; + + switch (clientData.hdr.getOperationId()){ + case ListenerConstants.DCS_MASTER_GETSRVRAVAILABLE: + clientData = requestGetObjectRef.processRequest(clientData, s); + break; + case ListenerConstants.DCS_MASTER_CANCELQUERY: + clientData = requestCancelQuery.processRequest(clientData, s); + break; + default: + clientData = requestUnknown.processRequest(clientData, s); + break; + } + // Return to sender + int requestReply = clientData.requestReply; + key.attach(clientData); + server.send(new PendingRequest(key, requestReply)); + } catch (Exception e){ + LOG.error("Unexpected Exception", e); } - // Return to sender - int requestReply = clientData.requestReply; - key.attach(clientData); - server.send(new PendingRequest(key, requestReply)); } } } http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b9cb971/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestCancelQuery.java ---------------------------------------------------------------------- diff --git a/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestCancelQuery.java b/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestCancelQuery.java index f0ba9c5..da6040a 100644 --- a/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestCancelQuery.java +++ b/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestCancelQuery.java @@ -189,15 +189,19 @@ public class RequestCancelQuery { clientData.hdr = hdr; } catch (UnsupportedEncodingException ue){ if(LOG.isErrorEnabled()) - LOG.error("RequestCancelQuery.UnsupportedEncodingException: " + s.getRemoteSocketAddress() + ": " + ue.getMessage() ); + LOG.error("RequestCancelQuery.UnsupportedEncodingException: " + s.getRemoteSocketAddress() + ": " + ue.getMessage(), ue); cancelConnection = true; } catch (KeeperException ke){ if(LOG.isErrorEnabled()) - LOG.error("RequestCancelQuery.KeeperException: " + s.getRemoteSocketAddress() + ": " + ke.getMessage() ); + LOG.error("RequestCancelQuery.KeeperException: " + s.getRemoteSocketAddress() + ": " + ke.getMessage(), ke); cancelConnection = true; } catch (InterruptedException ie){ if(LOG.isErrorEnabled()) - LOG.error("RequestCancelQuery.InterruptedException: " + s.getRemoteSocketAddress() + ": " + ie.getMessage() ); + LOG.error("RequestCancelQuery.InterruptedException: " + s.getRemoteSocketAddress() + ": " + ie.getMessage(), ie); + cancelConnection = true; + } catch (Exception e){ + if(LOG.isErrorEnabled()) + LOG.error("RequestCancelQuery.Exception: " + s.getRemoteSocketAddress() + ": " + e.getMessage(), e); cancelConnection = true; } header = null; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b9cb971/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestGetObjectRef.java ---------------------------------------------------------------------- diff --git a/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestGetObjectRef.java b/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestGetObjectRef.java index a24106d..62f9d99 100644 --- a/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestGetObjectRef.java +++ b/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestGetObjectRef.java @@ -57,11 +57,15 @@ public class RequestGetObjectRef { replyException = buildConnectReply(clientData); } catch (UnsupportedEncodingException ue){ if(LOG.isErrorEnabled()) - LOG.error("Exception in RequestGetObjectRef: " + s.getRemoteSocketAddress() + ": " + ue.getMessage() ); + LOG.error("UnsupportedEncodingException in RequestGetObjectRef: " + s.getRemoteSocketAddress() + ": " + ue.getMessage(), ue); cancelConnection = true; } catch (IOException io){ if(LOG.isErrorEnabled()) - LOG.error("Exception in RequestGetObjectRef: " + s.getRemoteSocketAddress() + ": " + io.getMessage()); + LOG.error("IOException in RequestGetObjectRef: " + s.getRemoteSocketAddress() + ": " + io.getMessage(), io); + cancelConnection = true; + } catch (Exception e){ + if(LOG.isErrorEnabled()) + LOG.error("Exception in RequestGetObjectRef: " + s.getRemoteSocketAddress() + ": " + e.getMessage(), e); cancelConnection = true; } // Return to sender http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/3b9cb971/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestUnknown.java ---------------------------------------------------------------------- diff --git a/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestUnknown.java b/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestUnknown.java index e0569d4..1e5e566 100644 --- a/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestUnknown.java +++ b/dcs/src/main/java/org/trafodion/dcs/master/listener/RequestUnknown.java @@ -76,7 +76,11 @@ public class RequestUnknown { clientData.hdr = hdr; } catch (UnsupportedEncodingException ue){ if(LOG.isErrorEnabled()) - LOG.error("Exception in RequestUnknown: " + s.getRemoteSocketAddress() + ": " + ue.getMessage() ); + LOG.error("UnsupportedEncodingException in RequestUnknown: " + s.getRemoteSocketAddress() + ": " + ue.getMessage(), ue); + cancelConnection = true; + } catch (Exception e){ + if(LOG.isErrorEnabled()) + LOG.error("Exception in RequestUnknown: " + s.getRemoteSocketAddress() + ": " + e.getMessage(), e); cancelConnection = true; } header = null;