List of usage examples for org.apache.hadoop.io IOUtils closeSocket
public static void closeSocket(Socket sock)
From source file:com.cloudera.hadoop.hdfs.nfs.rpc.ClientInputHandler.java
License:Apache License
@Override public void run() { InputStream in = null;/* w ww. j ava 2 s . co m*/ OutputStream out = null; RPCRequest request = null; try { mClient.setTcpNoDelay(true); mClient.setPerformancePreferences(0, 1, 0); in = mClient.getInputStream(); out = mClient.getOutputStream(); mOutputHandler = new ClientOutputHandler(out, mOutputBufferQueue, mClientName); mOutputHandler.setDaemon(true); mOutputHandler.start(); while (true) { // request is used to indicate if we should send // a failure packet in case of an error request = null; RPCBuffer requestBuffer = RPCBuffer.from(in); mHandler.incrementMetric(CLIENT_BYTES_READ, requestBuffer.length()); request = new RPCRequest(); request.read(requestBuffer); AccessPrivilege accessPrivilege = mSecurityHandlerFactory .getAccessPrivilege(mClient.getInetAddress()); if (request.getRpcVersion() != RPC_VERSION) { LOGGER.info(mSessionID + " Denying client due to bad RPC version " + request.getRpcVersion() + " for " + mClientName); throw new RPCDeniedException(RPC_REJECT_MISMATCH); } else if (accessPrivilege == AccessPrivilege.NONE) { throw new RPCAuthException(RPC_AUTH_STATUS_BADCRED); } else if (request.getCredentials() == null) { LOGGER.info(mSessionID + " Denying client due to null credentials for " + mClientName); throw new RPCAuthException(RPC_AUTH_STATUS_TOOWEAK); } else if (request.getProcedure() == NFS_PROC_NULL) { writeRPCBuffer(mSecurityHandlerFactory.handleNullRequest(mSessionID, mClientName, request, requestBuffer)); } else if (!(request.getCredentials() instanceof AuthenticatedCredentials)) { LOGGER.info(mSessionID + " Denying client due to non-authenticated " + "credentials for " + mClientName); throw new RPCAuthException(RPC_AUTH_STATUS_TOOWEAK); } else if (request.getProcedure() != NFS_PROC_COMPOUND) { throw new RPCAcceptedException(RPC_ACCEPT_PROC_UNAVAIL); } else { if (LOGGER.isDebugEnabled()) { LOGGER.debug(mSessionID + " Handling NFS Compound for " + mClientName); } SessionSecurityHandler<? extends Verifier> securityHandler = mSecurityHandlerFactory .getSecurityHandler(request.getCredentials()); if (!securityHandler.shouldSilentlyDrop(request)) { if (securityHandler.isUnwrapRequired()) { byte[] encryptedData = requestBuffer.readBytes(); requestBuffer = securityHandler.unwrap(request, encryptedData); } // if putIfAbsent returns non-null then the request is already in progress boolean inProgress = mRequestsInProgress.putIfAbsent(request.getXid(), System.currentTimeMillis()) != null; if (inProgress) { mHandler.incrementMetric(RESTRANSMITS, 1); LOGGER.info(mSessionID + " ignoring retransmit of " + request.getXidAsHexString()); } else { /* * TODO ensure credentials are the same for request/cached * response. */ MessageBase applicationResponse = mResponseCache.get(request.getXid()); if (applicationResponse != null) { writeApplicationResponse(securityHandler, request, applicationResponse); LOGGER.info( mSessionID + " serving cached response to " + request.getXidAsHexString()); } else { execute(securityHandler, accessPrivilege, request, requestBuffer); } } } } } } catch (EOFException e) { LOGGER.info(mSessionID + " Shutdown worker for client " + mClientName); } catch (RPCException e) { handleRPCException(request, e); } catch (Exception e) { LOGGER.error(mSessionID + " Error from client " + mClientName, e); if (request != null) { try { RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_ACCEPT); response.setAcceptState(RPC_ACCEPT_SYSTEM_ERR); response.setVerifier(new VerifierNone()); writeRPCResponse(response); } catch (Exception x) { LOGGER.error(mSessionID + " Error writing failure packet", x); } } } finally { if (mOutputHandler != null) { mOutputHandler.close(); } // pause for output handler drain it's queue try { Thread.sleep(1500L); } catch (InterruptedException e) { LOGGER.info("Interrupted while pausing for output handler"); } IOUtils.closeSocket(mClient); Map<Socket, ClientInputHandler<REQUEST, RESPONSE>> clients = mRPCServer.getClients(); clients.remove(mClient); } }
From source file:com.cloudera.hadoop.hdfs.nfs.rpc.ClientWorker.java
License:Apache License
public void run() { InputStream in = null;//w ww . j a v a 2 s. c o m OutputStream out = null; RPCRequest request = null; try { mClient.setTcpNoDelay(true); mClient.setPerformancePreferences(0, 1, 0); in = mClient.getInputStream(); out = mClient.getOutputStream(); mOutputHandler = new OutputStreamHandler(out, mOutputBufferQueue, mClientName); mOutputHandler.setDaemon(true); mOutputHandler.start(); while (true) { // request is used to indicate if we should send // a failure packet in case of an error request = null; if (mRetransmits >= mRestransmitPenaltyThreshold) { mRetransmits = 0L; mHandler.incrementMetric("RETRANSMIT_PENALTY_BOX", 1); Thread.sleep(RETRANSMIT_PENALTY_TIME); if (LOGGER.isDebugEnabled()) { LOGGER.debug( mSessionID + " Client " + mClientName + " is going in the penalty box (SLOWDOWN)"); } } mRetransmits = mRetransmits > 0 ? mRetransmits : 0; // Some requests will burn a thread while waiting for a // condition. For example close waits for writes to finish // and rename waits for a few ms for the file to close // if open. We should have an async return path. int count = 0; while (getRequestsInProgress().size() > mMaxPendingRequests && count++ < mMaxPendingRequestWaits) { mHandler.incrementMetric("TOO_MANY_PENDING_REQUESTS", 1); if (LOGGER.isDebugEnabled()) { LOGGER.debug(mSessionID + " Client " + mClientName + " is waiting for pending requests to finish (SLOWDOWN)"); } Thread.sleep(TOO_MANY_PENDING_REQUESTS_PAUSE); } RPCBuffer requestBuffer = RPCBuffer.from(in); LOGGER.info(mSessionID + " got request"); mHandler.incrementMetric("CLIENT_BYTES_READ", requestBuffer.length()); request = new RPCRequest(); request.read(requestBuffer); if (request.getRpcVersion() != RPC_VERSION) { LOGGER.info(mSessionID + " Denying client due to bad RPC version " + request.getRpcVersion() + " for " + mClientName); RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_DENIED); response.setAcceptState(RPC_REJECT_MISMATCH); response.setVerifier(new VerifierNone()); writeRPCResponse(response); } else if (request.getCredentials() == null) { LOGGER.info(mSessionID + " Denying client due to null credentials for " + mClientName); RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_DENIED); response.setAcceptState(RPC_REJECT_AUTH_ERROR); response.setAuthState(RPC_AUTH_STATUS_TOOWEAK); response.setVerifier(new VerifierNone()); writeRPCResponse(response); } else if (request.getProcedure() == NFS_PROC_NULL) { // RPCGSS uses the NULL proc to setup if (request.getCredentials() instanceof CredentialsGSS) { Pair<? extends Verifier, RPCBuffer> security = mSecurityHandler.initializeContext(request, requestBuffer); LOGGER.info(mSessionID + " Handling NFS NULL for GSS Procedure for " + mClientName); RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_ACCEPT); response.setAcceptState(RPC_ACCEPT_SUCCESS); response.setVerifier(security.getFirst()); writeRPCResponse(response, security.getSecond()); } else { LOGGER.info(mSessionID + " Handling NFS NULL Procedure for " + mClientName); RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_ACCEPT); response.setAcceptState(RPC_ACCEPT_SUCCESS); response.setVerifier(new VerifierNone()); writeRPCResponse(response); } } else if (!(request.getCredentials() instanceof AuthenticatedCredentials)) { LOGGER.info( mSessionID + " Denying client due to non-authenticated credentials for " + mClientName); RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_DENIED); response.setAcceptState(RPC_REJECT_AUTH_ERROR); response.setAuthState(RPC_AUTH_STATUS_TOOWEAK); response.setVerifier(new VerifierNone()); writeRPCResponse(response); } else if (!mSecurityHandler.hasAcceptableSecurity(request)) { LOGGER.info(mSessionID + " Denying client due to unacceptable credentials for " + mClientName); RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_DENIED); response.setAcceptState(RPC_REJECT_AUTH_ERROR); response.setAuthState(RPC_AUTH_STATUS_TOOWEAK); response.setVerifier(new VerifierNone()); writeRPCResponse(response); } else if (request.getProcedure() == NFS_PROC_COMPOUND) { if (LOGGER.isDebugEnabled()) { LOGGER.debug(mSessionID + " Handling NFS Compound for " + mClientName); } if (mSecurityHandler.isUnwrapRequired()) { byte[] encryptedData = requestBuffer.readBytes(); byte[] plainData = mSecurityHandler.unwrap(encryptedData); requestBuffer = new RPCBuffer(plainData); } Set<Integer> requestsInProgress = getRequestsInProgress(); synchronized (requestsInProgress) { if (requestsInProgress.contains(request.getXid())) { mRetransmits++; mHandler.incrementMetric("RESTRANSMITS", 1); LOGGER.info(mSessionID + " ignoring request " + request.getXid()); } else { mRetransmits--; requestsInProgress.add(request.getXid()); ClientTask<REQUEST, RESPONSE> task = new ClientTask<REQUEST, RESPONSE>( mClient.getInetAddress(), mSessionID, this, mHandler, request, requestBuffer); this.schedule(task); if (LOGGER.isDebugEnabled()) { LOGGER.debug(mSessionID + " scheduling request " + request.getXid()); } } } } else { throw new UnsupportedOperationException("Unknown Proc " + request.getProcedure()); } } } catch (EOFException e) { LOGGER.info(mSessionID + " Shutdown worker for client " + mClientName); } catch (Exception e) { LOGGER.error(mSessionID + " Error from client " + mClientName, e); if (request != null) { try { RPCResponse response = new RPCResponse(request.getXid(), RPC_VERSION); response.setReplyState(RPC_REPLY_STATE_DENIED); response.setAcceptState(RPC_ACCEPT_SYSTEM_ERR); writeRPCResponse(response); } catch (Exception x) { LOGGER.error(mSessionID + " Error writing failure packet", x); } } } finally { if (mOutputHandler != null) { mOutputHandler.close(); } IOUtils.closeSocket(mClient); Map<Socket, ClientWorker<REQUEST, RESPONSE>> clients = mRPCServer.getClients(); clients.remove(mClient); } }
From source file:com.cloudera.hadoop.hdfs.nfs.rpc.RPCServer.java
License:Apache License
public void shutdown() { // first close clients for (Socket client : mClients.keySet()) { ClientWorker<REQUEST, RESPONSE> worker = mClients.get(client); if (worker != null && worker.isAlive()) { worker.shutdown();/* w w w . java2s . co m*/ } IOUtils.closeSocket(client); } // then server if (mServer != null) { try { mServer.close(); } catch (Exception e) { } } }
From source file:com.endgame.binarypig.loaders.av.ClamScanDaemonLoader.java
License:Apache License
@Override public Tuple processFile(Text key, BytesWritable value, File binaryFile) throws IOException { boolean timedOut = false; Socket sock = null;//from w w w . j a va 2 s. co m BufferedReader in = null; OutputStream out = null; String result = ""; try { sock = new Socket(); if (getTimeoutMS() < (long) Integer.MAX_VALUE) { sock.setSoTimeout((int) getTimeoutMS()); } sock.connect(clamdEndoint); out = sock.getOutputStream(); in = new BufferedReader(new InputStreamReader(sock.getInputStream())); out.write(("nSCAN " + binaryFile.getAbsolutePath() + "\n").getBytes()); String data = in.readLine(); if (data != null) { result = data.substring(data.indexOf(':') + 1). // "remove the /path/to/file: " replace(" FOUND", ""). // no need for the "FOUND" string replaceAll("\\([a-f0-9:]+\\)$", "").trim(); // on some versions of clamscan, it adds (MD5:NUM) } } catch (SocketTimeoutException e) { result = ""; timedOut = true; } finally { IOUtils.closeSocket(sock); IOUtils.closeStream(in); IOUtils.closeStream(out); } getProtoTuple().clear(); getProtoTuple().add(key.toString()); getProtoTuple().add(timedOut); getProtoTuple().add(result); return getTupleFactory().newTuple(getProtoTuple()); }
From source file:com.endgame.binarypig.loaders.TextDaemonLoader.java
License:Apache License
private void close() { IOUtils.closeSocket(sock); IOUtils.closeStream(in); IOUtils.closeStream(out); }
From source file:com.mellanox.r4h.DFSClient.java
License:Apache License
/** * Connect to the given datanode's datantrasfer port, and return * the resulting IOStreamPair. This includes encryption wrapping, etc. *//*from ww w. ja v a 2 s . co m*/ private IOStreamPair connectToDN(DatanodeInfo dn, int timeout, LocatedBlock lb) throws IOException { boolean success = false; Socket sock = null; try { sock = socketFactory.createSocket(); String dnAddr = dn.getXferAddr(getConf().getConnectToDnViaHostname()); if (LOG.isDebugEnabled()) { LOG.debug("Connecting to datanode " + dnAddr); } NetUtils.connect(sock, NetUtils.createSocketAddr(dnAddr), timeout); sock.setSoTimeout(timeout); OutputStream unbufOut = NetUtils.getOutputStream(sock); InputStream unbufIn = NetUtils.getInputStream(sock); IOStreamPair ret = saslClient.newSocketSend(sock, unbufOut, unbufIn, this, lb.getBlockToken(), dn); success = true; return ret; } finally { if (!success) { IOUtils.closeSocket(sock); } } }
From source file:com.mellanox.r4h.DFSClient.java
License:Apache License
@Override // RemotePeerFactory public Peer newConnectedPeer(InetSocketAddress addr, Token<BlockTokenIdentifier> blockToken, DatanodeID datanodeId) throws IOException { Peer peer = null;/*from w w w. j a v a 2 s. co m*/ boolean success = false; Socket sock = null; try { sock = socketFactory.createSocket(); NetUtils.connect(sock, addr, getRandomLocalInterfaceAddr(), dfsClientConf.getSocketTimeout()); peer = TcpPeerServer.peerFromSocketAndKey(saslClient, sock, this, blockToken, datanodeId); peer.setReadTimeout(dfsClientConf.socketTimeout()); success = true; return peer; } finally { if (!success) { IOUtils.cleanup(LOG, peer); IOUtils.closeSocket(sock); } } }
From source file:org.apache.ambari.servicemonitor.probes.PortProbe.java
License:Apache License
/** * Try to connect to the (host,port); a failure to connect within * the specified timeout is a failure/* w ww. j a v a 2 s . c o m*/ * @param livePing is the ping live: true for live; false for boot time * @return the outcome */ @Override public ProbeStatus ping(boolean livePing) { ProbeStatus status = new ProbeStatus(); InetSocketAddress sockAddr = new InetSocketAddress(host, port); Socket socket = new Socket(); try { if (LOG.isDebugEnabled()) { LOG.debug("Connecting to " + sockAddr.toString() + " connection-timeout=" + MonitorUtils.millisToHumanTime(timeout)); } socket.connect(sockAddr, timeout); status.succeed(this); } catch (IOException e) { String error = "Probe " + sockAddr + " failed: " + e; LOG.debug(error, e); status.fail(this, new IOException(error, e)); } finally { IOUtils.closeSocket(socket); } return status; }
From source file:org.apache.hoya.servicemonitor.PortProbe.java
License:Apache License
/** * Try to connect to the (host,port); a failure to connect within * the specified timeout is a failure//from w w w. j a v a 2 s.com * @param livePing is the ping live: true for live; false for boot time * @return the outcome */ @Override public ProbeStatus ping(boolean livePing) { ProbeStatus status = new ProbeStatus(); InetSocketAddress sockAddr = new InetSocketAddress(host, port); Socket socket = new Socket(); try { if (log.isDebugEnabled()) { log.debug("Connecting to " + sockAddr.toString() + " connection-timeout=" + MonitorUtils.millisToHumanTime(timeout)); } socket.connect(sockAddr, timeout); status.succeed(this); } catch (IOException e) { String error = "Probe " + sockAddr + " failed: " + e; log.debug(error, e); status.fail(this, new IOException(error, e)); } finally { IOUtils.closeSocket(socket); } return status; }
From source file:org.apache.hoya.tools.HoyaUtils.java
License:Apache License
@SuppressWarnings("SocketOpenedButNotSafelyClosed") public static void checkPort(String name, InetSocketAddress address, int connectTimeout) throws IOException { Socket socket = null;//from w w w .j a v a 2 s.c om try { socket = new Socket(); socket.connect(address, connectTimeout); } catch (Exception e) { throw new IOException("Failed to connect to " + name + " at " + address + " after " + connectTimeout + "millisconds" + ": " + e, e); } finally { IOUtils.closeSocket(socket); } }