From be87d8a3ebfb84bc3d0e4393d94fed727072edc9 Mon Sep 17 00:00:00 2001 From: afederici <ajf5@illinois.edu> Date: Sat, 21 Nov 2020 15:54:23 -0600 Subject: [PATCH] logging --- Wc | Bin 189136 -> 189352 bytes mappers/wc.cpp | 4 ++++ src/Node.cpp | 15 +++++++++------ src/TcpSocket.cpp | 14 +++++++------- src/Utils.cpp | 4 ++-- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/Wc b/Wc index 39b695f56e837a420befc3d41d00cc4a68a0e147..15698478922ff0906eaced616ba3352c376927dc 100755 GIT binary patch delta 29662 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 delta 29319 zcmdU&X<!t^7Vo<|3t^GW1lbiv*#uc82?;w4OE4(l1PCBoh9x0^ECUIGK$uAam=J># z`a-dZqqv{~4unkv9FWxo2UqlZbzHbk6mh)ws)!5koIa-l#QWa+@ZS6Ia&M>W_pei@ zs;jHIs=JD~<4ohgsm7jwIoLx{R7Fw5YWM{|!RjxDn3wD$@otU8C3?I%#Ju$YsUB9h z>Ls9de}&ZBBgnS9egRb55mJwmsMz$ov?1m{Sj}Md4}Afs)4&Le;AOwl^yAt~>Qp^1 z;!X9U-Y>GPnyaTr-fO<7sfJw)r@p9HM?R<pp4PvNOc<5jKvDXRR+U2y6(yXmD!yn% zL4U2_STaLZUVv2hTvnAGKPyUO(CqA_8|Zj+03HM9Y5G&qZKGmpRpm@|S~J}fb&tto z9oMAm<{|Iwek!rUjE=vR>1U(*szF_icA34?R3!jq?+U3+a5!tKqg|bKUvxk>^=Q!0 z26d8J8MR`aZs{>{@Xt`5)T*Q9e_X#Fni7fOq<>c#k`tx5Ak|{2j9*}Q2-MW7{f7P0 zNd1`}9kl(C`neu=^aw$gU|_w;AQ|qTOxTKa!)v?MdP%Q4+vSbDH9B-{Rh^5_75zxB z)~=CQq>5EBn7Hz&2~MHeBq@f!qee{Cex%SN5VJ##T@{7py@QH_@gWZ-x%xYL*-xiI zg&su-nV^K=KL{~g(4_T`fmC@ErI718EK$X(i#NqDp?H)+Z&7sMrsych9g?FI`WW)P zrS^={3<rzaVb`H76|1tLcopmC!0+16q13l3$FZ^Kd#qhtyH-LR)oti02-iZsw;Dri zDqiX(%yKTqvhY3%Cm;$0qw;5xuX40br!d~s(3@abxoRI;R^GPlaqv*tFtsxMYHGg= z6Dn4{1=kb1YA86aG{UJRC$S+-e_gt5e3RSjWk&vn+eP3O>H{w{lm>ci<Ism-8rxX+ z#dnP<gq{wK@oW8y_zs<XYXQpqF{zcsfz*mcXHzRqLjlf)oM1$Er!s1*-ZkN#4qI+0 zDFH}gO08TJt{ii@>|9K0#hHpXLfy*rq6Dipxu^bIf_3^tC_^puJ@9_g4n?kvdJEfl z6m%`feGFvw4&)WuQ;G-<qjq59sW=mAj2BW_91MM0f<?~qq^DL~N-eu=O06iq3K3UB z^SkMZiJi6g67{KxW8*p`8}=b6PB8XZAT+8}e>Jgl>~{kcrT6uYYU}|&l)$8W^t<%q zz0brs-8alrD^7&85`A;h@VJ7Tyr8_xt^bfTt!;d7!#W&$EF8LxQeI81NC}0a-FjAX zrnYH~{&sRl?PHhz@8o%!>e4g%q-!>pexT3vz7JJE+Op$NZmb|k6%2J>!L?f30jr@R zC0vny8LlZDdKY4VFNWS(p+C^KZ=3mOiO;M$qm&@l&Ns#S6MYk#wUdsZ?hO5@V*RVW z<F)*9y>GuPZCkPK?U&K+*=0rz_Ka;0cOQN{_K;GHE+adJ-d?WX*}seCTdt4n|GoC= zGCgU)TCLAA{nUUiTGM6vl>zIu`AhXx0~596rTXE4Q?*Nv=q(3r*KCjIM+T*9m1Q-} z2JclPpIQvv<;dVx`WHi*YY#8huMUaV@)qm&+6Fc32~nw)Q9VlZ1-1^_)`#^Cw)WaL zZvCKbyVm4kecI58oxfg$CaWCSF)OR=M*oDGI)AtvN*g+D#73RcowgSGm7z_w-i!1< zhg!51F5NQhsrH=;F>#gENNk4oRB`(Hxa^8m9YF}i6zaiYFKOQt>Q%!hYqJaWw2>|J zKZXy}CKc8U9nn<NS}p+TKJ8DZzImiw+q+c1Jn|mx4yWGYz8=lC=POD@%I~%Fjps^n zdFXP!KJmUcwNrU|htwi1szBeAnxjq5*CR(gs*TFkt48(FF6QZ{N4<W>ZFyLzl=9Td zC8^Mn4y9J6E;$A*TL~S^t$FtT_Nr!@r=NbHN-N3H(?@sJCg$kw(N8xynGK!1_<iUQ zPiN~r$8^;8X6qB+G%H(QI_3`T{%n0CP`hmX*qAPwnyr5`W=JzXJaVv<CnGS+Vs9um zTkkivYm=3rR~BytU$f@w`D2G__s-S#jD5k}3i3!DkP?Vpc^j6eI7^@Z;MbbS)YI&< z%&%n`kv@*>n5mz%r<$`!-NEXcbM!mY)@!}z==;(JXwB!;{FpW`BDQuuB$a)0tfOXL zdXd_xrvpW7^;bhzVVF;?OqxFrPt7M7C+Nmq9eTv1Vy%TkFP)UEeVd^lo|L6MoKbW4 z<X}X*uOGsTxC$3>0z!2o434d#vk%o+rd^59&pU3{X3f;UcKk~lJW;<mb9k$$iHcHo zRf%1B7uXq(mC7YcLT{$)iL;8d^%?pLvj(-;IKhYtrJiwPE5o1A&hh&1v${9D-H3|% zV@6H<?B7(a|2Vy8W>;;0Sbr$9ecY8a>GF^p)9efDYclWE_N3_tGZU?ojo9K)XaP(p zVjIV{M;nD7T^3nAPzyg!g|w6HdYdeZw(fm>U{(+97rQ<`>wZ`9B**~jtM(A2Os$G4 zki3I<rsR#p<0a!|fc;3xONjePhWn23-6c;ZZZA32;KZmnDfA_SD9QH_{|dEh6tETX z_Y-U8&b>#~ej2M+XD1HX_%rt6MPYoN!B7$ieKiK`D~m6J2#@;{p-aeRC#}<8|LZfo z@IgHyCrJyA(fjAjZ=!-_Ww8(L{^z6hJvm*qt7G&}b2_R!b#-1F^$Y!ud2O?IflcjC zSdz+=i>XoA$DnW*p%;ZxM=MHs%Ij-VUXML?HTKw|A3_5`scS^gtCd>gqM@V^{dy=9 zqItA~XYn$epBWdCvN3dCe{$Z4CO@G8KC?sLjn;pd*V{Do0ldvd3s3iiw!EV!&hIhl zZV(}1AXJDCj*67ChEK@h7f{cJsz5DIIYSv$L0kC{?AN56i9Loxlnn++7$YjuKTXBB z!{jR%dij3+;QXPkj!-CB#89X+P~G+1Yg7WHae{g}<rm2MOlsAlUqY+zSCsg373U%M zP^b_cbe5*;4bz|5^ykpjn@x8>B$UX4C4w%T9t=&4Jb(RqmOfxY8#O}TkUO>M_EE;e zr!wVtG}IqVYNy}UyK%QjxD9pXilfZJp%v&4M$OvWr1F@iYb$y+ddY}56Drg6d-E!^ z9h!b1<DN)(HvFc?ITG~`^17?v>0181>T7z>{0^~OeuNgrclt~yPj}>7)oFTl{+;?~ z8HxIy{E>Zbnj{#*f-MG$XZmjq?g5C8JrHyJS2cC^aeeLD_WB?B=VQ&-jpeg!MT-7O z!4owfIom~QDMR&Nik{QHv*}MR>fG*}&8VRN>bTj^ny(fOQZ@UKn!6W6@0eAqk6zNT zar9tFf^B2dV13z=wh!D5Y~0V#5+f$%DopRZP(RaOmks1%=+!}B6vQj3NC{M=zZDuS zQ^}?f2%Q>O^Tm=2YRht%@YHSr2WL{s;Wza7;*Fug0s6V6>$Fk*_36u&^fdR!GK>jV z?tyu@0<(!wzngAXTTBGa{+I;<p=DQUB9<qq+Gl<B{>3(J*cE+w@igskKj@znLpu*+ zSGSq|XO(+zxMutci>jST))%>oV$)!91?^IWBKbojlJ%>uI~#Yx2^aDm$-2eeJHwu2 z%vECBkEnZW-nf}>LQ|r={(JoV#{cX1mm2Fe?jG?2&Bhf5p*AmuVlfT%@<8ZrBW4Ut zBJtUk0@L6z{?PZ0baP1yt$8cGYso`x=Cv{G@o9DzMs`0`<e^a&{?O*$`qq-(+Q26I zyCq5ek_@Xc!PEgUu`8(q7*E7d=mCh~4#3LCXlrz{*!GGZEa@`sgVvY_r7nY5qky5$ z;rR;%3*mhEt8U<>xr{k=Q%nv#2I{>1WzKwWoc?-gM{WOLy|y%I@JeG^do<hVBm0-Y zDKrKo96GC-p!2Fh>HVP*%tE`WMIOlAjco;r5jAWu%;%b$oS0U&*wCIty`(HjJCUd# zD(hr^3rs_&6BXq(d@6_TPt>oJwb0y&di2WP+Ui7o;L1T-VK;r*$|G7-H~n1iUfTOz z^=okI&`sa6YFa}(B!ir`4Oq9j<?uV9UBesl#y;R_m(>WLz!?uT-_3A-4WH(z6{}2m z5%c45-1rZecLno`RZUR*)~Zig-QJ~Ofh*32R-uosCsQkeFnJ_#%-Phc<{w~#tVs8t zNr8_OhRdseVk=L9Mv)G-M-kx;RAG8!lJOcmy(&|VT=!R`9D!EhXPeMRMk$NEc)#+D zce_RYc-Og#cS6T7reakXJjqU84sXZEp%GxoV$v?7a~w71#Z~Fv(2ibk*NswDHSbAr zt?+WH7I{Nkp%OUms4*9=+D~!m<ss{hI9Kx-lrYsuxF1bJ$KeWYP8-_R6AD;$6di=t zQ5Xvmx(D9opjOX8C&h}dhVsC5gzB!N(g<U}O0B9ga=_QSsvut2WxQLJuA>N$=pt&r z8rqnP#?%<<4Mm(HOscz3m^Xx)-Jn6&VNwDm*a{^GJ&q--SQUUoT>3>`aDp6qgyPQL zh)Z%}sa=&vQ439=c>j&~{YEuc9z`iMfT9oGh)x=8w8o<-h2kJAD-16)RL}#9W!$OI zY$FV>3sWfI4W&V#_9!-iiasgsiuKDONv+FhU3F-DIH;&Ym}tPY)nN<WQQmykweChP z#%;L*;o26rSU~}d!n{Xj#vMCjgrP9UDBun4$Aoae&49P-7qE=Rd-z-M?cq25&GI`< zm*5cs-wNhI6i#7n`t_vIZ7<L>#&`uDguY-}4h0N_lDq3!6{&Y`!{-jPi4QI08C!jS zBMgnfnC<EAif!s)z5SYa)mxLcrkASa?y4!R?4hY0YJ63-sy6<Gnk|pVL};U)t9f?a zgQ~XU)0&_4))Cr2p3==Cpf!G~<}1-!)xuBee{MXaw$Kl5>aP9PM!&S_5%WZRhE}HI zgZm<6{6|~8VDl*TP|YiwBO>A3+|g}q)S8-$+iuge1{-U>@vewe9eUQYQ)3E^bj?TT z=bqi%Fr_IviPGBC<UW@bskK>K^ZtwQruOS&H9x&%(#-F{XAJZ&=dmBuwAfvs#tp?u z-p!+Fs~YigiK>34x85^X%Y9TY-IK5G)qmVGuj%pIz*J5vde-FZZLDfbR@FRQbGuq| zc;C;e>w2edqZQ?Pr|!n@p2lyh@jJoz-P`z`48Ij+bk&_n5EwfCdZ!N>!b^QNinafQ zrj@<40fauqP>&c0y^Eod7&?og@fbRWp;;K(hoJ=+deMbJHwL{JT8p6#7}|=V$1wCF zhDtGX2t!LSbOuBD82S)Hb1-xXLsKyH8;0x{iiKj<j>OPi7#fHnD~1v<G^C;8QflwP z;8+yfVQ2=1ZpTm_h8kgLIffJrt-;XG&>^!oVdyf3c3|jB3}NS}#V1PkGz^``Pz8og zV(0*d4rAyO4EZqRx`x5$FgO-__*M*U$Iv<q{e+=%45i`&a|MRBVyFm1VGPZ~5PqGj zbzn$fXd;Hb!q8|8b;B=W!!VSEp}rV;217mnbV2ZI40bdOp<&gw!B8HCOc;6zL(v$j z#nA8YOv!Ep?Xvb?80vzd5QgSr=rath!O;5{+J&JvF!VKs{200qTgm|p&4Q4tb|(gP z6raY>J`8Qd(0L54#n3-7v=T!RcxRVls5OT06X*5oY8NF-QL>utja16ioRg8tk7~0I zBb5rRO(;^?9g(vxN)eH-KwZHdRNE*p(N1e$swtb)CTq2t6|WSly{yWk5dEmusWe*I zqqVG#R^HZHdZU$Et>w$n%BqMq$D)<95v#RJ(aQNKNYwe&zo|_dDO2sE>?zYNilwN) zqQ7$F8QpQTy9<{ya^bd(fc$V31AmZF$CU~z%oHZWIRJy=5<J6v!2@R}l*<ce$9P5Y z!PzohQT%wG2{v#x&4FbF<hkJRFf1SBfG;?Q;cSDme<5gxp+N`W>y!h8z#?!8XUh^r zc?QqR73Bz=o$w*<EjasED$3V*h8EiDRd7}b>l1LcKMv~{$m`(I0cZCHC@`EoLQ%5e zY}yC~hqG-9yi~$D2<MG(c6$|N=c_QrxSxfLK(N0E8Nu24lA?SHXWLFixeVtZoPUS2 zWe+%mDUTn{7C2jKAX7L)yH%PfqZF$O)doLy5d4vf8irdQZU{nSCBoELQ9T{NR|iFP zcLJ?5@V$y=a&=c!Z%;+D^iotCjN%?V!-UWZ)$L4%a6dQ?07nB9)ie;QdZ3~P;a)jY zAcGVr<VZN*2l1o87G6yqqv1RjZp~Q8;6W%%8rV;S0!@MQRH)@?ifV^j<(;mmPPkPr z-%JqTUis%hL9!v^97XlPJyPZ=s&yV*@q9&f<N@bH>GQz`?we8w=f!Yd0#24g=F1^7 zxJ{-NV7mfzsMVkg3Q`6cl|jaEcB}+m1sAwVfojsQdE<}1BRWa%>(6fFfw>3PpCeg+ z(ci9-4Xz*2ldQk%U!ne?ryXyf<YO@mQyh%6K;_^$*q_b;s32tL5Y}yQhDE6)tSO9; zKi&s!<p2y57;j>O9!G&|o{BE$T;q#=rlo7=0g69-kj^Lhe4fv4FX<PVzvQ!X3h9oA z=xl>KVC2JR+a%`Abav;`S%FStTnOoH@%9<QWp?~CpOr)F*Qm+e?2{?l&VD@^#MoKU z&&Wd@e`x);YO>2+MCj#n7`h0WVHd>n1~&Kd+4&^t*q1T>Mb`K6`52$i^4SV+Lulvb z^Si8nN@q>^r`V&aUE&UKwT3zV+9C0Ys&;PVXZ?)>qLHQ^t9d3m7jMLo78`78OVx6) zl}$YoDI!K_>Eg*#T9b&hLW{VNqTV6?DALRaA5KyCs}ZRlo7nS%I`m+{ed@=Nt)a=9 zZ5bKq`HOS%=VXk_EL@bAsd$va7~vSLrl=<I+-SACcy_efLWD*`CiiR@qjtE<8V6~n zj2&MTAD>$=H)nQ6=E8*q3x_A9*dLgUsmsNXvFZr%=@_-K7&1nk5S@qWMni3yk&%<1 zQ<RctSb9+#d$9jlwL!Eib4gAS8hRt4Oj)yY3kr?0>@aXnfip87V|@l@<t{4BMm%KT z+{~gvB)>t@^sGS(GiT1hxPU>0nVIvEF4j>2VldL|f=r7tb8`(28PSUu<`fxa2qQu! z*#(6~vmVKxNwswKCRJ+gD6q`Q&n(KwFDjUcuFFx$%gmddy%5nOG0%y(QKB>N5o9lO zUctk3^~{BtM&0-joko45^&!N<+{{eFm*1eGg}GEyXBmqMj4KWxE}ofF<jjHk5U-`H zy*l8tFLJDMU%c{u!z8%AQFi5IqY28}jTLQtQDR0$ys}T+HBp_}^h{$VDz|VH48ifr z>rv}Vw7lr?$r*~fp}6Zub&__zq4+VNr3uF<wQuBcNG+Zk25sj0B-Nt6A}o{DxlNBn zMMV0tm54|;JVql$$pdPqZpypS@w2mMF3c!e2<0jqH9JN5DY{R_h|HOA8)nZe${Y@X z%!SHh4aMKX>Oj}aFlHnf4I|}YB^({E>}=2*Z#Fi(dCG?|5s`rcMTt(#EXV?b=NiN- zA2sNsY>P?AT#zz*wsJBiS@|@kcNVmDOp!Nkd_sn@zj0)we>e0?Ej}Xy+e$`W!JJG; zexX4^MuyP>q~Z$1L`DXDhOP2LgM^}j3@ZI2&dih?<&79c11TrJD5D6K*~+?@%mp_% zCr8-`4uX4CB{DL+58dP!6lGvxbChE-vkUT^GZ$uJ$;KyU<SDOW!S<uA=K%ip9~g+I zfB_!-G@`+co?Db{bh~RYGYboI=H{o2n>`MC;p&Ewk?!+o?=^nAKNeG_sGU2XXxJ|! zV-A!XDmKObuyPjdV3Pva8NUPHf!_%6+huj^z+;V)z~k)f+&LN9GxO)bjmS|xZDdux zY!s=4uVMZVD}hGX=RX9+Tc#<IN^m9q4zCi{scPcH?Tsm+J;#}uqrA`<;#Xt5zXE<o zhWFra&psnezmH+qjh_{?@$h`X78tL5(|A-}_-qqsTkRd%J=&2b*oL~8PBe*({Nq<l zx9b|Fqu3{IGh*9szb!KIY-t3<2FoJg*=zg+rv{?Kn#Jm{imGX9p13|uZGET1X1ADZ z7K_ztwV2?47OMq+Ookw=(^Y#^uz|&47b~Z$Z^20J$%GLet|h*iqBModz!@Q&lzGhF z1mc&O{mj>x!_0-ZQ+j(M*+0wdW{zr3@jm9+$S%k!$ig``F!8X`p#>!fFwbNTGw)!= zFQ!;vwI$i(XAb1)!0lAGBBvfYbAaQ|0lUyZPDUEEq6Cg)axjS5!@P`H&QpBM0gk`K z9PCT!|6rE$nS|ElU(Rb5w}zP%7C=sLYS=(dbRyeO0y*KC#2mCy29Gn#`OjO-a{kk> zEv1+9pA=xc#X&ozf3Gdve-unG+s7)4zJnO1l?Ep=<J$nnA7}P6H@K7R1I+g`E91z% zirLBhF0-4txvL#H@Ut+TIl#P~*)*OU{+-#%+`2ubw=s`o#@7}s@FUDY=Dp0O2^8=8 z4+|C+23WWTm=`d+nfEgLnZwLs=B9U1dP_QGFqqlNJcHRw>{3>+5M+bh%*sS^aDmy% ze2v+`eCOSip^teObAWjsvoeYNJ<Dt{*rh06uwZ9{J35d<FY{z(KeNspWPX#`I+-$P z(2>$xc~abo*~y&A97cxxmGvyxrjUdE%pT@2vvnH9cke_Q*qP@tyP0<|E7QsT5;MNS zs*qo|&XnE>jL#os9}Do(WElL(9A+->!Wqt>_`fqdm}lR^4w;WIdzddWdzpuKC42u2 z=>J%NLo5W?AjE9SpbY!MVh27aoXmN^*lpboihqXL$9#l2z}yHvO=5a{dB^;Q02|$Y z4%9yiWh~&EBC?;^!yMV2GlVZ27~g@}$DGfMUjZ<FJ9B{f3+6C$H~9L11@O4$QGyH> ze9XAX3JomtDgJ9_H*-9Ep2m1T^HgS2F4=Ejwle?3Y-1h{@8X!=<z-<r3x4J+%wgt{ zuwr2pD33DO!fa=TDVh=QWG-fQGrz>_Wqym;rTAE=WrG0o-~@6QX8s$qC7%lL9<z<P zeInUAm|e_n=IzX0W*lXkV*m5AFv$?$Es=RCbC`J#vjt|RP;<(8W;?T%L<Mj&w`2A) zFJ;D=Ev63vw{t<O^f*Zvoy=Fv{2sGu0mUcwp?E8^V74>=!t7?A0K+ieG7qz#Il$bb zAKZU5P!>`KTR<@GF>{mtoFQ`&vxE6tW)Jg(0c4NgzR>Mk%=SX!VFM}N&3thn^nc9I z$3l-mWPsny(7~h3mLlR^%y#B~Gy9om4yN=$=8u@e%tMDzyk!yj+d2g9KNi5w!Y^## zWX`csypQ=bb6_z!h#gAt@TJHo@EBm@LBo8U<84bRzWFe+cQPlqSn#lr#jGr&1kW>D zm`^g>n6=^TkU5pv%RGlU!2BXJetm@NR$PCw;AWx22y*CQewZ1)ff)(TGn<NuyQGl4 zjd?P&gLx^l6>1tY{E*pB?5dk)JK5l_kz4@g0%nt&9K6cxW{$Xz?0wAhnN1~RFK5MW zW;u<wmSH?(@-8O`8v+zDl^j}Dl7sHdcIJne-ONjwz07jj?k%VEa@y`^-puxv3W$gN zm7iE}q5y0kMFqew!N@zAeQSv2*brcr<2!yaMteEFyP4(i?qin2yYd*1|8jhHfPfC< z`0iwu<GY(#j_+P(IllXt<@g?8{+TZz$SemVUlou4Irq~QhpVUnyO=F&iREZzW4_Aq z4(8DhP<juu9IX7zb%PnR9K0-#b0d?Zm+f)N@OgHKAK$S?<b%k=EFVOE=6BdW%sgN; z70BeF^d-y|=4;Fj7YlN@bTZ4~(!(rAM=!G+9sSIwZCr!QvRhlKsQ|KDTbX6Ic6nHk z{o2PY`*o06_G@JwIUF&DuaMcxjLQ^QWAHJ`c(Qt#dolZ%4->nTAPXrEQUaS!4oaEr z%s(-Em{-`z-p4G5TR*cLZo|xSboKp>{L|<P_dmdb9A3lBa(FeZrv!3%wK2=#)y^!3 zR}V7|uQ;~&ndRsjWHv@uoPUQ|ki)BG17#?OS39#DUU3Bot5^=NCP6HRR~s`7uSNl! z%yM+al_N}#qo*<c2U(EAr?Qa@-ry?6B_>QDr(FKc#Bxd%WTq(<7;d5XPH9vC6LU2) zE>)pF^Ee*=am@;a$HsA$Z6*GdImnzdo`%;jGrrXt6P72)K63(JG4rRuI2^l~A516q zGM`R|`;QKSEaXlkwr(Sb9{?LK9?YqeDBi>D1IBpklVsm!GO@!;>;^XcGs|~F(^C|` z&BX>b7H)%=LQLRbUc&5QmM@Q9=Jg%PKFqw8?JZAJ2HmGnyp7q->|l2Nz=E5Ftf`d1 z!z`G+%x8e{io?wD)5zYpoig0P9As`eo#IW;P<$D)jo799$byp%vS(0&AoC^WFta0r z;w{gT!voB?%&9^f`jk1y{3o;W9L2YGP<pGuF8IeGEV$WVJF}0u%}h!VU@m74GxwN9 z@$Tm-gRhta%wuPB{0@pg$?QRf{FVFWkU@|Q+GP?eFHnLL%y#BJSrqSJ-p1@@{wH&Q zx#wK6x4cOHUT3xf8}I+g*<@g2gBOAE9^;BJR;ek6;seY}nU$9)KE!Neo;8o`aitm4 zUt<n4=gj8<?d0+QA`7@AjR_{^k^wGFBg@xq|1RQpINr3II4Y0qZOmPmoy?<{J<O%d zf!$F5n1P(fhuJ{R+f6T1yqve&m=lIkh7M*qZ4WTZ4-{eM=h@!kBY$<%coz$G^LXaE zc|3F7Jf6939>0ei$`1-|W`4a^yv*_g1upL61<RLPmu)Wz^6l2iEWdbonV*wY#{4UD zn0Z(}-_siMSIO*TZdpL_Ugqt@Q2+ZV!H;ZUVjkqA1Xkus<Vf1IfmiSZGj85Mewi6J zaUh>y#?2haA28#l4&;!*kU#G3K;btwz+E25O&3sxxZ4ByZf4x|ft<{YyFZZcXSOoW zV8-1b7{8F&&b%7g1y_W-L(pI|8#tMFGvjU%j6cDQyGD>@jo|JP<PSL>cab31GPin_ z_;==em}3{>_zwl>%fj6tAg3}XF;8YrWzJ@v#=L}C)<`+CtdWh(PPX64ymBFq|BxYW zPr(vzWCPr$g1nO%x2quIhXu69Z7ay{GvoFZ<PbA%V?q9%8Mm__n+hpCZfimASP1vO zT|>80?kC|PFhIV@yq5VY^JmPC<76LK1P&W3iu{+zcLC1<$MWaCdOQ|5D?(LfJo-uo z+Nd!6D?OnoxE%>gR0#$hZ(`Is!hxG^@CSJ;{JNPjy<D`a=JZyfKBD%DlWSLRu<T6` z!(fAzIe|RIE~4E038J*>hCGGkaDrHOOzmY#B<uHBwu=(*ZLV9_dYGKJNtVl7nJoKA zmWy1kvm7KDr;K<_T^ExRlQ_N<%57!2jAd(YG43qn$?|EI-MvNW8Ym#k{g#lEfZ@a( zW_dBoVKEeZo8@xZF_!J(_%e{?s#(iN$cfXC<K*I5A<Ld5QCh6_jFXFKFR&g+5+^`6 z%eA!6S+|Lj<#0iAN$t+1<lT`hN}({OWV-zEEPD)Vvs_@SW*O=boyc{z(<}#)h33Mt z^dT?5NxhF4hPqsb>%ELJ4fYjr2jEislKE(s!+piLH$m=4atX_penNAjm;R)mmR|ac zVW`VRI&C@E`an^Nx?HRq&$@Gn&>lfQHuCcv>p`2)N<f#3cb~ByP7%XUmy399i^;$D z0a1#&T+ExydSJ9Tfx2AO`y1;)yBLNyHjT2qdj+{MrHRswH{^7d?P)@TrX;OPS$2ZF z9GuGqKNCDKuz&i&OZ5%&i7W>|-UjkG%5xLT$~bHsy-X~B%Cb|aWoj?sELCF~-sL98 zZZWhJ9LV*+IV}4PQ?pza+{tplu#S_fga2aLG+qoVhy2D<F}jtIZ>u;C`Ni2-&Su#* zUYuA7d9u8oWyg3C_u&mEXIT!4q2R<U7ZBA_u2!M00^f2OaX8DC3F3qc%qLJu*05}! zAWFA`Z<hTm!y^O=5+~Od)iSPZu*Sy|TMuD5Jb~IRyws@*EO)bPNf##`1K%uHu?+ng z3TWnaM`ahwUU7UiWGPo4-)1=oPF8@EiRAkamK8DdQE*~q*|JhrtRc%K$x$pjL<v~O z`Pe#_W#2@hJ#)i%HOp`>(YG>*vV4VQ$P#X)*~0RFShg5)oQ-AcDk_O>lF;CKOf09d zY!_+;UOdZ>vFs(^ewNR&>^Ed#t$=nJv6>tQ4G+Qxnl@myI9#C)ZnT)=?32ZbO6VkV z#q%KR)`vtXmi-~Rq7PVhJR~%{6)az8*$LLG;0bE1i^BaJ@+jpDkL^mZmaC%$EZc+% zcR5aOL42HL=M<sgjhjMw9%k7?)^eZWPb~YvdOcWACF?fjl%+|i(B9(YcE$lL+ol?o zYi8>#mhDsd@~4rP=UKN-6WUgA&hl5%T&QcY*RNG$8nvsS4BgX2+(%#v@50!WGgwx{ zaWIXO3%6TYwoIoM&emVB>=f$bU@cd1=dU5(Ua-bT3R~}IIXvAM+|4s6%ORCyZJ!~A zJq6Y*uVdLU!?<TAmfJi=)=p7^S;~dpLY6(?1iK(xKhCn3tYO*LxXNoR`)AOzl;wgd z@*RLI@gbH$)=#o*5+xoepIi$5fn}!{3eRH^_CT$6TuUB28DiMqphdYIT&=9T#qo7u zYt^BBZ(t3ESkU4EY`UA}fI|$!>}HaO-&wZI6vNg-i^pByc*Ei!ryNalXmDY95zBUv zanc}{llQXjnL|UVJB!@>%(^>EltM2yv)tT6-hEkO7|a9AbIIDlvNBhc-XyPP*)msX z0y33r(rPt%vF8~5EKaUXC$k;^eG_=kA@4;jhjYXUbmM`Sc)Zl3tb68(6F8k>`Clyi zK*mdz3)el@QLdKx;sh2F-t^JSVwT<WjhYeAc4HcyWYIsLdSx!zUSSz}B@Enga!I?Z zPM)o~BJK!yX6tg6ZMk9?H2a1uf2fOVLLJ=jPmcDIGr8QI{x@>w&!wS;Q@y})IG2W+ zJSvg8o-ZoT7~M=PPh{CHRIErR%O_ZdCW^9L5%0T!oVX2Z5#9)`F^e^LFr%rDJv_>? zk4&AL;353X2C;M#JcNJcxNx3PL{mN$@j<~w6vsDXTi*=c*Rp0aG_zbO|Ab`+$#TKG z|3+Cp!-EezXfrm7!<*H?+M652H9W^{68*P8ttM?E+ptg}H?v$K&t(|~t0%A!TcHpY ztl16CELY2qvJ8E53-)6){g^eV4M-j*7tWJ5Q)YnzvF>GfK)`!DHmU6_d&E$jf`wUb zu%)hOAjg>&ko8)YO$&^vl9}ZzEL#^C&u%G?+e%LC3ygV-l=rgiULa23Q-YnuK0($V zur}TmSYO6^0CXseX(1IQ#IhoWK8dyTBwYH$ZR7%K&I^vMY<h-et587}J~Zw1B$+x4 z&Fo>*XIb`;snZJ`EY?e={)J-L(`rv)eG1Y)$|Af6VODZ+{tuSnhM+8$==G<_1vEt% zCgS8ueTd~iq4B&l715;)ds<#b$<yG(&T=-(c7d{RJ`Kg#%^GwEm>HVAZ2CRR&|guO zEB&pu^OYE~2!n@4t62*c8Lv6A48OA+HZn8Iwg0SV>WT)Ag>yTU;W%q{p~3_$PVNG@ z<5@CwE)whBheygHZbHwBYulj*e#g;)MPk@<@aU7914chb$pVY%r2yVHv7N4GSy@7l zZI<6-*|J1v&x04aW#GQ&$%}2ND18KKU@3Xo!m@LzG2fB$A(lN$>2*|DM&_4US47G4 z;Kagmj~#WDfU=F{`&qV$p&&PMvRuAH^nV_D`+1IrehJZWa&N)6EC-g+n7N#?w!Xl5 zET<8G<&`YELB_tr@(V0`mWw!eDK)YDJIi6A?!aDLOui?)NWM+Qq7>itSl-35t(e|y zSpJM<N3npvC)e49->*AI-uR>#$1Fc7c4U^H6#FpCPm1?5%TJ2andKKn{Qiyp<rl>= zX8xk+QUnX~lj2Lv@{{6g%<_}sd(85a;y29llj3j8@{3~ZPAY)>qS%3%z9_<5Xdf2j zC&dSVEzm~gkGmf4tH-tVxZSQ>)92UY?Kg82<nqxj@#0Rk-TjSs-}>RKM?LNXj33T2 z<cBjzi{HJRd}|j&JieDZ;nw0u2)W(l9P3sWJ<s8qu@827nau4V<6A$=PL`b@!%Kve z_p|JA;miphk>n)8$BoZz^flq$1rMPIS#-N;3dgpBWuIG&`y85e3Awl~U5K>Z(5&Si zm8?DF*<B*m?Sc&1`UK0~5^-W1T%@Cvyu8i2qttk;$Aww{g!OPKjYG8M1s0rHx0V_2 zXQnc8Ghi>}>JS%TSdEkWVG39dm(c`cC0RegvPGo%ponsJ%sH0rh8*W+>z`S6ucRwt zxn&Jy>0N1jmrP^156gaLyk#BX2u8p!_(8_6pf@wN2D#-XRk|&w&z<FzWVLi#E;JZv zO%)`+%`*HWtG#d~avRP)`>1SAlI3okGM4?qTm#l}Q_kls`$QVba&J!8{p2Jds!^6( zbQZE~6&FyJJ9Q4S>=x#I=(~~%IP?HH@sYLi7|E3^E20{$9V|CLNY-#0K^FdfYK)pK z&h1l&Gz@c;TcquW6mtL0s6&*(ODWv@VJOUG4Xy`G<yM{m%K^i5!vU~Nd4*C3MH+rw zgiSrh{W-+4PgH{(C%5)QA13Q?6}6_dWPLx&7GXXJPUJ?P^(@;+miv7!vkaGrS;}oc zwpYowhh(|?XA8@IlEa*3nB_3Z7I^o<c9nXBoLEHlAuI{Y`&hP#3m^;sA-M8xN6FMK z%&%ZE*mNAr9+8F~<Q}0VEc;28TZN9X9H#u_j-hVH$hS$D539X49ER+iEJ2S0$&9am zSm0Wg9fqZFqiN!6l-emS7$sxVnJjzA>8oH_$`agrw3PdaK4RG~s$T^;%no|^$uATZ zWx2cPVV2?U!JF8IBj9%nOIDGFFK2R_(G`|Gq8eqn+i2u*^6L{9(68Kd^d!qcvX*;~ z0xT;c?I_#}+fm5xU#yu#HE3qJ4QcENa%>eBP?o!q_Ok3XJZv}y4*tOsH27m!gmqNA z*{_oWC<4lIchbLEhUNgW@S_LoNiv1z@EVxPjY`{DhUS2>+^^LARNW<`2ls2>VF_!{ zQo%G%Ze4nx<*;r%_swz()3DRhMVcQx%Z*IuSPlq7miw8yo+0Zn$#Pp$70b}jj^hQc zr|bTnWt&I?S=f$4@$Nq>FR&U-<wmCiEJLe8S?+i0aE`3uVz6{_+fy~mL3Vrs9BXgL zq8T3K2B>)~LsvWj9^^i#Aj@`=<#wq1-y|n)k@h-R%Uw|?ScZmyvfLci_bsxvku3K} zooCr8%qPKGZk6irHd(_xL|JZ_DrPxI)^gv}cPuO70$2<GNw~zB=g9+9^C`Tw8>yO) zupHhf#+`ysRi@3PN4z7=tHIptWVt)b(63RJ8?h#_>=)+KSUk4g&N37aWw|ZO6d>P< zs0LZMPebu0v1Sq%&{XcwdYxsPFrPukTc~uyFOUbghba5El6;J1zo<5>S-$sOX?+1? z;Xeb@q%Ew4x6&~11bK*ik4!Bh?JPKUvMgA3ifWLB`z(~W>HB2r78lS|Zs{sv*(=QF zu*B@)D$7t}w3hq3wtYZOtfCsNo$z|CDvHwJLz1DIQI@;Cma+^D{S9>TBw2sSvQ?y^ z>|}ZLN76|($__7Cf6lT)TtL~)a>_+{Ic8jo3$pwI%TR8V<-V~qEJLG4S?(UY#Ij9X zKv`}goA5FDc96B)OZFPe(5T;nTD83ewfYrnUQrF2S#B$9_6d0ilLyPwbS;T2TZH*- zEC$Q3vka{UWe3YG|1OJR$ZnQbvkW&9tcCw=n6LaH&b<xum7bqc3a>~zkDZ27%wReE zG(QiwQ*q9+?h_Zl+$^`C4fzLo36gAjhOBq9Y!YejVBuMA^BGy&NOrPZ&N4I!w3fTm zuCp8z<^YU*0jR>|pOb?yIgtC*eqq@ns=?AMx2uf_lC_&;xofSEW$=3etmWpl^(-qQ z4P`5QGr;!hV;Pz;%5o>$n=HG@+Q-)Yzo0CA!u&2+2Uy<2a=?(|!YsG{k}u~ue7Wdl zf)5Fp<w=&|t{F~PUiuYTgOm5LBs<9Z63b8$kcI6%sHdr4lc`5kqp95e_8H4?w@_B# z#UJzAe~GLWVTMmIX1N#cp?{KW7il01+xy`7JZsS0(Nu1WOZtXPz2XAOa(7%Y%TQvJ z<tDjPEL%j{2k7_%Xq8jMs1MX3>f53MP7R0F%B;<>Olp>!<DO?ZAkt8ld*saD%JNsE zEVs(JShk4^D9aslzq0HUW>^+7%Z+o@-;t9rSzC5e-6)qyhNgwqHkJ!m2Hz+LS^l17 zXj&IRmV4^5z9%Psk%qF|TDON~c+#LOci4TyvW;Z9(XQbYasuW47_8-fyL(yoh%}S~ zyQ$oBSca-cIm~i7%VCmDFO&6YmQBL^36_NAHa}37aFysp?#S!IGBg6T4zTrnmIGuR zW_c&ekR@8nZF*m^42|ILn5B>FJ1ny_qwHjPFw0J1$X=FLvg{=}z_OQRXeXaymheuF z?fjoC!@We=&2s-ADNDDwfU=k60+zib`&oXBWw@9B0BgC&?>NhF(@>UM{jRd?Bw6nG zYyL0F(o1q+FBPyi%TVsmz=_=d_bAI@vbMlGHC|4DWsA6g)^ays>wlAP$P#6_DezgA zy&~;%kmc6E`2Uc#BC0_a?$4o<yI3=c3ur2L3BJj)RhWZn7gy__=mVJCB6lyd+#)xa zxfQ$%VsX=$<rcX)%zZh2F|*tuw}yE#$3MZ$JLFu-9u}6c!6|0BMebwfjU4|yv)m%5 z{!AAjcgQtomOJFSGRqxugP3WD+yJ;D7UUMWOlG-7?h$6WMXrk3Di(a9ws*-dFwLNH zVxfi{WmHl3G0X37o0#RNC+JsXUrP2zn7t*$XAFj&`Cj6C!FQ|*|H5|)@kC;mBLB3I zn+@ce{7cMo>HaMlKZzWCFXJ~8x6mj9cP{Z@X8EUx<}k~d_TvV-+;xAN2>z~xQ9}8* zi2fsaDmhGwpm<LPv6ESD&U%5_T}1IAX1UPOERxd8Hv{|+g2duK4-G7$1h2AzoL`QO zq6G4<7M)|3d*_-&Q@s2uMK0uqZY6k}{M9h0GKY|(-HP$Yq2Tu1(EzrGq9FexEomUc zswRjc2bl)n*t<9%7-}8<Pe03up`PgH)q4D8J#H9dB(AgX5<}a=>x7~845rlM=j-uL z_1M<%)(jr2#~;_@&W&8RCMalhE5BBcBOBiuKcXH#Qjd4n<FD#*8`1ib+WxL}O>T92 zz8*Ie4_#7wxlY}7tJ&}MII-!i@gwT-w0it-J$|en@4J;<%J;VlO2gP&Gwf84)9dk` zdVH!Le_W5hy@lakwS&e9&9AP(OfcA8$MfpNFRRDT*5f1f_`7<nns3Sv@>d4mEC4Sv z_(lQB>TzW~URRGd8GNHly+mAhL8oqF%wM^9lYm@XkFVF`rg1l20ob>#$MM8<eR_C3 zo_K>rVMtB6YuOC}^H)miafNs#q_&UWSWouW;~n+*plDqS!_hnS<d5p{=k@rTdK|9D zSL?9?<J`@Uum-oXONqTzP+HbwOFhQ_g49?z9)!aVhZT-AIL5&d4@UwViE#9WBMFXV zIQqcR7mj{#^oL^t9O-aOjDhw(2?CShcnFRuBJDf1t!p|29dOKqV-_5<;g|zQ4jl8~ z7y^e44t#tLgCh@)d^m=~F#--J9Qfy77s62pM+zMH$6|}%SOmvnI7;CtgJUHetKe7- z$D?qR$0%`11q9Z>Q3=OmaI6(wFRN`EZh)YGW2314RvqHPzdAb~j$Akj;CL90rEn~R z1Ag4{C<a~uhYOA>I39<i8jc-s{2x^3-T$RN|39uyvGcNeUaWtV{zhO6v38+m!oLrA z$H8`2)NV0i&rj;GgM)uo*Tfur?@x7{CLTSmjX&s{t;MTi##OcR!RZlNPBUSBQEMQk zx7IA8eH$$nV`4;bxmJ8|T5BycLR_DvH4y{v(_(}zQA-lrO0@Sy-$ZSY`0Y8Zm3Xq9 zmMq?k*V>4|3E;-So@Lre5&f~&c0&vJGjiRRYs<w;yR|scXr(rRlAhYB<%`K9wJrzU z?X?_DR2|pGh>UV=y69P>wK;hGZY`o&wEY46t90VCacbJZKa;ejT}CG;_YEJOk-21c zrW5`w+ss+HnF)!1k>KC(*0<{2_b*ak;rmj%T}>8yzSNpE|7()?_(bvfMy*TN<i8}1 zPyTDB@yUHe+E-d9v3!%(T<e!0s%8LGPS@fFBwGLCA?dFU`t<&bRlhz);na9K^%m+3 zt(n?Ss9(V;0kdnSCejHqhd5!Mq1`?x{x6OatpBCrtbe`c1h{6?X6-ex#i4nl`&j$+ z&g^q==uE9dt!p_gTmHA^auAx!vB>{TOL=@DHm;FsQ}Nps_*;@=cKp9-IJd`$x4UVk zgZFr}c`^ULw3vu~35wYDfSM$n|5hW#KmM&YJoxP<?F%(}c6>s@%&dbKwrIPfZtf8R ndc?kiy`I+Yw*6miX3hWF4!J9I))M}AZ7=2jsO{khfIt5ORNRp5 diff --git a/mappers/wc.cpp b/mappers/wc.cpp index 81a006c..dd2307b 100644 --- a/mappers/wc.cpp +++ b/mappers/wc.cpp @@ -6,6 +6,10 @@ int main(int argc, char **argv) { std::string delim = " "; while (std::getline(file, str)) { + for (int i = 0; i < str.size(); i++) { + if (str[i] == '.' || str[i] == ',' || str[i] == '?' || str[i] == ';' || str[i] == '!') str[i] = ' '; + str[i] = tolower(str[i]); + } std::vector<std::string> temp = splitString(str, delim); for (auto &e : temp) std::cout << e << "," << "1" << std::endl; } diff --git a/src/Node.cpp b/src/Node.cpp index 5efec02..71e98e0 100644 --- a/src/Node.cpp +++ b/src/Node.cpp @@ -908,19 +908,22 @@ void Node::handleTcpMessage() close(dataPipe[0]);close(dataPipe[1]); //go thorugh and process things from datapipe //if processing success, send out TCP MAPLEACK - string match = "tmp-" + sdfsPre; + string match = "tmp-"; int matchLen = match.size(); struct dirent *entry = nullptr; DIR *dp = nullptr; if ((dp = opendir(".")) == nullptr) { cout << "tmp directory error " << match << endl; break; } while ((entry = readdir(dp))){ - cout << "[FILES] found " << entry->d_name << " looking to match " << to_string(matchLen) << " chars from " << match << endl; + //cout << "[FILES] found " << entry->d_name << " looking to match " << to_string(matchLen) << " chars from " << match << endl; if (strncmp(entry->d_name, match.c_str(), matchLen) == 0){ string searcher(entry->d_name); - string target = searcher.substr(4); - cout << "[CHUNKACK] found " << entry->d_name << endl; + string target = searcher.substr(4); //get rid of tmp for official keys + //cout << "[CHUNKACK] found " << entry->d_name << endl; + + //TODO: add prefix here Messages outMsg(DNS, nodeInformation.ip + "::" + to_string(hashRingPosition) + "::" + target + "::" + entry->d_name + "::" + to_string(-1) + "::" + to_string(-1) + "::" + target + "::" + "0"); - cout << "[PUT] Got localfilename: " << entry->d_name << " with sdfsfilename: " << target << endl; + + //cout << "[PUT] Got localfilename: " << entry->d_name << " with sdfsfilename: " << target << endl; tcpServent->sendMessage(leaderIP, TCPPORT, outMsg.toString()); } } @@ -1043,7 +1046,7 @@ void Node::handleTcpMessage() // update fileList, client itself is one of the replicas updateFileList(sdfsfilename, nodePosition); fileSizes[sdfsfilename] = make_tuple(size, lines); - hashRing->debugHashRing(); + //hashRing->debugHashRing(); int closestNode = hashRing->locateClosestNode(sdfsfilename); int pred = hashRing->getPredecessor(closestNode); int succ = hashRing->getSuccessor(closestNode); diff --git a/src/TcpSocket.cpp b/src/TcpSocket.cpp index 277bd03..fa9c6c2 100644 --- a/src/TcpSocket.cpp +++ b/src/TcpSocket.cpp @@ -233,9 +233,9 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP localfilename = sdfsfilename+"_"+to_string(fileTimestamp); if (overwriteFilename.compare("") != 0) { localfilename = overwriteFilename; - cout << "it's GET with filename " << overwriteFilename << endl; + //cout << "it's GET with filename " << overwriteFilename << endl; } - cout << "backup filename " << localfilename << endl; + //cout << "backup filename " << localfilename << endl; } else { //exec, read, start, tmp, prefix localfilename = fields[3]; //tempfile to read from @@ -263,11 +263,11 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP cout << "we have " << to_string(byteReceived) << " bytes from this connection" << endl; fclose(fp); - FileObject f(localfilename); - if(incomingChecksum.compare(f.checksum) != 0 && incomingChecksum.compare("") != 0){ - cout << "[ERROR] FILE CORRUPTED" << endl; + //FileObject f(localfilename); + //if(incomingChecksum.compare(f.checksum) != 0 && incomingChecksum.compare("") != 0){ + // cout << "[ERROR] FILE CORRUPTED" << endl; // TODO: Handel file corruption here - } else { + //} else { if (start != -1){ //IP, exec, start, temp, actual file Messages putack(CHUNKACK, returnIP + "::" + sdfsfilename + "::" + to_string(start) + "::" + localfilename + "::" + remoteLocalname); @@ -276,7 +276,7 @@ int TcpSocket::messageHandler(int sockfd, string payloadMessage, string returnIP Messages putack(PUTACK, returnIP + "::" + sdfsfilename + "::" + localfilename+"::"+remoteLocalname); regMessages.push(putack.toString()); } - } + //} break; } case DNSANS: diff --git a/src/Utils.cpp b/src/Utils.cpp index 5c7cd89..2c06f2c 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -63,11 +63,11 @@ void handlePipe(int file) { std::string key(strtok(str, delim)); std::string val(strtok(NULL, delim)); string keyFile = "tmp-" + key; - string write = key + "," + val + "\n"; + string write = key + "," + val; tmp = fopen(keyFile.c_str(), "ab"); fwrite(write.c_str(),sizeof(char),write.size(),tmp); fclose(tmp); - cout << "[PIPE] " << key << " to " << keyFile << endl; + //cout << "[PIPE] " << key << " to " << keyFile << endl; } fclose (stream); } -- GitLab