From 7064cd33e83e6079431dc25f4b05341af62d8626 Mon Sep 17 00:00:00 2001 From: Tigran Mkrtchyan Date: Fri, 30 Jan 2015 11:46:23 +0100 Subject: [PATCH] nfs-proxy: remove proxy adapter on IO errors If we lost connection to pool, then makes no sense to keep adapter which always returns IO error Ticket: #8607 Acked-by: Karsten Schwank Target: master, 2.11, 2.10 Require-book: no Require-notes: no (cherry picked from commit 88daff7ffba72b80699e7d7f373e2c58510fd1da) Signed-off-by: Tigran Mkrtchyan --- .../chimera/nfsv41/door/proxy/DcapProxyIoFactory.java | 7 +++++++ .../org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java | 1 + .../org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java | 1 + 3 files changed, 9 insertions(+) diff --git a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java index 2d5355142d2..658817e3e53 100644 --- a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java +++ b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java @@ -194,6 +194,13 @@ public void notifyDisposed(NFS4State state) { } } + void shutdownAdapter(stateid4 stateid) { + ProxyIoAdapter adapter = _proxyIO.getIfPresent(stateid); + if (adapter != null) { + _proxyIO.invalidate(stateid); + tryToClose(adapter); + } + } @Override public void getInfo(PrintWriter pw) { pw.println(" Known proxy adapters (proxy-io):"); diff --git a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java index 913d9ec0765..25d258fd655 100644 --- a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java +++ b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java @@ -102,6 +102,7 @@ public void process(CompoundContext context, nfs_resop4 result) { _log.debug(he.getMessage()); }catch(IOException ioe) { _log.error("DSREAD: ", ioe); + proxyIoFactory.shutdownAdapter(_args.opread.stateid); res.status = nfsstat.NFSERR_IO; }catch(Exception e) { _log.error("DSREAD: ", e); diff --git a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java index cf6622d39a0..e09c5d31d1b 100644 --- a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java +++ b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java @@ -111,6 +111,7 @@ public void process(CompoundContext context, nfs_resop4 result) { _log.debug(he.getMessage()); }catch(IOException ioe) { _log.error("DSWRITE: {}", ioe.getMessage()); + proxyIoFactory.shutdownAdapter(_args.opwrite.stateid); res.status = nfsstat.NFSERR_IO; }catch(Exception e) { _log.error("DSWRITE: ", e);