From decfd0fabcc046e0260d33d76e253e3a36fbb9a2 Mon Sep 17 00:00:00 2001
From: Daniel <dl3g19@soton.ac.uk>
Date: Wed, 21 Apr 2021 22:22:47 +0100
Subject: [PATCH] Operations with client work, now need to fix rebalancing and
 multiple Dstores

---
 AllStar.txt                      |  68 +++
 ClientMain.class                 | Bin 0 -> 3291 bytes
 ClientMain.java                  |  18 +-
 Controller$1AcksReceived.class   | Bin 0 -> 562 bytes
 Controller$IndexEntry.class      | Bin 2393 -> 2012 bytes
 Controller$RebalanceThread.class | Bin 0 -> 890 bytes
 Controller$Reloader.class        | Bin 389 -> 436 bytes
 Controller.class                 | Bin 10895 -> 14191 bytes
 Controller.java                  | 699 +++++++++++++++++--------------
 Dstore.class                     | Bin 8724 -> 10024 bytes
 Dstore.java                      |  76 ++--
 DstoreConnection.class           | Bin 1529 -> 2519 bytes
 DstoreConnection.java            |  40 +-
 Grandad.txt                      |  14 +
 PumpkinHill.txt                  |  68 +++
 SnowHalation.txt                 |  36 ++
 Unknown.txt                      |  74 ++++
 client_1618914098636.log         |   1 +
 client_1618914115362.log         |  19 +
 client_1618916214881.log         |  19 +
 client_1618917382748.log         |  19 +
 client_1618917653577.log         |  16 +
 client_1618917705050.log         |  16 +
 client_1618918167755.log         |  16 +
 client_1618918283040.log         |  10 +
 client_1618918339157.log         |  10 +
 client_1618918660778.log         |  19 +
 client_1618919054780.log         |  19 +
 client_1618919710976.log         |  19 +
 client_1618922219091.log         |  16 +
 client_1619002254815.log         |  16 +
 client_1619002688932.log         |  18 +
 client_1619002774548.log         |  17 +
 client_1619002831484.log         |  27 ++
 client_1619015946719.log         |  57 +++
 client_1619016557204.log         |  48 +++
 client_1619016975115.log         |  32 ++
 client_1619017037535.log         |  48 +++
 client_1619017290151.log         |  57 +++
 client_1619017624104.log         |  48 +++
 client_1619018158905.log         |  61 +++
 client_1619018768533.log         |  62 +++
 client_1619019036315.log         |  65 +++
 client_1619019325145.log         |  65 +++
 client_1619019601175.log         |  61 +++
 client_1619019802665.log         |  65 +++
 client_1619025053448.log         |  62 +++
 client_1619025357100.log         |  65 +++
 client_1619025636890.log         |  62 +++
 client_1619025719814.log         |  65 +++
 client_1619034515898.log         |  65 +++
 client_1619034593200.log         |  41 ++
 client_1619036545308.log         |  44 ++
 client_1619039097527.log         |  26 ++
 client_1619039957471.log         |  26 ++
 downloads/AllStar.txt            |  68 +++
 downloads/Unknown.txt            |  74 ++++
 57 files changed, 2283 insertions(+), 354 deletions(-)
 create mode 100644 AllStar.txt
 create mode 100644 ClientMain.class
 create mode 100644 Controller$1AcksReceived.class
 create mode 100644 Controller$RebalanceThread.class
 create mode 100644 Grandad.txt
 create mode 100644 PumpkinHill.txt
 create mode 100644 SnowHalation.txt
 create mode 100644 Unknown.txt
 create mode 100644 client_1618914098636.log
 create mode 100644 client_1618914115362.log
 create mode 100644 client_1618916214881.log
 create mode 100644 client_1618917382748.log
 create mode 100644 client_1618917653577.log
 create mode 100644 client_1618917705050.log
 create mode 100644 client_1618918167755.log
 create mode 100644 client_1618918283040.log
 create mode 100644 client_1618918339157.log
 create mode 100644 client_1618918660778.log
 create mode 100644 client_1618919054780.log
 create mode 100644 client_1618919710976.log
 create mode 100644 client_1618922219091.log
 create mode 100644 client_1619002254815.log
 create mode 100644 client_1619002688932.log
 create mode 100644 client_1619002774548.log
 create mode 100644 client_1619002831484.log
 create mode 100644 client_1619015946719.log
 create mode 100644 client_1619016557204.log
 create mode 100644 client_1619016975115.log
 create mode 100644 client_1619017037535.log
 create mode 100644 client_1619017290151.log
 create mode 100644 client_1619017624104.log
 create mode 100644 client_1619018158905.log
 create mode 100644 client_1619018768533.log
 create mode 100644 client_1619019036315.log
 create mode 100644 client_1619019325145.log
 create mode 100644 client_1619019601175.log
 create mode 100644 client_1619019802665.log
 create mode 100644 client_1619025053448.log
 create mode 100644 client_1619025357100.log
 create mode 100644 client_1619025636890.log
 create mode 100644 client_1619025719814.log
 create mode 100644 client_1619034515898.log
 create mode 100644 client_1619034593200.log
 create mode 100644 client_1619036545308.log
 create mode 100644 client_1619039097527.log
 create mode 100644 client_1619039957471.log
 create mode 100644 downloads/AllStar.txt
 create mode 100644 downloads/Unknown.txt

diff --git a/AllStar.txt b/AllStar.txt
new file mode 100644
index 0000000..26e7fef
--- /dev/null
+++ b/AllStar.txt
@@ -0,0 +1,68 @@
+Somebody once told me the world is gonna roll me
+I ain't the sharpest tool in the shed
+She was looking kind of dumb with her finger and her thumb
+In the shape of an "L" on her forehead
+
+Well, the years start coming and they don't stop coming
+Fed to the rules and I hit the ground running
+Didn't make sense not to live for fun
+Your brain gets smart but your head gets dumb
+
+So much to do, so much to see
+So what's wrong with taking the back streets?
+You'll never know if you don't go
+You'll never shine if you don't glow
+
+Hey, now, you're an all-star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars break the mold
+
+It's a cool place and they say it gets colder
+You're bundled up now wait 'til you get older
+But the meteor men beg to differ
+Judging by the hole in the satellite picture
+
+The ice we skate is getting pretty thin
+The water's getting warm so you might as well swim
+My world's on fire. How about yours?
+That's the way I like it and I'll never get bored
+
+Hey, now, you're an all-star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars break the mold
+
+Go for the moon
+Go for the moon
+Go for the moon
+Go for the moon
+
+Hey, now, you're an all-star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars
+
+Somebody once asked could I spare some change for gas
+I need to get myself away from this place
+I said yep, what a concept
+I could use a little fuel myself
+And we could all use a little change
+
+Well, the years start coming and they don't stop coming
+Fed to the rules and I hit the ground running
+Didn't make sense not to live for fun
+Your brain gets smart but your head gets dumb
+
+So much to do, so much to see
+So what's wrong with taking the back streets?
+You'll never know if you don't go
+You'll never shine if you don't glow
+
+Hey, now, you're an all star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars break the mold
+
+And all that glitters is gold
+Only shooting stars break the mold
diff --git a/ClientMain.class b/ClientMain.class
new file mode 100644
index 0000000000000000000000000000000000000000..6bfec562108a26e9f8065e1feb16b11e6c7d8ab8
GIT binary patch
literal 3291
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

literal 0
HcmV?d00001

diff --git a/ClientMain.java b/ClientMain.java
index 10a4789..e9fd2c5 100644
--- a/ClientMain.java
+++ b/ClientMain.java
@@ -42,26 +42,36 @@ public class ClientMain {
 		
 			try { client.connect(); } catch(IOException e) { e.printStackTrace(); return; }
 			
+			String[] files = {"AllStar.txt", "Unknown.txt", "PumpkinHill.txt", "SnowHalation.txt", "Grandad.txt"};
+			
+			for(String file : files) {
+				try { client.store(new File(file)); } catch(IOException e) { e.printStackTrace(); }
+			}
+			
+			/*
+			
 			try { list(client); } catch(IOException e) { e.printStackTrace(); }
 			
-			try { client.store(new File("Clipboard01.pdf")); } catch(IOException e) { e.printStackTrace(); }
+			try { client.store(new File("AllStar.txt")); } catch(IOException e) { e.printStackTrace(); }
 			
-			try { client.store(new File("Clipboard01.pdf")); } catch(IOException e) { e.printStackTrace(); }
+			try { client.store(new File("AllStar.txt")); } catch(IOException e) { e.printStackTrace(); }
 
-			try { client.store(new File("Clipboard01.jpg")); } catch(IOException e) { e.printStackTrace(); }
+			try { client.store(new File("Unknown.txt")); } catch(IOException e) { e.printStackTrace(); }
 			
+			*/
 			String list[] = null;
 			try { list = list(client); } catch(IOException e) { e.printStackTrace(); }
 			
 			if (list != null)
 				for (String filename : list)
 					try { client.load(filename, downloadFolder); } catch(IOException e) { e.printStackTrace(); }
-			
+			/*
 			if (list != null)
 				for (String filename : list)
 					try { client.remove(filename); } catch(IOException e) { e.printStackTrace(); }
 			
 			try { list(client); } catch(IOException e) { e.printStackTrace(); }
+			*/
 			
 		} finally {
 			if (client != null)
diff --git a/Controller$1AcksReceived.class b/Controller$1AcksReceived.class
new file mode 100644
index 0000000000000000000000000000000000000000..1adda894aae6bd39f23590b769ff4b17e6e27eb6
GIT binary patch
literal 562
zcmX^0Z`VEs1_mnzMNS4L24;2!79Ivx1~x_p3FrL0lA`>aoYW!}L&xOo;-J*z)XcKf
z6h;QNl8nq^6$3^F9v_4vYc2*322OScE*=JM1|CKRfvm)`ME#t^ymWp4q^#8B5=I6#
zo6Nk-5<5l)W)00Skac`K4EziNj0~)0i8-aIj0}vPj12r5$cAc$F*2|?=clAHGVuFk
z=B4_T<|d^Ug(N2Bq%tzFWacFoF*0zZr<R043}DvK^kih<3eGPrN=|jl1S#T2I8hJe
zBt`~)*SzGM{Nl{Kbl=pHjQkXK25CkHE`%~323e2?IEzw~5_1ysl2aKOIQ&wJOFZ(6
zOBfk=JoEBWi=1;3i;Gi>85wwxgN8wYfr){Gfq{XEfdS+*1_l8EP-rqRFfcPPGH^2p
zGB7d-F)%RbGcZBaXlZX{VAR^qz^=u-m4SC70|NsigD?XF10Mr30|OH~11A#)10NG7
z10#b70}oWQI@mA<25zm$EeyOY2`C!5K;|-WGjK71l#4QmK{d%TFfuSQFfg!cZDHVD
w1Gk3_B*?_az``I7cD4kABm)Bj3xgDc41*k4M2bP4fq{XGfe~adg8~Bs0OL_(00000

literal 0
HcmV?d00001

diff --git a/Controller$IndexEntry.class b/Controller$IndexEntry.class
index adc524c042879907e90d45d3d52b889b6660c7ad..cbc567e13ec9f706a810482255578779dc3de8f2 100644
GIT binary patch
delta 937
zcmca9bcdho)W2Q(7#J9=7*aNJH8S#YF=#MovNLG$FlaOAOn%5{$*sqr&(2`L!(hl@
zG+C9&&{U7XgonYD!HkiCr8u)Hm63s2L(`LsfrG(<hryD8hmnCZFTW%+t<o_khnqo<
z!J3D`hQW4n2a~#~9)mp(g9C#RBLiDeYHog6DoEamhryY_g^__hv)DDaprjIPUKB{i
zjfcUV!FKW~Ca2A2%&Cl%zp-dBCQepl)eK@#WME?8U|?WiWnf|8XAoduU|?a8VUT5D
zWbj~MU|?eKWME-XfQqX!s4*}I2r#fRurV+&a5FG6a5H!@Ffw>EFffELFf%YQFfeFL
zzQL+qzmb7~fsw(7fq_8^tX7hNlR=7sk3pJ2hCzlwkwKP0ok5O4k-?Y252{~@feEai
zO-p(!11~~97g$u0ft5jtL6O0q!3?S%<U&S}yS273@UDSd$Ho8>tXE}FWC(zp?E^Ji
zS!)Y}l=Kb;^_>j5Obp>5-cAN%Mh2}d3~~z@*tNDXn1d{40y~_Kfti7UL6d=xL5o3&
zL7O3vfq{XUff3}20EQq2Ca|wPp(ZPU%+lV;U<EO@UW$;pdJNnQ`V8_61~7Bwq2V3O
zpvVvccew}De0h-h5SQCQtdQEt;K;}@6T7SHjT!hDOc>-COku`@0y_lmY*(nUG9Y8M
zcQUvVVWtHGH-jaEG=mk)NNKo>85u$u!k{4nju&lc#7J#Gix^v|o^S?5h6so+CkJqd
zOM+4gB&Ho1SQ(rc6d58JqChb{xdBDim4TJPjX{winjr=(yMaSY7o-;w?Vb$G46)!;
a8^;h2rV|*F7#JA17#JCt7!nwg8CU>2IB|mj

delta 1330
zcmcb^e^ZF-)W2Q(7#J9=81grAH8O^AGB7b{@GxjHXfZPI6qn=|r8*{O`{XBQGcpMI
zWF?j*>gOcprR)1AWu+#USc6pS@G$5y$TBkUCFf+O=9T#5C#Lvh7ME}_=rb6wGZ^wP
z7%>=6p229zZOUNA&S1{NV8LKH`3|F@ktu^U4}%SZEh7U<ab{I2BLlOBrY9Ez2ZKEi
zg98H(BLiDreo1CpB{zd9gA)&fGlR=yCnj}iQwBF426qNaMh3Q`)ZF~CRFJ$U4}%wj
z%j9`XPRi;KXO@;^=IDbQV&mhSpI1_ppOceXq!N^xlb@Kf`6g2iV+4D8Y6-+=A{v?y
zO~`&@WZ(uXfOv<IK@+A3pUJ63)^?MfSacaPCl|12*0VF@GBOBb*q>U&$iM+{N@@{<
zA_Efx2Ll5GI|B;?KZ5`R0|N_#41+8KBZD^s0|OI-4+9H>0#sa;K@BXg$)E+Mb&=Hh
z3J5T;GO#f)Fz_-kGH^5aG4L}o_%kpt6frO}FflMN*iC-TqVB7;n}H*8I|KVx26e67
z41$r{8HBeoXm4a-U|?hjU|?WS0y{>Ufs;Xofsa9!L54w&L6Je8L7hQ?!H7YT!InXZ
zL6ISlA&7yI!GE$NtGFac7Z=zDRR&fDH3mh7U<O;TY$2;yJxG>~fsuiML6d=zAq1k2
zfq}uFfeEZfO=}B-l=Kb;y`2muObp>5-cAN9Mh2}d3~~z?xU{w~sBdGi1G$e0>^?pQ
zW(EcZT?Re|JqA?<eTGm51_ovZMpdxkVGK-QFZ)0ZSJtZE!XTx+lfjXAqm3B28H^c}
z7))SBD?uY7oPm)c0`7iqs1-^e7en0difqX&h}-M2INqFrkHLaLk--vXgCf{unBzU5
zCd-3N*51kBfyG!XrrI!YGuSf7G1$ROl>@oEo`H!0<nTy_C}`M#QWhvWSV6{bfX6!|
zjvPUH7?>EM859{};C@wtx`<6ndMkq*C@vsr1rqD746F=p42le~3~``X2d5!O+_GtD
z*KcJ|M%UoUz{=popvVx<kO0+y>?UP&H~BI!G9)r2VNt4%t~8K=ks%qyr#>*RYNM+S
pg?crGfteu{oYT@6(!q2FLly%AgAmx$84TGBEDSje84P(0EC8|l%s2o5

diff --git a/Controller$RebalanceThread.class b/Controller$RebalanceThread.class
new file mode 100644
index 0000000000000000000000000000000000000000..baac4d023e6eb8665bfeee1db52922e76ee0bdf7
GIT binary patch
literal 890
zcmX^0Z`VEs1_mnz8%_o$24;2!79Ivx1~x_pDd+sWlA`>aoYW$fpwy(qoW#83)R2s#
z)Wj4<2DXxn%wiP-Mg|@qgfeR`1`Y;Jb_OmU25tr(Mh1bb#Ii*FoW#6zegCAa)Z`LI
z1~!|_yv!0iMh0dL%`i>|J_dev1_2%hK?Wg41}=n2j12rmFe?L6i!$?57#SEnxfnzk
zMA;d{co@VPBv6cpIg7P8CpEQzk%2|SOEZj}L5h(<4&esRypq(SqSAtr)D+i><kW(a
z%=|nq20jKE9tK&Eb2;HwvNOmtG6*AdA}N<+P~>4y0x9P&D9X$$2`))Y&JHO`Oil&)
zMumq#l|hY>fjy<TB)=%Nn2~|s2W(7fNoJ0|Z(@NpH-iR)COd-`4}&&?4kH6EiYy}o
zOL1mZDmZjJLFVc4FzADVhP}uwF}Wnah@HWZkwFNo2OO+HrFnUYNja&E4E!3%5uq8z
z$iU*9p8}Hb$;?ajE6q(xEee4sWiBesV`Sh3yWBUi04mBAoL^d$oa&YdHVqLKdLY{v
z894k>i%UH6i%S?8cs%p+Qj45(5{rw$K153#42ld)3>*xM3<eC00s^44#K6G7#K6M9
z&0xg9$Y9LCz@Wsy#K6SBz`&)Yy_JDcYdZt`Mg|53Mg|iG1_m|;Mg|6kjSP$orVKn#
z^_xK{lYxQ3O=}AS;}!<q)*TGO%Nc}yK-_H%(#sh*e08=lD1f+I7?gK1s53G^*t!cD
zxIiqBqW?#Iw6`%REdRfkfti7Uft!JkL6U)=L5x9?L5@L=!J5I2L5_h5>;^dob_NE9
zEezZY+Zgy5wlMHBY-NyR*uh}Ju#>@>VGn~D0|SFR0~>=cJA>qZ1}+9Bb`X+eU}R^I
n`^CT_<HXJ&$H2^B4)(YOgC&^eW3U2wnSqgkiGh#7nt=rXf4#pQ

literal 0
HcmV?d00001

diff --git a/Controller$Reloader.class b/Controller$Reloader.class
index 1778f421b3e1ecd1109fa137402893ab772a7d5e..5f060a69a794d4dab23d304ce135ebe0440721fd 100644
GIT binary patch
delta 197
zcmZo=-oiW~#7H<Ru`E%)v?Mb}-?6ADvC=2AxP*~`%_cK1v&4>(fmuT{jFEvOEi)&z
zII}91k%7^3Vz;h2XK-eEUSdgUQ7R*YmJb#qY#@R;iFxVzo_Qsy>8VB5cGeTOC3^BQ
z@G&q52r#fRurV+&Ffy<(a5L~TFfs@*Ffb@FFflMOFfedwX>Vm<)Y{I#z7ecOkb!}L
Zje(JYfx(x7g+Yjcfq{uZcycPE0ss@sEA0RP

delta 151
zcmdnO+{!#5#9SaNu`E$PCowNw-#;lUHMxY5fz2i}FSEpsk%3u5GmMjgiGh!YfuBKu
zk%6r!H77qYg^__VYGRx2#5eJN{0ssN3<3fStPE@n3=E76j11fif((odLJSNH`V34A
zObiSR{94*u85p&;Gq7thZ)M=!2v#V}z`(%Az|6qF5Y52J5W~R75X-<kc?zQf00#>g
Ay8r+H

