diff --git a/Controller.java b/Controller.java index 958245e50e741693f5cf053cc3cf9b86967ed1ea..884df89840567d8cfab2045c265a8efd92dec499 100644 --- a/Controller.java +++ b/Controller.java @@ -20,54 +20,6 @@ public class Controller { protected int timeout; //in milliseconds protected int rebalancePeriod; //How long to wait to start the next rebalance operation, in milliseconds - protected static class IndexEntry { - public static enum Status { - STORE_IN_PROGRESS, - STORE_COMPLETE, - REMOVE_IN_PROGRESS, - REMOVE_COMPLETE - } - - protected long filesize; - protected List<Integer> storedBy; - protected int numberToStore; - protected Status status; - - public IndexEntry() { - filesize = -1; - storedBy = Collections.synchronizedList(new ArrayList<Integer>()); - status = Status.STORE_IN_PROGRESS; - } - - public synchronized void setFilesize(long filesize) { - this.filesize = filesize; - } - - public synchronized long getFilesize() { - return filesize; - } - - public synchronized void addStoredBy(int dstore) { - storedBy.add(Integer.valueOf(dstore)); - } - - public synchronized void removeStoredBy(int dstore) { - storedBy.remove(Integer.valueOf(dstore)); - } - - public List<Integer> getStoredBy() { - return storedBy; - } - - public synchronized void setStatus(Status status) { - this.status = status; - } - - public synchronized Status getStatus() { - return status; - } - } - protected class Reloader extends ArrayList<Integer> { public long filesize; } @@ -79,6 +31,7 @@ public class Controller { protected Map<Socket,Reloader> loadRequests; protected RebalanceLock rebalanceLock; + protected StoreRemover remover; public Controller(int cport, int rFactor, int timeout, int rebalancePeriod) { this.cport = cport; @@ -89,6 +42,7 @@ public class Controller { index = Collections.synchronizedMap(new HashMap<String,IndexEntry>()); loadRequests = Collections.synchronizedMap(new HashMap<Socket,Reloader>()); rebalanceLock = new RebalanceLock(rebalancePeriod); + remover = new StoreRemover(dstores, index); try {ControllerLogger.init(Logger.LoggingType.ON_FILE_AND_TERMINAL);} catch(IOException e) {e.printStackTrace();} } @@ -141,7 +95,7 @@ public class Controller { if(message[0].equals(Protocol.JOIN_TOKEN)) { int portNumber = Integer.parseInt(message[1]); synchronized(rebalanceLock) { - dstores.put(portNumber, new DstoreConnection(client, portNumber, timeout)); + dstores.put(portNumber, new DstoreConnection(client, portNumber, timeout, remover)); System.out.println("Dstore at " + portNumber + " joined"); ControllerLogger.getInstance().dstoreJoined(client, portNumber); rebalanceLock.queueRebalance(); @@ -326,10 +280,6 @@ public class Controller { System.err.println("Dstore " + thisStore + " timed out receiving STORE_ACK for " + filename); } } - catch(DstoreDisconnectException e) { - e.printStackTrace(); - removeDstore(e); - } catch(DeadStoreException e) { System.err.println("Store for " + filename + " failed due to dead dstore"); } @@ -472,10 +422,6 @@ public class Controller { System.err.println("Dstore " + dstore + " timed out receiving REMOVE_ACK"); } } - catch(DstoreDisconnectException e) { - e.printStackTrace(); - removeDstore(e); - } catch(DeadStoreException e) { System.err.println("Remove for " + filename + " failed due to dead dstore"); } @@ -553,11 +499,6 @@ public class Controller { System.err.println("Dstore " + dstore + " timed out receiving file list"); } } - catch(DstoreDisconnectException e) { - e.printStackTrace(); - removeDstore(e); - listLatch.countDown(); - } catch(DeadStoreException e) {} }); thisThread.start(); @@ -574,7 +515,7 @@ public class Controller { Set<Integer> storesToRemove = new HashSet<Integer>(dstores.keySet()); storesToRemove.removeAll(dstoreFilesR.keySet()); for(Integer dstore : storesToRemove) { - removeDstore(dstores.get(dstore).getDisconnectData()); + remover.removeDstore(dstore, dstores.get(dstore).getSocket()); } dstoreFiles = new HashMap<Integer,List<String>>(dstoreFilesR); } @@ -602,10 +543,6 @@ public class Controller { latch.countDown(); } - catch(DstoreDisconnectException e) { - e.printStackTrace(); - removeDstore(e); - } catch(Exception e) {e.printStackTrace();} }).start(); } @@ -851,23 +788,6 @@ public class Controller { return messages; } - void removeDstore(DstoreDisconnectException e) { - Integer port = e.getConnection().getPort(); - synchronized(dstores) { - if(dstores.containsKey(port) && dstores.get(port).equals(e.getConnection())) dstores.remove(port); - } - - try {e.getConnection().getSocket().close();} catch(IOException ee) {} - - Iterator<IndexEntry> it; - synchronized(index) {it = index.values().iterator();} - while(it.hasNext()) { - it.next().removeStoredBy(port); - } - - rebalanceLock.queueRebalance(); - } - Iterator<Integer> sequenceIt = null; Object sequenceLock = new Object(); Integer nextStoreInSequence() { diff --git a/Dstore.java b/Dstore.java index f0eb5765f23510c8f6326ddda2d0b3bb5c653102..d7a0a89b3e8aedd2729419a9702d5358dc6547d7 100644 --- a/Dstore.java +++ b/Dstore.java @@ -169,11 +169,11 @@ public class Dstore { //Send STORE_ACK message to the Controller if(acknowledged) { + String controllerMessage = Protocol.STORE_ACK_TOKEN + " " + filename; synchronized(controllerOut) { - String controllerMessage = Protocol.STORE_ACK_TOKEN + " " + filename; controllerOut.println(controllerMessage); - messageSent(controllerSocket, controllerMessage); } + messageSent(controllerSocket, controllerMessage); } synchronized(fileSizes) { diff --git a/DstoreConnection.java b/DstoreConnection.java index d7cfa9445939ee24c320b4a53775cd5d61395bee..3b70d81560026f813e335c8f4f1b2f3646c904b2 100644 --- a/DstoreConnection.java +++ b/DstoreConnection.java @@ -19,19 +19,19 @@ public class DstoreConnection { protected BufferedReader reader; protected PrintWriter writer; protected boolean available; - protected boolean disconnectThrown; protected List<Message> queue; protected int timeout; + protected StoreRemover remover; - public DstoreConnection(Socket socket, int port, int timeout) { + public DstoreConnection(Socket socket, int port, int timeout, StoreRemover remover) { this.socket = socket; this.port = port; this.timeout = timeout; + this.remover = remover; try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream(), true); available = true; - disconnectThrown = false; queue = new ArrayList<Message>(); new Thread(new Receiver()).start(); } @@ -61,19 +61,9 @@ public class DstoreConnection { return socket; } - public DstoreDisconnectException getDisconnectData() { - return new DstoreDisconnectException(this); - } - - public void checkAvailable() throws DeadStoreException, DstoreDisconnectException { + public void checkAvailable() throws DeadStoreException { if(!available) { - if(!disconnectThrown) { - disconnectThrown = true; - throw getDisconnectData(); - } - else { - throw new DeadStoreException(this); - } + throw new DeadStoreException(this); } } @@ -130,6 +120,7 @@ public class DstoreConnection { if(message == null) { //Disconnect available = false; + remover.removeDstore(port, socket); } else { enqueue(message); @@ -138,7 +129,7 @@ public class DstoreConnection { } } - public String sendAndReceive(String message, String... expectedMessages) throws DstoreDisconnectException, DeadStoreException { + public String sendAndReceive(String message, String... expectedMessages) throws DeadStoreException { synchronized(writer) { checkAvailable(); writer.println(message); @@ -147,7 +138,7 @@ public class DstoreConnection { return receive(expectedMessages); } - public String receive(String... expectedMessages) throws DstoreDisconnectException, DeadStoreException { + public String receive(String... expectedMessages) throws DeadStoreException { class Timer implements Runnable { public boolean terminated = false; @@ -160,194 +151,14 @@ public class DstoreConnection { } } + checkAvailable(); String receivedMessage = null; Timer timer = new Timer(); new Thread(timer).start(); while(receivedMessage == null && !timer.terminated) { - checkAvailable(); receivedMessage = checkQueue(expectedMessages); - } - return receivedMessage; - } - - /* - public String sendAndReceive(String message, String... expectedMessages) throws DstoreDisconnectException, DeadStoreException { - System.out.println("Getting lock..."); - synchronized(this) { - try { - System.out.println("Lock acquired"); - checkAvailable(); - writer.println(message); - writer.flush(); - //System.out.println("Controller sent " + message + " to port " + port); - ControllerLogger.getInstance().messageSent(socket, message); - return localReceive(expectedMessages); - } - catch(NullPointerException e) { - System.out.println("Dstore at port " + port + " disconnected"); - available = false; - throw getDisconnectData(); - } - } - } - - public String receive(String... expectedMessages) throws DstoreDisconnectException, DeadStoreException { - String findMessage = checkQueue(expectedMessages); - if(findMessage != null) { - return findMessage; - } - - System.out.println("Getting lock..."); - synchronized(this) { - System.out.println("Lock acquired"); checkAvailable(); - - //Check the queue twice: once incase the receiver is busy, twice incase the message was added by the last thread - findMessage = checkQueue(expectedMessages); - if(findMessage != null) { - return findMessage; - } - - return localReceive(expectedMessages); - } - } - - //Check the queue for the message before trying to receive any new messages (if no expected message is specified, return the head of the queue) - protected String checkQueue(String[] expectedMessages) { - if(expectedMessages.length == 0) return null; - - Iterator<String> it; - synchronized(queue) { - it = queue.iterator(); - } - - while(it.hasNext()) { - String message = it.next(); - if(isExpected(message, expectedMessages)) { - queue.remove(message); - return message; - } - } - - return null; - } - - protected String localReceive(String[] expectedMessages) throws DstoreDisconnectException { - ReceiveContext rc = null; - try { - rc = new ReceiveContext(expectedMessages); - rc.start(); - if(rc.latch.await(timeout, TimeUnit.MILLISECONDS)) { - if(rc.disconnected()) throw getDisconnectData(); - else return rc.getReturnMessage(); - } - else { - rc.end(); - return ""; - } - } - catch(InterruptedException e) { - if(rc != null) rc.end(); - } - - return ""; - } - - protected boolean isExpected(String message, String[] expectedMessages) { - for(String s : expectedMessages) { - if(s.equals(message)) return true; - } - return false; - } - */ - - /* - //Seperate class for enabling timeouts while receiving messages - protected class ReceiveContext { - protected String[] expectedMessages; - protected String currentMessage; - protected String returnMessage; - protected Thread thread; - protected Body runnable; - protected boolean disconnected; - public CountDownLatch latch; - - public ReceiveContext(String[] expectedMessages) { - this.expectedMessages = expectedMessages; - currentMessage = null; - returnMessage = ""; - disconnected = false; - latch = new CountDownLatch(1); - } - - public class Body implements Runnable { - public boolean active = true; - - public void run() { - try { - do { - while(!reader.ready() && active) {} - if(!active) return; - currentMessage = reader.readLine(); - if(currentMessage == null) { - available = false; - disconnected = true; - break; - } - ControllerLogger.getInstance().messageReceived(socket, currentMessage); - if(expectedMessages.length > 0 && !isExpected(currentMessage, expectedMessages)) { - enqueue(); - } - } - while(currentMessage == null && active); - //System.out.println("Controller received " + message + " from port " + port); - returnMessage = currentMessage; - } - catch(SocketException e) { - System.err.println("Trying to receive messages from " + port + " but socket is closed"); - available = false; - disconnected = true; - returnMessage = ""; - } - catch(IOException e) { - e.printStackTrace(); - returnMessage = ""; - } - finally { - latch.countDown(); - } - } - - protected void enqueue() { - queue.add(currentMessage); - if(queue.size() > MAX_QUEUE_SIZE) queue.remove(0); - currentMessage = null; - } - } - - public String getReturnMessage() { - return returnMessage; - } - - public void start() { - runnable = new Body(); - thread = new Thread(runnable); - thread.start(); - } - - public void end() { - if(thread.isAlive()) { - thread.interrupt(); - runnable.active = false; - } - if(currentMessage != null) { - queue.add(currentMessage); - } - } - - public boolean disconnected() { - return disconnected; } + return receivedMessage; } - */ } diff --git a/DstoreDisconnectException.java b/DstoreDisconnectException.java deleted file mode 100644 index 76e55f2c419e81cd2c2be3e53d74e88bd0a2d1f9..0000000000000000000000000000000000000000 --- a/DstoreDisconnectException.java +++ /dev/null @@ -1,18 +0,0 @@ -import java.lang.Throwable; -import java.net.Socket; - -/* -DstoreDisconnectException is thrown by the DstoreConnection class when a dstore's output stream is null -*/ -public class DstoreDisconnectException extends Exception { - DstoreConnection connection; - - public DstoreDisconnectException(DstoreConnection connection) { - super("Dstore at port " + connection.getPort() + " has been disconnected"); - this.connection = connection; - } - - public DstoreConnection getConnection() { - return connection; - } -} diff --git a/IndexEntry.java b/IndexEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..bbf507e7598dc137a0e5cf8e8cc22651c86339c3 --- /dev/null +++ b/IndexEntry.java @@ -0,0 +1,51 @@ +import java.util.List; +import java.util.ArrayList; +import java.util.Collections; + +public class IndexEntry { + public static enum Status { + STORE_IN_PROGRESS, + STORE_COMPLETE, + REMOVE_IN_PROGRESS, + REMOVE_COMPLETE + } + + protected long filesize; + protected List<Integer> storedBy; + protected int numberToStore; + protected Status status; + + public IndexEntry() { + filesize = -1; + storedBy = Collections.synchronizedList(new ArrayList<Integer>()); + status = Status.STORE_IN_PROGRESS; + } + + public synchronized void setFilesize(long filesize) { + this.filesize = filesize; + } + + public synchronized long getFilesize() { + return filesize; + } + + public synchronized void addStoredBy(int dstore) { + storedBy.add(Integer.valueOf(dstore)); + } + + public synchronized void removeStoredBy(int dstore) { + storedBy.remove(Integer.valueOf(dstore)); + } + + public List<Integer> getStoredBy() { + return storedBy; + } + + public synchronized void setStatus(Status status) { + this.status = status; + } + + public synchronized Status getStatus() { + return status; + } +} diff --git a/StoreRemover.java b/StoreRemover.java new file mode 100644 index 0000000000000000000000000000000000000000..b086567e2df1a18b1c0f021e54a910b105405914 --- /dev/null +++ b/StoreRemover.java @@ -0,0 +1,31 @@ +import java.util.Map; +import java.util.HashMap; +import java.util.Iterator; +import java.net.Socket; +import java.io.IOException; + +public class StoreRemover { + protected Map<Integer,DstoreConnection> dstores; + protected Map<String,IndexEntry> index; + + public StoreRemover(Map<Integer,DstoreConnection> dstores, Map<String,IndexEntry> index) { + this.dstores = dstores; + this.index = index; + } + + public void removeDstore(Integer port, Socket socket) { + synchronized(dstores) { + if(!dstores.containsKey(port) || dstores.get(port).getSocket() != socket) return; + dstores.remove(port); + } + + Iterator<IndexEntry> it; + synchronized(index) {it = index.values().iterator();} + while(it.hasNext()) { + it.next().removeStoredBy(port); + } + + try {socket.close();} catch(IOException ee) {} + System.err.println("DSTORE AT " + port + " HAS BEEN DISCONNECTED"); + } +} diff --git a/error.txt b/error.txt index b1a82ddf353a0ab8e6b88f9ef4bfacd3824ff52a..fb9ebf034354e4e707a028d0cfe7a7c476b419e6 100644 --- a/error.txt +++ b/error.txt @@ -1,201 +1,88 @@ -FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists +FileAlreadyExistsException: Error trying to store file AllStar.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists +FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -FileAlreadyExistsException: Error trying to store file Look_Away.mp3 - file already exists +FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -FileAlreadyExistsException: Error trying to store file Look_Away.mp3 - file already exists +FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file AllStar.txt - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file Look_Away.mp3 - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file spurk.jpg - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +Store for AllStar.txt failed due to dead dstore +Store for PumpkinHill.txt failed due to dead dstore +DSTORE AT 8081 HAS BEEN DISCONNECTED +Store for Grandad.txt failed due to dead dstore +FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file spurk.jpg - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -Not all STORE_ACKs have been received FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:239) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) - at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file spurk.jpg - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) @@ -205,99 +92,28 @@ FileAlreadyExistsException: Error trying to store file spurk.jpg - file already at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) +FileAlreadyExistsException: Error trying to store file spurk.jpg - file already exists + at Client.a(SourceFile:277) + at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-9" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) +FileDoesNotExistException: Error trying to load or remove file SnowHalation.txt - file does not exist + at Client.remove(SourceFile:505) + at ClientMain.test2Client(ClientMain.java:57) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) +FileDoesNotExistException: Error trying to load or remove file SnowHalation.txt - file does not exist + at Client.remove(SourceFile:505) + at ClientMain.test2Client(ClientMain.java:57) at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:239) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) - at ClientMain$1.run(ClientMain.java:26) -Dstore 8087 timed out receiving STORE_ACK for spurk.jpg -Dstore 8089 timed out receiving STORE_ACK for spurk.jpg -Dstore 8089 timed out receiving STORE_ACK for Grandad.txt -Dstore 8094 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8088 timed out receiving STORE_ACK for spurk.jpg -Dstore 8090 timed out receiving STORE_ACK for spurk.jpg Not all STORE_ACKs have been received Not all STORE_ACKs have been received -Dstore 8085 timed out receiving STORE_ACK for Look_Away.mp3 -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-3" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) java.net.SocketTimeoutException: Read timed out at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) @@ -315,18 +131,7 @@ java.net.SocketTimeoutException: Read timed out at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-4" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) -Dstore 8086 timed out receiving STORE_ACK for AllStar.txt -Dstore 8083 timed out receiving STORE_ACK for AllStar.txt -Dstore 8094 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8087 timed out receiving STORE_ACK for Grandad.txt +Not all STORE_ACKs have been received java.net.SocketTimeoutException: Read timed out at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) @@ -340,27 +145,16 @@ java.net.SocketTimeoutException: Read timed out at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) + at Client.store(SourceFile:239) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -Dstore 8088 timed out receiving STORE_ACK for Grandad.txt -Dstore 8087 timed out receiving STORE_ACK for AllStar.txt -Not all STORE_ACKs have been received -FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists +FileAlreadyExistsException: Error trying to store file Unknown.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-7" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) java.net.SocketTimeoutException: Read timed out at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) @@ -378,201 +172,15 @@ java.net.SocketTimeoutException: Read timed out at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -Dstore 8085 timed out receiving STORE_ACK for AllStar.txt -FileAlreadyExistsException: Error trying to store file Unknown.txt - file already exists - at Client.a(SourceFile:277) - at Client.store(SourceFile:183) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) - at ClientMain$1.run(ClientMain.java:26) -FileAlreadyExistsException: Error trying to store file spurk.jpg - file already exists +FileAlreadyExistsException: Error trying to store file Look_Away.mp3 - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -Dstore 8093 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8095 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8091 timed out receiving STORE_ACK for spurk.jpg -Dstore 8084 timed out receiving STORE_ACK for Grandad.txt -Dstore 8095 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8090 timed out receiving STORE_ACK for Grandad.txt -Dstore 8093 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8086 timed out receiving STORE_ACK for spurk.jpg -Dstore 8089 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8085 timed out receiving STORE_ACK for Grandad.txt -Dstore 8081 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8091 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8087 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8092 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8090 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8092 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8091 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8088 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8092 timed out receiving STORE_ACK for spurk.jpg -Dstore 8093 timed out receiving STORE_ACK for spurk.jpg -FileAlreadyExistsException: Error trying to store file PumpkinHill.txt - file already exists +FileAlreadyExistsException: Error trying to store file Look_Away.mp3 - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -Not all STORE_ACKs have been received -Dstore 8085 timed out receiving STORE_ACK for SnowHalation.txt -java.io.IOException: Unexpected message received (STORE_COMPLETE was expected): STORE_TO 8091 8092 8093 8094 8095 8081 8082 8083 8084 8085 - at Client.store(SourceFile:254) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) - at ClientMain$1.run(ClientMain.java:26) -Not all STORE_ACKs have been received -Dstore 8083 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8086 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8084 timed out receiving STORE_ACK for SnowHalation.txt -Dstore 8082 timed out receiving STORE_ACK for SnowHalation.txt -java.io.IOException: Unexpected message received (STORE_COMPLETE was expected): STORE_TO 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 - at Client.store(SourceFile:254) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) - at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.store(SourceFile:177) - at Client.store(SourceFile:156) - at ClientMain.test2Client(ClientMain.java:44) - at ClientMain$1.run(ClientMain.java:26) -Dstore 8086 timed out receiving STORE_ACK for Grandad.txt -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-5" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-2" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) -Dstore 8095 timed out receiving STORE_ACK for spurk.jpg -Dstore 8094 timed out receiving STORE_ACK for spurk.jpg -java.io.IOException: Connection closed by the Controller - at Client.list(SourceFile:121) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-6" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.list(SourceFile:93) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-0" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) -Dstore 8091 timed out receiving STORE_ACK for PumpkinHill.txt -java.net.SocketTimeoutException: Read timed out - at java.base/sun.nio.ch.NioSocketImpl.timedRead(NioSocketImpl.java:283) - at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:309) - at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) - at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) - at java.base/java.net.Socket$SocketInputStream.read(Socket.java:982) - at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:297) - at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339) - at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188) - at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181) - at java.base/java.io.BufferedReader.fill(BufferedReader.java:161) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) - at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) - at Client.list(SourceFile:93) - at ClientMain.list(ClientMain.java:113) - at ClientMain.test2Client(ClientMain.java:52) - at ClientMain$1.run(ClientMain.java:26) -Exception in thread "Thread-8" java.lang.NullPointerException - at ClientMain.test2Client(ClientMain.java:54) - at ClientMain$1.run(ClientMain.java:26) -Dstore 8094 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8092 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8093 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8081 timed out receiving STORE_ACK for Unknown.txt -Dstore 8082 timed out receiving STORE_ACK for Unknown.txt -Dstore 8095 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8081 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8083 timed out receiving STORE_ACK for Unknown.txt -Dstore 8082 timed out receiving STORE_ACK for Grandad.txt -Dstore 8082 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8081 timed out receiving STORE_ACK for Grandad.txt -Not all STORE_ACKs have been received -Dstore 8085 timed out receiving STORE_ACK for Unknown.txt -Dstore 8083 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8083 timed out receiving STORE_ACK for Grandad.txt -Dstore 8084 timed out receiving STORE_ACK for Unknown.txt -Not all STORE_ACKs have been received -Not all STORE_ACKs have been received -Dstore 8084 timed out receiving STORE_ACK for PumpkinHill.txt -Dstore 8085 timed out receiving STORE_ACK for PumpkinHill.txt -DstoreDisconnectException: Dstore at port 8081 has been disconnected - at DstoreConnection.getDisconnectData(DstoreConnection.java:65) - at DstoreConnection.checkAvailable(DstoreConnection.java:72) - at DstoreConnection.sendAndReceive(DstoreConnection.java:143) - at Controller.lambda$rebalance$3(Controller.java:548) - at java.base/java.lang.Thread.run(Thread.java:832) -DstoreDisconnectException: Dstore at port 8082 has been disconnected - at DstoreConnection.getDisconnectData(DstoreConnection.java:65) - at DstoreConnection.checkAvailable(DstoreConnection.java:72) - at DstoreConnection.sendAndReceive(DstoreConnection.java:143) - at Controller.lambda$rebalance$3(Controller.java:548) - at java.base/java.lang.Thread.run(Thread.java:832) -DstoreDisconnectException: Dstore at port 8085 has been disconnected - at DstoreConnection.getDisconnectData(DstoreConnection.java:65) - at DstoreConnection.checkAvailable(DstoreConnection.java:72) - at DstoreConnection.sendAndReceive(DstoreConnection.java:143) - at Controller.lambda$rebalance$3(Controller.java:548) - at java.base/java.lang.Thread.run(Thread.java:832) -DstoreDisconnectException: Dstore at port 8084 has been disconnected - at DstoreConnection.getDisconnectData(DstoreConnection.java:65) - at DstoreConnection.checkAvailable(DstoreConnection.java:72) - at DstoreConnection.sendAndReceive(DstoreConnection.java:143) - at Controller.lambda$rebalance$3(Controller.java:548) - at java.base/java.lang.Thread.run(Thread.java:832) -DstoreDisconnectException: Dstore at port 8083 has been disconnected - at DstoreConnection.getDisconnectData(DstoreConnection.java:65) - at DstoreConnection.checkAvailable(DstoreConnection.java:72) - at DstoreConnection.sendAndReceive(DstoreConnection.java:143) - at Controller.lambda$rebalance$3(Controller.java:548) - at java.base/java.lang.Thread.run(Thread.java:832) -java.util.ConcurrentModificationException - at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1584) - at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1607) - at Controller.rebalance(Controller.java:544) - at Controller$RebalanceThread.runRebalance(Controller.java:210) - at Controller$RebalanceThread.run(Controller.java:198) - at java.base/java.lang.Thread.run(Thread.java:832)