From 02cf8dfcafb7380cda35beaa2aad783ffea87fa3 Mon Sep 17 00:00:00 2001 From: Timo Tietavainen Date: Fri, 20 Dec 2019 10:52:49 +0200 Subject: [PATCH] Add SDL developer and user guides Add the first versions of SDL Developer and User guides, which will be published on the ORAN SC documentation page (under RIC project): https://docs.o-ran-sc.org. Signed-off-by: Timo Tietavainen Change-Id: Ic23568b44a1560ba59a5466aef2993f95d723894 --- docs/_static/backend_data_storage.png | Bin 0 -> 10892 bytes docs/_static/sdl_intro.png | Bin 0 -> 49030 bytes docs/_static/sdl_namespaces.png | Bin 0 -> 25219 bytes docs/_static/simple_notifications.png | Bin 0 -> 58439 bytes docs/developer-guide.rst | 300 ++++++++++++++++++++ docs/index.rst | 2 + docs/release-notes.rst | 2 +- docs/user-guide.rst | 519 ++++++++++++++++++++++++++++++++++ include/sdl/asyncstorage.hpp | 2 +- include/sdl/syncstorage.hpp | 2 +- 10 files changed, 824 insertions(+), 3 deletions(-) create mode 100644 docs/_static/backend_data_storage.png create mode 100644 docs/_static/sdl_intro.png create mode 100644 docs/_static/sdl_namespaces.png create mode 100644 docs/_static/simple_notifications.png create mode 100644 docs/developer-guide.rst create mode 100644 docs/user-guide.rst diff --git a/docs/_static/backend_data_storage.png b/docs/_static/backend_data_storage.png new file mode 100644 index 0000000000000000000000000000000000000000..e01a3116eecd66f71a7247f43c75b1d60bddd611 GIT binary patch literal 10892 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 literal 0 HcmV?d00001 diff --git a/docs/_static/simple_notifications.png b/docs/_static/simple_notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..3d5f8120ca0770ef7147d477f427c5e3529071c8 GIT binary patch literal 58439 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� zFvVDibV!iME7+It*M%7{lzq|cKqox`mswJ4J=gxYnbx%(LDMUN5&r1CHX7aK#zRZ! zkL(sk-tz^QaR3QT@BKQt*l?H^RxUYshpxg7`i|HWOfypGzf20Vbk|QjXFfjqSd~|p zKbs|Pumj1}W7|$6L%Mcvg*_Q`5AXVOGMUlEy{BsG&Up4^OTNgtK=esK!WRP@{vZNL z7~(*$b5!e(*@7s|Kt6nYY^RW8WpuT#w!LjKahWK@RzUlHWNPq3{(nn>z)pqu4dRV$ zXPO3s1Y1J(-i}EN!l`Gr&)u^rgLS3BO}_f`vH6k)UspDGl0Y%%=LY-T@?$xogkE^Q z{-;A6i!B|?@%MM{$aw{Iwou%n3^S>LgW5(f!s`4vwPYMA6=6)RVIN7JH+q^}1f(xI zi7sK3IE~3K5h9=UXgXw&Nu6moIm6xylzb&mo0u3YKLbE@74n#yWsP1_n*TC5`5-El z3rFdggGcvcUH6o^i`Tj(5YX}})0WTAWX}mIr3#>lMK+CT!@l#y*QRM9$@dPjym-`0 zz-H1?rgI*c0733!`M0-6m7_3mS;saCR7*hUk6X<9*sqdxTUb+VK9S)3xT4rp3l{yK zd3hfsTo{ptd#30c0`bP3;Gh3?iC5)0KI0z4G+B|v;b^V{*jG8rgY{%Gyd z^F}5%Ww?bjSDbwLzHkO6Cnx9e(p(W(to8dpCJ9q#$oU<6GczU7C72Aw!@`IwwY)q( ze5YlGE|~j|t*@`kG1K)i{wlugoY>mlh>5zj_rJ!pD~<8@G2`!gToGb&!2o>~F}xb( zh+dtDwOcBPUp{8&&w6?a>gpaPX~`S!#4zD~^k^;)BI!m^ zrQzdy*sg;W&F@ z)01qPaFwH~WV{FZ?P=+oqSlh2Z2o>;_YzV9CCmATZC|+TlxCZN1R%HSH@fu|g6zFc zjWr|4OUJezh6V(&2C^);kamjboi0FyT$bnM~sI+?9$QrrLoEFXCToAT(}{$vmV}u=~#y|{I0Q|hnTE~ zf8evB4Zq8y`PaOrCc4(o7nDf0ua)X9S);dAhqq^m&;GjRFlw(B{VWV#1CKxCQ~nZH z_pQbqp)NNVRhQEBu&~t8^aLrlx?{aWi@vyCWzVyKEwN-1B7n{u(ct6fK8iiSjCB0> zPwS-M=w1`4-}BUS+|M{59@FB#FTJ@r_=4ehE_XwthpnOCG`Ggvf8*bg()BdVrMKc2 zq$=~I`tbPuaDJ{=`-ID%dhqw@T_1-$A3y(HGuc!61(bR8(ur;K)iM)*)-2a)-gDp2 zWL)#JsI=>g;5@rxcLTJozI%2oXw{U|W960qAJn_Gpmkk!2Uzv#((N|WVAMVq3p=~r zX6BBMdUi}qY1Soa9ECpHFyI<*vj445MqDK0gv@u=gn~2|bU_gwM1s4HNxmPp%ZBnH z-pzrwzn8O%=_QwykJB!y@-!LBrCr(Jt*CQytdM6Y|7jR0QTgM6a`j?<(y_Jued6II zH{;0n=K9)ensX(GFYz-1av+S7oTLk$jWPf8Lc|tNZB9B*({%QH?bff4NCTHlu%7}5 zzvDr2_E)6aR!3G>uKC!zgs)vT<6-EKj!mwgy!H?XJigC926iIHjx#|Sk7!sr? z=uv7tf;0p?wRR6?)6xIh8fG<)9Kia8U3y&s zyo}iD1aifcfY*>Xf#$m?8i~28>LK8%k!GSSk*Y|-Ojr8srz{5z9>l-68#+&S=JTx7 zU=ZO*-gPPSr4Dh-woG%Is02q za*2Mchyj|tu|y~D-B~(d<3(6L&HBbaxMDI#$D#szbdhgL_U} z$Mm{+o66LaP1xPFkP{(nW#mbCs~&OMUq=5k%;fm@Z|_1W87fo?3;c(TwS}Xg$@MQ% zM02`a=t?*i7W?__YvJy+QWF7jmMI9Md1@%-zfrAk5_2p|kHzp>HQ%H%e(yCBa((-| zjx7@%In21Da|6aV7&hAtySXYIlrZE=*SX~QkxJ}dIjFi9ulxR@-6mdZUPhTKX&u27|fIT$?+Q{Fr zPx3fW({-nGPjhoPd0RM*vDZxcs^SVIIemlt3xZe{YH85A(*icM`@clN1>X+^mj_n+ z7$K&ibf5-G=R|(WYoSeQ{#D`VScyid$Z}nCp^bJ#$g@~i7+u= zY=sUWjAp3!YG+|Mb~GY3SJ)gz4#T(z!oyVrB;ZL5vJJhw`6qzgG`<-OY>nI%nZZH2 z>@_l$_i%`iE&BSu=0pY5M93zpn8w5S`&~JDg(ESTw3T1o2B+DG@yWQc#3!326=tj~ zI7Mq&C}@OB_jg+({8A9$N+HHw#2 z!~_1l{VOo|#^W}F5g%RagKS-y{r=8X3?dMJH*=9~q%>bAr5%Ztrg%ISll;OqZg&8- zc2(B#VFRSI_JY5~RU#EC4m?f_P$y~@qQ;E6kLnzLbOz@%jwQb{OH9UH^|@gQ{G1%@ zdSo-NCn-`LRVhbQUNAMo|I3=lif-6FDZ_B9xY3&cA7yHhcPL>?7m~zQW6y{5k>ee7 z%pId}&T_uvf#*tIP>yK~3`F^{fAoa*(AUv^f$vt45Sdu{r`u?>k^GZ%VAiG&ca}R@ zVVUoGcGnFD-s>Rp_@t!19QW1X?rxZs6~QgRA`U$K0$OFY)Dbv$-2w2+2Va-U5Wijv zI1c|vqIC2ZPxKE4b2?K(l2qcaerKq|$VJdyj4>x0}A`? zDPpwOjNA-)(j_CG!lrvu1qYGC6w;Do2C!`w|8(2?)nU~ug%^BB3JMspE3qg4$dUW8 zBIVy9iP3B_MTz?EA1FGDy@}TjL{iZuf6lsP>pm($EO1Zl?s3b%t0%Hp<*isC{kt#q zK1%4FAHU{3U87U{`IQbsfhBw1PO~ObGmVKR-eR|aW^@KG(Ko+2(mEa0>UhTh3=e0P z8p~W7$PL)6EG_nX_;I#RYwg}mFhPIIT1hl}?>4T`ks&L6EKEU?+-z`r6Ya;%iQ5X~ zc|vUuVSE1wsA<478WV$uPKoonLx?Ft+Vp6}!J8lFi@d-qJ~8rB$%u@f!UqR0;fy!z zU`)2SI>3>R^~ltUd7+mprL7K_@PTD2rJt3RgN8Z$LYFO>bl^pJj{L&QgY5Ymp5cCJ zDUZ0^eST#BF@EQeP=y=s4#=^fGuD;y`#j&R}-KfY>cr_0JeqnHC$wYe8sA$$~k_&ZaI$FoCj;r@5p6jy(#LVv7G3rG4nI;)JJi99i5m2${#BJZ2_3$gO437d^f!bNHsN@qWb#6`VaeG{wSWt{+!6He}1Q?W;&9) zmAu`q+1cVX8my|;bAY}ES&`T%;<%Wsnl>cW&r-P2?{>^j8&jh8 zE?(c}L7O&FB_!aYKSN~5adsxUe0YIxVml32&a`>_Zf|K-RSr54cirZG#nAY;!klpt zuRB)op^&m8DPWsyP)!G?3HCo%uYtft00`?qg2^Al5sHf+&qG*+FQN)}#> z#J8sE9I}@sdfIXs5HpJ}=wbiu6YT1f`2oy=g}~Kkr%4RW#kpSZr3;sy? zJdMlV#SL;9aGgk0B-|b#R)d$d!RI|yi`AQngk$1GvOc*pAH)JWaZ|q+Y`rYT%6i!=7QJY%* zb}lQ!&*H4jL@y*DSHjWYXwR0+TlkmBatbr zi}o7M)z$SjEWGvQxyGP=VZd9;k_nOs`_B*F>jee^^R^Q8+imH$kxue`CNMLyx;mF8 z*CUcXjTw4wnikVZUc%e2iE3L`E~D6$_g>$_C1atekY%nPoCBwC!do2gD(i)Ql$YNI zC8!qPfBl#S;vA(TFq7lI=A4@RJ90EPN)2XCrXR@6u!I;dKm3%udzv^l8^WXJpAK8G z`lP0Ij|itB_Zp(qjrVokap^M-!pUc(8s@KkRum()l<#CGXP}}r(*`USe`K(@D&C4K zoxMRIcq2A+H4kPYfWby!bULvAoH?MxiP#wavDuIX#*FLLkd=-_i`0mx;(~8CX{#*6 z15=M(uI^3|3t-Ztwa)8uN_jE8!h`XzwB#r=@Il}WGrqih0G%IBODtKJNMI;jA&7EH zHSb4kB`Z?C{=&Mvypw{M)-7|{fRHDZZK6y{Q1LsSIRp~Pb6E1n82%G0I9C2dtNIY3 zX@OA>aH1j*X$UxChCMzUxjSX8!U}Umk^WQ|$mjsu#eIJ?lRa9*FAlUhg2GAG=L_ z!@?x6dB#J;WwRaAXnj|4;-423^cc5BI|e0E3;j&;cLjL^uFRCsz5F}-0cm_Rp4jy! zWWxa;?6a(~JLWe)YO7{$bsch6@qiB+&m2B z7&P1^z;Po-z(-!arxE z3YigMA4>O`?sEx|nc#nnhdp+|S6O#Rx~u=%a^(7X!9>JuTTouUAMFHhsQ?W^1$Mys zjnh%?Jn2@ZM}reZ*_hO{gR@@a9licJxJPnYI_}8gpfDKIpY%89AL$jr zg7^2(FLPu(RpMOonTnAN^c{D*+8uRPoC#8p99a3JPtx7%UKUSu5Xs~GFd14e%*y%z zRO3v;xoX{xwtF?Z);lw^iB8&;M6XmG2iP!_$~ARKV{2g;iD0*eK9eD`lCr8i`!#n0 z|FaZ&K=!@AAa3M^i6uQSyU5*wu@Flr=!j;`!FjmRNv@h$xMzs91+ZPjhgjCBCrhEy?lK)S1d^dM!-3I5@tEJ_so*p#87DQ~7Y=>3s3_ zk`J9*pA$8FETn)IR6oD3f6AxJ@m1?{ku*>Dj@X}U#kjxuua-oY7xdYPBmgra6YEA* zD%|Son=+&rdeme~)(OrOco&}AJSSLVi4V-o5B21T`FSxgW z2HvF@X3Tu|?un;nX0eKd&yqT_?GIs^T~)D${vjZHVFh*HXUKT%ZZgmO_0JgKj_7dL z`@x3ts5yw7+_LBo%*JW0!ebAu{1MzOoME+w##m8-+-H^XI-;gI5Rx`9#2k3#z9xPx zlI{xnb}kGjXFby3`6Sn@C^S#Q}bITtwB!N z(paxyQ1#_JWKCK@0F_PEXSi`5s@6gbh7M?xC4Us$R;oOsL2 zjo5Okos)O_5=ebcdl1*UJ}TiP4o^^rR?~iXd7R85w%#jjpiMenHEcTK@1b(0pZ9J_ z3C~;UT_&LVg)Ob8)1F44hL9f3x7hYNLnm{rGV>D$VT3&Y0p0KfvD%9cM|(8r19~&# z&O-e4bMnC^2J^|c{Ic*2P6T*S*7Le-j>ap>udi~^=qu*P$mh1YlMIawSOWBFO!xXz zw!Mfu+MZz+GTb&JATL*c+tcN|&g)2k#gpHmIwhC^5T3U%8hHN(T{x`SV768|RW zVNLH7onDMrzXoNf&5CpOi?1JjacIW($loO-=yEk5zO~z@59%#TICf?k>Zhag@0Za{ z^d%YYRE%zee?s{py?*KIVg$^&kd;RPRm@eEJwieArMsd(9Z>qQf3H6WJ3 z9=E3cm(91cBbP0hc63yJnX$T;W`eQki`EhwNJy(T?ZJWlLb6}Y95x)h2BjrN%bz=p zhoDv!wEtk~ZFfl8Fo=@o45uq%qI)9^Pik(kEZd4Bu~U7grc?DZ;sbD4^u1?_$g8%} zeXrkQ%jRsJ6qjTguz?TS?0O?duALrIGgTbcnxeRvYzkE_Q&d4$Ct)awmFegu=BIOx zd9R;1YQdGhBF_dv5BB;ZuKPcG5yom|)5M-@nb6*Ng(*v3`T?J3M*%P9yg5ahJx!?E%XJ5d9^g z64`KZ-w@Qv_OCbT_?)!$-X{siqyFl@$go~amn*bb&+?z85#@B#T-U5#R%~_p9A2u! zjPcU!wobxAPrm0hSpet^Q_tVXqnBu|sqqiSOE%;>w6r-UA_;`iX>norqO06h@R4Wf zh8r`c`+(rI%H57nc28~7DHT*|-9P2r)5pjn@+Mb+JY(d2^SvFiRC>tiJ!SVMh!_c5 zGBofk%)q%oZt#_1Ye-W+x=yOzdpKmB%3}yNkZT+i*w)l^9a-P){E9(1P;P*l1u2u{BYV zJzW4DQvETUnR;WI$ot4Um6`z;0uZDQkADLrhAmP0spebKM#@+52rmOxal7xvE?G8p z$1lrD?_#>&y>X1n(5Ixh2u-O4KIv#p;k9-w$%)m%P9pIdukuABLCplF7MHod&Tzxh z7mmmkn|5=Z=F9(37>p&l)G|7QXjQ;T0B`?@i63J5@vKO%5|KFirgeW>4Te&Kz*;I< zub;WVZER_z;3N9;had-t0_EL=^E&uN%}ij>I&aPjoMV7E9J1XinP~#ZZ+yoFhI27a zPR-t@bP-e&i5-hA@|W|zr}Bl#!O!HvyK7WzY1gY5$1N1K$568+f4k@FvKo387Z`>L zTU+-Qy(0On^wH1JR5F^mxu#)zb6nMyitsD1-*r}j87TucOZwqjhvPg-yOumKuguvi zeU_NG!YL2?wz;Se_+=i{ylCC-+$paRFN=F8fFa`5dy?0Ww@Y*6;hm{I^bv!r1+Q&+cy3fjxZqb1-AqgyhZHc%?TPaS_Tcp)@+*@@CZJ809Q%e2>pz-J zky)#9-3As^nqgsXLq=o^wFM_7e?`cX)RHD=ai;99>iG2P7}l?&H_C6T;xz)m;|@W` z4vPqISVR|9!UizPU7i)YF77e`?qFo~c$TrFWjZqOYvyxV9^!ei>I)8pBg_*D5 zXOeus^4icu!jukUZ=p_coDX9&WlgvJ@*HJRYw30iOYywt;l#8f;O>AvaV#}yz$+yNc?)%BO#qO74oC#^lh=f4|YSZMHR*bPq0a39f z)|X533k`Mwyy)Gd9C*LMs0SXq8p1yDVeZIxO4tntrJ9e|XVIK>=)i=ufA}|h1v?q6 z|Dz49y**!m2>$M5B%>5N+^e7T)-IMNesC>t73ztLwG265Rx5Y1vVg1Zl17yY(jA`y zsgE5acUk-gR_^=!K?h9>E9lFmlQ8 zK7M9VX&(jJ<2|l~R4ryC_t1}=bzTEQUw_1l6KdZ#oF~w0yx&uV6CUX{r^DFFAzSMM zXG-%+JS2iOzjFldR~e+wcJokVZTN>svSt#_d}CXvzKCnw%k48IC@I5scg?arb~OdF zWq+H-%fAizao!F23gVM~$>{Xhn$;9*3 z1abd#83o+2!5*W@Zy?Uz-NQ=?z8YMWpO;wM$6nl6vQem}2041~6iE`vKTtSFRd1-g{ecQ5H&&mYa3`MAQKFuvUe*rV`ES1_l8d@{dUY z3{Y}N{F+)PK?3R|=Fl_?CQ<7-a)A6Ph9rZP64;7yyb=iFs&u|$5k`xLbjbYX-|8-LQOQZFyj;T)QjnSVa5 z!jK4cfxn>V&MwOHeV_J2m?YM=yK>J@uqq)+1;uMpQa2dE9t8L6f2(04H5GX=jYo>a9v50tl(bUsN_62ZsmH>DL8DP!5)SX% zO7QDt`cJ{cj}7D$Y{#d|Cy)M7%9CI6BB#97V!&( z$ar56p|3mX;&*<+;~yv(F3Zrq9nwGk(ZE=kLxte5^Z3e6M+;zAl;N-Jk1h6+)D5}F?Xg|9 zPm?KUJvRZwuGI$9EdTrcF2yHgo8@{JOp#~k$~1T8r1YevM5}Y3s_$8aM?On@j`^hW zhNa}$+s?;LH|v2h$Ak>iVo-t@`lZ^h{(TesFjcdy0FRFqDXO1j|1zYW?Q?jWS`trO z7jBJ*S7oZtW0w*ST@%Xs^?bB4^$O)%@{p{@WAV_ql{lCgwy?4?>y0|VkM12il@o6J z?%Ijx$`BDSwg)csa&;o>y1(b`EZkEQJnGm= zRETs|R!F+o>w9aB_`g^NS#o$;&01{g;1|Hy=`^^h)wuUGaAUUv6PzIMF6~Kr{CS$N*AB z{Pg(iZ&6BY@eSs3SJ{S|Tk+9_n?sM`Jx||m5esrlJDY#YvpGz){Lfu^BdbN1)Ae5D zSwcmvqfSU|It~9Ia|-9{_?DNK=Q6QZ+#e&>@`lRzDoPdSF}HhvjYM5YlbI^x#w`n% zwf5=_-zpd;Qg7GnDdX3Zzo<{l&v#c3F;m5> z?q7$5(xT6C=}X)0{scev z&M?mzXHF&-+1WR&xBX-67kF;+`Gt(_F|S*SE3hIU`)9sE#Zjdn|1fgB-}J-#41;R2 z0)OWRN4OL;rUzgPJ^h*xA!tjV&&{f=ygX_tQdPaT*7XUbri}e=w}MNDt1a#`lPJ5# zt~D>V{DV-(8w6Gp&5i!E%854n1?K=)?U?MV>kW&{S_PJ>TPcx!&>>Xe)v|9toUT*j zDk{&-`^@%{UWd9{U5(c0yf7-u8qh;&BU9|;{A%O(VMeQ%8u4qGVb<26E?o1Yy6UE-Et9_QZ2uOZ#t_DPvIZSwf;tkQ)aAybjFtK_!?7=L z;iFQV{M$z(uB4PcbQ%zLqzdmj6hZ>XzO}AIK%dLU zLk4a)W?q9fV;0M3r4r4GreWOYhqid}yEM&sJC$I^$__vqRMpgmFXkUNpU(=LDKf&T zK6bEbuL+EkD7(~SFgc( zjilxC%!|A}0s6Gj2_`8{!aV~q_^cM;a=l_&t`$#Ri?^O86l?>;z_VtV| zn!$wzf+&Yw1(psg;j1n#B3E~ICc21EvQi=w^>X%Y==!XmJd|i=b{g_+^&;{dwl(l* z@?$`!21!IxVZ5Ll93#hwa`>H_=xhJqa?zJP<8f=i-T|7=sksn6LqbvBgV~kV^Ys3s zYOCbdanvLl$)Sk>t2C&T%jttr&_Yk|sDdcjJmDX~ zC=k1c@*v*2xV8Q#DKYF4hM^)>o~zfEhlB-{RYb6<+#Cdu}7kOZHCQk^x1}u0CG~_ z_!wm*4_H}s_1?KwPmv1S<2~bg%hC2uOFqGdYuo(W0}eTSs6Rje}4D&sEmyK+TSx;f}^^G-r1LCk7I&h4hEcA z_}3C)y;$y{Vt`pO(KIx-bz=0ZIYMkt|g0O;`M_sZW~Toh*FzJ0@H&xt&N$k zOEFG)f5}2e#G&7EN+)g5X5G&3LtX<`9<)B($2RMSZaNHFM>8(=ln9* zbNi%}t?~DDzETS2adieLy#*UQY5&J9ZMRQ+J!vomMsLNG*IlT(D0d%+%bCHF27m#< zWw1ixf;^5qMQUwd8QLMUxYj%f&q1m>8+UwzTZ9IIaNAS=x!kD#2H znNj`nr8u}wn0i;?3V2biOHYmOS2Lx=gSXC7E+ATTq51=g-rI*A6!B`f^8B;XHvR)i zDMOIrhr=<7#Z)bteTqGz^;XjE@b~Z_g$F1H1+PQ<8f*@fahY`-7Wo6nKP&C8pOi83 zjjvM^D!xTmulc@|lCt4QC=F4oUZDwjWXtw?cmrio0S&Ixi@aJY3f4o-Z8<(zNFqxE z$8)1*ea|!}Z9a|+bn|oKqP2-$cA2qEjDqLOW+6|8pOBWB+Wv$%@G9sU^JEE?s5dNC zri}o3htnZfjbqzb5+kl+H87xOWUeq=EmzhOXgMN2LmhC?&}gks|3D|{w#I62E8Ll4 zr`!KGMLr)Of&fB7DJY+?*AY&%U>c1R>14D&-m=@xI@7^c>-jNtTH*B_6p`r9eb$#= zPx-KL1!T}P~XS$=|j1JZg+jgV_7qX?aIKtFWA0W*+DyC>(WZ$mnmJ=)U76=OH`;6EP zIIWb_Z~{dEoi*BP$#b?{nnlbvDDlhsA1c`Xw zzt1h15@ETe(`2p3TkJi0jRjAWTyTT^s&JPWNXp82%wXiBhT)#PF5gH@f7pyTHw%V-x0 ztAvdpk>GL(*XN?0hC+DKP?W&P%v_K0>9a5vjZQ|XIwM;HCw%dWI4g12kGWhr1|Wv> z@VsIMB)(WHtAqyunWo~q@LoizEtC3k3rKh;F`j8~8jwSIg=%?RU#*mU+_%X5uz%?R z@Iw!%10%Z76*FkJH9pedKApN$!3?J>ht1f0_`WmkC&DT$gPF!vh|r=CSz0uz_HRG` zGzVRc1t;ceE_oU=BaC{afBK-{A40^Y5pj75W+1(Brwm^xpv_j@Ke=)IQ5jftos_N< zG8G|7Rb@1wn(gb#L*&K@G+B3xgFOhZfGP~IiQ|@B+vZLC|B)2sn}EO6{d7g3_-uyA+Cjthz}h{?5uH_)96S77H1+r)Fc@-JB*WpI zo$msQqK5lPLhhrVdj?M>YyZvb{ht=#dFwOes}^2302IrTfj}Xzxj)d2xBCZ65Yj(7 z2Pd+$!AObguhf#qQLya?25E$ld_W^WWK5R4qL&??dUV+9G8?g09_JFFzWW{^dsMiJ za3cyYl^h|AYDh6VgQ<+zZhvzYrzVZZ81t}>#MIpOBGpyl`DK79fVGjOf9$J49Z*e- zAdg#cK`> zEokG{1X~SNjh-}|S)L8B0~G>Gi>ehk%8+k2c)qMx7n{t8jG~N?MNtk7;=|8#Vu3t6 zqq8Vt--kd6!HZqQSv%|ek|{-UY}$C$aSL%9n)f(8Xv{eoW4d3yd{#FQq2*D?Qs|p3 zl>I5>5QnGd9^V9QMQ&QjZWZiJ->TS&@52q{U z)de+0%G~hJzCJ%&gUMr-$KwC%DfFM9{JxjaGN6-4!ZmRki@wmPIl%Bj z|4V7v{Vvi?K>k<{s4{!W!d@{XKpdZ{4?v$$s5bp%HoRnYKXI}q-pTKdcbDI+0gA|!2a5wWcaNX}88{3OXuDdv; zij7Oj8T&g|{-I2M?WYKR9{Fdz_4S-qA2vMsuNTvcTf}^9(wndUeum5He=J$>J}$Ci z&PjX!Kp3aE8}%jB4h}9R zX7&I>MnRfFKkQ5qK?%HL!De!*IRfH`Pski97agsvKzgvf$2;JlWnptji!1v%?$D?o zkJR{{nh^=8T)~k#DT4n&O|5$QE4D;ozBw3X4H)=IMxtmwhGAAiT0A0HZ7X6bk^Rp3 zum3cksYZC8X|>Q-ey`B8`f|W6dix`QU3?@b02CjK2h=P>;p&VV=#rLpP$?x*UB0a##2A4B{ke@R<(mV)DTjbxN+1e+Cnz90+(R~t z|KJS-cMN!SKG>tuZiOqRJ4!}E>dc}*p zkR`FzQW0hwgYyZY(GT5<$+Y3573Y<1XzE5SLT6@%Dz)b12aHm_I*y9K;kl8f*%h zPI~{Rnq(5cQ(NR`0o3EPDs!Mu3@?b9y!75#Ar$k$}gw` zhUW8jh+JtpyTk=NRnENle~B33-G~xKIrp*h1Z)+Nw38tsmZKyU>O)ENT*SQYaX^X? zt&ml47ll9?a_twW@ref^n&`X@zV;4FxE=-!grv%wwchqTOxliZ4cF_vug*K|B!X^` zAZ5=zU8CH3+>Q9;Sdalc6Pi8mvYM%TNYvzE+vV@*tgogvue8+Ndwd0y?R1z_82nyi zDb5t6iq&RQhWw48!oEA4mcrj4GIBY>S=Q?1>oaqD`L)*{7Co+NC^r;cquzXdW%a3q z{n|7P!>7nRk7Jd zTwCUs#^DEC`@Mn6e!#>a-$MR;DK_pw+pE+TK62i>bQ=fsUyHEhegFKtBwQSfEX)rbG`f7!IEmb`tsuQe>rK z+$JVBdXB4Efox(J1sSl5pH-6=sccPn--DVt7>OxeHv$O1l(5mbTqfri6_phhP!)d- zg8SgQ1h$l+<+blMsU3hlLFL_LGCcuB{k``Yxyn6ZFu}%(!3n6l0Mm{(?fPTN63C7| z=*?<$5oxOPYOIOcx5b_(Ffq`Y=Fdn2wJF;4->C^9@q;j#bakqCNPY8uf3luCV8G`o zp&OtC!m{fp6j?|OJg%v3Yx8w>oIZVU3X^|)Da>4D^D}kz1WEy>9ja5jF{ec zZ~aY?X^c7dd8fx^oV`T&NZ|oS0;d0zD=U4s zi-WR1QP{P4G?q@;iEZ#2B6&0*g$YfV{gILk^kLcZRRN}1aR zvN#>f^>4c+B}~LL>I(*`SR53I1;0Ph(ww4h`aFGFp0}Iw#myfQszLZ7Bt9v;7Yl;( zPb%XM^g~F_Sx0=+|J1CL4LIcsE@73~6kz#)SHJmLj8^g2s)S~I=wc%`oR4UwHg{m) z70Dx5w5oE0W^T3|XBSC#G8cEf2E5ewNpeNl*wiwFeea&aG2K}Tr#+PAWHSKp`gWHd z93sHIbn{H)`CaIWsGY*7J38$M;DwnJq&fXdi-Jl9Wd(;b*bqZU!n*j?yQ$;j`mj-Z zH)XJ?siTrpcGf37l1+F==HE+pPVjELTZ=QG>x}|V&Ml6xK;1z0e2xRO(ucJ(jw{uc zOj#lXe&mB=&(5el!6$5es%pu6KnV{RXE3*O_psJF`tQB;aL~l(9Dn?-V$APdj#a!8 zHDa_5$jvHkRNmv=scX}5>%0F3WdW*l+FKN8v*1kJG}E0OSizL7qM%Sj5)C;!IoSgF zv@xX6e*-n_#JEOPZ@`PHa#whJydw5bQk%;0H?^*octb-LnhMip#^!X_Y1Q0C5#mk3 zeQaUC>rnc=AP*90dO^E|ELm^cL;Nb2?yzo-&CQbyC*VN9&lH#ZB>D|6 zLndZsMZY2uyX)ccY123=QfCgW{B`4v#EQP>avvc1BfV>7IP*8{G%DrwHR`o1M%*U8EJ49_Ex`DEAC}M zNWuf{X4<$kG|K?)FU*WmVzB3Gfz1!6oT zyqpRB*DsIPv9yVAFZPN#2y(F1f;IjLMcu3E^xll=t~b1fY)RP(ze5QAs8Nn<*Y?CM zc(88N$wu)C1(t4LY`csRkAoH8WM!8Bn#7I>%Ru8j99+o1p`#ogX=Ck|{;zhe9&?x> zkA~bfzszs^zq7%HkRw(poFGZ40XC+xl>&SjB!b2+4a$ERHB!!n zhsjdU1Fd}kF|C^pkGV_fKMH;dDwWV3JKZ8Ou^0-7(-R`*UIF6G6164;Z7J$x9A)gc zKq}K^Wdx)XMQS)OLG|+|DIyKR-IKVeJ%XA{YVuc$&EZ3!z;7IrZKCKp*Hy+q@mnHk(@SIuR-yvC<=lKI%C2ZdL z@eX^kwXh}Ao&G9?e;gyw50!p$_Ar`JC{knwfiMmulO@=@jdcBv=eM#;KxapVtLU(m z%%OsF%|EhV50McsBOv;)U`wOL-~4Z4EU?Sa+rR%O(cyq=7B>|bguxfZsQ-Gv2`YlU z;J;pctBYXX2#mDJxoV>EAJZ?GWvOq5Fq)suBQIH4oQN@oPpfYKJ8|aTXN=lE*T*lY zMC|`}H8IH*$NeJXtXHK~v0UXu9s3M5KJu_v$8fZ~rWq zd&mrg(mp;w)OPx6f}Q^1RJDxq)VqiwOKtpnU~TP~2Ds%*L6W zTqdxgD*yZg@C!2yiiLy0kXrbU& zJ00}kU~ktu2)w7O4iLdE1P3T1O9_GTQQ?$Ts(M=NlBuYYVNXKIKg7E%9^9tuE~zSS zf7lTfN~D32L!i+E95KC0tqnZ*2mC93Fj?uLsQ{`tt!VM0p@=1q!J)1l*2IlJ7)U*- zLWQZ3McCke>ArqhYJ%R@S6;L~w0S`bg?=O%6`Nc^lTP{N|s_ zb;Ow`vAYi1r^r|Hw(1a>yn=B>4@c5)RX7k+G1;gLQa}qOV9zfEAu5{coJlnvxMz(tS6>--It?(>}x-OKCW!zXK9iL{F6U1U#Ok%M?= zw_EysTaNmVqMcEiaj+ql>6!ZkJNo+8hD^l8<#g@GbMNzOOMw~8p?ePJI|BqV2~NVD zH2oJw#_ufV$BSG>sLx&fD4hc${u?9a(ye{}hz{L}CW#JA_ZA}11l2=Zy%2)~Hfyq9<8Gsbur`GeplsxWLHn~a zMBmduvP}ox+g_el1v*Hj)!5Lq;ijv_1Jci@h9%;^pC9Vt+`7tF-5et-4;%id#-#-gLlO|LPnKxY^Ri-dJGK>g&&U+v@jfAxz7V~!hqJs^Fexkj zWN**1V1p~6bb9AaS)VG_O-qf?nMo~!Sx8O&m|^dm_}6-ta>W1ZW=_2e&*hW7G|A|b z{`H4}ISO~F%BOp#tg{K%ETD6G9>enM>+kQELzlWmFtguh08fJgbVo{9TOTh`E?-cC z^oM3z+h27wIl+c(Htu(sM*v@VA&tYH)S2=@4*}%EL=zTC0Okuf z?pwsYb_%x)`2NkG*5DM8b*f?MX-;fL|67gI?5GY57}7pfe7PLsoSwUA7!!_~;(HkS zj=YEY?;^YisXQbWbcxFmxx&W6!r~ChOf$B^Sbg={57~^tEu#gA;Ten9+T7IvHttig zW}^!ty2v8|FO@LQ`)-D#t*E*>;R8AAlo%#6Ry@diNTEv{h?Aq)d%>F(j2|%LbJ=G_y>fMLSxqAy z#WC8HX$!A-7$aYbwfrbq3Bh^98n)pJ>f#V;N9Omaj%<4pQ5>KClR#v@EXSWk^Ut;9 zcMzDDMXXzT^4E=)07k4S77h+^U7_gtmWy)e61Nzb1CU?M=Y*z(h2@$xNKGrkQ(}!r z&4c7$JYL{3reA;1x)~>IiGOxvEg<0#Y((aePt0D`6C~vcetUPc_}9896yhz-oe^DB zL^C)z$m|}4!1`tb^Po|IAsG|4mzV-J8ujYPZZ&YkE^ne8Z%``ovdE9z@#Bg z00|!)L`o=ugrbq;{r&+H+b71I(Xn+ld;rt+F#zsnNVVzfkAAoidX6})o{fF6pTn(i z0mYLc@>7uHPg_@>zv+zzehcw2@ne4=NGFUx zqf0Blj~@g1cE6fEQb7V&h$PjK@VM*1UcZUz=D_gu9m+N7Ns-_FR)sEMNC(JG#S+TT z+$S+*B7V`>dtmMDbX>Kv%kh1mQfhCJuvdE|HRF=)_XN|GA3r4cQS{b?KH}r?W>2}+ zOpx9FpFc|78V_hnf8Ztp2R|??L^`Py=hMM?V>LIMRCxp?^ zE)jy*w4xy6$Oey2Y@#oVydos@^FOJ!pJ|#ju!WI@*?W!*4andAoaDcEq{Y%gZ3xa? zkeK2GLN~C@$>7mQDO2&fjoy`AUMx`iG)6F8n78?{fSmF+zyECY7JcKSPS!rCc?cV0 zA$G>U>1Z#MA4>aRK8BxGK3Mr3t6WbVcDr?(T{BvhUzRhwsGRNt>v}J%oF^QO178Jj z5k$NfO2WP$<2Sc8r4Vf+f>~kRCqu%Dft=MJsV46w%9#UqE=Z!<0JW!bnQknaFcT{?S!6 zqDb@GNa(U6-PnkKzK`J91erL#9jv3(kNk!@_1> z^iZKXlL;PdnzTWT!HdtC&_1L1fl@*cdoLM8g;Vz&~y-aU*8oJ#v)sbar)KMWJ8AQM^Bql|72|*^`JTke4m-5kFwJ zq@lJS>DWmZDn~^}17dkz(b!msdG5%zk;Yq)?EY69M5bI*kFRB}Bd`C~XY}A9 z02c2xRlF=3D@xb8MISl(nll%RjgT~dVvk{6)!t`3ft#=Ezn6-x-RZm!I-+j{6`qga z$7<}>CC?_S&dMQ`(%9 zw8c*dbw=WGYf9j>{-|J56T~YWrkCCg>spUB-E_QR!hM@_v%GlEVlN`SHV!dxI{YgO zLYuNZOj!n0aaUODJtc7Jbee)rTG{mGzhbD(Db*0(tW>8LQJXfeERSBhErFP76E%{i zl>j^Z=D!cT&|?w*k?M`^VCjB$P*{4mGCOSrM{MH|?=l}g-g?|Fd3f0z)sBPBC_-#T;W^*D!gby0!2 ze{hYOd0M21Q^+SDzDKe-md3OQ2|k(Taw+C!(+)(Q;tUrD^e3VqDSBZcwW_*0d1MRT z#Ul076_0!(UM=Z*k1hO}N2Z|Dizhjr0mvY&xi2# zJ9XWArhjLmEc?%WrML<66K1(qV_0(ZPHO7oB@c9BLMY%Iw(T;+vKlJQQVqGd-TOtG zF>`yy0d**MMo5{Gl$t}(zaN&It^C=!^IPwHERbA>zM2UO;f;k>LqPg}R`>951kvf4 z_}SV+5cVIvgQs{8^w%*{+)88D9ok_Q>IUCiai_?M6>8iaQD@ZDfZ^$<`RCx(kr?!4e?4h++`05g0f2rw&C;4}*Vdn@uSQ|uSZnijWwB2ALMb!; z$K;)>S};gN8SHh6aYcI#mS2_Qu@SbWnWirNlbB&biE{>_#1{R12yKJe$mYS4s=V=7 zE;Bfm!&J3Q9UvbK#{*~b)}0m|Xl&h=V`@g7tKFgotG!EcclK5Tix~7)edEO01G~&N zt`Ad`RM)$9syChH$FFK`zRcU=k~TZP_YlVGQ$)L1s?#pfO9GwM>Lr_cWas+~LVA_~ zF*R4Mm`kU14KlFUKFp!&pfRQsr^#XcpBA9Vd0m6$1GLD`a<;!iwnPW?hAq?K z{5%_BKrE3%s6dvcD#X=c1Nl}Cknpj?=3AN3AC~;kqr-N?nkrK%#?n#_wzMTTmmq;MK>lvR5Jgb*UN~!>KE+O%gB)_ z%Zeh)JgYsss7udGuw5(~VAAu>~5gv{M}bkl0M%BfIeM^lO{q5Mk}xl9}b zx@tj^d1*{+oco44!S1Y#6e?Lv+{mat)4eY&(2bBQ)N&gp07)>@~YiDT9MxVufe4)-CqkptJL_nyU&_BB1VT-NkXA9f&DA-~P4MvTsf!gNfD@ z42B0QiSR=@x=jK~&oQc*fN!vf1Dr{2)q;&ig*phv%uSFb9)2D5;#8fQsuzV0b zX)~R<^ubC*{3Oy1*P$XeRbcM$3WRIA`QFSPTnIiXbA&EBY2s?Tk>)o;(7_jG-D1!F zj_JXFSQ;>VK06?pR>%Df-UrbvQ?E}pqgm)mXJZjV>q~dpvgfgKh$N*>U1f|ogY1|= zss*LI)D6On3I~>6Y@lx2%2+}VHRp7uo|ENIX5gFZ`&gEx$}%Xl$5m$S;NAc9Hr?(w zR2m&5T!JK7;NI)8Kl&F>Q13hS_nGgfm$F`T{TJ(we5Vh@Ol9vS)KI~9RB2#elL0gQ z#(&3&jDHT<%RNb@rrL=8njLl4%(zPy@M4QF{5EAsk)>3ntr)ARWP&+>lC=U}SHnm? zUVcAjbY!H*eUBNiXgxCtnT-*(Tm2KH>giwG+X_>+H1gj}nPbz6NsVRInb%H@BajFIbA1bA++g0bqeB#>>$ZIh_q~?5r6oP^=QOpki5eIf z;LF72^Mi2EXrt3ul3{b<3tMi~izcT%;| zGM$r5FnsMWFSqD+EBY3N#ZI6Lr-AA-nd(HugBe!@T5-$RV2m5zJor z;(GcKxc@EG*{?}NzQMu9{_S~Xl{Z00MMZ^zf)YlfP}6?)j3Tm%OZ7c_=>pGLO{^rC z#qJvOGz_JtVc4$Dc}DGvl9G~RhcUD4(_RrZ&a^s?UW|(T(1pNQi9Ia&(71c=c`*5~ z`qtLg(OO%MyP$%t?R(%)V&pdnI;Ozgm?#8hv(M1_(JEh@6^xt?@0%(yX_54#k z>%&p6rXj<5)0qz&f`&73KZ5b-m=+bFIp459R_lhk(&+rCA;|#T1DzYSFE^tUYg^ zoj(<_r~)vDlZQufOe;)%nxl_X-cyn*2Hnb8(AmUS+RV^RDkNF$s}5zp$!hwAP(8d9 z&E3fNCpk%xM>6{<&bx(+rZ`Br6jWca->(tZmp}i!du$Ezz2CN%h%nlrzz1e)s}e8W z;c@%aWi0+e2Ey^U*<%J5BBHmEbK;K(8sB!QlOjOQOElro+iH!@z1Mgld8AZZw%)2)CY(#K&p_H^I?f0B1Hu?M3K?_xG;)BxmKooWPq zZcntvr4iLsg3_CoIV+)R`f1b0@S|K#-pfEED-0dB>>0gQXX5q33HV! zvHezohZ&UE;tUzq_-1uVsZfdUkdR)=Baz9jr@G2ssH;&L!({S+Rpt>%{*D6+QF>_! z!`Mt8ui8Fi_An^jH!rq5!$HnT*iPOq^+fO0YnT+3ee``;;22OoY1JKy{}6i}ujJZGvnA;Mpe1M*d}$vp zPMNQ5-3}Nw>%pJ7rx&{Z3t+ulaBkvV;E5@<{C6+gt^5i4*W|Q(PmGG{n{TenhCk8h zdbvqFMv0XiFsWX4I>r=so|~D1>a!$Y8fx9|RhdVc-QHe}*5s zT$f$c%l^D^Kte3S7iF2wR7tnK)aJ~QUUbn#W>1~EM?#?K7KL}W@*iOi%0u9pAHi?HZkwjnr2R6>4A;M9zN(*6};vUmR9*bfo?szSVLL6 z^NWZV$?8qA0bY<|r^~MNCms4RZXx4_sDv^r9BfUS-c)-tL7O8Yw3_3ZN38Pk-)A7U$N~^DD>&M1tm%x`0l^lLxrQ~j>$##H|p%`&eNKH zQHnra-oI6wy1QcZ(p3M_`5Ls|Hk6||&+B~Lx@tq_P|dzpsuu674QowhZT_cJaAU4L zEgnM>fK+O2HF)gM)k%8#(P}S zdLJ$>oVTDfOd(qi%ae|Z>ATCwu@hlz$Il4kAXPZMrOKdZK_VZ(1hGXgx3?t!I`F-d z7Q$ak9rgfv0|xbbe)lMiW~W_#3xgR=u{DmasPIeox4Zcn4abc;p!?Tze}cJLu21Og zk!b#XOun=#(3>^KvR7wMwy~t&9DhD3n0>pTjiQk3EYid2Jfp)kVgSNPj=Nd??p74H zZussFY3m#xw=uxZ(QP1ui1Nm&q*1~D`mh@&5l@HINY8TVRBoLq4blZg9sA{h8%U); zLaA8-nS%oK@IRvPjo+FGZ!_ttyDfNS_{)^ip`r;86HUtO!Od#z3Dm^aczj%mJkGU1 zrlBBX%e*s`;0_(O=JHYw?z95(vEUg>Dwzgn8fAvJ9tt`!B^M}tfD1XNWKoa&$P1jc z`#I2W!%|JYMYtutMC(fpD*&;L)vtJhMR|O>*m|kxna#giQW{S##}^f8 zm?RBLfp~iGiFRFG>xsFK)PomGKLSVzU$U~PxRQumMoxSaMgu!dfcsbd{)_`<8U>-E z^U(k6>e}O({{DYTH+Pa;N6aPWw%i+%OD-FUEprLE<&xY+a`|Xd?lKw12t~|YnoCK! z&ArGqO5{5C6}eQuh>WO3Xnugi{HclQF;A!HdOLdgbI(@=HPa8gJR&B#=VY##%~Ka5Td->&e{aXxH3nF zK6H=VfR@oH%6vPyI@nOMqQotpK053_eOpxM#wgd%riRd29v@81rXOfs5C-Cj$zhlH z^N>|FBqUkL;{+4L_dG(S+qZV(E zt7f_(_ExB?|DaikCo;ns`DozhHIgknf2{J&7ef|8aiPHHaq5RcrNq?A)<)}H)`Z2$7QZ1b(*7b9a zf}glp`bqg2Pbt+tpcUyHoV|JESj$os%H!_yL0LeC)K=D2fdaUL!~?kP-20%j2z`iK z%O&r4PCrQ_4UXoxMDfZjiu2`%5(Iok65jo|I3R7pV_wXjU}$uO)ZKf8g3fQQiM5z& zyx*7@Z25P*=R~}CzUTcld&0vWPko{!U>x8ACR;75-uwb7HLGNo1q9WTw4&oj2r`;| z4>mK?l2@-eb8wM)on87N75N?j>Qq=p?qlTAtt4s1j?v6&lo%u?I}#P=dg6=qDo@_1 z@>|_2mag6LjC%T`vp+0w)_shoqOioApYQuz1hP@rCjCG9VXAMziN(IL>NNkmRZJ{sgL7%M9oU|%Y0>K zoc3jw$~ubBbFXswrTP7yXyp%%s6Mz;x->&{m;y`Pxpmt|%*eJun=*Jj%+e0>Ol+Y2 z{WkY@U6L3R=eNPjxubel*P)P%B*|gDUU_c<%XuwUQm>)Nu4rwdeJF(OS#1>OaKftk0Njvs;mP3`mY z84rDm^7dA|XO9cjA+P~$!1LvW4@xN0ftQF<8c!YC5V3E|3ZWiD4TXA-`Y%%wK+V>c zhV77^4cbXLL+-YzwsD1H)2TbJTr#DKvU>XYIi>j_DclyhQ%D$}MIe~SH8AID8JluA zAxAEJJcn)X+y9xuQbhepr~I?JfIyL_n5A zmK;Ho2j#l^H?0Z##ilJn{qyFBY!S93>0L_Rx*INnDddiA@5sDwP%DU85vK^gY?HojH+#{ zjujfkY<#d2Nwg@6m8`Lmhc|j&zqvA3k)-P5y>`L`T+J(LtODq~{@6gRGJ{#Hkrd$| zz)Z*`?E+@xY*lIVlZ=qyfH#*C-7{h395ue!)0J<-@UPc4&X%-{>pb_bSMNdBB`@(X zeV7a}>FZZeA5sa8q%(mUcL~BTO<4wBf?vGMp!@pC+nR$t08UEQy#O&h#NiAeJ(N@` zkbI{iOXF{Ui8~KG4o`XKm$Akz1q1|P2?kUonyU(=-i3XxJv8&lB@6WTpoE`RKS~rA zUC7bkJ6P~HL4SAj+%B!gK#NlI5^C)KAn)MWm+QELQ7 zX<;73Cb{7nB4hwTXv^#52Q>w}%~Ba?b{2aO^|&BhSHwZ$X9^Mwn-;%!y|kNATx-iV z1f?unr^j6570Bz<1ELgQ*Gje8V*uJ_xPBPx8#T3OKC-s`s0Qo?=D zgie&YU&GG0xQd&gvhs5C`Mrs}sr`%A8GHU?u6tK`RIHB+2q#(H;C6!MJin{au{CiN z*)mtfWdZ(YHaH@+rGRFoha^R>7P47Di+5}dW&}8JiOMReKTOR(xLHScz~wl;z_3LmrsQ+FT)$aQ5Z}k4@xzKB_r}safd*w+Q8roCKK8^yCt~^jfD27?2$N`aJ zy3txNB>*Gn;p^E3%|@rX31koBVP=_Dj*l=2h$-yP$=DdttgKetXB+35GT4r6nIF#7n~80c|xw%h*IxlX4mRt&A`)_hl60IYYoVuHm^ElieYYJyjI@s#EQ>ccY3|O!uHx! zLV*nE5|Wyl%57_Brzn_nN;IWN08uB=U$LDf{{{PGp>4HlP?i6M*g#yTr~VKwo}ukJ zJh>h`;PiCxD5vzE^k&$~y{X{F6XKtr?#2~cgG5=$;qz=mu0HUtMT7VWL#8smm>`S< z&%nluu#8$<2&VwL_%754N-S!Yjh*t+8^VF*AQ4rBy)I&qDtV%F2H64sEZ^PgTg!!V zU0fvReEKWq+td~8qo#9Gy?Xyb?zzR4K1rQ21K&^yuOEj z;djOAP~0C5d%f4fP3}7uLQSl8^7eCW)xa$7ZXp=;jJJ6W)#R|I*2wR2305gR z+8F^OtLv3h)m&tj#;>9uS#B5^sS2OCD6 zV_jX{r{Uprv-fIjpH^1R5Z7y~n)~~E_A4fhEWU5~jXN{o(j3_~=41;4;QqJ~TUuJ6 zz0X!7^U=n)aL$#u_9<|Gp;tTIpZJe6Nq-CdAzNX49TAZT znSRTchjKn;KwG z)Q1vpO?Asc!ki?|q%!Mgc)4j!QnyY9SOmnjgDqWPOw~vBQ^7E-7a)U@ZET%un9g1<@S3r*r?Sc zcxBx~oYYLK9S}CepFOKq%2Gb`;^f0!myUN#kBtg{ay;7oqd0~9cP;af%>ZYNo25SV zfRXL5=>xKkow_f-iyhZ~yin)ZT>L}ta##Jkn?*jvEU8UiuAi2S>l9YR2QfHF=PG17TY<9$eTIO}ZM>DMc_ z-9jA%<|IQe9;~t8x%}kp(X-R-ep@wa%Z-D{I}aO{mRVS~CZEG)`3&7va$Io^=hd=5 zY-?*H4X(FY$?DJg!%OvO>zA+G5+}@*zG!z7(C|i$ktCqG`YA%gU%TCiq{JQcrt( zKpWXlS$9?UpWg~s2ww3lo-0&{fQNH1{`1sPnHB@r0kRuUT5^@J2$M+ zD0}43A8L>{F6?fGOs|^*gBqg}TRmH6yVG}G+nxpJk7o79gxApMsJ*!m=hp_}qh(-| z%aPMvoD)j%owr#K>(qL@EBbFk_TL{}#8Zm+QvcZ*K)t%c6Z#4^Cg~@Y*na=l9KZ@> zMnsdFZags9rFZ4N^&eQR3EcnH)9{a2wB$uLJno^cbB0fBq15>#Z#t;l7N5nT59F8g<(pjxRN|$#KozPo4ifv`TT65+og)n??O8UN#Vhw zklxjToEZDyxIQxx@jzDyC~#-5z_IL8N&=7sWxnKD|4X``XI-%~dldS3BSS`qdW?d8 zzxv9Ge`^yHc+!_j?yeC7wc->_mG}Oya?Dn^uTU6KYb^}d2`PW*)p{KWwnXfgxe)K&K3a(#4*=PjgzED#N+g3^6FIf5MqX66~JU-rpG9s4q z#!Mc}Ck1Z{i_BCv5%axj8Fi*Vwr|GvrtaS9(4CrNcN;4bw=u!b;a<>c+A>5Z+5+ut zX{`00Wf$~b(`?FF}G&bN4y zrFK`pTzvwq|26RfaM#6=SyOKgI-Ge8=TrAb02e;{+B;)w#e4tW+OK0}J~D-#p2xvm z(qC{rA92whH^MIs5)}wXtRldp0)kEm)|#;BdJO64o2J~HyGMK**kxe!!rE8&D)moWz9?I*TM_s zr-?Rp67Z|@O#*j<)rNvvryuKn?cUnE?%U)$j^y-sPpa(ehw-uAaEwrmGr&t+O@2nN zWq1Xg&x-X%YfW=H%5da*Y36hC=2-B}MWDC9K zJ7bKWRr(X^)ZU8mWkfoCgM=KYP(5#mMN}~h-_8j( zh6m)MzPq#6u-6NwT($FuwFJ1=+h6U#*kT+bw&^ zJUjDk<~mCY0m_txd@MU><`zjwf+QXKX-6O+|+t3Mx zG_~QtGG5g>{YcFU!_r2!Kq1hQ6%pe1sD>$N8zrq)!j&=^t^q#Vw z-P8am@F4jVzRIbq1}VnXG8f>m!T&!~FAbPYOQMW{Ls%+SlIQS~Tnd+fH~#Pk{Km;4 zaRx-g$@7OVKU@vzm$DdAX`fg9enuK^3r4a#mjgV~{~N(9Pe#)JAJqOorhr~8YW~?A Q#UtQhVrXtqam5M$f4(YN5&!@I literal 0 HcmV?d00001 diff --git a/docs/developer-guide.rst b/docs/developer-guide.rst new file mode 100644 index 0000000..b8dc8e1 --- /dev/null +++ b/docs/developer-guide.rst @@ -0,0 +1,300 @@ +.. +.. Copyright (c) 2019 AT&T Intellectual Property. +.. Copyright (c) 2019 Nokia. +.. +.. Licensed under the Creative Commons Attribution 4.0 International +.. Public License (the "License"); you may not use this file except +.. in compliance with the License. You may obtain a copy of the License at +.. +.. https://creativecommons.org/licenses/by/4.0/ +.. +.. Unless required by applicable law or agreed to in writing, documentation +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. +.. See the License for the specific language governing permissions and +.. limitations under the License. +.. + + +############### +Developer Guide +############### + +.. raw:: pdf + + PageBreak + +.. contents:: + :depth: 3 + :local: + +.. raw:: pdf + + PageBreak + +Introduction +************ + +This is the developer guide of O-RAN SC SDL C++ library. +SDL implementation downloading (execute command in such directory where you want +to download SDL repository). + +Without commit hook:: + + git clone "https://gerrit.o-ran-sc.org/r/ric-plt/sdl" + +With commit hook:: + + git clone "https://gerrit.o-ran-sc.org/r/ric-plt/sdl" && (cd "sdl" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://gerrit.o-ran-sc.org/r/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg) + + +SDL has only few dependencies to other components and therefore SDL should be +quite simple to build and install to almost any modern Linux environment by +following instructions below. + +If not otherwise mentioned, commands in this document are executed in the +directory where the SDL repository has been cloned into. + +.. raw:: pdf + + PageBreak + +Compilation +*********** + +**Dependencies** + +C++ compiler supporting C++14 is required for compiling SDL. + +Currently, the following library is required while building: + +* boost +* hiredis +* doxygen (optional) + +Commands to install dependent packages in Fedora:: + + sudo dnf install boost-devel + sudo dnf install hiredis-devel + sudo dnf install doxygen + +Commands to install dependent packages in Debian/Ubuntu:: + + sudo apt install libboost-all-dev + sudo apt install libhiredis-dev + sudo apt install doxygen + +**Compilation in the Source Directory**:: + + ./autogen.sh + ./configure + make all + make test + +**Compilation in a Separate Build Directory** + +Both *configure* and *make* can be executed in a separate directory +(or directories) for keeping the source directory clean or for testing +different configuration options in parallel. For example:: + + ./autogen.sh + mkdir build + cd build + ../configure + make all + make test + +Note that if you compile SDL this way, all coming *configure* and *make* +commands are executed in the build directory like above. + +.. raw:: pdf + + PageBreak + +Installation +************ + +By default the shared library is installed to */usr/local/lib* and headers into +to */usr/local/include*. If this is not desired, then provide different path +when running *configure*, for example:: + + ./configure --prefix=$HOME + +Note that *configure* command allows plethora of additional options. For more +info:: + + ./configure --help + +After configuration has been done, run:: + + make install + +.. raw:: pdf + + PageBreak + +.. _building_sdl_api_doc: + +Building SDL API Document +************************* + +SDL API Documentation is a Doxygen document generated from SDL public header +files. + +One can generate Doxygen documentation locally by running commands:: + + ./autogen.sh + ./configure + make doxygen-doc + +in the directory where the SDL repository has been cloned to. + + +By default make doxygen-doc creates HTML, PDF and PS documents (if the needed +tools are available, check the output of *./configure* command to get the names +of missing tools). The documents are created to (paths are relative to the +directory where the SDL repository has been cloned to): + +* doxygen-doc/html/index.html +* doxygen-doc/shareddatalayer.pdf +* doxygen-doc/shareddatalayer.ps + + +Creation of different document formats can be controlled with various +--enable-doxygen-* and --disable-doxygen-* configuration options. For example +if only HTML document is needed, then run:: + + ./configure --disable-doxygen-pdf --disable-doxygen-ps + make doxygen-doc + +.. raw:: pdf + + PageBreak + +Running Tests +************* + +Unit Tests +========== + +Unit tests are compiled and executed by simply running:: + + make test + +By default all unit tests are executed. If *valgrind* is installed, then by +default unit test execution is analyzed with *valgrind*. + +Running specific test cases can be achieved by using *GTEST_FILTER* environment +variable. For example:: + + make test GTEST_FILTER=AsyncStorageTest* + +If *valgrind* is not desired (even if installed), then it can be disabled with +*USE_VALGRIND* environment variable:: + + make test USE_VALGRIND=false + +Additional *valgrind* arguments can be specified with *VALGRIND_EXTRA_ARGS* +environment variable. For example:: + + make test VALGRIND_EXTRA_ARGS='--track-fds=yes --log-file=mylog.txt' + +It is also possible to use the *testrunner* binary directly (after it has been +compiled). The *testrunner* binary supports all the command line options gtest +supports, for example:: + + make testrunner + ./testrunner --help + ./testrunner + ./testrunner --gtest_filter=AsyncStorageTest* + +Functional Tests +================ + +Functional tests are not yet available. + +.. raw:: pdf + + PageBreak + +Debugging SDL Binaries +********************** + +The testrunner and other binaries created by make into the working +directory are not real binaries but shell scripts (generated by automake) +used for running the real binaries. The real binaries are in .libs directory. +Normally this is not important, but when using gdb or other debugger/analyzer +tools it is important to use the real binary instead of the generated shell +script. + +Examples below demonstrate how one can run testrunner binary (unit tests) in +gdb debugger:: + + LD_LIBRARY_PATH=.libs gdb --args .libs/testrunner + LD_LIBRARY_PATH=.libs gdb --args .libs/testrunner --gtest_filter=AsyncStorageTest* + +.. raw:: pdf + + PageBreak + +Redis +***** + +When Redis type backend data storage is used, SDL requires Redis v4.0 or +greater. Older versions do not support extension modules. + +Redis Modules +============= + +When Redis type backend data storage is used, SDL requires that the following +Redis extension commands have been installed to runtime environment: + +* MSETPUB +* SETIE +* SETIEPUB +* SETNXPUB +* DELPUB +* DELIE +* DELIEPUB + +Implementation for these commands is produced by RIC DBaaS. In official RIC +deployments these commands are installed by DBaaS service to Redis +container(s). In development environment you may want install commands +manually to pod/container which is running Redis. + +**Manual Redis module installing** + +Redis module implementation downloading (execute command in such directory +where you want to download redis module implementation):: + + git clone "https://gerrit.o-ran-sc.org/r/ric-plt/dbaas" + +Installation to default system directory:: + + cd redismodule + ./autogen.sh + ./configure + make install + +Following line should be added to *redis.conf* file:: + + loadmodule /libredismodule.so + + should be replaced to match library installation directory path. + +*redis-server* must be restarted after configuration file update. + +Notice that *redis-server* takes path to configuration file as an argument. +If not given, *redis-server* will start with default parameter values and above +made *loadmodule* option is not effective. Refer to:: + + redis-server --help + +SDL API will check in connection setup phase that all required Redis extension +commands are available, if not then execution is aborted and error log is +written to identify which commands are missing. + +.. raw:: pdf + + PageBreak diff --git a/docs/index.rst b/docs/index.rst index 4e34b9a..1e66a01 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -23,6 +23,8 @@ Welcome to O-RAN Shared Data Layer (SDL) in C++ Documentation :caption: Contents: overview.rst + user-guide.rst + developer-guide.rst release-notes.rst * :ref:`genindex` diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 17ce65e..2efeb12 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -15,7 +15,7 @@ .. limitations under the License. .. -Release-Notes +Release Notes ============= This document provides the release notes for O-RAN SC Amber release of diff --git a/docs/user-guide.rst b/docs/user-guide.rst new file mode 100644 index 0000000..ed75ce1 --- /dev/null +++ b/docs/user-guide.rst @@ -0,0 +1,519 @@ +.. +.. Copyright (c) 2019 AT&T Intellectual Property. +.. Copyright (c) 2019 Nokia. +.. +.. Licensed under the Creative Commons Attribution 4.0 International +.. Public License (the "License"); you may not use this file except +.. in compliance with the License. You may obtain a copy of the License at +.. +.. https://creativecommons.org/licenses/by/4.0/ +.. +.. Unless required by applicable law or agreed to in writing, documentation +.. distributed under the License is distributed on an "AS IS" BASIS, +.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +.. +.. See the License for the specific language governing permissions and +.. limitations under the License. +.. + + +########## +User Guide +########## + +.. raw:: pdf + + PageBreak + +.. contents:: + :depth: 3 + :local: + +.. raw:: pdf + + PageBreak + +Introduction +************ + +This is the user guide of O-RAN SC SDL C++ library. +Shared Data Layer (SDL) provides a lightweight, high-speed interface (API) for +accessing shared data storage. SDL can be used for storing and sharing any +data. Data can be shared at VNF level. One typical use case for SDL is sharing +the state data of stateful application processes. Thus enabling stateful +application processes to become stateless, conforming with, e.g., the +requirements of the fifth generation mobile networks. + +Figure below illustrates some main points of SDL: + +.. image:: ./_static/sdl_intro.png + :align: center + :alt: SDL introduction + +SDL has been implemented in many languages: + +* C++ Linux shared library +* Golang package +* Python package + +This document focuses on C++ implementation of SDL but general principles are +the same in all implementations. + +.. raw:: pdf + + PageBreak + +Key Concepts +************ + +**Backend Data Storage** + +Backend data storage refers to data storage technology behind SDL API which +handles the actual data storing. SDL API hides the backend data storage +implementation from SDL API clients, and therefore backend data storage +technology can be changed without affecting SDL API clients. Currently, Redis +database is the most commonly used backend data storage implementation. + +Figure below illustrates how SDL API hides backend data storage technology +from application: + +.. image:: ./_static/backend_data_storage.png + :align: center + :alt: SDL API hides backend data storage technology from application + +`SDL Deployment section <#sdl-deployment>`_ provides further information +about backend data storage deployment options. + +**Namespace** + +Namespaces provide data isolation within SDL data storage. That is, data in +certain namespace is isolated from the data in other namespaces. Each SDL +client uses one or more namespaces. + +Namespaces can be used, for example, to isolate data belonging to different +use cases. + +Figure below shows an example of the SDL namespace concept. There are two SDL +clients, both accessing SDL backend data storage using an SDL API instance +(C++ object). Client 1 uses both namespaces: A and B, while client 2 uses only +namespace: B. Therefore, data in the namespace: A is visible only to client 1 +and data in namespace: B is shared between clients 1 and 2: + +.. image:: ./_static/sdl_namespaces.png + :align: center + :alt: SDL namespace concept example + +Namespace management is planned to be moved under a managing entity which +enforces some control over how the namespaces are created. For now, however, +namespace naming needs to be manually coordinated between clients. + +**Keys and Data** + +Clients save key-data pairs. Data is passed as byte vectors. SDL stores the +data as it is. Any structure that this data may have (e.g. a serialized JSON) +is meaningful only to the client itself. Clients are responsible for managing +the keys. As namespaces provide data isolation, keys in different namespaces +always access different data. + +.. raw:: pdf + + PageBreak + +APIs +**** + +SDL provides currently following APIs: + +* Asynchronous API for accessing SDL storage *shareddatalayer::AsyncStorage* +* Synchronous API for accessing SDL storage shareddatalayer::SyncStorage + +Same SDL client can use one or more SDL APIs. There should rarely be need to +create several instances of the same SDL API though. All individual operations +done using SDL API functions are targeted to one namespace (accessing several +namespaces requires multiple operations). + +SDL API functions are not thread-safe, meaning that same SDL instance must +not be shared between multiple threads without explicit locking in SDL client. + +SDL API functions are atomic unless otherwise indicated. Indication of the +non-atomic behavior of certain function can be found from one or many of the +following: + +* Function name +* Function parameters +* Function doxygen documentation (see below) + +Refer to doxygen generated SDL API documentation below for further information +about SDL APIs and the functions they contain. + +Doxygen Generated SDL API Documentation +======================================= + +Pre-built online version of SDL API Doxygen documentation is not yet available. + +Doxygen documentation can be generated manually. Follow instructions found from +:ref:`SDL developer guide `. + +.. raw:: pdf + + PageBreak + +Building Clients Using SDL +************************** + +SDL API functions can be used by including SDL public headers and by linking +SDL shared library. + +The necessary compilation and linker flags can be acquired with the +*pkg-config* tool:: + + pkg-config --cflags libsdl + pkg-config --libs libsdl + +SDL internal implementation uses C++14, thus SDL clients need to be build +using a C++ compiler supporting C++14. However, SDL public API header files +contain only features which are available in C++11, thus SDL clients do not +need to be implemented (and compiled) using C++14 (C++11 is enough). The +compiler just needs to have support for C++14. + +.. raw:: pdf + + PageBreak + +Using SDL in Application Pod +**************************** + +SDL binary artifacts including Debian (.deb) and RPM Package Manager (.rpm) +packages are available in O-RAN-SC PackageCloud.io repository. + +In runtime environment SDL needs also a database backend service, currently +SDL supports only Redis database. Recommended solution is to use DBaaS +component of the official RIC platform deployment. + +**Deploying SDL database backend with DBaaS service in the RIC** + +Download RIC deployment artifacts:: + + git clone "https://gerrit.o-ran-sc.org/r/it/dep" + +The **ric-platform** directory contains Helm chart and scripts to deploy RIC +platform components, including also DBaaS component. + +RIC DBaaS service must be running before starting application pod which is +using SDL API. DBaaS defines environment variables which are used to contact +DBaaS service (offering backend for SDL). Those environment variables are +exposed inside application container only if DBaaS service is running when +application container is started. Refer to +`Database Backend Configuration section <#database-backend-configuration>`_, +for information about available environment variables. +You may test SDL connectivity to its backend with the *sdltool* command inside +your application container:: + + sdltool test-connectivity + +*sdltool* comes in SDL binary artifacts which are available in O-RAN-SC +PackageCloud.io repository. + +For more information, see also `README `_ +file of the *dbaas* O-RAN-SC gerrit repository. + +.. raw:: pdf + + PageBreak + +Configuration +************* + +Certain aspects in SDL functionality can be configured by using environment +variables. + +Database Backend Configuration +============================== + +Database backend configuration can be used to configure, to which database +backend SDL instance connects. A list of available environment variables to +configure database backend: + +* DBAAS_SERVICE_HOST +* DBAAS_SERVICE_PORT +* DBAAS_SERVICE_SENTINEL_PORT +* DBAAS_MASTER_NAME + +After DBaaS service is installed, environment variables are exposed to +application containers. SDL library will automatically use these environment +variables. If DBaaS service is not used, above environment variables needs to +be set manually so that SDL backend can connect to correct database. + +**Examples** + +An example how environment variables can be set in bash shell, when standalone +Redis server is running in a Kubernetes Pod with k8s service name of *dbaas* and +port *6379*:: + + export DBAAS_SERVICE_HOST=dbaas + export DBAAS_SERVICE_PORT=6379 + +Besides hostname, IPv4 and IPv6 addresses can be set to *DBAAS_SERVICE_HOST*. + +An example how environment variables can be set in bash shell, when Redis +HA deployment is used. Please note that DBaaS does not support yet HA +deployment option. Below environment variables are only in the form of an +example to show how HA deployment would be configured:: + + export DBAAS_MASTER_NAME=my-master-sentinel + export DBAAS_SERVICE_HOST=dbaas + export DBAAS_SERVICE_SENTINEL_PORT=23550 + +.. raw:: pdf + + PageBreak + +Errors +****** + +`Doxygen generated SDL API documentation <#doxygen-generated-sdl-api-documentation>`_ +describes which error codes are returned and which exceptions are thrown from +each SDL API function. Generally, asynchronous SDL APIs return error codes and +synchronous SDL APIs throw exceptions in error situations. + +Handling Error Codes Returned From Asynchronous SDL APIs +======================================================== + +Asynchronous SDL APIs return *std::error_code* based error codes in error +situations. Typically, error code is returned as a parameter in the related +callback function. + +Returned error code contains detailed information about the error which has +occurred. This information is valuable for SDL developers in case the issue +needs further investigation, but usually this information is too detailed for +SDL client error handling logic. For SDL client error handling purposes SDL +provides *shareddatalayer::error* constants and the returned *std::error_code* +can be compared against these constants. + +Therefore SDL clients are recommended to store the returned *std::error_code* +somewhere (for example to the log) and implement the error handling logic based +on *shareddatalayer::error* constants. C++ code example below illustrates this: + +.. code-block:: c++ + + if (error) + { + log.error() << "SDL operation failed, error: " << error + << " message: " << error.message() << std::endl; + + if (error == shareddatalayer::Error::NOT_CONNECTED) + // Error handling logic for shareddatalayer::Error::NOT_CONNECTED + else if (error == shareddatalayer::Error::OPERATION_INTERRUPTED) + // Error handling logic for shareddatalayer::Error::OPERATION_INTERRUPTED + else if (error == shareddatalayer::Error::BACKEND_FAILURE) + // Error handling logic for shareddatalayer::Error::BACKEND_FAILURE + else if (error == shareddatalayer::Error::REJECTED_BY_BACKEND) + // Error handling logic for shareddatalayer::Error::REJECTED_BY_BACKEND + } + +*error* in the code block above is *std::error_code* type variable which is +returned from some asynchronous SDL API function. *log* is a logging service +what an SDL client is using. Note that this is a simple and incomplete example +for demonstration purposes and not meant to be used as such in real +environment. Complete error handling implementation depends on SDL client and +SDL API function which returned the error. For example, in some cases common +handling for several *shareddatalayer::error* constants might be sufficient. + +**Instructions for Error Handling Logic Implementation** + +Doxygen documentation contains detailed description for all +shareddatalayer::Error constants. This information helps to design error +handling logic for each shareddatalayer::Error constant. For example, following +information can be found from there: + +* What has happened +* Is data modified in the backend data storage +* How to recover from error situation + + +Handling Exceptions Thrown by Synchronous SDL APIs +================================================== + +Synchronous SDL APIs throw exceptions in error situations. There are +corresponding exceptions for all *shareddatalayer::error* constants returned +by asynchronous APIs (see previous section). All exceptions thrown by SDL are +derived from *shareddatalayer::Exception*. +Therefore, a client can catch *shareddatalayer::Exception* in case the client +wants to implement common handling for some SDL originated exceptions. Note +that external services, which SDL uses, can throw exceptions which are not +derived from *shareddatalayer::Exception*. + +Below is a C++ code example of a scenario where SDL client does common error +handling for all exceptions thrown from synchronous SDL API: + +.. code-block:: c++ + + try + { + //Code which executes synchronous SDL API function + } + catch (const shareddatalayer::Exception& e) + { + log.error() << "SDL operation failed, error: " << e.what() << std::endl; + //Common error handling logic for all SDL errors + } + //Catch also non-SDL exceptions (like std::exception) if needed + +Below C++ code example has separate handling for shareddatalayer::BackendError +exception and common handling for all other exceptions thrown by SDL: + +.. code-block:: c++ + + try + { + //Code which executes synchronous SDL API function + } + catch (const shareddatalayer::BackendError& e) + { + log.error() << "SDL operation failed, error: " << e.what() << std::endl; + //Error handling logic for BackendError + } + catch (const shareddatalayer::Exception& e) + { + log.error() << "SDL operation failed, error: " << e.what() << std::endl; + //Common error handling logic for all other SDL errors than BackendError + } + //Catch also non-SDL exceptions (like std::exception) if needed + +*log* is a logging service what an SDL client is using. Note that these are +simple and incomplete examples for demonstration purposes and they are not +meant to be used as such in real environment. + +**Instructions for Error Handling Logic Implementation** + +Doxygen documentation contains documentation for all exceptions thrown by SDL. +This documentation contains information which helps to design error handling +logic for each exception. For exceptions having corresponding error code, +exception documentation is usually a reference to corresponding error code +documentation. + +Each SDL API function, which throws exceptions, has a link to the documentation +of those exceptions. This link can be found from the Doxygen documentation of +given SDL API function. + +.. raw:: pdf + + PageBreak + +SDL Properties +************** + +This chapter discusses how certain general data storage related aspects work in +SDL. Discussed subjects include, for example, concurrency control and data +persistency. + +SDL Deployment +============== + +Production environments are typically deployed so that SDL backend data storage +and SDL clients are in different nodes (e.g. VM, container). + +There are two different supported deployment modes for SDL backend data +storage: + +* Standalone (single DB node without redundancy) +* Redundant (DB node pair working in master/slave redundancy model) + +SDL does not currently have any intelligent logic (e.g. dynamic scaling) on +which storage node each namespace data is stored. This area might be developed +further in the future. + +SDL does not prevent backend data storage to be deployed in the same node with +the SDL client. Such deployments are, however, typically used only in +development/testing type of environments. + +Concurrency Control +=================== + +SDL does not support transactions doing one or more units of work in ACID +manner (pessimistic concurrency control). + +SDL supports optimistic concurrency control by providing Check and Set (CAS) +type conditional functions. These conditional functions provide possibility +to do certain data modification operations only if data value matches the SDL +client's last known value. Thus a SDL client can check that someone else has +not changed the data after it was read by the SDL client. If the data would +have been changed, SDL does not do the modification operation and this is +indicated to the SDL client. The SDL client can then decide how to handle the +situation (for example read the latest data and retry modification). + +*AsyncStorage::setIfAsync* is an example of a conditional function discussed +above. Other conditional functions exist as well. + +Data Persistency +================ + +Currently all data stored to SDL is stored to in-memory backend data storage. +Meaning that, data is not preserved over DB node restart. DB node restart does +not necessarily cause data loss for SDL client though. Refer to +`SDL Deployment section <#sdl-deployment>`_, for information about SDL backend +data storage redundancy models. + +.. raw:: pdf + + PageBreak + +Best Practices +************** + +This chapter gives recommendations on how to use SDL. + +Building Clients Using SDL +========================== + +* Use *pkg-config* tool to acquire needed compilation and linking flags, + instead of hardcoding them. This ensures that flags are always up-to-date. + See more information from `here <#building-clients-using-sdl>`_. + +Using SDL APIs +============== + +* SDL APIs are not thread-safe. If same SDL API instance is shared between + multiple threads, SDL client has to use explicit locking to ensure that only + one thread at time executes SDL API functions. +* Each SDL instance establishes own connection to backend data storage, which + requires resources (how heavy this exactly is depends on used backend data + storage type). Thus, from performance point of view, only one SDL instance + per one SDL API should be used if reasonably possible. One SDL instance can + access multiple SDL namespaces when using *AsyncStorage* and *SyncStorage* + APIs. +* Use waitReadyAsync() function before doing first operation via asynchronous + APIs to ensure that SDL and backend data storage are ready to handle + operations. See waitReadyAsync() function + `doxygen documentation <#doxygen-generated-sdl-api-documentation>`_ + for corresponding asynchronous API for details. +* Avoid using heavy search functions (for example: *AsyncStorage::findKeys()*). + Rather define your keys so that you know which keys should be read. + +Using SDL Namespaces +==================== + +* As namespace naming is currently on SDL client's responsibility, use enough + specific namespace names that same name is surely not used by someone else + (unless you want to share given namespace data with that someone else). +* Data entities related to each other should be placed under the same + namespace (unless there is a good reason not to). For example, accessing + multiple data entities with one SDL operation is possible only for data + entities belonging to same namespace. +* Identically named keys can be used in different namespaces. Creating own + namespaces for different use cases and unrelated data provides more freedom + into key name selection. + +Data Management +=============== + +* Writing or reading one big junk of data at once is more efficient than + writing/reading the same amount of data in small steps. For example, create a + key list and read it once, rather than reading each key in a loop. +* If rolling upgrade needs to be supported, consider using Google Protocol + Buffers (or something similar) to make it possible to parse data which is + written by older or newer application version. + +.. raw:: pdf + + PageBreak diff --git a/include/sdl/asyncstorage.hpp b/include/sdl/asyncstorage.hpp index eb7342f..5c3cc6d 100644 --- a/include/sdl/asyncstorage.hpp +++ b/include/sdl/asyncstorage.hpp @@ -292,7 +292,7 @@ namespace shareddatalayer using FindKeysAck = std::function; /** - * Find all keys matching search pattern under the namespace. No prior knowledge about the keys in the given + * Find all keys matching search key prefix under the namespace. No prior knowledge about the keys in the given * namespace exists, thus operation is not guaranteed to be atomic or isolated. * * @param ns Namespace under which this operation is targeted. diff --git a/include/sdl/syncstorage.hpp b/include/sdl/syncstorage.hpp index eff5032..684690b 100644 --- a/include/sdl/syncstorage.hpp +++ b/include/sdl/syncstorage.hpp @@ -211,7 +211,7 @@ namespace shareddatalayer const Data& data) = 0; /** - * Find all keys matching search pattern under the namespace. No prior knowledge about the keys in the given + * Find all keys matching search key prefix under the namespace. No prior knowledge about the keys in the given * namespace exists, thus operation is not guaranteed to be atomic or isolated. * * Exceptions thrown (excluding standard exceptions such as std::bad_alloc) are all derived from -- 2.16.6