diff --git a/Controller.class b/Controller.class
index 86c939b219a47dffd1fcd6905d10b5000029bee8..a6268bbbbd9df3b25bba137bd95105e820efe4aa 100644
GIT binary patch
literal 14191
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

literal 10895
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
b0|(=E1{TI(1`fs>3@nT{8E-S*Wsn2_vH;Ud

diff --git a/Controller.java b/Controller.java
index 12eb9b8..611fb5d 100644
--- a/Controller.java
+++ b/Controller.java
@@ -21,16 +21,12 @@ public class Controller {
 		protected List<Integer> storedBy;
 		protected int numberToStore;
 		protected String status;
-		protected Object storeAckLock;
-		protected List<Reloader> clientLoadList;
 		
 		public IndexEntry() {
 			filesize = -1;
 			storedBy = Collections.synchronizedList(new ArrayList<Integer>());
 			numberToStore = 0;
 			status = "store in progress";
-			storeAckLock = new Object();
-			clientLoadList = new ArrayList<Reloader>();
 		}
 		
 		public synchronized void setFilesize(int filesize) {
@@ -41,24 +37,24 @@ public class Controller {
 			return filesize;
 		}
 		
-		public void addStoredBy(int dstore) {
+		public synchronized void addStoredBy(int dstore) {
 			storedBy.add(Integer.valueOf(dstore));
-			if(storedBy.size() == numberToStore) storeAckLock.notify();
+			if(storedBy.size() >= numberToStore) notifyAll();
 		}
 		
-		public void addStoredBy(List<Integer> dstores) {
+		public synchronized void addStoredBy(List<Integer> dstores) {
 			storedBy.addAll(dstores);
-			if(storedBy.size() == numberToStore) storeAckLock.notify();
+			if(storedBy.size() >= numberToStore) notifyAll();
 		}
 		
-		public void removeStoredBy(int dstore) {
+		public synchronized void removeStoredBy(int dstore) {
 			storedBy.remove(Integer.valueOf(dstore));
-			if(storedBy.size() == 0) storeAckLock.notify();
+			if(storedBy.isEmpty()) notifyAll();
 		}
 		
-		public void removeStoredBy(List<Integer> dstores) {
+		public synchronized void removeStoredBy(List<Integer> dstores) {
 			storedBy.removeAll(dstores);
-			if(storedBy.size() == 0) storeAckLock.notify();
+			if(storedBy.isEmpty()) notifyAll();
 		}
 		
 		public List<Integer> getStoredBy() {
@@ -76,26 +72,16 @@ public class Controller {
 		public synchronized String getStatus() {
 			return status;
 		}
-		
-		public Object getLock() {
-			return storeAckLock;
-		}
-		
-		public List<Reloader> getLoadList() {
-			return clientLoadList;
-		}
 	}
 	
-	protected class Reloader {
-		public boolean reload;
-		public Reloader() {
-			reload = false;
-		}
+	protected class Reloader extends ArrayList<Integer> {
+		public int filesize;
 	}
 	
 	protected Map<Integer,DstoreConnection> dstores;
-	protected Map<Integer,String[]> rebalanceMessages;
+	protected Map<Integer,List<String>> rebalanceMessages;
 	protected Map<String,IndexEntry> index;
+	protected Map<Socket,Reloader> loadRequests;
 	
 	public Controller(int cport, int rFactor, int timeout, int rebalancePeriod) {
 		this.cport = cport;
@@ -103,7 +89,8 @@ public class Controller {
 		this.timeout = timeout;
 		this.rebalancePeriod = rebalancePeriod;
 		dstores = Collections.synchronizedMap(new HashMap<Integer,DstoreConnection>());
-		index = new HashMap<String,IndexEntry>();
+		index = Collections.synchronizedMap(new HashMap<String,IndexEntry>());
+		loadRequests = Collections.synchronizedMap(new HashMap<Socket,Reloader>());
 	}
 	
 	public static void main(String[] args) {
@@ -136,22 +123,44 @@ public class Controller {
 	
 	public void start() {
 		try {
+			Thread rebalanceThread = new Thread(new RebalanceThread());
+			rebalanceThread.start();
+			
 			ServerSocket server = new ServerSocket(cport);
 			while(true) {
 				try {
 					Socket client = server.accept();
 					BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
 					String[] message = in.readLine().split(" ");
-					if(dstores.size() < rFactor && !message[0].equals("JOIN")) {
-						PrintWriter out = new PrintWriter(client.getOutputStream());
-						out.println("ERROR");
-						out.flush();
-						out.close();
+					if(message[0].equals("JOIN")) {
+						dstores.put(Integer.parseInt(message[1]), new DstoreConnection(client));
+						System.out.println("Dstore at " + message[1] + " joined");
+						try {rebalanceThread.interrupt();} catch(SecurityException e) {e.printStackTrace();}
 					}
 					else {
-						handleMessage(message, client);
+						System.out.println("A new client has joined");
+						new Thread(() -> {
+							try {
+								handleMessage(message, client);
+							}
+							catch(Exception e) {
+								e.printStackTrace();
+							}
+							
+							while(!client.isClosed()) {
+								try {
+									String clientMessage = in.readLine();
+									if(clientMessage != null) {
+										handleMessage(clientMessage.split(" "), client);
+									}
+								}
+								catch(Exception e) {
+									e.printStackTrace();
+								}
+							}
+							System.out.println("Client closed");
+						}).start();
 					}
-					in.close();
 				}
 				catch(Exception e) {
 					//Log error
@@ -165,20 +174,36 @@ public class Controller {
 		}
 	}
 	
+	protected class RebalanceThread implements Runnable {
+		public void run() {
+			while(true) {
+				try {Thread.sleep(rebalancePeriod);} catch(InterruptedException e) {
+					try {rebalance();} catch(Exception ee) {ee.printStackTrace();}
+				}
+				try {
+					if(dstores.size() >= rFactor) {
+						rebalance();
+					}
+				}
+				catch(Exception e) {e.printStackTrace();}
+			}
+		}
+	}
+	
 	void handleMessage(String[] message, Socket client) throws Exception {
-		if(message[0].equals("JOIN")) {
-			dstores.put(Integer.parseInt(message[1]), new DstoreConnection(client));
-			System.out.println("Dstore at " + message[1] + " joined");
-			rebalance();
+		if(dstores.size() < rFactor) {
+			PrintWriter out = new PrintWriter(client.getOutputStream());
+			out.println("ERROR_NOT_ENOUGH_DSTORES");
+			out.flush();
 		}
 		else if(message[0].equals("STORE")) {
-			store(client, message[1]);
+			store(client, message[1], message[2]);
 		}
 		else if(message[0].equals("LOAD")) {
 			load(client, message[1]);
 		}
 		else if(message[0].equals("RELOAD")) {
-			reload(message[1]);
+			sendLoadFrom(client, message[1]);
 		}
 		else if(message[0].equals("REMOVE")) {
 			remove(client, message[1]);
@@ -191,43 +216,52 @@ public class Controller {
 		}
 	}
 	
-	void store(Socket client, String filename) throws Exception {
-		new Thread(() -> {
-			try {
-				if(index.containsKey(filename)) {
-					PrintWriter out = new PrintWriter(client.getOutputStream());
-					out.println("ERROR ALREADY_EXISTS " + filename);
-					out.flush();
-					out.close();
-					return;
-				}
-				
-				//Update index to "store in progress"
-				IndexEntry entry = new IndexEntry();
-				index.put(filename, entry);
-				
-				//Select Dstores
-				int[] storesToStore = new int[rFactor];
-				synchronized(dstores) {
-					Iterator<Integer> it = dstores.keySet().iterator();
-					for(int i=0; i<rFactor; i++) {
-						Integer thisStore = it.next();
-						storesToStore[i] = thisStore.intValue();
-					}
-				}
-				entry.setNumberToStore(rFactor);
-				
-				//Send STORE_TO message
+	void store(Socket client, String filename, String filesizeString) throws Exception {
+		int filesize = -1;
+		try {
+			filesize = Integer.parseInt(filesizeString);
+			if(filesize < 1) {
+				//Log error
+			}
+		}
+		catch(NumberFormatException e) {
+			//Log error
+		}
+		
+		try {
+			if(index.containsKey(filename)) {
 				PrintWriter out = new PrintWriter(client.getOutputStream());
-				out.println("STORE_TO");
+				out.println("ERROR_FILE_ALREADY_EXISTS " + filename);
 				out.flush();
-				for(int port : storesToStore) {
-					out.println(" " + port);
-					new Thread(() -> {
-						String[] message = dstores.get(Integer.valueOf(port)).receive().split(" ");
-						if(message[0].equals("STORE_ACK")) {
+				return;
+			}
+			
+			//Update index to "store in progress"
+			IndexEntry entry = new IndexEntry();
+			index.put(filename, entry);
+			entry.setFilesize(filesize);
+			
+			//Select Dstores
+			Integer[] storesToStore = new Integer[rFactor];
+			synchronized(dstores) {
+				Iterator<Integer> it = dstores.keySet().iterator();
+				for(int i=0; i<rFactor; i++) {
+					storesToStore[i] = it.next();
+				}
+			}
+			entry.setNumberToStore(rFactor);
+			
+			//Send STORE_TO message
+			PrintWriter out = new PrintWriter(client.getOutputStream());
+			String message = "STORE_TO";
+			for(Integer thisStore : storesToStore) {
+				message = message + " " + thisStore.intValue();
+				new Thread(() -> {
+					try {
+						String[] receivedMessage = dstores.get(thisStore).receive().split(" ");
+						if(receivedMessage[0].equals("STORE_ACK")) {
 							try {
-								storeAck(Integer.valueOf(port), message[1]);
+								storeAck(thisStore, receivedMessage[1]);
 							}
 							catch(Exception e) {
 								//Log error
@@ -236,33 +270,39 @@ public class Controller {
 						else {
 							//Log error
 						}
-					}).start();
-				}
-				
-				//Wait for STORE_ACKs from datastores in storesToStore
+					}
+					catch(NullPointerException e) {
+						removeDstore(thisStore);
+					}
+				}).start();
+			}
+			out.println(message);
+			out.flush();
+			
+			//Wait for STORE_ACKs from datastores in storesToStore
+			synchronized(entry) {
 				try {
-					entry.getLock().wait(timeout);
+					entry.wait(timeout);
 				}
 				catch(InterruptedException e) {
 					e.printStackTrace();
 				}
-				
-				if(entry.getStoredBy().size() < rFactor) {
-					//Log error
-				}
-				
-				//Update index to "store complete"
-				entry.status = "store complete";
-				
-				//Send STORE_COMPLETE message
-				out.println("STORE_COMPLETE");
-				out.flush();
-				out.close();
 			}
-			catch(IOException e) {
-				e.printStackTrace();
+			
+			if(entry.getStoredBy().size() < rFactor) {
+				//Log error
 			}
-		}).start();
+			
+			//Update index to "store complete"
+			entry.status = "store complete";
+			
+			//Send STORE_COMPLETE message
+			out.println("STORE_COMPLETE");
+			out.flush();
+		}
+		catch(IOException e) {
+			e.printStackTrace();
+		}
 	}
 	
 	void storeAck(Integer port, String filename) throws Exception {
@@ -276,293 +316,322 @@ public class Controller {
 	}
 	
 	void load(Socket client, String filename) throws Exception {
-		new Thread(() -> {
-			try {
-				if(!index.containsKey(filename)) {
-					PrintWriter out = new PrintWriter(client.getOutputStream());
-					out.println("ERROR DOES_NOT_EXIST");
-					out.flush();
-					out.close();
-					return;
-				}
-				
-				//Select a Dstore which contains the file
-				IndexEntry thisEntry = index.get(filename);
-				int thisStore = thisEntry.storedBy.get(0).intValue();
-				int thisSize = thisEntry.filesize;
-				
-				//Send LOAD_FROM message
+		try {
+			if(!index.containsKey(filename)) {
 				PrintWriter out = new PrintWriter(client.getOutputStream());
-				out.println("LOAD_FROM " + thisStore + " " + thisSize);
+				out.println("ERROR DOES_NOT_EXIST");
 				out.flush();
-				
-				Reloader reloadLock = new Reloader();
-				thisEntry.getLoadList().add(reloadLock);
-				int trials = 0;
-				while(true) {
-					try {
-						reloadLock.wait(10 * timeout);
-					}
-					catch(InterruptedException e) {
-						e.printStackTrace();
-					}
-					trials ++;
-					if(trials >= rFactor || !reloadLock.reload) break;
-					out.println("LOAD_FROM " + thisEntry.storedBy.get(trials).intValue() + " " + thisSize);
-					out.flush();
-					reloadLock.reload = false;
-				}
-				
-				thisEntry.getLoadList().remove(reloadLock);
-				if(trials >= rFactor && reloadLock.reload) {
-					out.println("ERROR LOAD");
-					out.flush();
-				}
-				
-				out.close();
+				return;
 			}
-			catch(IOException e) {
-				e.printStackTrace();
+			
+			//Select a Dstore which contains the file
+			IndexEntry thisEntry = index.get(filename);
+			Reloader storedBy = new Reloader();
+			storedBy.filesize = thisEntry.getFilesize();
+			Iterator<Integer> it = thisEntry.getStoredBy().iterator();
+			while(it.hasNext()) {
+				Integer d = it.next();
+				storedBy.add(d);
+				System.out.println("Dstore " + d + " added to load list");
 			}
-		}).start();
+			loadRequests.put(client,storedBy);
+			
+			//Send LOAD_FROM message
+			sendLoadFrom(client, filename);
+		}
+		catch(IOException e) {
+			e.printStackTrace();
+		}
 	}
 	
-	void reload(String filename) {
-		new Thread(() -> {
-			for(Reloader r : index.get(filename).getLoadList()) {
-				r.reload = true;
-				r.notify();
+	void sendLoadFrom(Socket client, String filename) {
+		try {
+			PrintWriter out = new PrintWriter(client.getOutputStream());
+			Reloader storedBy = loadRequests.get(client);
+			System.out.println("Load requested for file " + filename + ", there are " + storedBy.size() + " dstores to select from");
+			if(storedBy.isEmpty()) {
+				out.println("ERROR_LOAD");
 			}
-		}).start();
+			else {
+				Integer thisStore = storedBy.get(0);
+				storedBy.remove(thisStore);
+				out.println("LOAD_FROM " + thisStore + " " + storedBy.filesize);
+			}
+			out.flush();
+		}
+		catch(IOException e) {
+			e.printStackTrace();
+		}
 	}
 	
 	void remove(Socket client, String filename) throws Exception {
-		new Thread(() -> {
-			try {
-				if(!index.containsKey(filename)) {
-					PrintWriter clientOut = new PrintWriter(client.getOutputStream());
-					clientOut.println("ERROR DOES_NOT_EXIST");
-					clientOut.flush();
-					clientOut.close();
-					return;
-				}
-				
-				//Update index to "remove in progress"
-				IndexEntry entry = index.get(filename);
-				entry.status = "remove in progress";
-				
-				//Send REMOVE message to all Dstores storing the file
-				for(Integer dstore : entry.getStoredBy()) {
-					new Thread(() -> {
-						String[] message = dstores.get(dstore).sendAndReceive("REMOVE").split(" ");
+		try {
+			if(!index.containsKey(filename)) {
+				PrintWriter clientOut = new PrintWriter(client.getOutputStream());
+				clientOut.println("ERROR DOES_NOT_EXIST");
+				clientOut.flush();
+				return;
+			}
+			
+			//Update index to "remove in progress"
+			IndexEntry entry = index.get(filename);
+			entry.status = "remove in progress";
+			
+			//Send REMOVE message to all Dstores storing the file
+			for(Integer dstore : entry.getStoredBy()) {
+				new Thread(() -> {
+					try {
+						String[] message = dstores.get(dstore).sendAndReceive("REMOVE " + filename).split(" ");
 						if(message[0].equals("REMOVE_ACK") && message[1].equals(filename)) {
 							entry.removeStoredBy(dstore.intValue());
 						}
 						else {
 							//Log error
 						}
-					}).start();
-				}
-				
-				//Wait for REMOVE_ACKs from all Dstores which were sent the REMOVE message
+					}
+					catch(NullPointerException e) {
+						removeDstore(dstore);
+					}
+				}).start();
+			}
+			
+			//Wait for REMOVE_ACKs from all Dstores which were sent the REMOVE message
+			synchronized(entry) {
 				try {
-					entry.getLock().wait(timeout);
+					entry.wait(timeout);
 				}
 				catch(InterruptedException e) {
 					e.printStackTrace();
 				}
-				
-				if(entry.getStoredBy().size() > 0) {
-					//Log error
-				}
-				
-				//Update index to "remove complete"
-				entry.status = "remove complete";
-				
-				//Send REMOVE_COMPLETE to client
-				PrintWriter clientOut = new PrintWriter(client.getOutputStream());
-				clientOut.println("REMOVE_COMPLETE");
-				clientOut.flush();
-				clientOut.close();
 			}
-			catch(IOException e) {
-				e.printStackTrace();
+			
+			if(entry.getStoredBy().size() > 0) {
+				//Log error
 			}
-		}).start();
+			
+			//Update index to "remove complete"
+			entry.status = "remove complete";
+			index.remove(filename);
+			
+			//Send REMOVE_COMPLETE to client
+			PrintWriter clientOut = new PrintWriter(client.getOutputStream());
+			clientOut.println("REMOVE_COMPLETE");
+			clientOut.flush();
+		}
+		catch(IOException e) {
+			e.printStackTrace();
+		}
 	}
 	
 	void list(Socket client) throws Exception {
-		new Thread(() -> {
-			try {
-				//Send file list to client
-				PrintWriter out = new PrintWriter(client.getOutputStream());
-				for(String name : index.keySet()) {
-					out.println(name);
-				}
-				out.flush();
-				out.close();
-			}
-			catch(IOException e) {
-				e.printStackTrace();
+		try {
+			System.out.println("Fetching list...");
+			//Send file list to client
+			String message = "LIST ";
+			for(String name : index.keySet()) {
+				message = message + name + " ";
 			}
-		}).start();
+			PrintWriter out = new PrintWriter(client.getOutputStream());
+			System.out.println("Sending...");
+			out.println(message.trim());
+			out.flush();
+		}
+		catch(IOException e) {
+			e.printStackTrace();
+		}
 	}
 	
 	void rebalance() throws Exception {
-		new Thread(() -> {
-			if(rebalanceMessages != null) return;
-			Map<Integer,List<String>> dstoreFiles = new HashMap<Integer,List<String>>();
-			synchronized(dstoreFiles) {
-				rebalanceMessages = dstoreFiles;
-				try {
-					//Send LIST message to each Dstore and receive their file list
-					for(Integer dstore : dstores.keySet()) {
-						dstoreFiles.put(dstore, new ArrayList<String>());
-						
-						new Thread(() -> {
+		if(rebalanceMessages != null) return;
+		Map<Integer,List<String>> dstoreFiles = new HashMap<Integer,List<String>>();
+		synchronized(dstoreFiles) {
+			rebalanceMessages = dstoreFiles;
+			try {
+				//Send LIST message to each Dstore and receive their file list
+				for(Integer dstore : dstores.keySet()) {
+					dstoreFiles.put(dstore, new ArrayList<String>());
+					
+					new Thread(() -> {
+						try {
 							String[] message = dstores.get(dstore).sendAndReceive("LIST").split(" ");
 							receiveDstoreList(dstore.intValue(), message);
-						}).start();
-					}
-					
-					dstoreFiles.wait(timeout);
-					if(dstoreFiles.size() < dstores.size()) {
-						//Log error
-					}
-					
-					//Create a new file allocation so that:
-					  //Each file appears rFactor times
-					  //Each file appears at most once on each datastore
-					  //Files are evenly distributed (Dstores differ in capacity by at most 1, no 2 datastores have identical file lists)
-					List<Integer> storeOrder = reshuffle(dstoreFiles.keySet());
-					List<String> fileList = new ArrayList<String>();
-					for(Integer i : reshuffle(dstoreFiles.keySet())) {
-						for(String s : dstoreFiles.get(i)) {
-							if(!fileList.contains(s)) {
-								fileList.add(s);
-							}
+						}
+						catch(NullPointerException e) {
+							removeDstore(dstore);
+						}
+					}).start();
+				}
+				
+				dstoreFiles.wait(timeout);
+				if(dstoreFiles.size() < dstores.size()) {
+					//Log error
+				}
+				
+				//Create a new file allocation so that:
+				  //Each file appears rFactor times
+				  //Each file appears at most once on each datastore
+				  //Files are evenly distributed (Dstores differ in capacity by at most 1, no 2 datastores have identical file lists)
+				List<Integer> storeOrder = reshuffle(dstoreFiles.keySet());
+				List<String> fileList = new ArrayList<String>();
+				for(Integer i : reshuffle(dstoreFiles.keySet())) {
+					for(String s : dstoreFiles.get(i)) {
+						if(!fileList.contains(s)) {
+							fileList.add(s);
 						}
 					}
-					
-					Map<Integer,List<String>> requireIndex = new HashMap<Integer,List<String>>();
-					Map<Integer,List<String>> removeIndex = new HashMap<Integer,List<String>>();
-					int pos = 0;
-					int storeSize = (int) Math.ceil((fileList.size() * rFactor) / dstores.size());
-					for(Integer i : dstoreFiles.keySet()) {
-						requireIndex.put(i, new ArrayList<String>());
-						removeIndex.put(i, new ArrayList<String>());
-					}
-					Iterator<Integer> it;
-					for(String file : fileList) {
-						for(int j=0; j<rFactor; j++) {
-							if(it == null || !it.hasNext()) {
-								it = dstoreFiles.keySet().iterator();
-							}
-							//If indexed dstore does not have the file, add it to its requireIndex entry
-							Integer thisStore = it.next();
-							if(!dstoreFiles.get(thisStore).contains(file)) {
-								requireIndex.get(thisStore).add(file);
-							}
+				}
+				
+				Map<Integer,List<String>> requireIndex = new HashMap<Integer,List<String>>();
+				Map<Integer,List<String>> removeIndex = new HashMap<Integer,List<String>>();
+				int pos = 0;
+				int storeSize = (int) Math.ceil((fileList.size() * rFactor) / dstores.size());
+				for(Integer i : dstoreFiles.keySet()) {
+					requireIndex.put(i, new ArrayList<String>());
+					removeIndex.put(i, new ArrayList<String>());
+				}
+				Iterator<Integer> it = null;
+				for(String file : fileList) {
+					for(int j=0; j<rFactor; j++) {
+						if(it == null || !it.hasNext()) {
+							it = dstoreFiles.keySet().iterator();
 						}
-						//Dstores not chosen in the above loop must have an entry added to removeIndex, if they have the file
-						for(int j=0; j<(requireIndex.size() - rFactor); j++) {
-							if(it == null || !it.hasNext()) {
-								it = dstoreFiles.keySet().iterator();
-							}
-							
-							Integer thisStore = it.next();
-							if(dstoreFiles.get(thisStore).contains(file)) {
-								removeIndex.get(thisStore).add(file);
-							}
+						//If indexed dstore does not have the file, add it to its requireIndex entry
+						Integer thisStore = it.next();
+						if(!dstoreFiles.get(thisStore).contains(file)) {
+							requireIndex.get(thisStore).add(file);
 						}
 					}
-					
-					Integer acksReceived = new Integer(0);
-					for(Integer thisStore : storeOrder) {
-						List<String> sendMessages = new ArrayList<String>();
-						for(String file : dstoreFiles.get(thisStore)) {
-							if(isEmptyListMap(requiredFiles)) break;
-							
-							String fileMessage = "";
-							for(Integer otherStore : requiredFiles.keySet()) {
-								if(thisStore.equals(otherStore)) continue;
-								for(String otherFile : requiredFiles.get(otherStore)) {
-									if(file.equals(otherFile)) {
-										requiredFiles.get(otherStore).remove(otherFile);
-										fileMessage = fileMessage + " " + otherStore.toString();
-										break;
-									}
-								}
-							}
-							fileMessage = file + " " + (fileMessage.trim().split(" ").length) + fileMessage;
-							sendMessages.add(fileMessage);
+					//Dstores not chosen in the above loop must have an entry added to removeIndex, if they have the file
+					for(int j=0; j<(requireIndex.size() - rFactor); j++) {
+						if(it == null || !it.hasNext()) {
+							it = dstoreFiles.keySet().iterator();
 						}
 						
-						String message = "REBALANCE " + sendMessages.size();
-						for(String s : sendMessages) {
-							message = message + " " + s;
-						}
-						message = message + " " + removeIndex.get(thisStore).size();
-						for(String f : removeIndex.get(thisStore)) {
-							message = message + " " + f;
+						Integer thisStore = it.next();
+						if(dstoreFiles.get(thisStore).contains(file)) {
+							removeIndex.get(thisStore).add(file);
 						}
+					}
+				}
+				
+				class AcksReceived {
+					int value;
+					public AcksReceived() {
+						value = 0;
+					}
+					public void incr() {
+						value ++;
+					}
+					public int getValue() {
+						return value;
+					}
+				}
+				AcksReceived acksReceived = new AcksReceived();
+				for(Integer thisStore : storeOrder) {
+					List<String> sendMessages = new ArrayList<String>();
+					for(String file : dstoreFiles.get(thisStore)) {
+						if(isEmptyListMap(requireIndex)) break;
 						
-						//Send message to the Dstore
-						new Thread(() -> {
-							String returnMessage = dstores.get(thisStore).sendAndReceive(message);
+						String fileMessage = "";
+						for(Integer otherStore : requireIndex.keySet()) {
+							if(thisStore.equals(otherStore)) continue;
+							for(String otherFile : requireIndex.get(otherStore)) {
+								if(file.equals(otherFile)) {
+									requireIndex.get(otherStore).remove(otherFile);
+									fileMessage = fileMessage + " " + otherStore.toString();
+									break;
+								}
+							}
+						}
+						fileMessage = file + " " + (fileMessage.trim().split(" ").length) + fileMessage;
+						sendMessages.add(fileMessage);
+					}
+					
+					String message = "REBALANCE " + sendMessages.size();
+					for(String s : sendMessages) {
+						message = message + " " + s;
+					}
+					message = message + " " + removeIndex.get(thisStore).size();
+					for(String f : removeIndex.get(thisStore)) {
+						message = message + " " + f;
+					}
+					
+					//Send message to the Dstore
+					String finalMessage = message;
+					new Thread(() -> {
+						try {
+							String returnMessage = dstores.get(thisStore).sendAndReceive(finalMessage);
 							if(!returnMessage.equals("REBALANCE_COMPLETE")) {
 								//Log error
 							}
 							synchronized(acksReceived) {
-								acksReceived += 1;
-								if(acksReceived.intValue() == storeOrder.size()) {
+								acksReceived.incr();
+								if(acksReceived.getValue() == storeOrder.size()) {
 									acksReceived.notifyAll();
 								}
 							}
-						}).start();
-					}
-					
-					//Wait for REBALANCE_COMPLETE from all Dstores
-					synchronized(acksReceived) {
-						try {
-							acksReceived.wait(timeout);
-							if(acksReceived.intValue < storeOrder.size()) {
-								//Restart rebalance operation
-							}
 						}
-						catch(InterruptedException e) {
-							e.printStackTrace();
+						catch(NullPointerException e) {
+							removeDstore(thisStore);
 						}
-					}
-				}
-				catch(Exception e) {
-					e.printStackTrace();
+					}).start();
 				}
-				finally {
-					rebalanceMessages = null;
+				
+				//Wait for REBALANCE_COMPLETE from all Dstores
+				synchronized(acksReceived) {
+					try {
+						System.out.println("Waiting for REBALANCE_COMPLETE...");
+						acksReceived.wait(timeout);
+						if(acksReceived.getValue() < storeOrder.size()) {
+							//Restart rebalance operation
+						}
+					}
+					catch(InterruptedException e) {
+						e.printStackTrace();
+					}
 				}
 			}
-		}).start();
+			catch(Exception e) {
+				e.printStackTrace();
+			}
+			finally {
+				rebalanceMessages = null;
+			}
+		}
 	}
 	
 	void receiveDstoreList(int port, String[] list) {
 		if(rebalanceMessages == null) return;
 		
-		for(String file : list) {
-			if(!index.containsKey(file)) {
-				//Log error
-				return; //Throw exception?
+		List<String> toList = new ArrayList<String>();
+		if(!list[0].equals("ERROR_EMPTY")) {
+			for(String file : list) {
+				if(!index.containsKey(file)) {
+					//Log error
+					//return; //Throw exception?
+					//Ignore those, there might be new resources a joining Dstore wants to contribute
+					//Then again, there might be malformed messages. Think about this.
+				}
+				toList.add(file);
 			}
 		}
 		
 		synchronized(rebalanceMessages) {
-			rebalanceMessages.put(port, list);
+			rebalanceMessages.put(port, toList);
 			if(rebalanceMessages.size() == dstores.size()) {
 				rebalanceMessages.notify();
 			}
 		}
 	}
 	
+	void removeDstore(Integer dstore) {
+		dstores.remove(dstore);
+		Iterator<IndexEntry> it = index.values().iterator();
+		while(it.hasNext()) {
+			it.next().removeStoredBy(dstore);
+		}
+	}
+	
 	List<Integer> reshuffle(Collection<Integer> col) {
 		List<Integer> list = new ArrayList<Integer>();
 		for(Integer i : col) {
@@ -571,8 +640,8 @@ public class Controller {
 		return list;
 	}
 	
-	boolean isEmptyListMap(Map<T,List<U>> map) {
-		for(List<U> list : map.entrySet()) {
+	<T,U> boolean isEmptyListMap(Map<T,List<U>> map) {
+		for(List<U> list : map.values()) {
 			if(!list.isEmpty()) {
 				return false;
 			}
diff --git a/Dstore.class b/Dstore.class
index f175e51d292f7e107fa06774569a117094b0ff31..d50e2886a2e23df4396911799fb8df9675121560 100644
GIT binary patch
literal 10024
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
HF-QUc?H}aF

literal 8724
zcmX^0Z`VEs1_mp}MO+L_49x5dEIbUX3~Y=H0$GV=iTXK-dFlH8Nm;4MC5#MgHko;u
zC3cJq%o>_uoD3Wcoa_u-JPh0nJd6x%F2yDJMX8JoECu;RC5#M=o*)H$JPiCGS=MBb
zC`d$*hd~G=!d{Y@o0?x*0umG9VGv~yV`Sh;%gjl2%g;$kEn;L4@<BKtxTGjEFWs7*
zL4uJ%5G-6;l9{9LkyxDJn^?fbAkM%HGDn(+L54w=k%1FrPH<*bYB3`NKg1ZYdf&tX
zYc2+P1_gEoMIHtv24$FOU|)LXm87PFZ00CPEGka*%qwAJ5Y>Qa2P=TOLerCrfrCL6
z6ijN23=$fio}O3~g@F`l@GxkC!jiSPB(bQ3ok5$CK^g3Puz8+&DXA6yr6vApPWh#I
zDaEc8$*Bb;nfZB~47v<@><s!m3<eB_C@~RSSzMBu%gDf-UkY*^#NNz&{eYs(yprIO
zqSVA(YYqluMh0Ey{M_8cycC6;%)C^E#G>@l+|<01Vug&vvQ&k<{1Szv)YLqMf};Gg
z%#_p=E(TKuGj;}Z9tH~rOGXA^up3d0Wn^G409lfgha*(N*cq%D8RWrQ!QS&L%}q)z
za?3BuO)P<Xjf26KkwG1Y<8n)jK@L;Mgv3NKJA*wV13%crywno?;QZw5)DkWRM+PT$
z24@}y7Y0{G1`)WlXI^TFV@gU<YH=|m15bKtiBEoVVva|CaS14vG$COHG6zYaH5Y>&
zgF7fHJs26JpplKP##1wloxzKdK@4nFX1=~tX<AxpQEEz1YGO)i5j%qqBZDMN&NHu|
z6dDr{X^;(mJPiH}0gMcM>8T}13K$v0HK6Xw%-2Vfu;ya$W(Wc~D;VT<h||%OXohhy
zcrt{76ooM|2t(bTnXeDA)*6ySBX}4h8KM{&c#`w;N{aGxa#D*t^B5T<;6|eQ#hRTV
z20i}6i!w`6i$LCp<6($rNMK~(PfsoJFD-$46y!#PKagdtxfr4ul0a@uW@L~=xDiDS
z#HFb`3~3DMj10U8m-=H#<Pg_b3o$S-Wb!a%F=R6`i039|r#k27B`21IXO?6*=jRod
zB<7VAgA%GI)Lq~d3C+MDH<^KmJRXL8aP~~gDJ{-mXDCF;Yatm$sfj5<42%rLJPaia
zrHl;BMWuO+4Eh>Akh0Di5{RJW0!f<I$d(0_=H(?O<)m73F%&SAgMy#}6yFd%VCTS9
zfTFU1L4%#4nvp>ioRGj~rWTc@7C}trVyI%M1({LD$iSlE3DQu-(7?mc$k4>dz?PT{
zDmXxi0O|m+c5rU71|^af9)?ziHbw>xkcWIS^HLcZL|_RI>=J0ea4>W*GB7G|F?2C>
zvorMYF!VC?p#%v;9U}v4aY0UI2_u6#G)9pP(Tqm&B1D5Vs4Seo!!VIy5+eg|Mq*w{
zPO5KeadBdLDkFov1{MtvBaplS5x~fM)}WB^WSGLkFcln;$vOGOsq75XVQCobFnHm^
z#W0OwCJ)0bkWzkdX%<|Pn4BF_l$e~#!7zuBfi*b9Kgbp2|9LzN^BEQ}GO(o<mL}$a
zlM=)UU=#hp6{59f6v$(Xco-HlECB@yqyn^u1`3Aj!CIjq0<AKzd5D8y86yLykH4c!
zyo+OqBgl#sJPa!tRxvWL<m4x&FfynSV}oWG2g4dh2DTtqU;i*ykSXhU7}kS|cebL`
z-2Ads4u*}43@kpL!66{Y%{&ZSK;goYlUZEC!LW^yfiuX}$<fEr&l#+F2M@zehFy#d
zoJFZgi8+aR$*GJCV%VZiGfaqqiD3^Y%j{)jaKfEgkirudDA42!4k&o;5Mp3v*bg%9
z03(AVDaPS2jfLS5$h5<Z3<hYXf$fF51&3x<hNB?O#~2yp;F@tLWn(x2QhJh+!4R$#
zOH#+G8`MfU&BJhp;VdHqds$*mX{vu3D7;aMGiZawnw#M~!v%JRi#!aMKuMMtT!O$F
zJd6z7paL~9Gq2b?wUV9T3M^}Y6*v|ZC06=m7ME}_TxMVf8FZb8;ReG^Mh51B(h^1n
z3usCMhYU2;BgGq31lbEvA&^nGc^K|6++}27PERdCBwA#nuxMmwxX;MIhwuW(aoh~|
z7#{L4JOcTSIWZ*#WcU*vhNleA7#Y~IQ!9f(<_p3~G_c2lQ%kJ58D22FWM_EA!|<Bn
z4I=|mxPUcqfU32`lKdi2z(QRD*6Uf4S_Bfe=4N=u@SdIF0}sPThEI$PLI_vElrS=|
zXCxN;rB;-H8^uu|9bb4DzA}7cWMIhy3!|2_@Zh<}@KT6@o#7`aiTq+@aE2!lq~L``
zFp?0y)XC29hmnB??8wY~eYeb<R3QcqhJT=1@;_QsLXE+1FjNs2!*51LP~Bq*VlneD
zvVa1EEhRN4wIr2;k&Tf-2wqYsIQ#ns__&6+axp|Ra_}&6g323Ka8b*}AkWCn!^p$P
z%gDfynO719O4Z;{^Auv>WaQ^z$YK;A=uBw%L8A+tmf+5eW|+dkD9p&f?C9*x&M3;r
zAdVasNX;uQMiE9v5Fx?CD9I?r$iM=s7#SH@HKLs~J-HZV7-iWR<#-t785Lj+%*=d!
z<TeW<18X^`Sp?M+#>FVZkjKR+!Y~EIngVJpO<`wLgXJ|))6E}I4Kb=R%mjs{CJ&<)
zqc$T0C#cK?#aA&SgP;bi0)@t*HAtl{52GHa24_!CE%8gtO$CV=@Gu%O8Zk1kmE;E`
zmSiBM;=Ig!eNY!jA0%$g#c0B4%FbxU!)VTE0do;t3DjCXNOXFpxmIKrgPKm_(3}rf
z2sTSIii6RLk%0?Rsl+=vdkZmeG1`FQ&K50;L!$*tOtCZCGcw2`$Bkcpi5sX31P>w(
zMn^^l5!av~{~!eyf7jr6KmU+;*9gzx5OzjqMg|FF&B*b>#puN7%EQ3Q=mrW7%;X)V
z8OFuv!RX1(=*7e6&FBLQ4p0Ok8t#k?T%ZKu=Tun&>O!(>L_2wUf)a)kqbwJr6DX#g
z7^Vm@a5LI)Gn{7(0@bT`85uZ(Gt=`DOG-h#U^9r_;PS*bvA_nxMNY3sBCvdJXU)jK
z;+&t73hK6I=A}Y<P$8gJBqIY$ZenI0BLgqE$>N(>02StfhgmTrgHTRlZc<933cQY1
zF=J;0HR!R_JJ?j4GBRjD;~nf&n8T3V3X9e-cE$uo2Bv5yMh0G}t)Nt_V#3at%*enG
zwGftu85#JYiXd$d6=QbBG+2p>lEjdV%TG*EF=AxkgX#p2FQ^zITAlbCSejwTS`&*(
zR184PUWiwaw1U)e1?QI*C8vV&0wV)Aq;;<cN@I)+0#5n)CB-F0i3Pr?B^miC#r$lH
z1ze1Uj798>#h`Rw!pNWkQVJO=$;>Ou&ra2cgc77r;+B|Pl3!HG$S?yrXrT%rhI)XT
z#KkH;`T5zU1<-y4I0hgFA&a1B45=(gMV5prhlW1b1S};c)ClLqoSfjyl2mIB#xh0*
zHZOlqKLtj9HpU7r#!AL2cE)NR#u~<2Mg}De@A-g}nQv-IVj9eI+_}iSGqm?A)Dw^Z
zL=OiPNl54-2NQ}kSTAxh1(k&dj{pN3KRaUs7Xt@lBM)O1V>UlKV>5`?!o!%sn90x1
z*aqUY^Dw3}tm0>9>;&<;co<U{Ecw|PdqBKi9>zqlDg7Yc1RlmHhF$#ZjFUjT$vlj)
zjBy-{QyCeU8TA=C7^j1Z5>Q7(fl+~xgK;J!gBZ4w5F|I7k%1fBX8{$(3XF^lJf3-Z
zsYT8?iN(dK#q5mp7#UPCVh<8zkWhi8Id;Ycj0|%4l`=B0K@uo~A_E5l69WSSI|B;?
zHv<m?0|N_aoDWP3LHVK#Vqm@ugDe9hV=w~)0~2Ei0}E(40xX`!kj}usAi%)Lz{;S;
zz{nWNz`zj7z|6qPz`&rYwVi=cOL{8<yOzvW23{@MtqcNMk}O*pgtc}vh(~T`kle~3
zwUL2=fsrwcfq_Aeft`VYL6m`oL5zWuL7ah)L4rY;L6Sj|L5e|zL7IV+F`Qu+)QU|E
zYz%A+3=FPX%tkvH<ZQH9K$NW(D~PhwVl%R0+0DQaDJ>%_$+De6#fnvubsK~Fat3jq
zO$<6hM%x%nHiB6;Al623DCja6FlaF_Fz7N^F<3D$ft_T<z{kMAAkV<gpuoV#pvWM~
zpagb|27@YtE`uI}0fRb&A%g~kC4(k|6@xZ|HG>X=GlMRJ3xhsm1Oo#DHv@A4JA;-d
zJA)M`10!e@5#oMEC#d_^>}Ifw+`-_WwS|FqJA<2#)@}yR$lVOyk=olBe77?MZf6MD
z$`G!#n;{w`61$xtaVtZL))p{k-^Gx@z_5)W2gKjTkh`0qAW}<v7ef&P!*+(UZ48yW
z8LA?+wlJ`7XQ=Vj*~U=s2Qyq3ZnzbTB+E92W})_N44qc2T9T}~AbvlHn7sV|SwG!v
z3^SJhKkB2sjbR2Tm@*h<Gt6U{#=yX^jA0qWG-xmdF^DiQFc>rNGng=_GMF-$Fqkp8
zFqkuVGgvZ2GPp9tFt{^hFnBZMGWakwGWas|GWan}WAJB~%@D#ck0Fp@K0`3WVulcg
zWenjA%NZgVRx?C_gHMKm`7c8TJA)lNLscm|!?gbl><o<T3>+W=<c5h1lNgx5Np1%N
zD+3Dy14Fhpvyss3Z47f~GKgyFXtNk;gHwd=Him`E83I6(OTm(SV99L^%a=1)fkan>
zMR~QfS&X(ZtX<Ba3KHA^7Ua^}#;|EQgD^;BD_Dd>OM4r`c2L5Fq!K*_ZUzR1SO#u}
zI0jjU1O^R;L<VDqWClBi6b285G=^Y?bcQH~Oomj3EQTzGe6ZKp8CYdSMFja7Bf;5-
z5gewA8J0l(W5U1&&O#!PNY#<u#jqO|tssjbIfjpcnSp_!h(Um1B7-o)Bown&GOU7{
zWz4_|RwoQKYZt>lTt-c0;AhyxAjGg4#i;cRmQbUN7+Ao0MF?WlE{21+Oxni4$8eHC
zkl_@HNn04$pe7kIFf%YRFfa&$P1?n91eZZ)8F(2kGYBwTK{042!!D>n7*0Bl%cScJ
ze2gj#f{dyNlLVMRMK~l+GF39Lf+CVJP8(d9n6a{&u|UfyUuH8lQ8rQ5MGV>6qAW&M
z>@6&eAjS>`IWvwH7Di?>PEk%#jztV^P|+O>r>wYiB)N7noMU2`#UQLB$+er|a^!Y~
zt2-I4F*AgNrEW1X9ALO7$-a}}0TV-b3kzclC*$(}J6qTom;avvHOP#ug@sX+Z7)NY
zAF~;|D7z@zA_fs%QFf4YFh~nK<MRKnb#^j5W@OmO@SKssiXCL&TSkVN41pllXGVqt
z4DwbSI+7ea86Y<9Wcbd=V8toPxsw5`P7TBYtLw7j0>_6Wha}f7h99tyT>k&s^8c%K
zK}PR0<A8fsO_E)d(+H&HH>jKu2I=|Bz_6W>VH+b;IM_2cL1mLLBkMLsb`WbDLoO)w
zLb6RCgE9jH!(9drhI<U$4EGs?86GgmGCX8ZW_ZM)#_)tepW!Kk5yLYE8;0i$9t<xS
zf*D>iBs08bC}ViTP|5I&p`PIZLo34vhCYUm3=<hXF-&Lp%&?H*3&To=uMBG#J~M1$
z_{ngU;TOYShTn{QjN*)fj1r6@jFODvj53S{jIxYwj53TqjEan5j7p5Lj4I%4S<1ls
zpFxa)ot=S$oiUo7;XDH)BO?RDKL$B=hAu|NKMcC;4D$aOq%l<dVqpExAi}@_*T~Ko
z%?Q@}i$VMk0}ngHyT1(T><sek4DWt2==@?}`p3WpR`Y{FQ-BH7c7P;9#xMp}22KVB
zhK<mwL3<k`*LDUsKTsW@yNv-<2Y^a#9jz@4Qaa!$-NncUt_MJ+cCIALHby}#1wFV1
zY!+q|+Qu+<76UV=KAbGTv4_KoZ8xI`IQn#UF@R%F%!(akj}?a`yCmB-M)7$JLXsRH
zmb4_tHb%we|6fV6Z(~#fag=qpF{&(Q;PBJk#;Cp#oS|1RtY%b&)(c?_q6`cSe;N20
z{xQff{0Gf~F_<wjGFUS*Gx#&IFvK#lGbAx`GGs7vF;p{hGc+>tFmyBWGE8FRW0=J#
zz%ZXtkYNd<5W@;aF^1KQA`EL7MHx0Qii2ZHpMmusLoB#%h-PQ-{Kufo&KS?mD8kMt
zBk`X>05k{60S@ji21a&9RTcpzP}>a>#tg;K7K+7g21wEcr&$dj?R~b)cCs>y7!<W-
zjjUKeNfs2II*3ZPg_&{r{|AUfECw#7&ojs|Twu^*xX570aGt@O;WF5Xyr4)HVP{NY
zWc<OPB)|k}N<tm5jDZDQCcD8LpbZUthHZ@czB)S?jb}0lfUFm0wA{v!vmC<F-o<DQ
zj%kq0Hiq2g3>>~X@Q}A<aDa!r8aN5<WDsT8%^<_DmqC-^AcGmh5e8d^6ATUv#~2(L
zjx)G2oCG^lih<=1gC;v;D$jogP6j4W3T8kAS~|ljh?^Pp8CbwAv_eoy)P|%)Kg`6#
zvYbKGid9#b(P0}yj_x*wT-|Mqf*V2Vtym!mPLc(bn#7srGYCntf|$~htl)(85){}<
zAoU;tWkkYaX5e9vXHa6a12;3W8C4lf7%~_@G^8kjG(cuB@G#6~kY`xLpu{kjL4{!+
zgEqr_27QJF48{x#8B7?KFjz4xWpH3v#^BAcoFRx|1w$0WYKC}*H4MoNYZ)>aHZo*0
ztY^q!*uYT0un8PAHVkb48I%}Uz+qy?&d|lq5DiLBc7GTI*%?LtGH|mq%CIxWOCnMn
zNEJv4IK^c!W<mq6h=C0pB?plL50s6;88Qbc=Q27WWk%-hj4oEJpthhD8#wIPCD|m|
znFTnuF}j1YB`YW=`ho(>Z~6b{Ale^fKD6Y3HYy=8WyK-Mp|guI0Gxg#Ikqw6f-<lm
zv=lkV#4wYA55i##WMT*hGi7%$oPyL>%Ne*pu7#(yZ45i%X$_LgOBr|>${0i$${C~>
zDj4J$su+wJsu?U9>KN=9>KS|(8W@5Z8X2M)ni&!p+8C-B+8J6IIvBbbIvM&Ix*3);
z^e}8=n82`;p^srVLqEd-hKb+^um%;Y_K;!~)C}xmWM_zGXLMp`^k8R<XJC;2!{E)%
z5dEJ)5Gj%v!Qsy)zy#{$LBgLQ2b$s3w6-vWZ)0fo)j7r>q@@FH_-aGM`j`KI3Th|M
zSpNSmxG0lmkb^gIA)ON&1`Y;W1|9}G25AOo1~~>t26+Z224x0kuwywGm>Hy;*cqlV
zFf-<WdrG;Cc?=8;X$(A!`3#JVrHtha%#3x6^^A2;Rui1n3TJh|S>13}ADlIju?}q3
e6fijrOwIt4vl!<vFfed2Ffz_%oX@zBK@tGp!H&HE

