From 390acee52af2e4c8f7590a7502d428dfef71720e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Sousa?= Date: Fri, 3 Aug 2018 16:42:42 +0100 Subject: [PATCH] Changed parameter system.communication.nettybindaddress to just system.communication.bindaddress. The replica will now use that value both for netty and the replica sockets. Fixed an issue related to the loopback address. If hosts.config specify such address, parameter system.comunication.bindaddress is overridden --- bin/BFT-SMaRt.jar | Bin 336768 -> 336599 bytes ...erverCommunicationSystemServerSide$2.class | Bin 3396 -> 3396 bytes ...tServerCommunicationSystemServerSide.class | Bin 14264 -> 14361 bytes ...CommunicationLayer$PendingConnection.class | Bin 808 -> 808 bytes .../server/ServersCommunicationLayer.class | Bin 9790 -> 10474 bytes config/system.config | 7 ++-- ...ntServerCommunicationSystemServerSide.java | 23 +++++++---- .../server/ServersCommunicationLayer.java | 36 +++++++++++++++++- .../util/TOMConfiguration.java | 12 +++--- 9 files changed, 59 insertions(+), 19 deletions(-) diff --git a/bin/BFT-SMaRt.jar b/bin/BFT-SMaRt.jar index ea10fc01bd2fd0169f8773d26276b89fbad3f2af..721709d81d2a448f830e1a8996cc207536068200 100644 GIT binary patch delta 16042 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 delta 16293 zcmZvD1yq#X+BOU`ba!`1NH<7#cY}0?AYEe+(#=CicZZaOq#)g)gmfq^9rBMap7%Rv zt$!A*J=b;DzW3hue&(t9&-kwf@XI;l$5|mnj|5GkrXF|mL%a%mn7kd3ng4P!tU0e?Z;&RbAGaC zMP^|}&UmGY9d*&@9A<6vf$S1~3YZf+Xq)@=J?E}6MPc!!|4rGm5~$+CyX+<({>czj z%0`AA>+P|T4xix5v8(_)=)=!}9QgfipGIU_mJE5>>7xNX^qF;RL!(v+Dqn?ZOD*bPoRL~H5aX(Z{cw=Qa%4v2@1u^8oKxdz=woE0 z5UDUw>*M->Guz-xKkQ&h7&ne+*HvrPnpdRdtp&7!K0o7YrIUU6x_vQ@rdJG^ zTHk6c4;cxe%S@)Chf{{}q{qr;<-xJD1x;Cz=>09P^hJ6&DsRZ7 zrJIeb-A8)xrLA`LQwA8Ytx4oM$ijpw`XM`1!B9+gc2Okl zjPv!7EZuXBG-q2l)TJI;DLy$~8_ea`P4|OPl~YDqxqb8V^7*h-KK~^m;m~8Ftm;}(Z zSRtLTnqHsJ8?hS3s!Qepb#Hh1vcu%|`&^F{mv{Gy1~{HAh@csL<(e{7begZu|G}ga z_dI+?BT3%nij?K_SfG+x7)vNFg>CMF3_Zi{R|`j6tLP81I!DS1jsmWgiR6I{zsinC zugYg}=a420sbSH>ajOlE1$?Jlg3Lwe=>mDlo>CoeIMO%BJpzb8(5%{jc&n2mg~q=Y zUGtZ!jJ~LH>x6WwuK(O+Ubgd(Zo($2(S0~01FDPKV9z?qvs(DGdTC8)sJHWp@t}W>6OWF|OkS{C_rlWVk-J&42!6+S0NPm zOiA+G+{*9$5M&Ov^?a&CW*zmdTugJhCF# z@m-%D2KfkGF1`HyVd-{t&*#(K6P!^UqLg@`VoQ@Q&PY5c@@JtQw8nj6eEOQ+FP$bX zi7$JPNqpWRFfzxp`qwYE?1LSl!15gFrQ8z}=ACOlv7GG^ZZXphIdR=DT|(^=j;f>_ zXWDR2ec7gb>ynju&3=?bEU|IeB_F3Rt?$?@vD6H2d4-OM4-c^3FZEa4wP(zKv8v*& zNgD7MpZ$gCuvmJ+2z3xLHX6f0%~ZZN!3182$nzc^Ppee_s-xK=^z$4l7#`OY8y_&X zk>{csC{no++}m)?^Zpd4tyR2baU)2##ZTpSd4fsvoo@Z3#0DDQCxs2Ht38|F=FHG{ z;%sqoUp6fLOtgl8QyZ~QOL1#d1UP1EJFM3%F*SrA%{EHB0-;q6CQOY#m9G(hr-{1G zTrrBfY-ipFqJ96dvv_rZyD~_1c|vjOVaE)86Ttgvc)-W$PLT?#ro`2KTad|3GM`Wh`To9#hX{QJ1R;vz!P9rg2?lWMJRV{P|$3}y_C;e0C_C1^rF zH#)Qqlj?4R?rfmxzFBct_IK}c*l`pBKdS>L1;MSER7u}9rtV}=%sN?Wo=;!FA}*`X z9}5KDB{x8|L$02}4^N-oxX|2Flm+QqpFhhx3yR4(nLfCy%z<`|UtjrAJ!pj8E3|Z| zZ%{>1KcBc_B7I0!bW@{`*3o8ruSVujtjWA_7oEVbPYT7MYaLbKf*5~mPTTVpv_YgB z^c78dC)Z=kn~p4JsYz#nsDF_&0hgGY-2YB@?INw)Q)k$3&1KEJKf3>oa_?TX&6+E^ zRvGd1pr2`iHEp6|QHV7g$=3`-iy7@TutK=VTycK!A#? zLTALqXnZKK5guQYz(+jJWwHo{X*nc3H*=Pl@PdfqYR(Y2;QnTrr0x)ljAz~NmI*y? zIBRHKCXI0p_$?IBKTlFBHHr?F_LGtDYQ7g05_Q!NL_)V`|vDRa+~s0=iXh;l4g zHYy%1+0#0X*=1;YrDbL{g$+(8@4q6HYc&5nr_v5xRuJ;D_gCwR}%~H9osG*ld!}>sJ=^+O;j;Coq8Lnp|XW51@*E)W|}c9 zdJn5M`;h#L9#ID8WrsU2Rl=EL3>2Y|Oo)L$lqbuSkZAo?|W3efseF;5k_SX6b|h&6e>5=pn9HTEGd zbgEl-7;g`Kc_8s4hD=~>Cs-Iy1|4$*1H`zn0B+nR(_Tj&mIAz9b5#u!&9 zi0YrCR`dOD=#YvzKRXhxxu6Yjr*-2doc1@6&>9s|czT*SeQ@YPVbqrBa^nlesea;; z#){Nm7q}x-DPgNPA)|9#7z6H+HJ$C>hFT1HytQ#SSfjrZAKS)HG@h^`C0qjRMh>G< z!W~04Fsku6^ZoojA+Q`GXReW$TW)|DN9zRI<+@cgMVC<&)9!ekBg3pF(a>2ZI6hMk4-k4Ghi@#O6Iph{kNAb4#3&~SP@7IJynPQ&Czt@;K$~dZ zgp@dDR2Im3V6dRhZBs-nKXnryf46{r8cv6^?>}_5R~v7PRn$r6(Ko#kaI7a%d|Bt8 zSnI!a+xG*9K^fDEC!}uocFf@U8~rK51C#JDb*S|G8&vUj=a&>;IcBxULb~&}<<^Rrm?~Jn}cbaG~xG&YFn zPleM#XOQB0Nm3i(z1p?#WVs#jlN`R^QDYpxSiiV={$_o^*c%A=Ae{AlYn~VSyKU@Y z6)Giq$5D)j7$NXFbs*hVI4PJ z=mc)nE9utVs_$oXE;b^K^B^ZIbUDEOQJpaDHf&sWdxyZej?|rCk5$n*-yX7a0s6 z%BUl=%`LD(^Gva@9i3eO9U`5jI6wYbZS+3DFNrmCV_9%6vXkhA%s#x{Y(6Meuhc3b zLMq?~Tb7t|PLf1jse|UP3|UrIWBq0}aj_$LZC0<@V!hY3bd^Jl^v_=@x)fyzi+D~? zj5=ODYn0P>n)O$8nV5yjH7eGdd3lRBwtj4=9@9kQYc$l~i9{W~DX5!P*kfTU=5#n! zqRU=l#D=Z2)byuW+o6_fvgM}wIHCJ5&o<$sX-2*Lnq>svos&<6552YUmA1(PDNE}c z>oAQ-)P60>ZxxPP+b_Oc`v|=m;r(1?Y?M-kK~LUO+!UEa-uwibqEyTh1NQt%Lzm@= zkP$t3-x|pZCs@|%<@KpDLyMwSX&SGUTUSnhQRdB2cuo$D$oJ|piq;s*2)w26A2V+hd5cvAR2 z-CYq&T_v7dU!qj28WNE=WO}x_4PnQZH&@FnEW`QY5k($Tf)P|_?*cBhA98~v-1KI` z*ICULoxJG7NP4%eJB_-`nQCeMlGY{cwOQY{@@}hQf>!4lC>KT}A>E{dx8bF!U?Sp; z#j}BLj>-J;uDfo%d&KrofOYOQP?7t)<8n(vcU5#YFioIS{)L`%DxHsz%v45%F?ySR zT{cTaP0MssPBm!Y243J}I60?_?`4Y-y$>JMk;a)QcXENoP2m^U;1XvY(Ki;K=)Hhp10hGSOX~)(G<3NL$l}r{P${ z+Kn{d3A1o4qvr@;4p)=;hmT1?sy)J*x2AMeS^1mUpSP42xj$wG0`>8!Z?0%AIo_tx_p|L@Is~DsqgmvcM?u)6KFI(N2ug|akT=&7H-kU-V2gM zR+`Yk7(vYKN$#`BvhGi;KW|GdPZIZCvE-XtV=^k=NXNQ3kLJg9o7H^%q!&HpVqIG9 zHu!s3RpiVEOTCrpwT4icBeB)5f+8ExaiyU5)^p=(IG-Sau$31+%`Yv4lQ-C3sP*-s zRFk85-;O}7*-fZ)&27Ha8n0MJ!0&#kV)L2uuyeSTIsvNQ8WHxY2rmy??SweQ8EwC3 zI}oHHHO=DRw za!s&3l#G@06OE7hbSD;e;yC$eRg`-qCVs|KI?j*C7(q^i#99mch|fm}?oi=w#~l8XcQC#jE#RR}&7R(zS6gQb@9Gs}NQ$ol&ZAqngb_x1U?6 ze?@qlci}EYGUc!6V;|b^>Jo0Y2J5T@cS(8rgXdIm#%uF~MO7xM-1OD!;M zQT_PvRFG$tj+zT^s@^2Mk*Zfi?DhoW4FBX;{Ng8#(+o3`^YN0+Q-rTR;T@|%C+IxI zf-XD=Q^5_U%VE+2Jhg_}EC= z6v(b{MtNuYQ9yYuXy#KU?G}{6kUJzG?sL$yl=W-F(ql?ecsE0M94aK5`Cjd@*EJ^a z!Smhnt|8DRRGHywmhKbOkt>vYe7+Zl`!(6y)8o543-cVu#RUzasz zyYp^Sb@uld_j3t79r4K%8F4`bM}-Nq*cXI|Q58P3VvCP+vxV^XiQ`QuQc25_c82lNEzbwW7kxL*(w%zw3+ z|1zw-MyS0e54jAa43Gq%9l671*o0Sh;T@JNEF7$Pody{;{v^>JUoP@3aaw-tt{MUtGtDt4@tE*fq}ZB>F#rPm`NS>vjcztYL#wg9SJSae z6bLA|X(s=0XT^IxapEYM2RhqhOXuex>AvSLo)bp;4a^H2f2V|=f<h7NA=OT!*0d=amVz`N-WuLad~3I$VyBKbJH4P>I^@1i zFk``T2&#cUs9V~PLQ@DJ3gLxc48#q9;!Xrk5gZ{R$5V4+ykJA19)3E0OO(55^Xi%) z1LbQLB1*Pm4XqTk9Z~vT#8mDfmuxSm>sx31R6C}y8~lyi+aJbf=tDcZ6eEK6Wp>O@ z+=^^Rf@ugAJyJ9I8E(T-Qe{{ z@c#Y0bsaasErF4_pMo+`!?#|oM_NXc9OCUHX9s$^7s zSQI6FjohNwBP3_KBX?#dEU@{slTyip@x9j<6iI8viv`8|L>i|`4k(+sX4K|s*thV# zuq@t{Q6zCf=#v$Bfw1;Q_#?{JGW*o#9^+rTB@WM@D`10Xb$ow5^;}_-mE+TXu)%3D;mPdN2&O?Q>PZ7dzUtyt;>q&tCM1X{v!C%m>ew`K3V=yB*A@Z<7N zL^D_twpBuv%eD&QBVr4_2BL=wO1wb|D$PZ{X`N^$2y#C&4gKWg$7ULL zkvSPm_6_Qj|19d_K9Ky`(7^P(ANT#clBw~Jk->2dTe{U-wAEHr^S_>8o*IZnuqO16 ztQv}j+r31{85#}bZ$7mZQ~nL0`5ZGin=?@a(hV86L>{fGq3sFMOgzazx8FFEeu+bs zV;TBQNTS&^s?9|tD+B8~goxbtm|WHdwhz%$jpsqR6biE?s$R!RCH}HwS+g}rj#K`E zwfN0e*0s-~@ALfAr0|1HHgvts9W4|N`wzWQ4SQc8k<>r4L_zhb=dPb)pRKB@h^Z7{ zN;R4(R{A!CC97?CV4zC)c@jgb^c3AF!RUc+b4Zr;H1)o;pso~mF%)4$p;P)p#M-eEf3@jAeg_)261~H^WP$1J0US%ArA%Mt zVyj(zN+frd!r*hb~=_aWG~h! zDx4gtO4>f04T{C>HEO+4}El1u=LT@3qNQHliP(zS-d6kEvF`9c0*f`=jz9WAr!cXp5bcUvcHT6!8F`N?9bj z7v#~Fvyv#im_wz>wQ|P~syKP6&usN~MULvd#@T2(Exx~mb}<<2bn0$C2apWEMt@;J za^!P*G8|zV<6h}8Cy5CWD_JtF68jP)IktRAcf@|F>1!(%PC9^MEPeZA8oqxQJIOP| zeS5ja>{AXRx3!N(*#3n{*#2+PjdbS~HXidZgFReE$(;YYS@UPS{XZpvxp3jDe= zp8azpKE4JcDQA%k8W5;+p7M}AqTa zF($=poNfH(y8L~3$Oo6{0;H*lK_N= zE%~O!Ur0fBlU>HaSIgNCa{~{%8_@eJyx;o+&ySmef9p~WG#59h{PgO1x8$xHk9F{WN1W*m%vz82#d=u7YVjoQTP&mb5H>^eA5lf>RT$yC^vEF2C zG=U)4keP}mOw0UBxe2dAqnP7N>TFo$iPc*+?U=bA@1cHUIB-0Noc z3bI!f-{wS-VHnonapZz?3QOjou&FH~lq8IY6aC-JDGs`BNL=l}K8SZA>6+qVol zU^l=x)+A%t2G|?e3Ijv%=8O|kUlcYnl13QNh>*u1j~F#s@f~#gE=8i<<=OYe$}TQe zrRChKfY-8;YB~$ZTJC!__nv9LD zRuD|qsb+FDra0FVrF3pgty)F&%WD|qt*5q%@`85zW>PGzR69D8ltDi(ex;0V(3_ES zu1E=sZE|0dWI!3C9*RXR7Fm!%U^C|YOh8t*zv=1o3h#sPyEika^~U*``E{mu3$(<5 zg(O7@s%;#4GA(}11aqr{52telu*6Ux_}R3++fsxudSS59FYE0jEpbj=13S6CY%|7B z(pe~#w0Xq5b?hu8pmJdeZ+%K~=*4Ae^~wnj8Y>N#rt1)1&c%ZrOuW61Q-PI&^qSr4@E4Gg@vZBe}yKwRW|^8pB_ zvj_;yWjYr7wK^mHQ0SfFjPL7||8&NNoX8l8VM?)BW$*#9C<7YYhYqq0=r|2P#QH1!LF4ey0CqHN6`sMg|nx}{tN$=YEmVK=q9MPDi^62ad5-g^Rb92(qT}Fu%Y|-Y z&0J{x`q{{x_F_iE6hZS3{aKBJgBVk9mMWdlAC!wm1W}NHh3{W&lF};8!;1;%XiLAE zxG1nH6BDu_X4^cK0&lpOdMh_%vJ?06q8~LS`lLT%Ew zt-ZKka$I4PyeGg>rapHjY8+~pHk&>jc4=#rP2tmOpe-b{nT^C!Ze6I|gV$^oc3RoV{EYz3(5Y9+ zghx)+Hera<9gi~Kk1m;rQ7nvA6&eVdM*)@i3ui7w1u=?6sB4aowCl1@@AI8Fn7HMm zwW)eqVL8ksXVnkKdut2RTdo@gF7?G+MKf#e@op91@=V4_g9G~N`;uEUc2%cr)*Vfx z_Z4?Dd%TVBe|*rBHPWkb;I?jNUha9%B203NHun1!joi-e8^P&_tIR1neQ2o^70;H^ z$DuyE6Cv&D;$V*$6Q`kplX&Kw_@63YS#QBnD^xXUz7k>%UrJQ28-_lbxpHpGX^YY2 zFu-S=3We_fI)#LtqR=}G5k=H2(Lblv%s92Vj${^a8aMm+IoUYW^%g1RV-8k1G?Te` zn43FM9C;Y>UR(~-;MJ@`bqQCP-{~dk zI?*{04@wr3rw$N|(G>^E2VH~|52<=2vptKJ$mpfeYZx9|*luebO`00+5hYOTRZSyk zF38H#8>S8Y&8+0tS~L33q(-hxW{bq09l zmoIPZN9NXyQYva<6oW|`y?1Qlv>da3s(+dCIP5EMYZ&sXy&L~fz~|DP)(d-1rP3qt zbroNE*Mc5vzF6Z@=$oNUO7|!lyrzJqBw8;;LB%X*;elXococGR0Ry&jy~c(<v#65(3@qxluwBWCLT4a%{V4 zZ)Vj{_>FrBF*x+K=bBidnf{vJa=8mUQ7PRz(dzjwuXQu_#*_dZ!+~ zwI7}F#Q4)E_%3E3G_veyQCoE+VW8iu4=FZu2LeYGnWU_?vHG zjWKWYJeAaD&p)c+%D=~^lE!t#^x~J%H$M0=x^He*@{;+vp#Q6EgDLEk{5((YKtU$m zKJ+9}seDY+$gfZ2&|gKcbr9C26baBF`@g>+xI1A?{rxFYe8uxUKZo*ICcwKhIt={U zz907cRh?qyg8+rL>kGN8C|+fUjc=flKjcpfAow|d58>#3%YksJd=)>MkdtyDtrSP? z^io_j=s4B?c6GytzcWT`6P^F%*Rv1l^GF{WDzU7ThHp8W8rWXDqeLI|hD?P9ec9RR zyEhn_FJ!4HnbKcnJ)`VE;z8?xe3C6f;#yN<_Y}L)taX6asQV+C<*g28>Z)n!fwXV9 z8nHsJr!g)3Q!bGs`FF+@%x%SOb+21mCxEVfv5~y?9uzde2VNIHyfovCu66|8;i#J9 zk4e;Uvvzvy@GUT znf^$@hfqUJlVD;y)I-U-Ayy8tXa+-tRknfXp$srS#A_Ecx zqHo^$Q^OxS4`n}Nf7U`JaIC4&K`k6wc|C91Hb#gZ_Pr>r$Bxwlhta-`6YT&w7omji z4Z*v7!YuSkVg#00Z0A;ivG||1sYe!v7uXA|#JJFa-H#RTHu>7!&7zKQ)}O!VulWKh zi#L|k7aa-4;%9n0F729j(9phg?jJ}NH-QBoOtq>{I6wZmpy9K0I!{u;nd(#usmBMw z?dm|bj#Fy=)?ZZ0t$tjmE3#b@Ij?05=R~lDVy9O^pG&)cgQH+a*YJO!NPF-3o-Mfu zdP%fTf(VN9FmmVDe7Ymvrjj)O(5lL7FmMWdk1IMai`YVW|A84J=-Rw?EZ14% z!GwE5r&u2cZy%lUREf4Nw%zyTl-yx9=IXC=HTC6UkL?Y?M3qMJFCqpGoNG+0DCAyV zKxTw9rTis@E z?$^+-@~jx@HfoY;uidfq2yKZr*~&+rewnpzN5dOd>~os29x_^taxa2>j2@MuDtKr& zyQ;Vg{S9`!+~(BD5tYzY#h?0;vdM)}=%q+p&Xql$Ddf*O;IhTc*k^a&W#D`lsN=RxlBNq;96d$Zsl89kw(NNW2LRhINi z5c>4Jn!-Wv9xq{9CXXcm zAp8*BAxxq0`f4d~iH@`E?*a9^5MH#K zUe%FNUDKw~EC3j3n7bUV$`B$lgb}lSxMVS&h#r>S#W|#WFNAx>L0YEk3Odi;B86Vq zCVm}ic(zQ_#5Ae#+$b13=C0~!AhhF)gF%|av{~Nvc$-s3R!DwY6sE?ViS5tyO|_a}60-En2tT&F|oew?4W-X7b4-Yi1t|D^m#jw51ye#><6>{^ymmXu!{-}siJ05AwL^_*kr!EQCpI1E@oNQdzXLl+cniU=NXcr`1OQ>^k+<#l zMz&Gc)kTOOS{|f|_ZatQoW3t|`;dlzj6~{|SOB*BOokEy~QuqUPjMw_@3gkPv{WP^~)f7k8EF7JC zgmt4YMm@t$+gfJ2I#GT?w#PZ3PH7H!PS?ch@EmJ4Vtmxki+yIfmZiJ&C@Ho3Uiyl& zlSr+|vini>zM0XF>>Q5dzA`p!BZ82yDqQvnCKsQY5#PCzWWPapQpo(09xdwg0Ni*t z<_R66Rh@CaUA(_fMpSFkuKlpA{DHtKYh_0Kj-tL2tHTbfXIy5O`-Q`As2VGSsWBa- z7hb+FPU%2_MbPjk8S^XkVp@4dp5qdYuRWe+$v<1x^~YKrM4g_iwDw5M2_w|R>~#H% zMp5iJ^zzL;KsF+|a=Bgud$YVk*|%hUebGuEH|w+|O=(;vs%NG`S)ov!mm%^?!O3xZ_(#OxiucVbFU8Rw4)KdSHzEpB7>?2lqXah};NFTI zg^L}*!~Q|dVn+ykTVThKdlkTE2J8%Cp+X^C3NMkeo#OnSPGl2Qy(OP?DhrWYJRGY!ls zM!O6(l5@~gY$7izpP0iwU`xc@tT)u3{b7HU5uZsUFe>+(F)0a^TfU5RZT5GiB;};7 zr>2=CKHnVdGE9VTpr;dOD$4I#fwzW3P!~dq$A_~dY_SlE@Z0mx_G2j9E0dLqBV@Z? zS#a&{>)IXcGD=O;&M?yKqlUiH*wN3(Og5TnvMp!3Oh#H(K}R>Ae{I4D(Mtx5K)kGt z^n&6-B8`1G>#EH?%n{e(`X9M@I0LwA@i&Q5t~hI7y~z!cL|+fc#SDt)FGX~sLX3^R zTTg87TbjW|qAe-*DHzy$<(S0CYH%xb8JO%8%{E(|QeFKH}%s`Hu&PDaI z3$Mv}xH@;KEm+9Ifel@1YFcKxHj39PstNc|bT9NJ0?2v1f;mg+lhP-M5p}QgAtUS7 z<`cG{4_CG2mTxN7y9**os+G{Sb!8oJo;F~1F$6MNAF)u1ehO!aRKZ@ zFqrJ0tJkmv`~(3GPW?Z=U~S=RejwoxZ1#^9`TtyV{U5C-i+`Q|xdclBs2#z&*>Lce zLjsPEz+fQz2+Rq>yZCQX5;T7exKqLt01C%23*?(e5OE9^LWqRG16)Y(w7?Ebgussa z55fob(BRR4ooz5SAbkQRMF121VAQRLHl9=*BO`?fSkcnp%(uGbV1)_{n#@QA?Z6)ex4b65suhX2ZN zfssovA)tH#qu-c6(h8RFc#qoUe`ra&M;gfiM#G|_0<}NDhycnZOt$diQI_oiPycA* z_lG|B`Ijd86Mz$;3Hr!TUV-I7`cXj64VVB3yn-e7?jJw`bYFq_LDorsBqTrw0FMl? zrohsC_Y>A@{%bHP=y%G$GF%|&8fJQz_Ai433|_-lL`vQxgMR}S1U)Hy1a>zt&qXzV zfEtLi4xo7elL4r=Fb8&j!IKZL3Cj8nixhARi)7mPsPoVZj|#Nkg84u|>whuCcd*)= z@A#L&00Qp7JRq^2e;H!n4iSR>&pHP}hT#9ZqV~T$YE=zAhC~N6?!lBGm!(IVeFYv1 zI9&hFAeZ06x}*C2QHHq&j}4?9gJF)hU?t$a`9F?V)*rQUHesFqQ_6tWZ-33TyKOAW+4fS-Y~ky1DztbiK|2;oAW{IE3xo)`!b4aP)c=d31dc(Fze{LE>z%f6F1`q+kEOiC{+Znkq=x=I568~eFC-&cJ-$4)&P`o(cjtn6K z1P~xBpn<<27y%*y(vy6YEFwUJKxA@{U`ZZ?3%FpzdiGBVKLVf-&G2U30hFTe*l5h0wQ_kMpE z4nTwgwzK3R!u;&~!*Byfh!6n~IPi~{8|VxGApsUh5N=TFtN&ugkRZGujF3MJ44O@fn`*PHbQs{2w-moF#?8Yu$fWp2LZrSqF|4cgz z!iM}`>H!-90qU_K0th0?|3`@+5UKw~8aS}x2zv7u34|bE0<}0Wr)ydNP~?A(DJ%%2 z+5aH!$ErWZfFJ_)xUivP&i|{mUx0x9D9l}l?YrIo2y6Z$tcCRp8xQ8Ev+n;WOd$RP z0wUl7<3XS%U=0tJaN{2!{0}e%m9+jLDF9P^h%iX0^HBr68v*Oj(#8g6@L_W_yZ)CZ zfGvWS?ME<90Ko*_?ZSeF6Ttk1?EOnCfyfU21sH$~A#BcsZUGA-2q6$n2-9`?3&sc` z;vkc|M+xz7SaM6m|Je~_iC}?+@Bhej;Kc!RA_x&MN(3wCsE0>=YGPPvK;eK%GMHO8 zVwfi@_(wp606UJsJh6cEKz|rUfSm*e(*A;1BoI-M1M;J!gA{@Uh@!#_3~>Kb$=-P2 z|K8|UaQ;`cD!IDT8e^fA+g#9d9A^%T; zjelf{ntx;-AS<0eEf3&J4jZcihev}6a#$_E`5z%Zpg;x7Wu@W~q*Z~jfHV}? zls8eqI@VtKNN-cY3=C=?0XH>78uYB`5kyf#q(C&E9>HQK81GO0|E>7&&;K)mN4<|) zWuL(qK*l|6qtT{;#b6qIq~Fp&NFL98a{tiZr+{`E2oDH64V=)xMu2@9V5Nmn@&5nL wi2m=8VLA=||C}EIVzjWC*O&zyX(8h9$v`>G5oQNm2b{k&9Nh7DFwFk{0lEW`&;S4c diff --git a/bin/bftsmart/communication/client/netty/NettyClientServerCommunicationSystemServerSide$2.class b/bin/bftsmart/communication/client/netty/NettyClientServerCommunicationSystemServerSide$2.class index e97267481951a5d21c6d9c1ba794dfa00b3e01fe..cef23c60e11f5ae9d2a6b20c443ca19cc782b68f 100644 GIT binary patch delta 79 zcmX>ibwp~z3~ok;$uqhC+PW|(GP*G+GrBXVGkP+ZF#0f9G5RyuGWs&uG5Rt1F$OXu jGX^oFGX^u{ForOcGlnrVF-9^>VvJ?j%$P9wGEX4@*x(V+ delta 79 zcmX>ibwp~z3~olt$uqhC+S)QGGTJjJGdeJ+GdeMtFuF2WF?ulAGP*I?F}gGOF?um1 jGkP;?jLhcx%YnO-0z-yW@dfW>IJbket+^= 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 diff --git a/bin/bftsmart/communication/server/ServersCommunicationLayer$PendingConnection.class b/bin/bftsmart/communication/server/ServersCommunicationLayer$PendingConnection.class index 8f3b2387ed7591c7f2689ca5e753ddc6e8f5c5cb..dbf0d768a8c6ed58713ca658df35a0a4f6de504d 100644 GIT binary patch delta 25 gcmZ3%wt{WLMJC>G22REZ20q3}24Tji$@iGN09Km@IRF3v delta 25 gcmZ3%wt{WLMJ8Tz22Mr`20lhh24P04$@iGN08twSxc~qF diff --git a/bin/bftsmart/communication/server/ServersCommunicationLayer.class b/bin/bftsmart/communication/server/ServersCommunicationLayer.class index f27729bc5d62e6fe7982b970770a808b1db531e5..a0b0500df4d84333047a6b04f4b500991213dd51 100644 GIT binary patch delta 5140 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 delta 4500 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 diff --git a/config/system.config b/config/system.config index 5a18ed99..31405860 100644 --- a/config/system.config +++ b/config/system.config @@ -27,9 +27,10 @@ system.communication.useSenderThread = true #and benchmarks, but must not be used in production systems. system.communication.defaultkeys = true -#IP address this replica should use when binding Netty's server bootstrap. If this parameter does not have a valid ip address, -#the replica will fetch the host address on its own -system.communication.nettybindaddress = auto +#IP address this replica should bind to. If this parameter does not have a valid ip address, +#the replica will fetch the host address on its own. If config/hosts.config specifies the +#loopback address for the host machine, this parameter is overriden by that +system.communication.bindaddress = auto ############################################ ### Replication Algorithm Configurations ### diff --git a/src/bftsmart/communication/client/netty/NettyClientServerCommunicationSystemServerSide.java b/src/bftsmart/communication/client/netty/NettyClientServerCommunicationSystemServerSide.java index e056870e..55f44d79 100644 --- a/src/bftsmart/communication/client/netty/NettyClientServerCommunicationSystemServerSide.java +++ b/src/bftsmart/communication/client/netty/NettyClientServerCommunicationSystemServerSide.java @@ -110,13 +110,19 @@ public class NettyClientServerCommunicationSystemServerSide extends SimpleChanne }) .childOption(ChannelOption.SO_KEEPALIVE, true).childOption(ChannelOption.TCP_NODELAY, true); String myAddress; - if (controller.getStaticConf().getNettyBindAddress().equals("")) { + String confAddress = + controller.getStaticConf().getRemoteAddress(controller.getStaticConf().getProcessId()).getAddress().getHostAddress(); + + if (InetAddress.getLoopbackAddress().getHostAddress().equals(confAddress)) { - myAddress = InetAddress.getLocalHost().getHostAddress(); + myAddress = InetAddress.getLoopbackAddress().getHostAddress(); - String confAddress = - controller.getStaticConf().getRemoteAddress(controller.getStaticConf().getProcessId()).getAddress().getHostAddress(); + } + + else if (controller.getStaticConf().getBindAddress().equals("")) { + myAddress = InetAddress.getLocalHost().getHostAddress(); + //If Netty binds to the loopback address, clients will not be able to connect to replicas. //To solve that issue, we bind to the address supplied in config/hosts.config instead. if (InetAddress.getLoopbackAddress().getHostAddress().equals(myAddress) && !myAddress.equals(confAddress)) { @@ -127,11 +133,12 @@ public class NettyClientServerCommunicationSystemServerSide extends SimpleChanne } else { - myAddress = controller.getStaticConf().getNettyBindAddress(); + myAddress = controller.getStaticConf().getBindAddress(); } + + int myPort = controller.getStaticConf().getPort(controller.getStaticConf().getProcessId()); - ChannelFuture f = b.bind(new InetSocketAddress(myAddress, - controller.getStaticConf().getPort(controller.getStaticConf().getProcessId()))).sync(); + ChannelFuture f = b.bind(new InetSocketAddress(myAddress, myPort)).sync(); System.out.println("-- ID = " + controller.getStaticConf().getProcessId()); System.out.println("-- N = " + controller.getCurrentViewN()); @@ -141,7 +148,7 @@ public class NettyClientServerCommunicationSystemServerSide extends SimpleChanne System.out.println("-- maxBatch = " + controller.getStaticConf().getMaxBatchSize()); if (controller.getStaticConf().getUseMACs() == 1) System.out.println("-- Using MACs"); if(controller.getStaticConf().getUseSignatures() == 1) System.out.println("-- Using Signatures"); - System.out.println("-- Netty binded to host " + myAddress); + System.out.println("-- Binded replica to " + myAddress); //******* EDUARDO END **************// mainChannel = f.channel(); diff --git a/src/bftsmart/communication/server/ServersCommunicationLayer.java b/src/bftsmart/communication/server/ServersCommunicationLayer.java index de975302..e017319a 100644 --- a/src/bftsmart/communication/server/ServersCommunicationLayer.java +++ b/src/bftsmart/communication/server/ServersCommunicationLayer.java @@ -36,6 +36,7 @@ import java.util.logging.Logger; import bftsmart.communication.SystemMessage; import bftsmart.reconfiguration.ServerViewController; import bftsmart.tom.ServiceReplica; +import java.net.InetAddress; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; @@ -80,8 +81,39 @@ public class ServersCommunicationLayer extends Thread { } } - serverSocket = new ServerSocket(controller.getStaticConf().getServerToServerPort( - controller.getStaticConf().getProcessId())); + String myAddress; + String confAddress = + controller.getStaticConf().getRemoteAddress(controller.getStaticConf().getProcessId()).getAddress().getHostAddress(); + + if (InetAddress.getLoopbackAddress().getHostAddress().equals(confAddress)) { + + myAddress = InetAddress.getLoopbackAddress().getHostAddress(); + + } + + else if (controller.getStaticConf().getBindAddress().equals("")) { + + myAddress = InetAddress.getLocalHost().getHostAddress(); + + //If the replica binds to the loopback address, clients will not be able to connect to replicas. + //To solve that issue, we bind to the address supplied in config/hosts.config instead. + if (InetAddress.getLoopbackAddress().getHostAddress().equals(myAddress) && !myAddress.equals(confAddress)) { + + myAddress = confAddress; + } + + + } else { + + myAddress = controller.getStaticConf().getBindAddress(); + } + + int myPort = controller.getStaticConf().getServerToServerPort(controller.getStaticConf().getProcessId()); + + serverSocket = new ServerSocket(myPort, 50, InetAddress.getByName(myAddress)); + + /*serverSocket = new ServerSocket(controller.getStaticConf().getServerToServerPort( + controller.getStaticConf().getProcessId()));*/ SecretKeyFactory fac = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); PBEKeySpec spec = new PBEKeySpec(PASSWORD.toCharArray()); diff --git a/src/bftsmart/reconfiguration/util/TOMConfiguration.java b/src/bftsmart/reconfiguration/util/TOMConfiguration.java index 2582312a..0b008aad 100644 --- a/src/bftsmart/reconfiguration/util/TOMConfiguration.java +++ b/src/bftsmart/reconfiguration/util/TOMConfiguration.java @@ -59,7 +59,7 @@ public class TOMConfiguration extends Configuration { private int numRepliers; private int numNettyWorkers; private boolean sameBatchSize; - private String nettyBindAddress; + private String bindAddress; /** Creates a new instance of TOMConfiguration */ public TOMConfiguration(int processId) { @@ -334,14 +334,14 @@ public class TOMConfiguration extends Configuration { numNettyWorkers = Integer.parseInt(s); } - s = (String) configs.remove("system.communication.nettybindaddress"); + s = (String) configs.remove("system.communication.bindaddress"); Pattern pattern = Pattern.compile("^(([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"); if (s == null || !pattern.matcher(s).matches()) { - nettyBindAddress = ""; + bindAddress = ""; } else { - nettyBindAddress = s; + bindAddress = s; } s = (String) configs.remove("system.samebatchsize"); @@ -550,7 +550,7 @@ public class TOMConfiguration extends Configuration { return sameBatchSize; } - public String getNettyBindAddress() { - return nettyBindAddress; + public String getBindAddress() { + return bindAddress; } } -- GitLab