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