diff --git a/Dstore.java b/Dstore.java
index 018a925..3fd7352 100644
--- a/Dstore.java
+++ b/Dstore.java
@@ -12,17 +12,27 @@ public class Dstore {
 	protected int port; //Port to listen on
 	protected int cport; //Controller's port to talk to
 	protected int timeout; //in milliseconds
-	protected String fileFolder; //Where to store the data locally
+	protected File fileFolder; //Where to store the data locally
 	protected Map<String,Integer> fileSizes;
 	
+	protected Socket controllerSocket;
 	protected BufferedReader controllerIn;
 	protected PrintWriter controllerOut;
 	
-	public Dstore(int port, int cport, int timeout, String fileFolder) {
+	public Dstore(int port, int cport, int timeout, String fileFolderName) throws Exception {
 		this.port = port;
 		this.cport = cport;
 		this.timeout = timeout;
-		this.fileFolder = fileFolder;
+		
+		fileFolder = new File(fileFolderName);
+		if(fileFolder.exists() && !fileFolder.isDirectory()) {
+			throw new Exception("Folder name provided exists as a file and not a directory");
+		}
+		else if(!fileFolder.exists()) {
+			System.out.println("New folder will be created");
+			if(!fileFolder.mkdir()) throw new Exception("Folder could not be created");
+		}
+		
 		fileSizes = new HashMap<String,Integer>();
 	}
 	
@@ -56,9 +66,9 @@ public class Dstore {
 	
 	public void start() {
 		try {
-			Socket socket = new Socket(InetAddress.getLocalHost(), cport);
-			controllerIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
-			controllerOut = new PrintWriter(socket.getOutputStream());
+			controllerSocket = new Socket(InetAddress.getLocalHost(), cport);
+			controllerIn = new BufferedReader(new InputStreamReader(controllerSocket.getInputStream()));
+			controllerOut = new PrintWriter(controllerSocket.getOutputStream());
 			controllerOut.println("JOIN " + port);
 			controllerOut.flush();
 			
@@ -67,7 +77,7 @@ public class Dstore {
 					try {
 						String message = controllerIn.readLine();
 						if(message != null) {
-							handleMessage(message.split(" "), socket, controllerIn);
+							handleMessage(message.split(" "), controllerSocket);
 						}
 					}
 					catch(Exception e) {
@@ -83,8 +93,7 @@ public class Dstore {
 					Socket client = server.accept();
 					BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
 					String[] message = in.readLine().split(" ");
-					handleMessage(message, client, in);
-					in.close();
+					handleMessage(message, client);
 				}
 				catch(Exception e) {
 					//Log error
@@ -97,9 +106,9 @@ public class Dstore {
 		}
 	}
 	
-	void handleMessage(String[] message, Socket client, BufferedReader clientIn) throws Exception {
+	void handleMessage(String[] message, Socket client) throws Exception {
 		if(message[0].equals("STORE")) {
-			store(client, message[1], Integer.parseInt(message[2]), clientIn);
+			store(client, message[1], Integer.parseInt(message[2]));
 		}
 		else if(message[0].equals("LOAD_DATA")) {
 			load(client, message[1]);
@@ -118,16 +127,15 @@ public class Dstore {
 		}
 	}
 	
-	void store(Socket client, String filename, int filesize, BufferedReader in) throws Exception {
+	void store(Socket client, String filename, int filesize) throws Exception {
 		new Thread(() -> {
 			try {
 				//Send ACK message to client
 				PrintWriter out = new PrintWriter(client.getOutputStream());
 				out.println("ACK");
 				out.flush();
-				out.close();
 				
-				FileOutputStream writer = new FileOutputStream(fileFolder + "/" + filename, false);
+				FileOutputStream writer = new FileOutputStream(new File(fileFolder, filename), false);
 				InputStream reader = client.getInputStream();
 				
 				//Receive + write file content from client
@@ -139,10 +147,8 @@ public class Dstore {
 				writer.close();
 				
 				//Send STORE_ACK message to the Controller
-				PrintWriter controllerOut = new PrintWriter(new Socket(InetAddress.getLocalHost(), cport).getOutputStream());
 				controllerOut.println("STORE_ACK " + filename);
 				controllerOut.flush();
-				controllerOut.close();
 				
 				if(fileSizes.containsKey(filename)) fileSizes.remove(filename);
 				fileSizes.put(filename, filesize);
@@ -150,6 +156,9 @@ public class Dstore {
 			catch(IOException e) {
 				e.printStackTrace();
 			}
+			finally {
+				try {client.close();} catch(IOException e) {e.printStackTrace();}
+			}
 		}).start();
 	}
 	
@@ -160,12 +169,13 @@ public class Dstore {
 				PrintWriter out = new PrintWriter(client.getOutputStream());
 				FileInputStream reader;
 				try {
-					reader = new FileInputStream(fileFolder + "/" + filename);
+					reader = new FileInputStream(new File(fileFolder, filename));
 				}
 				catch(FileNotFoundException e) {
 					out.println("ERROR DOES_NOT_EXIST");
 					out.flush();
 					out.close();
+					client.close();
 					return;
 				}
 				
@@ -183,6 +193,9 @@ public class Dstore {
 			catch(IOException e) {
 				e.printStackTrace();
 			}
+			finally {
+				try {client.close();} catch(IOException e) {e.printStackTrace();}
+			}
 		}).start();
 	}
 	
@@ -190,11 +203,11 @@ public class Dstore {
 		new Thread(() -> {
 			try {
 				//Remove the file from fileFolder
-				Path path = new File(fileFolder + "/" + filename).toPath();
+				Path path = new File(fileFolder, filename).toPath();
 				
 				if(Files.deleteIfExists(path)) {
 					//Send REMOVE_ACK message to client (the controller)
-					controllerOut.println("REMOVE_ACK");
+					controllerOut.println("REMOVE_ACK " + filename);
 				}
 				else {
 					//Send DOES NOT EXIST error
@@ -212,20 +225,25 @@ public class Dstore {
 	void list() throws Exception {
 		new Thread(() -> {
 			//Send a list of all files in fileFolder to client (the controller)
-			for(File file : new File(fileFolder).listFiles()) {
-				controllerOut.println(file.getName());
-				controllerOut.flush();
+			String message = "";
+			for(File file : fileFolder.listFiles()) {
+				message = message + " " + file.getName();
 			}
+			if(message.equals("")) message = "ERROR_EMPTY";
+			controllerOut.println(message.trim());
+			controllerOut.flush();
 		}).start();
 	}
 	
 	void rebalance(String[] message) throws Exception {
+		System.out.println("Rebalance message received");
 		new Thread(() -> {
 			//Interpret files to send and files to remove from the message
 			Map<Integer,List<String>> filesToSend;
 			String[] filesToRemove;
 			int index;
 			
+			System.out.println("Interpreting message...");
 			int numberToSend = Integer.parseInt(message[1]);
 			index = 2;
 			filesToSend = new HashMap<Integer,List<String>>();
@@ -252,26 +270,26 @@ public class Dstore {
 				filesToRemove[k] = message[index];
 				index++;
 			}
+			System.out.println("Interpreting complete, will send " + numberToSend + " and remove " + numberToRemove);
 			
 			//Send each file to send to the Dstore at the specified port number
 			for(Integer dstore : filesToSend.keySet()) {
 				for(String filename : filesToSend.get(dstore)) {
 					new Thread(() -> {
 						try {
+							System.out.println("Sending " + filename + " to store " + dstore);
 							Socket socket = new Socket(InetAddress.getLocalHost(), dstore.intValue());
 							PrintWriter out = new PrintWriter(socket.getOutputStream());
 							out.println("STORE " + filename + " " + fileSizes.get(filename));
 							out.flush();
-							out.close();
 							
 							BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 							if(!in.readLine().equals("ACK")) {
 								//Log error
 							}
-							in.close();
 							
 							byte[] content = new byte[8];
-							FileInputStream fileIn = new FileInputStream(fileFolder + "/" + filename);
+							FileInputStream fileIn = new FileInputStream(new File(fileFolder, filename));
 							OutputStream fileOut = socket.getOutputStream();
 							while(fileIn.read(content) > 0) {
 								fileOut.write(content);
@@ -279,6 +297,8 @@ public class Dstore {
 							}
 							fileIn.close();
 							fileOut.close();
+							in.close();
+							out.close();
 							socket.close();
 						}
 						catch(IOException e) {
@@ -290,12 +310,14 @@ public class Dstore {
 			
 			//Remove each file to remove from fileFolder
 			for(String filename : filesToRemove) {
-				new File(fileFolder + "/" + filename).delete();
+				System.out.println("Removing file " + filename);
+				new File(fileFolder, filename).delete();
 			}
 			
 			//Send REBALANCE_COMPLETE message to client (the controller)
-			controllerOut.print("REBALANCE COMPLETE");
+			controllerOut.println("REBALANCE_COMPLETE");
 			controllerOut.flush();
+			System.out.println("Sent message REBALANCE_COMPLETE");
 			//TO DO: WAIT FOR RESPONSES BEFORE SENDING REBALANCE_COMPLETE
 		}).start();
 	}
diff --git a/DstoreConnection.class b/DstoreConnection.class
index 46f9894507e1969d0e9e198cd8bf1d8fda9c031a..22b19b02f98e1f15e335aad8652e4c0bba7bcf2e 100644
GIT binary patch
delta 1641
zcmey#eO;LA)W2Q(7#J9=80t52g)r5#GgvS($Ymv#CF<uS=B4ZVmFDCG<Y(rUq!zhW
zB&QaXWaj5_GFUNKvoqN6FxWEKF)|1sR0mfUm!#%0GBD?tmM}7i`haCJ^YsIYGV@A;
zONvqxbFDcT92gmdU5ZQci&7O*GK-V*^YT)YOHxy~7@Qd7o!J>&co<w6+!z^zvFM&$
z%%l{;!QjEj!0(<~Qj(dMu8@<ToUNy)$HCym$iVB9pPa3bm|R$zS(KW>!QjKl!0H+l
z<R8Svpvd41BK&z60vOmB8CcVDN{chN7&sV$co>2iLMCry(x^9QVCG;5XJlaDVu)mj
zVrPivVTfUfMfG7xQD$B`BLiD%VQFGcF(ZSh2E>=((DF~pN=+`Y){Np};AM#CVMt&I
zVPxPaN=;1h$;?X?VqjoM;$cW;NMU3U&rQrub<WRAPAmz}EXi=r&nqrrPs}SRW@J#C
z+`uF<If_|m@+YQ1W_E_`$@$C@++6VBFP_}WtY6Q_AmEgrUs7CBlvv=KT9T2UQq0fB
zP{hSh%uvG4Pzti9jFCYF9EM=GW#*OTXQ%21gFOJT*)1`-B)_PVkzoe1C!h);hI%CC
zrR1a*tN7&SXO|XO!~I&H4mAlOl&+7WGo-R06<HEuv2`@uh;)5ea3Kjnjc`uP$qCLZ
zNwwx+s9<Ceb<WQ#Day~uNi9++N=;79EK99VQD9_b;PK4MOD%HFNh~f-EoNt^W@J#s
z@Gv%iurt)6q;jaOC`uU_*dU%}P-Ng>U}9ikU}0ck;AY?fvnHQpmJv*4U}Q*RU|=}S
zz{bGLz`zhR`5Uuoy_~PkHU<+d=B*5R%NYcHH!)ZW*>7WT1Pg3rU}E58FlI1gFap!g
z4CV|>4C&wu$j89IAi%)FAjrVUAj}}oAi|)>Aj)9OAje?FAkJXUAi-eGAj#msAjja$
zAkE;yAj9CpAj=TQAkUD&z`!8R!2F-VjDd;0o`Hj%L5P8oox#Y5oxz-!fsrATA%%en
z?9!_YObo0H3=F{_SGj{+73q5j#P$TSw=n3<V&D++);YXEYYT&x_BIAz5WS7TPiq@P
zpw8h9ejufA&+KL}kKE1>y5EXL=ddKpeg;+s9tK&4dNT%d1_iJm%^7$Y<QaSz7#I{7
zOu@7nLjahD_}K^?m`V&B49W~V45|zw3~CGt4C)LT3>pmj44MpP4B8Cl3_1+<47v<1
z40;Sc3<hAo3NSGLVNhUaU<zetFb`#C$YRI=M+zf@IRj%oLoP!I)Voa#OyG#o0l6FE
zT^~&EY9HPJ@}KtM4Zhlkb@nqbgPpAocD5P=h*oFN0@Dy@OEIu9Fff=fa4?uM@GzJ$
zh=4t8!Jy7y$&kTN&%nULzyxuh8>-t_KqU>-Y1<i?z=_IPD9lG&C~O-;#7qW0tt||)
z+Zf_}mj8dhiNR8P7egWg!!`y-?F~NK+ZarQ!Z!GTJc1DcV1rZ`R2hsI7#QkR7<A#O
z3KGJ049pDn3_J`D4B`w<49X1745|#S3~CH+3|b8C47v=S40;S+3}y`84Au-j;1HH#
zVEMzq%+3%g{GWjrl$JO^gpoTtgE>-IGc)8dFfcGN<TDg7Ffed1FftS}FbXl0GgLBw
P%1}mzDux<{ItEDq(DZOt

delta 634
zcmcaE{F9sO)W2Q(7#J9=7(zC3g)oV7Fjz1$u(}2X`3G?^C^A^_FjzC#O#Z{9Bm?5w
z@i5pkurV^Qrsb3tXK*oaFgWrsI59X+E@IY@<YjQ>VQ^z`W@O+fN=;1h$;?aTVDMmM
zV3_R25;$3wMN^WUA%KxVI4iL%Q9ma!FI_(*qbR>TF)1f?@?IAG$sufpf}RYF3|<Tj
z4D%S+7?>Ft7#t^0V>7Mi_0`$NV4}sml|gSK10w?`gE4~{gAoH0gEs>MgBAl90|SEq
z0}F#711EzpgFJ%>gC2t@gE4~?gBgQ3gE@l)gEfOBg9C#!gAW4(gD?Zre+DxKCUyo6
zb_O8^Ms@}xP6kE>Uj{#@-Hi-P3@i)`4BA?ezK687FzD6KV&D)m*EzgFYYT&x_BIAf
z5WS7TR%;uBgU;a%emaMB_cJgvurTm5sDYiL3Z~T<G{H2)nNkdF3=9l%3@i-t3<3-a
z3=#~A4Dt+03~CI@U}y0#F#TZ=U}s<oWoPhbU}OknaE7`ktDb=g92hcMkv?Dtf!(8h
zcmv1*+J`szY9H2tIY1oj05Jv-EzTeXrXdax0((lGfrUYXL4ZM%L7YJg)nYf0#Vnxc
zgjx&=5GDo&hCm^$Eex{T7+id`H~468V=xhN-@w4gz`(%Czy*&6F$Pu!1_pfw4h93T
fC^v&K13!Za*a|iVMlW^-BL+r>AO;2oCWc@DU6WkK

diff --git a/DstoreConnection.java b/DstoreConnection.java
index 2d426a5..8515615 100644
--- a/DstoreConnection.java
+++ b/DstoreConnection.java
@@ -24,32 +24,56 @@ public class DstoreConnection {
 			e.printStackTrace();
 			available = false;
 		}
+		catch(NullPointerException e) {
+			System.out.println("Dstore disconnected");
+			available = false;
+		}
 	}
 	
-	public String sendAndReceive(String message) {
+	public String sendAndReceive(String message) throws NullPointerException {
+		System.out.println("Getting lock...");
 		synchronized(this) {
-			if(!available) return "ERROR";
-			writer.println(message);
-			writer.flush();
-			return localReceive();
+			try {
+				System.out.println("Lock acquired");
+				if(!available) return "ERROR";
+				writer.println(message);
+				writer.flush();
+				return localReceive();
+			}
+			catch(NullPointerException e) {
+				System.out.println("Dstore disconnected");
+				available = false;
+				throw new NullPointerException();
+			}
 		}
 	}
 	
-	public String receive() {
+	public String receive() throws NullPointerException {
+		System.out.println("Getting lock...");
 		synchronized(this) {
+			System.out.println("Lock acquired");
 			if(!available) return "ERROR";
 			return localReceive();
 		}
 	}
 	
-	protected String localReceive() {
+	protected String localReceive() throws NullPointerException {
 		try {
-			String returnMessage = reader.readLine();
+			String returnMessage = "";
+			while(returnMessage.equals("")) {
+				returnMessage = reader.readLine();
+			}
+			System.out.println("Controller received " + returnMessage);
 			return returnMessage;
 		}
 		catch(IOException e) {
 			e.printStackTrace();
 			return "";
 		}
+		catch(NullPointerException e) {
+			System.out.println("Dstore disconnected");
+			available = false;
+			throw new NullPointerException();
+		}
 	}
 }
diff --git a/Grandad.txt b/Grandad.txt
new file mode 100644
index 0000000..4891fef
--- /dev/null
+++ b/Grandad.txt
@@ -0,0 +1,14 @@
+(Yabba Dabba Doo!)
+
+Flintstones. Meet the Flintstones.
+They're the modern stone age family.
+From the town of Bedrock,
+They're a page right out of history.
+
+Let's ride with the family down the street.
+Through the courtesy of Fred's two feet.
+
+When you're with the Flintstones
+Have a yabba dabba doo time.
+A dabba doo time.
+We'll have a gay old time.
diff --git a/PumpkinHill.txt b/PumpkinHill.txt
new file mode 100644
index 0000000..e245805
--- /dev/null
+++ b/PumpkinHill.txt
@@ -0,0 +1,68 @@
+You know me, the fighting freak Knuckles,
+And we're at Pumpkin Hill,
+You ready?
+
+I ain't gonna let it get to me, I'm just gonna creep,
+Down in Pumpkin Hill I gots to find my lost piece.
+I know that it's here, I can sense it in my feet,
+The great Emerald's power allows me to feel.
+I can't see a thing but it's around somewhere,
+I'm gonna hold my head 'cause I have no fear.
+This probably seems crazy, crazy, a graveyard theory,
+A ghost tried to approach me and got leery.
+
+Asked him a question and he vanished in a second,
+I'm walkin' through valleys cryin' pumpkin in the alley.
+Didn't seem happy but they sure tried to get me,
+Had to back 'em up with the fist, metal crack 'em.
+I'm hearing someone sayin' "You a chicken, don't be scared!"
+It had to be the wind, 'cause nobody wasn't there.
+I searched and I searched as I climbed up the wall,
+And then I started to fly, I went in deeper!
+
+Let it get to me? I'm just gonna creep,
+Down in Pumpkin Hill I gots to find my lost piece.
+I know that it's here, I sense it in my feet,
+The great Emerald's power allows me to feel.
+I can't see a thing but it's around somewhere,
+I gotta hold my head, I have no fear.
+It probably seems crazy, crazy, a graveyard theory,
+A ghost tried to approach me, he got leery.
+
+(This is Knuckles, who fears none.)
+(It's real deal when it comes to my name, kid!)
+
+I ain't gonna let it get to me, I'm just gonna creep,
+Down in Pumpkin Hill I gots to find my lost piece.
+I know that it's here, I can sense it in my feet,
+The great Emerald's power allows me to feel.
+I can't see a thing but it's around somewhere,
+I'm gonna hold my head 'cause I have no fear.
+This probably seems crazy, crazy, a graveyard theory,
+A ghost tried to approach me and got leery.
+
+Asked him a question and he vanished in a second,
+I'm walkin' through valleys cryin' pumpkin in the alley.
+Didn't seem happy but they sure tried to get me,
+Had to back 'em up with the fist, metal crack 'em.
+I'm hearing someone sayin' "You a chicken, don't be scared!"
+It had to be the wind, 'cause nobody wasn't there.
+I searched and I searched as I climbed up the wall,
+And then I started to fly, I went in deeper!
+
+Let it get to me? I'm just gonna creep,
+Down in Pumpkin Hill I gots to find my lost piece.
+I know that it's here, I sense it in my feet,
+The great Emerald's power allows me to feel.
+I can't see a thing but it's around somewhere,
+I gotta hold my head, I have no fear.
+It probably seems crazy, crazy, a graveyard theory,
+A ghost tried to approach me, he got leery.
+
+(Spooky up in here, it's crazy in here,)
+(We still gon' keep it goin', I'm Knuckles.)
+(Nobody scares me,)
+(Whoever want it, bring it!)
+(I don't care, we 'ka do this.)
+(Then come step up to the plate, and meet your match,)
+(It ain't no thang.)
diff --git a/SnowHalation.txt b/SnowHalation.txt
new file mode 100644
index 0000000..09add47
--- /dev/null
+++ b/SnowHalation.txt
@@ -0,0 +1,36 @@
+Fushigi da ne ima no kimochi
+Sora kara futte kita mitai
+Tokubetsu na kisetsu no iro ga tokimeki o miseru yo
+
+Hajimete deatta toki kara
+Yokan ni sawagu kokoro no Melody
+Tomerarenai tomaranai na・ze
+
+Todokete
+Setsunasa ni wa namae o tsukeyou ka "Snow halation"
+Omoi ga kasanaru made matezu ni
+Kuyashii kedo suki tte junjou
+Binetsu no naka tameratte mo dame da ne
+Tobikomu yuuki ni sansei mamonaku Start!!
+
+Oto mo naku kehai mo naku
+Shizuka ni unmei wa kawaru
+Korekara no mirai ni mune no kodou ga hayaku naru
+
+Tatoeba komatta toki ni wa
+Sugu kaketsukete dakishimetakute
+Doko ni ite mo dokodemo Fly high
+
+Isoide
+Itsu no ma ni ka ookiku nari sugita "True emotion"
+Yume dake miteru you ja tsurai yo
+Koibito wa kimi tte iitai
+Yasashii me ga tomadotteru iya da yo
+Kono mama ikki ni aijou azukete Please!!
+
+Todokete
+Setsunasa ni wa namae o tsukeyou ka "Snow halation"
+Omoi ga kasanaru made matezu ni
+Kuyashii kedo suki tte junjou
+Binetsu no naka tameratte mo dame da ne
+Tobikomu yuuki ni sansei mamonaku Start!! 
diff --git a/Unknown.txt b/Unknown.txt
new file mode 100644
index 0000000..bc6fa8e
--- /dev/null
+++ b/Unknown.txt
@@ -0,0 +1,74 @@
+Here I come, rougher than the rest of them
+The best of them, tougher than leather
+You can call me Knuckles, unlike Sonic I don't chuckle
+I'd rather flex my muscles
+
+I'm hard as nails, it ain't hard to tell
+I break 'em down whether they're solid or frail
+Unlike the rest I'm independent since my first breath
+First test, feel the right, than the worst's left
+
+Born on an island in the heavens
+The blood of my ancestors flows inside me
+My duty is to save the flower
+From evil deterioration
+
+I will be the one to set your heart free, true
+Cleanse yourself of them evil spirits that's in you
+
+Streaking lights, loud sounds, and instincts
+Are the elements that keep me going
+I am fighting my own mission
+Nothing's gonna stand in my way
+
+I will be the one to set your heart free, true
+Cleanse yourself of them evil spirits that's in you
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Get this power to wipe out the havoc and anarchy
+This is my planet, gonna fight for my destiny
+
+Here I come, rougher than the rest of them
+The best of them, tougher than leather
+You can call me Knuckles, unlike Sonic I don't chuckle
+I'd rather flex my muscles
+
+I'm hard as nails, it ain't hard to tell
+I break 'em down whether they're solid or frail
+Unlike the rest I'm independent since my first breath
+First test, feel the right, than the worst's left
+
+I have no such things as weak spots
+Don't approve of him but gotta trust him
+This alliance has a purpose
+This partnership is only temporary
+
+I will be the one to set your heart free, true
+Cleanse yourself of evil spirits that got in you
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Freedom will be waiting when serenity is restored
+This is my planet, I shall not surrender
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Get this power to wipe out the havoc and anarchy
+This is my planet, gonna fight
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Freedom will be waiting when serenity is restored
+This is my planet, I shall not surrender
+
+The new porcupine on the block with the buff chest
+In the wilderness with the ruggedness
+Knock, knock, it's Knuckles, the bloat thrower
+Independent flower, Magical Emerald holder
+I'll give you the coldest shoulder
+My spikes go through boulders, that's why I stay a loner
+I was born by myself, I don't need a posse
+I get it on by myself, adversaries get shelved
+
+Right on!
diff --git a/client_1618914098636.log b/client_1618914098636.log
new file mode 100644
index 0000000..fa03ce2
--- /dev/null
+++ b/client_1618914098636.log
@@ -0,0 +1 @@
+Cannot connect to the Controller on port 8082
diff --git a/client_1618914115362.log b/client_1618914115362.log
new file mode 100644
index 0000000..0249810
--- /dev/null
+++ b/client_1618914115362.log
@@ -0,0 +1,19 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: ERROR
+ERROR: Connection closed by the Controller
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1618916214881.log b/client_1618916214881.log
new file mode 100644
index 0000000..aa74d26
--- /dev/null
+++ b/client_1618916214881.log
@@ -0,0 +1,19 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1618917382748.log b/client_1618917382748.log
new file mode 100644
index 0000000..aa74d26
--- /dev/null
+++ b/client_1618917382748.log
@@ -0,0 +1,19 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: null
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1618917653577.log b/client_1618917653577.log
new file mode 100644
index 0000000..a2b937e
--- /dev/null
+++ b/client_1618917653577.log
@@ -0,0 +1,16 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
diff --git a/client_1618917705050.log b/client_1618917705050.log
new file mode 100644
index 0000000..a2b937e
--- /dev/null
+++ b/client_1618917705050.log
@@ -0,0 +1,16 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
diff --git a/client_1618918167755.log b/client_1618918167755.log
new file mode 100644
index 0000000..a2b937e
--- /dev/null
+++ b/client_1618918167755.log
@@ -0,0 +1,16 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
diff --git a/client_1618918283040.log b/client_1618918283040.log
new file mode 100644
index 0000000..79889b5
--- /dev/null
+++ b/client_1618918283040.log
@@ -0,0 +1,10 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
diff --git a/client_1618918339157.log b/client_1618918339157.log
new file mode 100644
index 0000000..79889b5
--- /dev/null
+++ b/client_1618918339157.log
@@ -0,0 +1,10 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Timeout expired while reading from port 8080
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
diff --git a/client_1618918660778.log b/client_1618918660778.log
new file mode 100644
index 0000000..7d494f0
--- /dev/null
+++ b/client_1618918660778.log
@@ -0,0 +1,19 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1618919054780.log b/client_1618919054780.log
new file mode 100644
index 0000000..7d494f0
--- /dev/null
+++ b/client_1618919054780.log
@@ -0,0 +1,19 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1618919710976.log b/client_1618919710976.log
new file mode 100644
index 0000000..7d494f0
--- /dev/null
+++ b/client_1618919710976.log
@@ -0,0 +1,19 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: 
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1618922219091.log b/client_1618922219091.log
new file mode 100644
index 0000000..f1079e8
--- /dev/null
+++ b/client_1618922219091.log
@@ -0,0 +1,16 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619002254815.log b/client_1619002254815.log
new file mode 100644
index 0000000..f1079e8
--- /dev/null
+++ b/client_1619002254815.log
@@ -0,0 +1,16 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.pdf)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/Clipboard01.jpg)
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619002688932.log b/client_1619002688932.log
new file mode 100644
index 0000000..c1fe03f
--- /dev/null
+++ b/client_1619002688932.log
@@ -0,0 +1,18 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+ERROR: Filename includes spaces (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/All Star.txt)
+ERROR: Filename includes spaces (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/All Star.txt)
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO
+Controller replied to store Unknown.txt in these Dstores: 
+Timeout expired while reading from port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
diff --git a/client_1619002774548.log b/client_1619002774548.log
new file mode 100644
index 0000000..700813d
--- /dev/null
+++ b/client_1619002774548.log
@@ -0,0 +1,17 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST Unknown.txt
+List operation successfully completed
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/All Star.txt)
+ERROR: File to store does not exist (absolute path: /home/danimal/Documents/comp2207-distributed-filesystem/All Star.txt)
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: ERROR ALREADY_EXISTS Unknown.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS Unknown.txt
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
diff --git a/client_1619002831484.log b/client_1619002831484.log
new file mode 100644
index 0000000..b5328a0
--- /dev/null
+++ b/client_1619002831484.log
@@ -0,0 +1,27 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST Unknown.txt
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO
+Controller replied to store AllStar.txt in these Dstores: 
+Timeout expired while reading from port 8080
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR ALREADY_EXISTS AllStar.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS AllStar.txt
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: ERROR ALREADY_EXISTS Unknown.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS Unknown.txt
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Timeout expired while reading from port 8080
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
diff --git a/client_1619015946719.log b/client_1619015946719.log
new file mode 100644
index 0000000..b1a12e7
--- /dev/null
+++ b/client_1619015946719.log
@@ -0,0 +1,57 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: null
+ERROR: Connection closed by Dstore 8081
+Store of file AllStar.txt to Dstore 8081 failed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR ALREADY_EXISTS AllStar.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS AllStar.txt
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: null
+ERROR: Connection closed by Dstore 8081
+Store of file Unknown.txt to Dstore 8081 failed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file Unknown.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
diff --git a/client_1619016557204.log b/client_1619016557204.log
new file mode 100644
index 0000000..91aeef4
--- /dev/null
+++ b/client_1619016557204.log
@@ -0,0 +1,48 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR ALREADY_EXISTS AllStar.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS AllStar.txt
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 -1
+Controller replied to load file Unknown.txt (size: -1 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
diff --git a/client_1619016975115.log b/client_1619016975115.log
new file mode 100644
index 0000000..5c0107f
--- /dev/null
+++ b/client_1619016975115.log
@@ -0,0 +1,32 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR ALREADY_EXISTS AllStar.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS AllStar.txt
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR ALREADY_EXISTS AllStar.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS AllStar.txt
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: ERROR ALREADY_EXISTS Unknown.txt
+ERROR: Unexpected message received: ERROR ALREADY_EXISTS Unknown.txt
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 -1
+Controller replied to load file Unknown.txt (size: -1 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
diff --git a/client_1619017037535.log b/client_1619017037535.log
new file mode 100644
index 0000000..8fa327e
--- /dev/null
+++ b/client_1619017037535.log
@@ -0,0 +1,48 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR FILE_ALREADY_EXISTS AllStar.txt
+ERROR: Unexpected message received: ERROR FILE_ALREADY_EXISTS AllStar.txt
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 -1
+Controller replied to load file Unknown.txt (size: -1 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
diff --git a/client_1619017290151.log b/client_1619017290151.log
new file mode 100644
index 0000000..9d7f7af
--- /dev/null
+++ b/client_1619017290151.log
@@ -0,0 +1,57 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file Unknown.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
diff --git a/client_1619017624104.log b/client_1619017624104.log
new file mode 100644
index 0000000..6e52af7
--- /dev/null
+++ b/client_1619017624104.log
@@ -0,0 +1,48 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 -1
+Controller replied to load file Unknown.txt (size: -1 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
diff --git a/client_1619018158905.log b/client_1619018158905.log
new file mode 100644
index 0000000..5d9f5ed
--- /dev/null
+++ b/client_1619018158905.log
@@ -0,0 +1,61 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
diff --git a/client_1619018768533.log b/client_1619018768533.log
new file mode 100644
index 0000000..772c595
--- /dev/null
+++ b/client_1619018768533.log
@@ -0,0 +1,62 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Timeout expired while reading from port 8080
+Remove operation for file Unknown.txt not completed successfully
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: REMOVE_COMPLETE
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1619019036315.log b/client_1619019036315.log
new file mode 100644
index 0000000..32523cd
--- /dev/null
+++ b/client_1619019036315.log
@@ -0,0 +1,65 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: LOAD_FROM 8081 2227
+Controller replied to load file AllStar.txt (size: 2227 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA AllStar.txt
+Loading file AllStar.txt from Dstore 8081
+Load operation of file AllStar.txt from Dstore 8081 successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619019325145.log b/client_1619019325145.log
new file mode 100644
index 0000000..32523cd
--- /dev/null
+++ b/client_1619019325145.log
@@ -0,0 +1,65 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: LOAD_FROM 8081 2227
+Controller replied to load file AllStar.txt (size: 2227 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA AllStar.txt
+Loading file AllStar.txt from Dstore 8081
+Load operation of file AllStar.txt from Dstore 8081 successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619019601175.log b/client_1619019601175.log
new file mode 100644
index 0000000..0938640
--- /dev/null
+++ b/client_1619019601175.log
@@ -0,0 +1,61 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619019802665.log b/client_1619019802665.log
new file mode 100644
index 0000000..32523cd
--- /dev/null
+++ b/client_1619019802665.log
@@ -0,0 +1,65 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: LOAD_FROM 8081 2227
+Controller replied to load file AllStar.txt (size: 2227 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA AllStar.txt
+Loading file AllStar.txt from Dstore 8081
+Load operation of file AllStar.txt from Dstore 8081 successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619025053448.log b/client_1619025053448.log
new file mode 100644
index 0000000..772c595
--- /dev/null
+++ b/client_1619025053448.log
@@ -0,0 +1,62 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Timeout expired while reading from port 8080
+Remove operation for file Unknown.txt not completed successfully
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: REMOVE_COMPLETE
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1619025357100.log b/client_1619025357100.log
new file mode 100644
index 0000000..32523cd
--- /dev/null
+++ b/client_1619025357100.log
@@ -0,0 +1,65 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: LOAD_FROM 8081 2227
+Controller replied to load file AllStar.txt (size: 2227 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA AllStar.txt
+Loading file AllStar.txt from Dstore 8081
+Load operation of file AllStar.txt from Dstore 8081 successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619025636890.log b/client_1619025636890.log
new file mode 100644
index 0000000..772c595
--- /dev/null
+++ b/client_1619025636890.log
@@ -0,0 +1,62 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Timeout expired while reading from port 8080
+Remove operation for file Unknown.txt not completed successfully
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: REMOVE_COMPLETE
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1619025719814.log b/client_1619025719814.log
new file mode 100644
index 0000000..32523cd
--- /dev/null
+++ b/client_1619025719814.log
@@ -0,0 +1,65 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: LOAD_FROM 8081 2227
+Controller replied to load file AllStar.txt (size: 2227 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA AllStar.txt
+Loading file AllStar.txt from Dstore 8081
+Load operation of file AllStar.txt from Dstore 8081 successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619034515898.log b/client_1619034515898.log
new file mode 100644
index 0000000..32523cd
--- /dev/null
+++ b/client_1619034515898.log
@@ -0,0 +1,65 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE AllStar.txt 2227
+Storing file AllStar.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file AllStar.txt
+Store of file AllStar.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Connection established to port 8081
+Message sent to port 8081: STORE Unknown.txt 2594
+Storing file Unknown.txt to Dstore 8081
+Message received from port 8081: ACK
+ACK received from Dstore 8081 to store file Unknown.txt
+Store of file Unknown.txt to Dstore 8081 successfully completed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: LOAD_FROM 8081 2227
+Controller replied to load file AllStar.txt (size: 2227 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA AllStar.txt
+Loading file AllStar.txt from Dstore 8081
+Load operation of file AllStar.txt from Dstore 8081 successfully completed
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: LOAD_FROM 8081 2594
+Controller replied to load file Unknown.txt (size: 2594 bytes) from Dstore 8081
+Connection established to port 8081
+Message sent to port 8081: LOAD_DATA Unknown.txt
+Loading file Unknown.txt from Dstore 8081
+Load operation of file Unknown.txt from Dstore 8081 successfully completed
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
diff --git a/client_1619034593200.log b/client_1619034593200.log
new file mode 100644
index 0000000..e94a361
--- /dev/null
+++ b/client_1619034593200.log
@@ -0,0 +1,41 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Store of file AllStar.txt to Dstore 8081 failed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store Unknown.txt in these Dstores: 8081 
+Store of file Unknown.txt to Dstore 8081 failed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file Unknown.txt completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file Unknown.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file AllStar.txt successfully completed
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
diff --git a/client_1619036545308.log b/client_1619036545308.log
new file mode 100644
index 0000000..7f0f666
--- /dev/null
+++ b/client_1619036545308.log
@@ -0,0 +1,44 @@
+Connection established to port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST
+List operation successfully completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: STORE_TO 8081
+Controller replied to store AllStar.txt in these Dstores: 8081 
+Store of file AllStar.txt to Dstore 8081 failed
+Message received from port 8080: STORE_COMPLETE
+Store operation for file AllStar.txt completed
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_FILE_ALREADY_EXISTS AllStar.txt
+File to store AllStar.txt already exists in the data store
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Timeout expired while reading from port 8080
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: LIST AllStar.txt Unknown.txt
+List operation successfully completed
+Message sent to port 8080: LOAD AllStar.txt
+Load operation for file AllStar.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file AllStar.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: LOAD Unknown.txt
+Load operation for file Unknown.txt started
+Message received from port 8080: ERROR_LOAD
+Load operation for file Unknown.txt failed after having contacted 0 different Dstores
+Message sent to port 8080: REMOVE AllStar.txt
+Remove operation for file AllStar.txt started
+Timeout expired while reading from port 8080
+Remove operation for file AllStar.txt not completed successfully
+Message sent to port 8080: REMOVE Unknown.txt
+Remove operation for file Unknown.txt started
+Message received from port 8080: REMOVE_COMPLETE
+Remove operation for file Unknown.txt successfully completed
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: REMOVE_COMPLETE
+ERROR: Connection closed by the Controller
+List operation failed
diff --git a/client_1619039097527.log b/client_1619039097527.log
new file mode 100644
index 0000000..a89806a
--- /dev/null
+++ b/client_1619039097527.log
@@ -0,0 +1,26 @@
+Connection established to port 8080
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE PumpkinHill.txt 2755
+Store operation started for file PumpkinHill.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE SnowHalation.txt 1006
+Store operation started for file SnowHalation.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE Grandad.txt 349
+Store operation started for file Grandad.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+List operation failed
diff --git a/client_1619039957471.log b/client_1619039957471.log
new file mode 100644
index 0000000..a89806a
--- /dev/null
+++ b/client_1619039957471.log
@@ -0,0 +1,26 @@
+Connection established to port 8080
+Message sent to port 8080: STORE AllStar.txt 2227
+Store operation started for file AllStar.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE Unknown.txt 2594
+Store operation started for file Unknown.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE PumpkinHill.txt 2755
+Store operation started for file PumpkinHill.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE SnowHalation.txt 1006
+Store operation started for file SnowHalation.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: STORE Grandad.txt 349
+Store operation started for file Grandad.txt
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+Message sent to port 8080: LIST
+List operation started
+Message received from port 8080: ERROR_NOT_ENOUGH_DSTORES
+ERROR: Not enough Dstores have joined the data store yet
+List operation failed
diff --git a/downloads/AllStar.txt b/downloads/AllStar.txt
new file mode 100644
index 0000000..26e7fef
--- /dev/null
+++ b/downloads/AllStar.txt
@@ -0,0 +1,68 @@
+Somebody once told me the world is gonna roll me
+I ain't the sharpest tool in the shed
+She was looking kind of dumb with her finger and her thumb
+In the shape of an "L" on her forehead
+
+Well, the years start coming and they don't stop coming
+Fed to the rules and I hit the ground running
+Didn't make sense not to live for fun
+Your brain gets smart but your head gets dumb
+
+So much to do, so much to see
+So what's wrong with taking the back streets?
+You'll never know if you don't go
+You'll never shine if you don't glow
+
+Hey, now, you're an all-star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars break the mold
+
+It's a cool place and they say it gets colder
+You're bundled up now wait 'til you get older
+But the meteor men beg to differ
+Judging by the hole in the satellite picture
+
+The ice we skate is getting pretty thin
+The water's getting warm so you might as well swim
+My world's on fire. How about yours?
+That's the way I like it and I'll never get bored
+
+Hey, now, you're an all-star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars break the mold
+
+Go for the moon
+Go for the moon
+Go for the moon
+Go for the moon
+
+Hey, now, you're an all-star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars
+
+Somebody once asked could I spare some change for gas
+I need to get myself away from this place
+I said yep, what a concept
+I could use a little fuel myself
+And we could all use a little change
+
+Well, the years start coming and they don't stop coming
+Fed to the rules and I hit the ground running
+Didn't make sense not to live for fun
+Your brain gets smart but your head gets dumb
+
+So much to do, so much to see
+So what's wrong with taking the back streets?
+You'll never know if you don't go
+You'll never shine if you don't glow
+
+Hey, now, you're an all star, get your game on, go play
+Hey, now, you're a rock star, get the show on, get paid
+And all that glitters is gold
+Only shooting stars break the mold
+
+And all that glitters is gold
+Only shooting stars break the mold
diff --git a/downloads/Unknown.txt b/downloads/Unknown.txt
new file mode 100644
index 0000000..bc6fa8e
--- /dev/null
+++ b/downloads/Unknown.txt
@@ -0,0 +1,74 @@
+Here I come, rougher than the rest of them
+The best of them, tougher than leather
+You can call me Knuckles, unlike Sonic I don't chuckle
+I'd rather flex my muscles
+
+I'm hard as nails, it ain't hard to tell
+I break 'em down whether they're solid or frail
+Unlike the rest I'm independent since my first breath
+First test, feel the right, than the worst's left
+
+Born on an island in the heavens
+The blood of my ancestors flows inside me
+My duty is to save the flower
+From evil deterioration
+
+I will be the one to set your heart free, true
+Cleanse yourself of them evil spirits that's in you
+
+Streaking lights, loud sounds, and instincts
+Are the elements that keep me going
+I am fighting my own mission
+Nothing's gonna stand in my way
+
+I will be the one to set your heart free, true
+Cleanse yourself of them evil spirits that's in you
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Get this power to wipe out the havoc and anarchy
+This is my planet, gonna fight for my destiny
+
+Here I come, rougher than the rest of them
+The best of them, tougher than leather
+You can call me Knuckles, unlike Sonic I don't chuckle
+I'd rather flex my muscles
+
+I'm hard as nails, it ain't hard to tell
+I break 'em down whether they're solid or frail
+Unlike the rest I'm independent since my first breath
+First test, feel the right, than the worst's left
+
+I have no such things as weak spots
+Don't approve of him but gotta trust him
+This alliance has a purpose
+This partnership is only temporary
+
+I will be the one to set your heart free, true
+Cleanse yourself of evil spirits that got in you
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Freedom will be waiting when serenity is restored
+This is my planet, I shall not surrender
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Get this power to wipe out the havoc and anarchy
+This is my planet, gonna fight
+
+Won't be frightened, I'll stand up to all the pain and turmoil
+Just believe in myself, won't rely on others
+Freedom will be waiting when serenity is restored
+This is my planet, I shall not surrender
+
+The new porcupine on the block with the buff chest
+In the wilderness with the ruggedness
+Knock, knock, it's Knuckles, the bloat thrower
+Independent flower, Magical Emerald holder
+I'll give you the coldest shoulder
+My spikes go through boulders, that's why I stay a loner
+I was born by myself, I don't need a posse
+I get it on by myself, adversaries get shelved
+
+Right on!
-- 
GitLab