From b363fe558560f9b39d977ff6837cd1dc3eea7285 Mon Sep 17 00:00:00 2001 From: Joseph Ferano Date: Mon, 17 Dec 2018 18:13:19 -0400 Subject: [PATCH] Getting chunks to work --- .gitignore | 3 +- pug.jpg | Bin 0 -> 21633 bytes src/bin/copy.rs | 100 ++++++++++++++++++++++++------------------- src/bin/data_node.rs | 9 ++-- 4 files changed, 63 insertions(+), 49 deletions(-) create mode 100644 pug.jpg diff --git a/.gitignore b/.gitignore index 6b53060..7c6e94c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,6 @@ *.db dfs_skel/ venv/ -data_node/ +dn1/ +dn2/ copy_dir/ diff --git a/pug.jpg b/pug.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b5d39786dd37be12335496520a93199d7f06b5ca GIT binary patch literal 21633 zcmb5VWl&tt6E?cIy9Kw!C4}JavbehjcPF^J%iA%Z=w*j~yIYl`D92@`u_wNDx{R2Rf=i&Lg29O3I!2b{b zdn5bL_kFSXNZe|hVk#~|4;nw1K^fp-MEGCS|1VGx zk&sc~5zycO|E9HY0dNTLi2sO@kx-FPG5-AxkAR4T2SCQBMM3=}NkFGTXyG1)M#P;~ zaz!uI)c+qb@UwuX<<9j7((vY15=N~r9$uv_49q;de1g(4p58wHoKpN_L;3$w{y$!k zQBeQQO5*)rN_doiL7*TY{R<23U%3BB@o7IvY9JHPS-7WNp>T(l{39dWA)=QeCi$#s znSL#;?ZKl}Ixzcp6@ZEGe@*ZJ;sAabnTW-|018`fFgI~ODKRXqcN&3}{G%wizEBQX z+pVphV>A^IaNlpuT;gDC%NZCZy%QeEtGJ#hSM#TBWUt}Sb+U2A+(Tr2PPt-!ElTve zMLNCAt2q`v(+65Tg?qX+^EBcHba)D>O#cwO%|kfU@XT#N@^6 z&7JaG1b@|AVLets{U%kos6*926beX`(Y6*S*`~BcB3#2jAw} zg{y1VQ$@GX2VI_gOw`V+)=o=8O&mzvlVuF>gHmSoXNlC3-&>UpTQSGY-ekb^c&RyG z6os|6rWS*w_^YaRK!roA)x}ZU`)j&5J>I4OWKM)YC|#x2345{aG8*JnOQlI>2i>O!$&ME^ zB0QNhaOYQ3)Zy!R76_b!Ju-SIlyu6=R}`)LvS#Ehdy5_K1nlqERGb@wBTRRtMQy#E zFUj5rvCF2AEfSx(m|Jru5v*e33v{{<)q6Lhlb(?QhSkASTqoxD_lj3x4=g7MQ()PH zx{qvgR)xYWacnM!+meHcLzPm5tUbT#92{LuHl=S0DsP=R9d#?M?V1+(=kLO|dmfhI zo+q7v0lt@<_2k!FBKzL1*y;8Ab&%Sv*rmBTZJvlA;E$T)um3+`a zKrVR7ct|lr-2A#XG@`A$X>Alw(nXy-8+N{=GJ@+U9;S&S)##gK7q$)3!O5dIS9SZW z4VkkESN&$BWtHNt*e-qKwsf*ShmGFV-crCjV5jY=hGnh7Ofh2(swoxqNubNa`3ul# z7qLo-1yJ|x9Bh7it(|;qajZrVg-HC_D|ussPZ^>}$RQ*zKZp-VUZ%!ULlh8S;T!Bf z^BJ~sc@d2_z+9;6z;>q-ujA+ESGqG^yJ?NKDDD6e?aP_f65JcRj$pvDrlKU$#{W8;d<JFd1O*?SbT+xCtWM_k9X^q1nZ^V?kTyX zEmY~hPx4A65F=%sebD6IogZMQuT7{zbrUyQ7!9jC%WAT9Een7jE^1;I3Z|13qe9JE zvY>UccFhcnEhhu@KGSzcqP(H^a_-zQI|g~W!ynhhKt@VVvM_#DFXkg>(J|2`!46rB zAVn~^`*`wvIokeKO*Xy`sa#PFmx0swot&0|q-k|y_}#6{)kQ`yzQC)PsQgb8I96PH zhak~lBpUWb!M!?HV{V7v{3Lk@Px7SMzx|q3*5eGC0 zhowItxtM$>xg~}OT5+Ha_e+Q)rFSnlS&AIQ$9U4+{fY^1D^(b|#+bDmpRJU+kRq|e z(mu6p{@QsdSd63*nx?$e9Q5^3K%)F17Yzz+8H!^6c8E>4zYm^ey(fl4 z&{XP554Z!S7>kS=^BjHKFn!Fc8xeEl(qE(%~m$rY_csz**bX6536aJ!Fgg|Dobmm3VwA=i0R>V^t#D^xe&-h zbxZA(-2e|qnU?NH)l)1ArZvX{&*8*hh0fd6I1%B!HRMiH=6DpQylr)QpqGUC0P*sk zqSusB{Qh`&L7dW{ZwK_zz1mV9&mTHXqRUHUvXkE0&-hR0Tth;VnO(*k$p8sNt)bdp z)w_Mgaov9|_b!I4R&^-DJa{TAmC_}98@AR;27Dy(yA((|*QvAk*+en6SKD=qeS6_G zn{y42M;)=-iH|~<02y60h_%G|_U*mx#(*%~CNbBdM|$LdS>1N6%~#A%+6;)pc_%X- z@5tW%<%cn380dZr&NDt#w{wTFZN?u4b}RJ_dR}(2?jGHvCdI4-qm7@ZbXk?OoXd$z zM?h^1twnv54eJHk++by?dfob+qUn+kA-bY_od-dFH0^@6LNK?y-*IY3R@FP-y~tO8 zdp`#>)i(|vuePfU>@8midnRf#mYhw$0q>L>p~slOb zo(&79F9Yv5FDeg6`u@0VBX`8dGH2ifCniq{ zyc4y)%zW3mo+25AZV&*ZcPs=(pb!5fUDUz$p#SCV+NYU8tupqBmjI%7qNzA{v9`-{ z+4#`ic{~&~>rXlR0&B;Db$hj~BK&-Q6GwlK-&6ZW%^C-Ie{YhSrTAW>z($hqO>YE@ zOq*R4$0Ud-YYtb4Ply!)rBoa|S?PGFeg)-J3AvW6Q7i2%>Tt@lh-!>(Sb#Jz3<;nu zo9_y*jd_uUvkn2}Ndtv$0SOBtG3wme{7RU)bS;MMbfx+dF=G85E^@ z`NSwx*%Y(^&Wf8Zm|Gik=oUN($M*&8eMI6tHl0nO%)nrB%Z1;9krAg${@X<7)hp{= zNs`$1;lj_Ha?(~~^;3ST%(UFbw6rwA9sG~RVeO-bbR}a7*uN{j*M_(icKaf#+$vvCk_KV5r@#sSfMjc{!hyhnZo4;ua z^+sy{dsS#_UpDvdqs^>SsvA|jg-N9Zm!X~ZZ6`*B*Q9B?mZyaF|M}*j$YBUJN^s1q zx_r;yVeAl&MBgY3t;|?z9tj8r<}r@a_S%0RMKC&CY2koC|&X4dlN=aU5w;C zxPjg(`c$<-M-pV8WUB5$*z9iZeKi_~Mq6{>Xh(%1AEldZhFpr;3AW|mB?7801Kz$r^tn0n+xYC00*}D*k(uvM zBvkrwxV9L`pEtQv-qcubUREQu1O`|JFF|7Lm|FCHEDKhCI8Nns1+JQ{#&+fsu9cn6 z+`#(DhGL~1zE#Z{OOX;=^=faL#JPu-;~J^5)XbXp)U;QFwAaUSX`)s_N8#sMvXqji z8fLM>)CkA0>cL*;?x$!9&<6b1I@QJ@*nHZ)XO}<1ML#j`_Q(+~1ufr+u`Rk+m61hA zH2ul^`fsi*zGrn%W}#`;c~ng9JQG|dxJpgZ9hBtV3UQcGTfTob7qFg3oUqTc3Tx6M z!TMU>C8zw$fU|-Axn}-xGaSR!~rtv#SjsGyR(N~vKOSnR0KHXelXha=^C(0MeRf*Bu$5`-8I zxHZ|>_OjO9b$@=*e-wvNe5zY%fbvI$!MI{OKw|59WP4d#8_O&F0%P#5Mk^D!=Yxvs zMxa~apEqWUd)r4D)|e0EwbQee+3MkxJChRZ`fIBM$HyV2e*uS)AviT6^rK7lECV|j z`$4RJ${f~#g4O!i)BGMa$&YtpIrK4$|1s4%^kYn)tB!24y3WmA{<{|e zmvxwy0)x^g2EEvZgIGw}p@?pO8Z1F78}i$(S8s0KT&p`7pk#WVTxiOSQOBnF>qEA-@nTaFLNGz52l&k4x)DM{&?)VRGf!xF~|#Q zrl)OV8~R$#Ae`~$4hykNHt$f8a?s(9ucy4C3M+2u{!BYHl{CA^^a*X>*v?^}?xAgA zetjJv@1)Z-Jot$#zCzOySb5GbkP$mxwGK}vc*!VR{r4qyYN=Tpn# zMU-9_z^r?{yvgBxnB}s`yfW)DAspOko;A?*RHsh@xPygj6^7;#%GR7nUoj{No$~en zgpA@FdLjlK6<8=aSG*Tmb5yYoyrYR#?nT#V;0UH$56bqyuFd78*))LZH3X}Jk2~Le z_JNtD7ie3I(v$eQNPKCmU$D1^6r56Fj~78pTkvHpQ}zo${QpX`G#T00bxRKn11n9W znXmTcyr*XwlB0*5q@1u`5{$OuU#qF16(?4w{dPja@dZ@R;J<+Kqd+_sNobp9y?M>Qw@^uQNmR}(;Qjh9K{uZSkU0N4DI-P2tc>JOkg(w6R zzDh~YYDUTHgX+rfU}SEQIUHu3)j2X>`|PyxT-OQO13BvHy|Q(jKQnOXJ4mBzC|(t) zg7xpvPn`rPM1Oljxpy<5z3MwCyVV_})@R+u9>rcz7#JGkpT6;<((!?~{reJeN(T`% z=A*b}hhV>}iOYFAO2-+V^+W;JJZwv)j|0kN;XLaf@YWl5KP>9&0ACl2{uUV8*j=yX zhI;xXI$Tnp5C}-vnyX?ZK0S?)>1-@6+slz@tFj&?3I0PCE9@V%mC{Rzw|F{CCoO(TXovyoz-iZDSP>}dEG^S5ocA67}SkT-CUmsQGX%QR~ zGCct>i9R7qD(QFl3(#BQlB5Y?_>BFz#bMe!o?+TWYJm^FSEg-qm@_P6vS`sL+$zmtC*AUxSvNHexx(vlVc+ zcfXFOx)+79RC8z&)Dc?^OU=SAy9oc=5XaS&j_U>6xRB&K4LDy4f(=dhJ6CL(c2Q$8ug3ZE8t6IsxOBH|EN#~VpdzPxr>tlF3? z(z&w+4EzY+w5T13wO7p7PTg~swf+wZ>4Ml{c)rH*F||e0>()O+^s%siaS*WHn_i4f z-PJ?%crdK}o<*?>)CYfJ5x@uPO=mdsrEQoVsVoe0KwSo-Wmbh7)E zSL2kGzkQt$n?h)sso6l)XwC@k(Fx}`cCu~CcYzGF_^`FU3XK$cJH4`2wod-Qxu`>L zCj8CNF~-WbA$lMuOv8JHS;9drH{FhmN|>8StWa5McCUOpDB zJ#uB-)cIS5aVBoX!gdGR(KmqlP{Nw)tS-;Uu;ft>*O}oj?chD>yp8_jU#S8Ea_FTHg)=OVtK1oSKAjMrsTCSi0!#W zz6@?vxG@h~^fsd{ci-^Sx9`M$XHGBjpvGd-`H=Q$^ao0OtWtunS+sMIB5SjY>;>Er z_8_8JEsa#}A-b?%QnmGGo`qkzkl*qTtu(b=gEZ-=9jYZzH1uB8#q~})20m})=lb|T zKlig9k8U9m8(qras%ZS*OaGMvz%?p;9jwQeL2l9Wg>WEtZ5xXi85V7(<3;B_6AKjq zd~%ctD9gK!2{6^?$byg~v&4OU zQ74NI*?1_tH+j{NQ~bQbWv5Q6p{yv?GIWYhtIl3EdexZ~4kVN*%5iy?{?g!M_rx?< zHCMTCdAbDE8OHehDdYAL29fOu=3ezx`Kjbc_a__9=<@P1&X>62W(Eel{9SqHN%Vn_ zZgu-XHKwn$6eC=V*~k$c8%UVe(bS!CHbTQwhW9seW~?x-I2_S&dsb(UY^j-Y+cZ4r!^>FUkh zjQSVQ>vSn_{-il{Nf4M0)iv;A0j`RTobD>>Vt&CR(QmH!zK5;>?>7A6&8h*+Uq? zYCR#?e}~B1k1ggyXg!-*J*iC3<2Fsh`Q?(6YnHp;zE1MU=!F1~WbwFqD8&a0>3-yO ztLX#k$4sw;P}TQFygF8QnPpfhr*m7QqB)@Rb;_Ew$2{0H-<*VC#ZE`Xj;xcp z;(&cD*MNXwv8Y62&5j{;hGDcWh(S03!4Zl4PLxZSgG(k;7P6gcp<-^$Nv%u9I`KoH zwlu(Lg)I-3O{sd!s)=CEApMKr0QrHx&oR%40fj3@f~6w6nAN>PY22Ws^^-<2h%}RA zm#;L+o=<(nUhm7P;~F4#0ZQN2RaNt|P{{G($=VV9YOxuPO@Rc7zTGTk5T~gR(KkCC?38t3n1Tw1vOBak&Z zmWr>x`zW0z*dMs+iEL;IY`>q3vY{f2u7iP6CLX>J#joT$hD(I%l?V|eC2HY(F+C3O z61iJ`W~u*D(Wz735gVg5_$$=86T$t_5{q*TT;21{g}ETVdN>Yh7dwr_Ffs*3qP!3j z{lqdqHqQl=C{0%Z`@j|%6% zO&VOIIj^&XAn4xTdnQO`9M0Q^*jA}*e~0YN=)FW(n+DA_>s$#;X$b}>K{wZ$FA}PL zD9{oVz?oNM-qgzG(v1w=sTuk9K`)DqmkK%U^LVj7_oe;TfkbCGo*@!F!2$H)*2A9f zNA7J&mge)nC5?<$^?&PG&Np-KZU_y3+z3tbYpdsn!DAqmKdLv0PG9yjz(;cWd(85x z-x|AlXDz7(F6$efDvJFDaK{W1=CmN&{NQXm+q@qs44_}%xf8dZ{52n4YLhpiU{9;c zH&-*0j)qQy6tW{as=8bp^S!QgN{M>Tka3GJB)HeL*)@fe(jc~#5CwBo()kemt*#YK zgBbob%yqJfRVhG;6+s!Ud64TsAFYa$&Eqd1e^f8J{D_t#ln(&c+n~&l2t=6Vc=@1` z$@<+fFU2w|f&qPgEw+=5zjxTMfCqW6{o(>-|r6P-wKZ&`Aiml2NWDhi*_S=GxGt|)X*6j7PgHMQYRaHP2Iq%DBQr7ABv zit2OwAZIrm>80SJ;$#XZYXG%rNBL{C?x7Jj0}$^ayk6c_nP)UhA+rhITJ);sGaH+& zeh=G=r7CTVcRrkF(=+QvfEkwMzfx8WjFUVmtGDz+4yTm|zPPpAeivOpJT(Y{ZHbq?Fm(Dl@Sm#Q7Of+bAp&+5Asd&8Y=4_hb*d4Or8s*x|R4*hn~HAt;}#OSp0 z^GS_{^z*b@MXU?JS-WT6B&EEy=+f;Icy_IW$HFO=Cfis{mpz?@?mYbkZ-;jI^~4?# zJ+7yG25nVZiLAx&xS4|F)+(pQjF3&PKbX?z>znc?-vZ=H(x1WNzqU%m!MIUEbZqXG zES2eF^AOr*xVGf&bNAq7m^Z(i?BvQM_s`VIcPK0!mqJ5R>b2-Ktk?93FMI&MWn6nf zlR>b9HkKK*%i*iO-a|6a`ig;SZvhGluPR(i5zz}^vDkc+e zeS?qhUcfo=*Q@~K!S^6Py*>4ICZXz&Q!{K_vI$+I5%IDu#WcrL3Jx_fTw(?2oxV4r znHlH^l_`2Pj)46IBm-#d2xQB=Z@LTLtv`js8GPjL;1F(`uz58Bnt2E%_wA?(G32m( z9{XhC&CE~ZqR}Djb3f>k8$%dYy0`}QW-w<41e8Zyt|1=uEdaE%mk8G(b>&bX`N^^4 z{j--q!3+i*oY0bJ*UkNtEEDo==cIu__Q549cX#e-h&_#g*{9yEL{1Jn4z|>dC7&=C6n&i5X6qI_ru`q7d~v8hf0S2;Q;>D5>flB}HwDJlFK@WX0y4_c}rYs6n-pdU1=Tw^=9POaE70>*{=gD7}L#!KqhZup{BsV=zBsl}Vs}VjB9h8i*V53+OdaC{d00{2^#jSD|Md zupHQsAOb)knSH9|ZyiVU=9R}B`~_dracm>q?@S{wn*jkSva)pW>A(a!7zX2iW6{SN z5h+S1!&0TN>eY!20Nv-A!cByt?}DgqekmgjdI&~3N1!z#4ZlEcvXe$2NoveTTGAE!5#+C*oL>NhnZU6n$BWz^r|vF3^D{ZR zT3kMxZN=@B)P?3VDnl#LJ~wl_So~OMShk65K9SpD?FIWh1`o!s8xC#!$M8L>{wP?0 zD`00aAUQO6bmwt_xT!#S1U}t6ib+!^_-R1?u0ih8K#eDsHI4i4!2m_gaFxlQDEm${ z@N=|WhsYmTyME zkdm}_j-b9;E0YO7O3uwreHoaaf8TZu{~e2;gP6c;E#70U63J#C{daAzR*X?(8_JFV zl`~CH$;;pY-xEQUx{rxY;eGzc^FqnJO}y*vqz|5Z^T(g6HP8u%vSx2t=Uo4T(j<_- zP_J?gu4N9~*7@VWYERTQ%2Vhu9PrEu6;*0+OwKr+onL$h2xP8g`1s=!tRJ7ZX@02B zV@-bFx_v$l4Ocx#_wD{e{T&Wi=exO#nyD4<2d;$-zMQ-N_nm7oYvh5G*E>~%r)Pp&23oR z#2QA6&vzt&NZq&Vf}uax1vlu9fpd=hOK%XPe<2zB{z`fn?hyAix%ni2R)M%?{xo+WK34EJ=<^kWy=T{F3dMG=*IBgxMP zZ3Ppr=91%e(ZS)9MAk(ZDz>ZnPM`uPLC7BIz6you455RHY+5m;X^mpvAIW!R zSuN5ZonqY-Y=&JvS0@(>rSf((sQFMa6WFJtkUQ*GM~?iKBd!xFaC{01o~37Z6-jL?5PgHjFDu zqG6V|1pntcWc8CSvWf1$~A!fQVAXhIII^4Q-_4@^?uL z9)(X>bU*qulDHU!`&JBfeHFW3$twfJO^fxHxGsprOCK9rJ9sF8@WH`7Vh+Ql^XWJ6 z^Wi+qjNA7lfVJykN6XwL?`IXEA;2N+ zXnJkF;stEeDH^x+DK29oD&fsR8gZo`1$9QvtsG?WV(^P=55OY%DSUjnEw(j6)eT?n+0vC+1R`{vj%o`G=YxOg zQH*eq^Bb4;MtX~}0Fhq8jP)c0q>7I!F7rXw=sz+_em|V%2?UpD4*t)*i)&KCC77P|5sUjHQh=J zeIR}vbMga54(ozhDPrhgO%TQhjdg^r`ceF&{~XsCXg4yD7##wVX&^3$5SglqM>Vxw zx1%;Y{EQ0K`wWa=>z)0c2KoA(!q%Ll_vNeTGUb>s%SW7Bn1eF?@$ou(On9gVb!jmN^w3svn>>+xURof#0!aRdyP8IBQkJT5R8_@7eSA(Sru&LlX> z?9NeGmK`>u{5US3eo{VyyM=LGRt%@Go}V0<{Eqw=upgUEIANCKq-Qk1Ie6^tvTnck zvrHV^k;I$9ql^kLAPyAoy5Y%>XgUq*8@8wQDwRYl^>pyS3IC?81r;tT z!|dq8>zA!sv9OS$#y^6V9SS;CRWV9l&&c(G$%{ri&XYDtj2hYyU3g60kFCR+hlth2Cad)bxd z76GIy6Xve4s4Mwv;)f!gJCYl2MN^mlr(EzeRxnPL)IY$f>zn2`ZB5nikMno0R~tW1 z5h0E4VAzlGB0pI)(@@Y0oQJq5Yzwv2@X$j>o;zJSyafuOC6)q(XXdZS<7jiZH0OVv z2WaJ6QgVdu)qpgd`4oC;%q&iWpJG<4&6#Avs%@ca!L?UL?lYNufw3xM)D((e5O`&g z);L&WO8Y^xO_t8yxWZm*Fk;k+QUF4!ssyVhIWW0&V6gJHd1ah5dyWg#%fV=$cE6l~ z97_i8vg7_Zn$p-|fe&03DN^GZQK00I+53CJMN*p0>{g!GC2QBX$FQd!;d>C4vJ z$rtA(uG)WC^{Nhp9`K5aWpcDSH)ARL% z3&NV{UqaOpGUb$3a2AgFFBnv1uy?L^EqJ}6Wl68{l`ZzUs&(b+UXUw@p>c2;<19uu z9HQ^jGkO@=y?=&f;#wjFF>?7QSb9oTEmCGdL13g}? zcRw`I5FDvhkd{lHQHk|h3qzg+hHA0o;sOwp-8-pqMMjPW)dBFDSaofUh2cArCQs|t zkcUy1Q8=VWjXwgY?3A*zWd~y0Zg`a19}_jJuR1Jp8TW5W1aq*V&B?I#g33*Tssw+F z{M-`?qYga*1m=aI^A)poPJ+|)L*QMUqG7RNd;u`OaEz(`vl`r>&hf*iI=H%J=7JcL z(4FL~caoFZfzkC(`bDM%JiFvu86S)?$mM_Ct9f;TH$gErAmo(2JT$} zM(>WdQC^WYW-tca)tQi`lKvvL0>Gr%Er~SeESp*gRL_n*x)hRfCLmpK`0znAC_Q%E ziwi6@aqqAip^+>0OXW@4E#Loc{V#wzn0}$FQnI_Ox~*lv#dV##UDZLJnsorOqGSPb z*SqB$c~3cfvaEY-sB2!(?5kQOr3 z)?$i%Rx6@uvFzQ5(y{vG4&LQ9upg)ioF9fpwSjo2OJh27WveKmyZrY;o=b|d*wSgA zpGj4+MHjx-mw7r5NWwnpaX7jp7`4`)M=e6%NZaZ$DJlZWuIi{LVHF!)a2T*}oc_j} zgNIF94ZUbJ7bhKHE(X8+icxTp!&z%h&QA0|mTD>fI9&Ir(YnzN3?Dh7-=`-UGsn?j zH*nnAg$K+l_*5^n`i&2W1XG!_#Z7e)q6Ddu0mkT~t6y%)^k+uT_OgFbo7$a?@ebKI zmB=^H(lT1{ZD{%*ndUPGg5ATbB)u9$EMdt_JvC03$L`cvux-9hs!Tk4l%?Oi>oE3m&_dB%C%3s9+C68Olj`OjhP}^!V(~0{ z@3wECA59v)R+t)pewOkUQNsyGHqC+E<0EegTZVR#_&I%QB+fRoar8&m{O06K$t5!t z`&)$3wzLzI1-8%#EPe0Z`i{3wb5ur5=8qT-r6edl)>1SC@uQUVIw1?R^+k~#q}C}% zw9+bxSo_>;1fBR}XRW_~)>R-@?Abh}Y?^U9%{Ed0wJ~s8snFQ4(>{{mg{<(#JU&rn z_=E1C+(q?~n9^rB+RXsTwm?A$oZlwsno1RT+0g{Rs$0WqOPZlW#?Rrk)YcVI%;an7?8}(pZAH|kcfL_jN(^n zmNH=QL41x%8F}xr*kz3?Hbs*va_$b&0t+Pxj9*!5nWQn8T9g3G&AzQwNjcR>whQW;-t(3XlDwyf>k zUTGISKcYX?~O1xhEjMy6Go(ZW0WSi2K8QoC&Wd+-1h$C6)IL zq9|xf_ws!i4_aubp0Dryel_BE z!O87wn%2?+v6jucL*y+*slTUAjkaNtS*et72no43jYh@R!myQDz874af$(WN2N(!b zaG%%^*yNH$h8<&<|0x6-Ii`wJ@R&?;9}3$7OPm3F*8MJZemV)^?zWalU;t1_ zE<)(ZsymH&z@z@@=aMT55Oup`WHZprTpWql>56>Md;8_((=LY)7%m!O5`m?*7uCv}GxHow+!#0MD-AE5r@!yVlP$MR z>M0*}sia6wZgnVtm%XB5Uyr17qc4qBhgu zOlH~%9Ft3jawx5S=zsmrI3sB7v8h5%T;`EK`psJqtDuHR54YrIO8{%1G3+sJP2ZDD zJ9g-(_D^QyL3Kp9oBkv(xX-%XtP;8KL`&n-SWmtqVfxie2R}3Is_htaB6eWA#Ar&@ z`nPyqY32T|i_68fHsg?yioNi|ZmwgK$<#{F6!(vSb$K`K6ym(ZM~Yh!{r_^Mou;lx zK@zh`ENBYE$L1V!jz(KC)tHHA_S7Nb4Lcr1ZTGL<%Gs{s-d0y5{4s*1>Vf4@G@1lI z|A-snVU@92sSLF*tQf>O!Qawy(r47G=B;>i`AM9y3a8Z;&rkw6%L4HIz#EO(t=isr z{k3!3K6`^pvJD5eCduyMl{G&6Uj!q>dv9wfy7@Mjiv zYdBvc*KsWgMkJRlg~ueXiR1UP7#BLIGo&n9Vv^pV>?XfAH5lhQrqRZxZRD~%tRxSB zHoS);O8~x_$$bH1eSpH$91VdVRy&w0P{`13k5aJZ!Z&$GE@`7E(=ghJt?Pl8c9{WH z^Jr{0&vJ(%j|6GuOjIwsZ7>l4EOd+xq$=dW$sJ~-dt30h`OjzCR+nyZ>@oRM!CTDl zk^xy&jxmA{EY$bVKLWL0_34~;Aq9R>-^MMau*Qv9PBac+;<3~rJJsW%v>kjvS4nSn(I0Cfpfhq- zfwFo3(5UiRAwLsOrrq3J?DEn5>00+()046-5R9fITyl>?IXY-UFki5G8?VW7MfA<= z7dbl90X7ZB*T?Z5A7&E>@$o^9jcz5!f>Oa-MJ_p$RuR6$*fcU758wJr^&a?^6fb@Z~jj^NR;*52hMR#9=`JDrBKLV@Az zr4r)3IHKKO0^kG1=zN~-Iy1>cvyUXXvG+7ei}wHRrEHmMamBiUtW(^7icxExo3M5( zhzT51J)47O^%4s4kS|*;A@}YBm`gGn`#rH7oSXS%%s%$7x5PmTC{P`_q)yBUzcqtK za_5wA<|E+pjk97#puRUooAC0&Oug?cj7uQ+{V%}$%Jzw(MHj;}$C=>s4=#K&h51NX z(`_^N28HfAH!(F>elO@?l)Aa9^LvRN1e12KNzIQuW9Vg5J6pN>5~(?b$m0|m3>`d) zKlT)meu#z%~sWb3r7n+MG>4tKhFlbCXa zLSE<8_O>nsDfm#3)`=?9Tm@M!Fdgz2a1?VFved$>7OBypk*=3>oNAaWluzoyFT`WZ zCk;{5H*|IHzU*?HH`(Bm2}>zw%Qm!SubvR}1THvacn}9=k-Fq-rb98x#}iNg-H`*I zCpc**(@V9{2_?7iOdR_4^;{yAACIYe91gMsz16UTKPb<6;r&U+Jl>o5Payw=+mAsD z&G3oevEui8h}N3x>j-dvQAeR_r%Czpoz%GC0A17eH<`0Tc%@v`0tnkC{X7$ULM?u; zu6lHyg7(gS0e2fcIO%?}6C0x5-Zy|H;M!O4IHc-W{r1h~$A7Fq<8MI4Uw+{T7M;B4 zmI$Dfopr+Iy`QNwI+y0!vgcp)lu*i4JFC4ZP#V&gH@*G>@V^h{TVdB-rcq00l&uxOKpJ+A0D=%PS1zYTGr9OpC!F?Z0R6Vq;ANa`?z|I29Wi2|m zO|2((Yl-SCPI^PK@zH|r$5zzv#r}ePSFRdy3V%^@A!30%`Nx9@k>)JSjn5_;3y^Af*(eGQ6FB!{h0Psk^@^bzNQRKk-fW`R%ttMbTcm;e)i&Lu$S^` zy}@giAVDL6Jq2oo!q-9#rv1DwH><~&I0M_Q)yhZsKZ0E-Q3OH^E98@?;HrO7O$#mu zb5mf){7`}p5gxPBPtR3gBaaDI!gDPk2 zjbu(t9?hO6DBL~;gyOh7^b01^w+g?tDM37S;~0{K!o?6J^$H!2?tTwOi;!d&er`b5 z5i-@AV1?=ctG}zuxBeJ%cBvi<1QM|@nFDT}xcuY^m-PQwdzP_i?d^+Ev}hXQk85Fh z^XIGlL{eNTJ?UH#lArisG+tcW!%m_6QF1%$yx)yj$8RNfIu2iBcn7Ao+el?Pjl4q8xj}8 zlK2%-CIV11YoRl>4vjLgDe*tPk6yT*8QHoia(G3E(8S7#QwJwss5R>$d=1OL*+Rnv zwGpt-SL0ftZ%7Wzoy!@{)UgFZbTuWL5S{1nZ^Ej}r}oM#dh~iyiZq_0CZ=&(MqG9j ziVf>#EPoXOb*r(S>Y@Cat+ZE}TQdMI>t+pq-sDQE0+v&M8AA8)wCSvLY7p0};$wG@Xf&KbvQG zduraaT(IVP#xV_@6!y+|riqDJX@Rn*N_?qDLTutBI35P zm8@ZK;2=_FCrCdWB#b{u8@?=mqAf4TahT>`-w<|Hy-&L32h>mB$k4!DwEe_ z>`kg}v}&|BmnHSGmFwbx0h@1|MW@y&2%DY!n{pKs#aFG-BDh=9{Laa38^ua@ydT5a zdF2but6T25P13>B&mj1Mu?e8`;eB`RC^W8!6MJhn@)c}TRw^<&-#*+6rpVP>2Y+bWNRIXOgxKI?=B&c0?0-MmT)A?V* z39G4m93l)tSUTPYqgj1K zr_-RtNqT$sB+p~+T+4QP?PEn&YtUukhJG9=*7a*2RBJ5{ka5!}xeEn_N&VzIk)vDR z;GVas!t_Ltb&uQzUsvYoHn@b`WFS7-H!OAHi_4M`ZZVQtw|T2*)@Iz~956)CNkKi8 zC=9>SoEDu7OS9d6&uckn5vuroz};h>tX>LIHV0P)g5V$iNj=?7yp5_m%9%FP4qpfU z+aYFr#rhG(nB({sSDaa2?2f^rA+R@i_Jf`nGW%PnN-!y+NxJsar#R_d!d11c1gu4S z9C465ft7VKves7v1wX}VccIz^ib!g%&=qWu?gktjs@Q(PCvR=_@{^3lVlyI(D1!p2 z2XKwdfg81Guu@?l$o^ADkcpB64ITVUDqkbr;%i+ZBZcSx3Dy%S?A}x7A$k|2%@nX( zkllj_`A5-qyMpjorf`EK)1sj$YBpY{G?b^JK#q;E(1y#+OP!psbE&|dS~J%kvdK52QWZb*OP8zWyl{?xfnW~7A%$VyQX!2OuNj;90{D{EZK|~KF&l*;E=7;Fc;nW@# z)VNWW^Ik}9qbc~=(G#RM6c^T1mgJ=tUYTxS05jQ}pgCQl|P%J(t9eaAbVfOACdV1>}pC+0+NElZR6Z zfaNQWY3DDO*K>w-%5f>Gl~9*QodzU_OG^#uvXY`g({!wDeTX~Yw?T7nJ#z7!D4fsd zepp{3X~`26C5IJGdd{{Tpl;gWX<0_JdZtje%?+u%-G<6i-@E0du#-eSu%=@rbqRZ0Mn4qRj@ z)TJx6!WXAPlhA{ETmlK~4-oA_a*bEes4CMiL6B4j=%ZSkH9wsGB*1wJEy~N(W}UiibgC&yvG^N&Z|RKZNFHg5ZyXQdbnj-g zn{aOEyJs{HISAYOJ9vivf8|dp$DW4-{H5aMX-ZMQh^R{N(6PTl--q)D8VXMp7#ujR zYjZ@~R(%(4(npbmCw(Cqky*o=Dt=vBRqVVx%IubsM_H5BrLAM#;Wp5}t?@_F3g(>= zOn*`OE`#jb4{gQ$OSk_3(;9fY_5}?bPEr2=lgj?Ye=~4(^!3Jb3?yDt@e8PQqg)o} z{{RBJWx`^U!rY!vQd9L53l#MJfgLf>SRtSyeZ!Q0P|iKd;X>k1TS*tk^Z%w zJ|9X;cEA0Ie~4vzYEyT*(yVI%&}TS zv0h?qLZ2}5y2H&lEpSbU-6yCd5ODVD8Us0c;T#SIeJVMJhdFquIdz<^Hl;?6rC-@& zO7I;lr~9aIxRn0@bPo5r0~*sHZk&B*)N5MfqjVk{qkEZNIz7wp52EKtnKA6sE_G%V z5-l~E$cU#NlD!B%BGROb8+8`nsKUtublMy;YdlxZoO#bYV&V@Aoyd_Y)EY%DEH`UW zY6^8xS0JrrOnsf5O@RZcu{h4+<+p8XY4Dx=6w6|1%%d3xO_W7|I=(owon=K-7bdeI zWo*yJ?heg)ELCV+L#S4mh~j{CbjpGoel&nPpR;|N zf)m9BUs5yGCnNnad8MlK#v_oR-?u9F5_r4g>^`=?0{b4T0PeFb=6I&*m#S z(D;48jQyJ{)d=w-K+Dstx6P8bRLYRkV*dbXOL0j+Pf}C{48ahBp+1TK0P0zl{{a1+ zTmCJ~8Vi3ke2wt)iB-Ji$H}?xI??O@08tkf#VTtI#$U0)|Cqh-V92Q{SgnnCzRDlkg~U3%+(dGXR3+t$tUN0IL76WHqtzT ziBayV^7ol1Q{snya(YDMIhkhnkznoXT?L zo@BJ*;$_KlYLiQ7DlNupTtzy&3!4OmAC?K_qux$arBbZ*V3-nPkldrgh_pz2XW+hN z%UN2x4RQ0PT$c);Q9h`tYSXDD#$sZn9~vc(cS z88TbAX-jFbtwQ}1d)oHe-7qJb2o2=7I#Rfe^pf$rJ!R=$*G8+;q%NN<5)mppQW#+_ zqx(ovXxR4~;jF;C4$w>ga zK#Lw2X4(%LcpXB_)C!vq!OZ!6vEs6zu+xiYL#RHALiHs{HXx*e1+ZgKl626jRTlIhzX7zkme7PJPzpOV6mAEZL<`#F4)hfTle3){IQ=j= zkLoGW=Cee|?ou9gh3ZIsq_U?_PfbZ$$_=^{k<=U)6cK&Lz6Ry~V6sCQ8!^}GbZGIa zacb<$qdbOXH6l8Sno?G@EDI>#rS=<)8PxKI`AU_^!L4##51^afFhMFb7nd{JLRLDF{^Ovw@Oxbqblq{F5?u z132Xigx4t&RT_FBsNA5f8@Pn1>e5Yx)nYDh8uH?`un zv$+^Ld`uxx&M)(p%{)_F=EACD=?E^06hCN4BG&PA>c988-w|DoI1g}nt=oN;hdciO zQQ7d-RvE*FkLI{j^+!steD~)_?PHThIAVMq)ul(X0#T6(#wd}u>={0-j@4aF!AXd_Q*WSr#{N9 zzwRCW(fLuXAJaI?!ny&<{5a+#Ic3^Uv@TJHPjs}=d0=W;0am#Q7x-Wfk<>r*$C^*~ zRd4?Qa_{z!%24)Csb&dv>aP+rbx%1|vjL7}PO2*J{)N3Qs4n*kN_6Qv5CFtmoKmf4 zwxfF_Ed~?NTO2-xTWZIwWk{I-d_kQLBe+uhy~R#!a!fSRGM_YAl@#O)G~Hq&6*n4B zqFj6_b{&Q6F*&^;a2>XJ6`Q#BS4_TWTtM$1f}=U1d`99;RhrKkxUZNq%kh>RiymvC zxG~&L+R+&nXeeCyfW9H!<8`hZm4hht#arP1&unnIoppD0t{X_u9}YdzkmX^M*3!XLDJ^C*wW+ z8|zIvh56%g8&5A3y=(HRDDsVyvFb5fpIHk{xP+R6R^m?&E6?U$4sklOk}4CF6*(|S zTv@6E%BN$l?X5%9q@K9AvBv6Jvm=IJu-N|qLG5vx#^Rg0x1HchOxArCRh};M(>!_hK!kHB!~3rMZbSJ8rD;zJuE0)mv4y4KUV*fB+%{#B1J@ z=Xv~S;zSr!z9MnwHfD-+3C&blg;adJ$bGwnuSr(QvXn3VV|D{z^`RQNN+T)~q4slxQgP~Guhy5ZQY#$DUj&|gnMg0;q~ zQS3ZOPh$NCw7orj6OqS$AfE}*NOLD1d9BZIQ$^04%4R32a=fmwONz}kPbA*xF0c~2 zb|Us85-VfGw6%=a#a3GTJfzxsZ zywU@Yg}%2QamNV?QkJ3$uYa;P+Yi~_R5bHHQdTRZ7=0@oMy0(G4Qxk{Dt>uw?0Bg9o-q@TI6B{J8kq_#LVx-efMl3nwA;f}}BE+j# zy2E@n{J9Qf{k)2;6v+lec&=5|-;V6bD`_c1OLclsKT#y?pG~ifgUDX7wQGeIhn&O# zuRR2m#Br~0!nmk?-#=^q1-ut%bHda8m>%7js@s zLZnN&9JZAyUuNUe_FxkZMD~}R_DPhfidjOVf-h}JRub+>uwHiyc~DJ-?Q9v-M7aqn z)u~ERC<9Tqb9^9!x@?|nSvFspCu6A1NT z-qym1jZp(SEYhU_JCc2Rk6aWbNn4vzlHzZ%2G&0u84yBH)g-J;l@5(QY(;*aJZBte z1d`8Ud%OO#nSLv)!r$UgT-laN{g41awMZKGFJ2ABRt|acCV}nNq@cy1Zzx-;wu4PP* zPpCH4H=10NQ)EGQTkk|^klGw=QHW?ZvcTWr9rjqyFFH z4t{Xf#)dMTqh2!yerY8yCriu~wleHqCgoQo$fvn65QIb`bA?f&N{rGYE^1VzxXh)K zxJzq{>uOcOQc~Oofc~TM{3jpn6A&X>EdK!I{{ZWn#aTlxLCiG#xjUFFg4=Q;H1pG1 zb}pDwS1LPdj{9nxdj_3()hH, file: &Vec) { - let endpoint = format!("{}:{}", nodes[0].ip, nodes[0].port); - let mut stream = TcpStream::connect(endpoint).unwrap(); + let div: usize = ((file.len() as f32) / (nodes.len() as f32)).ceil() as usize; + let chunks: Vec<_> = file.chunks(div).collect(); println!("Going to send a file! Bytes {}", file.len()); - let chunk = Chunk { - index: nodes[0].chunk_index, - filename: filename.clone(), - }; - let packet = serde_json::to_writer( - &mut stream, - &Packet { - p_type: PacketType::PutFile, - json: Some(serde_json::to_string(&chunk).unwrap()), - data: Some(file.clone()), - }).unwrap(); - stream.flush().unwrap(); - stream.shutdown(Shutdown::Write).unwrap(); + for node in nodes { + let endpoint = format!("{}:{}", node.ip, node.port); + let mut stream = TcpStream::connect(endpoint).unwrap(); + let chunk = Chunk { + index: node.chunk_index, + filename: filename.clone(), + }; + let packet = serde_json::to_writer( + &mut stream, + &Packet { + p_type: PacketType::PutFile, + json: Some(serde_json::to_string(&chunk).unwrap()), + data: Some(chunks[node.chunk_index as usize].to_vec()), +// data: None, + }).unwrap(); + stream.flush().unwrap(); + stream.shutdown(Shutdown::Write).unwrap(); + } } fn get_file_from_data_nodes( @@ -81,35 +86,44 @@ fn get_file_from_data_nodes( filename: &String, nodes: &Vec) { - let chunk = Chunk { - index: nodes[0].chunk_index, - filename: filename.clone(), - }; - let endpoint = format!("{}:{}", nodes[0].ip, nodes[0].port); - let mut stream = TcpStream::connect(endpoint).unwrap(); - let packet = serde_json::to_writer( - &stream, - &Packet { - p_type: PacketType::GetFile, - json: Some(serde_json::to_string(&chunk).unwrap()), - data: None, - }).unwrap(); - stream.flush().unwrap(); - stream.shutdown(Shutdown::Write).unwrap(); - match serde_json::from_reader(stream) { - Ok(Packet { p_type: PacketType::GetFile, json, data }) => { - let data = data.unwrap(); - let chunk: Chunk = serde_json::from_str(&json.unwrap()).unwrap(); - // TODO: Here we have to rebuild the chunks - let mut copy = File::create(destination_path).unwrap(); - copy.write_all(&data[..]).unwrap(); + let mut chunks: Vec> = Vec::with_capacity(nodes.len()); + let mut successful = 0; + for node in nodes { + let chunk = Chunk { + index: node.chunk_index, + filename: filename.clone(), + }; + let endpoint = format!("{}:{}", node.ip, node.port); + let mut stream = TcpStream::connect(endpoint).unwrap(); + let packet = serde_json::to_writer( + &stream, + &Packet { + p_type: PacketType::GetFile, + json: Some(serde_json::to_string(&chunk).unwrap()), + data: None, + }).unwrap(); + stream.flush().unwrap(); + stream.shutdown(Shutdown::Write).unwrap(); + match serde_json::from_reader(stream) { + Ok(Packet { p_type: PacketType::GetFile, json, data }) => { + let data = data.unwrap(); + let chunk: Chunk = serde_json::from_str(&json.unwrap()).unwrap(); + chunks.insert(chunk.index as usize, data); + successful += 1; + } + Ok(Packet { p_type: PacketType::Error, json, .. }) => { + eprintln!("Data Node Server Error: {}", &json.unwrap()); + } + Ok(_) => {} + Err(e) => eprintln!("Error parsing json {}", e.to_string()), + }; + } + if successful == nodes.len() { + let mut copy = File::create(destination_path).unwrap(); + for chunk in chunks { + copy.write(&chunk[..]).unwrap(); } - Ok(Packet { p_type: PacketType::Error, json, .. }) => { - eprintln!("Data Node Server Error: {}", &json.unwrap()); - } - Ok(_) => {} - Err(e) => eprintln!("Error parsing json {}", e.to_string()), - }; + } } #[derive(Debug)] diff --git a/src/bin/data_node.rs b/src/bin/data_node.rs index 746fdec..6c2cf11 100644 --- a/src/bin/data_node.rs +++ b/src/bin/data_node.rs @@ -25,12 +25,12 @@ fn main() { let mut stream = stream.unwrap(); match serde_json::from_reader(&mut stream) { Ok(Packet { p_type: PacketType::GetFile, json, .. }) => { - send_file(&data_path, &mut stream, &json.unwrap()); + send_chunk(&data_path, &mut stream, &json.unwrap()); stream.flush().unwrap(); stream.shutdown(Shutdown::Write).unwrap(); } Ok(Packet { p_type: PacketType::PutFile, json, data, }) => - receive_file(&data_path, &json.unwrap(), &data.unwrap()), + receive_chunk(&data_path, &json.unwrap(), &data.unwrap()), Ok(Packet { p_type: PacketType::ShutdownDataNode, .. }) => shutdown(&mut stream, &metadata_endpoint, &node_endpoint), Ok(_) => eprintln!("We don't handle this PacketType"), @@ -39,15 +39,14 @@ fn main() { } } -fn receive_file(base_path: &String, json: &String, data: &Vec) { +fn receive_chunk(base_path: &String, json: &String, data: &Vec) { let chunk: Chunk = serde_json::from_str(json).unwrap(); let filepath = format!("{}/{}_{}", base_path, chunk.filename, chunk.index); - println!("{}", filepath); let mut copy = File::create(filepath).unwrap(); copy.write_all(&data[..]).unwrap(); } -fn send_file(base_path: &String, stream: &mut TcpStream, json: &String) { +fn send_chunk(base_path: &String, stream: &mut TcpStream, json: &String) { let chunk: Chunk = serde_json::from_str(json).unwrap(); println!("{}", chunk.filename); match fs::read(format!("{}/{}_{}", base_path, &chunk.filename, &chunk.index)) {