diff --git a/Controller.java b/Controller.java index 07d5edc07365edc40ecff6b45de2d0cf9cce9331..d3fe6ff825dd111110f0b9ae66d32ce7899f15d0 100644 --- a/Controller.java +++ b/Controller.java @@ -14,12 +14,6 @@ import java.util.HashSet; import java.util.Collection; import java.util.Collections; -/* -TO DO: -Get rid of missing REMOVE_ACKs problem -Distrbute files evenly (check spec for correct number of files on each store) -*/ - public class Controller { protected int cport; //Port to listen on protected int rFactor; //Replication factor; each file is replicated across r Dstores @@ -285,7 +279,7 @@ public class Controller { synchronized(index) { if(index.containsKey(filename)) { entry = index.get(filename); - if(entry.getStatus() == IndexEntry.Status.REMOVE_IN_PROGRESS || entry.getStatus() == IndexEntry.Status.REMOVE_COMPLETE) { + if(entry.getStatus() == IndexEntry.Status.REMOVE_COMPLETE) { index.remove(filename); } else { @@ -362,7 +356,7 @@ public class Controller { //Remove file from index synchronized(index) { - index.remove(filename); + if(index.containsKey(filename) && index.get(filename) == entry) index.remove(filename); } } } @@ -438,18 +432,15 @@ public class Controller { void remove(Socket client, String filename) throws Exception { try { IndexEntry entry; - System.out.println("About to remove " + filename); try { synchronized(index) { entry = index.get(filename); if(entry == null || entry.getStatus() != IndexEntry.Status.STORE_COMPLETE) { - System.out.println("Oops, " + filename + " does not exist!"); throw new InvalidStatusException(); } //Update index to "remove in progress" entry.setStatus(IndexEntry.Status.REMOVE_IN_PROGRESS); - System.out.println("Remove status for " + filename + " set!"); } } catch(InvalidStatusException e) { @@ -457,7 +448,6 @@ public class Controller { clientOut.println(Protocol.ERROR_FILE_DOES_NOT_EXIST_TOKEN); clientOut.flush(); messageSent(client, Protocol.ERROR_FILE_DOES_NOT_EXIST_TOKEN); - System.out.println("Informed client that " + filename + " does not exist"); return; } @@ -481,7 +471,7 @@ public class Controller { } else { //Log error - System.out.println("Dstore " + dstore + " should have sent REMOVE_ACK but Controller received " + message[0]); + System.err.println("Dstore " + dstore + " should have sent REMOVE_ACK but Controller received " + message[0]); } } catch(DstoreDisconnectException e) { @@ -494,7 +484,7 @@ public class Controller { //Wait for REMOVE_ACKs from all Dstores which were sent the REMOVE message if(!latch.await(timeout, TimeUnit.MILLISECONDS)) { //Log error - System.out.println("Not all REMOVE_ACKs have been received"); + System.err.println("Not all REMOVE_ACKs have been received"); } //Update index to "remove complete" @@ -582,6 +572,8 @@ public class Controller { } catch(Exception e) {e.printStackTrace();} + if(dstoreFiles.isEmpty()) throw new Exception("All dstores have been disconnected!"); + Map<Integer,List<String>> newAlloc = allocate(dstoreFiles); Map<Integer,String> sendIndex = composeRebalanceMessages(dstoreFiles, newAlloc); CountDownLatch latch = new CountDownLatch(sendIndex.size()); @@ -623,6 +615,7 @@ public class Controller { System.out.print(i); } System.out.print("\n"); + resetSequence(); } } @@ -646,16 +639,28 @@ public class Controller { //move files from dstores that have too many files //prioritize storing these files to dstores that don't have enough files Map<Integer,List<String>> allocate(Map<Integer,List<String>> oldDstoreFiles) { - //Precaution made so that the input map is not modified Map<Integer,List<String>> dstoreFiles = new HashMap<Integer,List<String>>(); + List<String> availableFiles = new ArrayList<String>(); for(Integer i : oldDstoreFiles.keySet()) { List<String> files = new ArrayList<String>(); for(String s : oldDstoreFiles.get(i)) { if(index.containsKey(s)) files.add(s); + if(!availableFiles.contains(s)) availableFiles.add(s); } dstoreFiles.put(i, files); } + //These files have been lost to crashes and need to be removed from the index + synchronized(index) { + Iterator<String> it = index.keySet().iterator(); + while(it.hasNext()) { + String file = it.next(); + if(!availableFiles.contains(file)) { + it.remove(); + } + } + } + class AllocComparator implements Comparator<Integer> { protected int m; public AllocComparator(boolean ascending) { @@ -765,6 +770,17 @@ public class Controller { } } + Map<String,Integer> hasRequire = new HashMap<String,Integer>(); + for(String file : requireIndex.keySet()) { + int count = 0; + for(Integer dstore : oldAlloc.keySet()) { + if(oldAlloc.get(dstore).contains(file)) { + count ++; + } + } + hasRequire.put(file, count); + } + Map<Integer,String> messages = new HashMap<Integer,String>(); for(Integer dstore : newAlloc.keySet()) { String thisMessage = ""; @@ -779,11 +795,18 @@ public class Controller { if(oldFiles.contains(file)) { filesToSend ++; List<Integer> thisRequire = requireIndex.get(file); - thisMessage = thisMessage + " " + file + " " + thisRequire.size(); - for(Integer otherStore : thisRequire) { - thisMessage = thisMessage + " " + otherStore; + int distribution = (int) Math.ceil((double) thisRequire.size() / (double) hasRequire.get(file)); + //thisMessage = thisMessage + " " + file + " " + thisRequire.size(); + int numberSentTo = 0; + String sentTo = ""; + while(numberSentTo < distribution && !thisRequire.isEmpty()) { + Integer otherStore = thisRequire.get(0); + sentTo = sentTo + " " + otherStore; + thisRequire.remove(0); + numberSentTo ++; } - it.remove(); + thisMessage = thisMessage + " " + file + " " + numberSentTo + sentTo; + if(thisRequire.isEmpty()) it.remove(); } } @@ -810,8 +833,9 @@ public class Controller { void removeDstore(DstoreDisconnectException e) { Integer port = e.getConnection().getPort(); synchronized(dstores) { - if(dstores.get(port).equals(e.getConnection())) dstores.remove(port); + if(dstores.containsKey(port) && dstores.get(port).equals(e.getConnection())) dstores.remove(port); } + try {e.getConnection().getSocket().close();} catch(IOException ee) {} Iterator<IndexEntry> it; @@ -819,6 +843,8 @@ public class Controller { while(it.hasNext()) { it.next().removeStoredBy(port); } + + rebalanceLock.queueRebalance(); } Iterator<Integer> sequenceIt = null; @@ -828,10 +854,7 @@ public class Controller { while(store == null) { synchronized(sequenceLock) { if(sequenceIt == null || !sequenceIt.hasNext()) { - synchronized(dstores) { - if(dstores.isEmpty()) return null; - sequenceIt = dstores.keySet().iterator(); - } + if(!resetSequence()) return null; } store = sequenceIt.next(); @@ -841,6 +864,14 @@ public class Controller { return store; } + boolean resetSequence() { + synchronized(sequenceLock) { synchronized(dstores) { + if(dstores.isEmpty()) return false; + sequenceIt = new HashSet<Integer>(dstores.keySet()).iterator(); + }} + return true; + } + void messageSent(Socket socket, String message) { ControllerLogger.getInstance().messageSent(socket, message); } diff --git a/CrashTesting.sh b/CrashTesting.sh new file mode 100755 index 0000000000000000000000000000000000000000..0aa4753e0feb4fc5a81f0b44f49d2987950534c7 --- /dev/null +++ b/CrashTesting.sh @@ -0,0 +1,24 @@ +#!/bin/bash +java -cp .:loggers Controller 8080 $1 $3 $4 & +echo $! +rsec=$(($4/1000)) +processes=() +for((i=1; i<=$2; i++)) do + sleep 0.2 + n=$((8080+$i)) + echo $n + s="store$i" + java -cp .:loggers Dstore $n 8080 $3 $s & + processes+=($!) +done +sleep 2 +java -cp .:client-1.0.2.jar ClientMain 8080 $3 +sleep $rsec +for((i=0; i<$(($2-$1)); i++)) do + kill ${processes[$i]} +done +sleep $rsec +for((i=1; i<=$(($2-$1)); i++)) do + java -cp .:loggers Dstore $((8280+$i)) 8080 $3 "storeNEW$i" & + sleep 0.2 +done diff --git a/CrashTesting2.sh b/CrashTesting2.sh new file mode 100755 index 0000000000000000000000000000000000000000..73636056536b5ca62e9181b104de5a21771252a6 --- /dev/null +++ b/CrashTesting2.sh @@ -0,0 +1,16 @@ +#!/bin/bash +java -cp .:loggers Controller 8080 $1 $3 $4 & +echo $! +rsec=$(($4/1000)) +processes=() +for((i=1; i<=$2; i++)) do + sleep 0.2 + n=$((8080+$i)) + echo $n + s="store$i" + java -cp .:loggers Dstore $n 8080 $3 $s & + processes+=($!) +done +sleep 2 +java -cp .:client-1.0.2.jar ClientMain 8080 $3 & +kill ${processes[0]} diff --git a/RebalanceLock.java b/RebalanceLock.java index c2ea2974b5fa1818862b60a0ffa4ac834d613826..effa59d838121bc0c330378e92421467fc72e02a 100644 --- a/RebalanceLock.java +++ b/RebalanceLock.java @@ -42,7 +42,7 @@ public class RebalanceLock { highPriorityWait = false; } - public void queueRebalance() { + public synchronized void queueRebalance() { synchronized(blockLock) { periodBlock.countDown(); } diff --git a/error.txt b/error.txt index 8c2cb7d80df914f0060e9feea655ab50075fea36..308020f60fd0570185aeedeb219af9c2a8f03a3d 100644 --- a/error.txt +++ b/error.txt @@ -1,10 +1,10 @@ -FileAlreadyExistsException: Error trying to store file GameDotCom.jpg - file already exists +FileAlreadyExistsException: Error trying to store file Grandad.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) @@ -16,115 +16,225 @@ FileAlreadyExistsException: Error trying to store file Grandad.txt - file alread at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists +FileAlreadyExistsException: Error trying to store file Grandad.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 AllStar.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) -FileAlreadyExistsException: Error trying to store file rap.mp3 - 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) -FileAlreadyExistsException: Error trying to store file Unknown.txt - file already exists +FileAlreadyExistsException: Error trying to store file GameDotCom.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) -FileAlreadyExistsException: Error trying to store file Unknown.txt - file already exists +FileAlreadyExistsException: Error trying to store file Grandad.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 GameDotCom.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) -FileAlreadyExistsException: Error trying to store file SnowHalation.txt - file already exists +FileAlreadyExistsException: Error trying to store file GameDotCom.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) -FileAlreadyExistsException: Error trying to store file GameDotCom.jpg - file already exists +FileAlreadyExistsException: Error trying to store file rap.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) -FileAlreadyExistsException: Error trying to store file AllStar.txt - file already exists +DstoreDisconnectException: Dstore at port 8081 has been disconnected + at DstoreConnection.getDisconnectData(DstoreConnection.java:52) + at DstoreConnection.localReceive(DstoreConnection.java:121) + at DstoreConnection.receive(DstoreConnection.java:92) + at Controller.lambda$store$1(Controller.java:317) + at java.base/java.lang.Thread.run(Thread.java:832) +DstoreDisconnectException: Dstore at port 8081 has been disconnected + at DstoreConnection.getDisconnectData(DstoreConnection.java:52) + at DstoreConnection.receive(DstoreConnection.java:84) + at Controller.lambda$store$1(Controller.java:317) + at java.base/java.lang.Thread.run(Thread.java:832) +DstoreDisconnectException: Dstore at port 8081 has been disconnected + at DstoreConnection.getDisconnectData(DstoreConnection.java:52) + at DstoreConnection.receive(DstoreConnection.java:84) + at Controller.lambda$store$1(Controller.java:317) + at java.base/java.lang.Thread.run(Thread.java:832) +DstoreDisconnectException: Dstore at port 8081 has been disconnected + at DstoreConnection.getDisconnectData(DstoreConnection.java:52) + at DstoreConnection.receive(DstoreConnection.java:84) + at Controller.lambda$store$1(Controller.java:317) + at java.base/java.lang.Thread.run(Thread.java:832) +DstoreDisconnectException: Dstore at port 8081 has been disconnected + at DstoreConnection.getDisconnectData(DstoreConnection.java:52) + at DstoreConnection.receive(DstoreConnection.java:84) + at Controller.lambda$store$1(Controller.java:317) + at java.base/java.lang.Thread.run(Thread.java:832) +Not all STORE_ACKs have been received +Not all STORE_ACKs have been received +Not all STORE_ACKs have been received +Not all STORE_ACKs have been received +Not all STORE_ACKs have been received +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) -FileAlreadyExistsException: Error trying to store file rap.mp3 - file already exists - at Client.a(SourceFile:277) - at Client.store(SourceFile:183) +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) -FileAlreadyExistsException: Error trying to store file AllStar.txt - 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 rap.mp3 - file already exists +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) -FileAlreadyExistsException: Error trying to store file Unknown.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 PumpkinHill.txt - file already exists +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:239) + at Client.store(SourceFile:156) + at ClientMain.test2Client(ClientMain.java:44) + at ClientMain$1.run(ClientMain.java:26) +FileAlreadyExistsException: Error trying to store file Grandad.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 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 rap.mp3 - file already exists +FileAlreadyExistsException: Error trying to store file Grandad.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 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 Grandad.txt - file already exists +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) +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 spurk.jpg - file already exists +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) +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) @@ -136,7 +246,7 @@ FileAlreadyExistsException: Error trying to store file Unknown.txt - file alread 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 Unknown.txt - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) @@ -148,19 +258,27 @@ FileAlreadyExistsException: Error trying to store file Grandad.txt - file alread at Client.store(SourceFile:156) at ClientMain.test2Client(ClientMain.java:44) at ClientMain$1.run(ClientMain.java:26) -FileAlreadyExistsException: Error trying to store file AllStar.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 PumpkinHill.txt - file already exists +FileDoesNotExistException: Error trying to load or remove file spurk.jpg - file does not exist + at Client.remove(SourceFile:505) + at ClientMain.test2Client(ClientMain.java:57) + at ClientMain$1.run(ClientMain.java:26) +FileDoesNotExistException: Error trying to load or remove file Look_Away.mp3 - file does not exist + at Client.remove(SourceFile:505) + at ClientMain.test2Client(ClientMain.java:57) + at ClientMain$1.run(ClientMain.java:26) +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 Unknown.txt - file already exists +FileAlreadyExistsException: Error trying to store file GameDotCom.jpg - file already exists at Client.a(SourceFile:277) at Client.store(SourceFile:183) at Client.store(SourceFile:156) diff --git a/loggers/ControllerLogger.class b/loggers/ControllerLogger.class new file mode 100644 index 0000000000000000000000000000000000000000..d1501ec440c94f5a395d546f4a803efe8e9d29ca Binary files /dev/null and b/loggers/ControllerLogger.class differ diff --git a/loggers/DstoreLogger.class b/loggers/DstoreLogger.class new file mode 100644 index 0000000000000000000000000000000000000000..ac67d99e6bd1c551748d3b73a4e7891edbc42419 Binary files /dev/null and b/loggers/DstoreLogger.class differ diff --git a/loggers/Logger$LoggingType.class b/loggers/Logger$LoggingType.class new file mode 100644 index 0000000000000000000000000000000000000000..a62bda1d6229f4047dd872fda4e641c5170aa594 Binary files /dev/null and b/loggers/Logger$LoggingType.class differ diff --git a/loggers/Logger.class b/loggers/Logger.class new file mode 100644 index 0000000000000000000000000000000000000000..642bbf6cfdb1489289c40fc83829f40627162802 Binary files /dev/null and b/loggers/Logger.class differ