Advertisement
Guest User

Zookeeper SO_REUSEADDR Issue

a guest
Jul 1st, 2015
492
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.29 KB | None | 0 0
  1. package org.liptak.zookeeperissue;
  2.  
  3. import java.io.IOException;
  4. import java.net.BindException;
  5. import java.net.InetSocketAddress;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. import java.util.Properties;
  9.  
  10. import org.apache.zookeeper.server.ServerConfig;
  11. import org.apache.zookeeper.server.ZooKeeperServerMain;
  12. import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
  13. import org.apache.zookeeper.server.quorum.QuorumPeerConfig.ConfigException;
  14. import org.junit.Rule;
  15. import org.junit.Test;
  16. import org.junit.rules.TemporaryFolder;
  17.  
  18. public class ZookeeperIssue
  19. {
  20.     @Rule
  21.     public TemporaryFolder temporaryFolder = new TemporaryFolder();
  22.    
  23.     @Test(expected=BindException.class)
  24.     public void proveThatReCreatingTheSameServerSocketCanThrowBindException() throws IOException, ConfigException {
  25.         ServerSocket ss = null;
  26.         Socket s = null;
  27.         ZooKeeperServerMain server = null;
  28.         try {
  29.             ss = new ServerSocket();
  30.             ss.setSoTimeout(10000);
  31.             ss.setReuseAddress(false);
  32.             ss.bind( new InetSocketAddress("localhost", 0)); //using a random free port
  33.             int port = ss.getLocalPort();
  34.             s = new Socket();
  35.             s.setSoTimeout(10000);
  36.             InetSocketAddress address = new InetSocketAddress("localhost", port);
  37.             s.connect( address);
  38.             Socket accepted = ss.accept();
  39.             s.getOutputStream().write( "Foo".getBytes() );
  40.             accepted.getInputStream().read();
  41.             ss.close();
  42.             //I made a server socket and connected to it, then I closed the server socket.
  43.             //Now it must be in native TIMED_WAIT state.
  44.            
  45.             server = new ZooKeeperServerMain();
  46.            
  47.             Properties properties = new Properties();
  48.             properties.put("tickTime", "2000");
  49.             properties.put("dataDir", temporaryFolder.getRoot().getAbsolutePath() );
  50.             properties.put("clientPort", Integer.toString(port) );
  51.            
  52.             QuorumPeerConfig peerConfig = new QuorumPeerConfig();
  53.             peerConfig.parseProperties( properties );
  54.             ServerConfig serverConfig = new ServerConfig();
  55.             serverConfig.readFrom(peerConfig);
  56.            
  57.             server.runFromConfig( serverConfig );
  58.         }
  59.         finally {
  60.             if ( ss != null ) {
  61.                 try {
  62.                     ss.close();
  63.                 }
  64.                 catch( Exception e ) {
  65.                     e.printStackTrace();
  66.                 }
  67.             }
  68.             if ( s != null ) {
  69.                 try {
  70.                     s.close();
  71.                 }
  72.                 catch( Exception e ) {
  73.                     e.printStackTrace();
  74.                 }
  75.             }
  76.         }
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement