From e8817863d75b30b049b0f8878a4517017ab7f3d5 Mon Sep 17 00:00:00 2001 From: Florian Zimmer Date: Mon, 1 Jul 2024 16:24:54 +0200 Subject: [PATCH] docs: Add first draft of a Data Plane Signaling specification. --- .../data-plane-signaling-state-machine.png | Bin 0 -> 56396 bytes .../data-plane-signaling-state-machine.puml | 64 +++++++++++ .../data-plane-signaling.md | 107 ++++++++++++++++-- .../diagrams/dataFlowResponseMessage.png | Bin 0 -> 9434 bytes .../diagrams/dataFlowResponseMessage.puml | 25 ++++ .../diagrams/dataFlowStartMessage.png | Bin 0 -> 19827 bytes .../diagrams/dataFlowStartMessage.puml | 39 +++++++ .../diagrams/dataFlowSuspendMessage.png | Bin 0 -> 4197 bytes .../diagrams/dataFlowSuspendMessage.puml | 19 ++++ .../diagrams/dataFlowTerminateMessage.png | Bin 0 -> 4219 bytes .../diagrams/dataFlowTerminateMessage.puml | 19 ++++ .../diagrams/transferProcessFailRequest.png | Bin 0 -> 3436 bytes .../diagrams/transferProcessFailRequest.puml | 18 +++ .../examples/DataFlowResponseMessage.json | 14 +++ .../examples/DataFlowStartMessage.json | 32 ++++++ .../examples/DataFlowSuspendMessage.json | 4 + .../examples/DataFlowTerminateMessage.json | 4 + .../examples/TransferProcessFailRequest.json | 3 + 18 files changed, 338 insertions(+), 10 deletions(-) create mode 100644 docs/developer/data-plane-signaling/data-plane-signaling-state-machine.png create mode 100644 docs/developer/data-plane-signaling/data-plane-signaling-state-machine.puml create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.png create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.puml create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.png create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.puml create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.png create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.puml create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowTerminateMessage.png create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/dataFlowTerminateMessage.puml create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/transferProcessFailRequest.png create mode 100644 docs/developer/data-plane-signaling/message-types/diagrams/transferProcessFailRequest.puml create mode 100644 docs/developer/data-plane-signaling/message-types/examples/DataFlowResponseMessage.json create mode 100644 docs/developer/data-plane-signaling/message-types/examples/DataFlowStartMessage.json create mode 100644 docs/developer/data-plane-signaling/message-types/examples/DataFlowSuspendMessage.json create mode 100644 docs/developer/data-plane-signaling/message-types/examples/DataFlowTerminateMessage.json create mode 100644 docs/developer/data-plane-signaling/message-types/examples/TransferProcessFailRequest.json diff --git a/docs/developer/data-plane-signaling/data-plane-signaling-state-machine.png b/docs/developer/data-plane-signaling/data-plane-signaling-state-machine.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d1333a3f5caff756a8823eea4467eec268cf83 GIT binary patch literal 56396 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⋘`oJBm^1RVj4#}6+P7U%Li7|t9_m%zJ+B4-E|}+=Rqav$ z3{G%D%+#GHAoS-mSPr3l&JB;p@HV5M*j?HcIvKH`Yv3hCsAJJ=-nSvOqKB{lhhRxS z63NTMqh5Hs%b#?IoP$wX=~?#mpvJjhpAcX8aunR)y^7uPiTo#7ZDY2Xh(pduucP!7 z*$;*c>!Zuj<7sW4R#ScFv3z454cE>&bFwR*C!j~U0!F!wyU~|c7U~ZqI_Z?V58enI zG@qq=GS@k6&Y5P*i~?@KS0p~P)y&GyKDb^OVEaHUurKr1Eb_Hn4`d_je}_92=;{|z zYOEcEJE^J-%K%!QHL*5JxkTjT>Pj%^xER--){x|}GOGerGg7Q&1{zuS;WZ~bt9y2Z zaI~9OskmDa$Y%FXEDXB^JAkdr`rY!oO>#mH_{yMVqu1Qlv~_Uw%r8XlgW*CTTY;)I z+lzyV<3$m<<4+HvJM=mBB==RaCTvPT;V?05#|B3*4l&&q3m-#QZy@l7*w-D4sinTd82UV zt9a)EA=Mi{Z9LXvL|(rR;F$2R&k?+%_cqwE=`f1V_oCmx`4OQ^z2e1*#7#+AMFj>H z6>qKVQn?=N0w+9U~u?Hz8hYu(51oB=@Q960H&NEV#!}yqA z*xqdjQ#Iw(SqaU4fd;6jM1`M9TF>|XsEKc;Kp@L2bD4SD!RNeh4&I*XOT}-UEE=tj zJCy}$?&=pQR|RG}ru0RLSaAH^4M)U|9z8r>N)i)7BK}LUB7fz%&g9pKM?jDcbQLrf zgn0wv4)4&_K1@E!8WRq~00!1)J!gyLfqzSbKYZU%hzq z4b3sF`}}H$?ITbM2B$l#>%T%)0qBMv3C?B~?M=fRk!%%~`OSlFo9fAdsX=<{axIGC zX)c}5*$L9T?%O-~DeLLS7mMSeM$CLtkWl!v(=7cr6rA<;^%?Sj<_p?X+M8M~8(k9Y zI`9+f^Zm~!i`~keMcF0FV@>mAR2Ux5CHCH+f6%A36oxn4P6Lmzp~P@o*o%8{5|a= zK$d3%I-8~ZynSg*7mEa@-BQ=7&v#QmACkHh@ZtFM>=>I{mr^OuVTN2trPEKuc~+%Y zh1UH+#9xf*Ht1pppb8Zw8QJ^P=rVzF9Qa+I6p@oJkB)wKd*#3le7-WFa?q3J-ZI#m z#nC%b-B-P-|M_obarpjcaq(@?E7|+?D^eJi6EB>a3cgR!V5@)6RYLsmcEb;Irl=7w zPVNBhs82`Sk3NtH6A2OhBBB2q6l!Szu@2d(21ZED7F9*ASMW$tA2ja;2Ku_Ld=0B5 zmHC@s+5q-kKtKR=1+54{D}Ea|alY^CBRI z%?2ie9XffO97IJ1k?MpIBPAXJeUy+KyWo;-O%hwtqEAkcZ{9X~LPt4J+e zp~Df`_PTt0F@QE5xxA?J?K|zie$u0jxs}bQGkywx5%v-^2uIA6G&r z0KTqYzYbVg&#-R%75A_o=!OI6qKhidBXmL{e<C{=8oKr|2vb>=M)vSFN#GJa023G)CE-ph zF5uXoFE3>yKSc-XkR>Xr;;~yYsh|_SqT*#GRrt2x)fuH$MnQp-lQUMz;psC`B_HO= z1e{O(tA9E>9|K4X?{0enaZT+`!r}PsC3W-G+QH-@qw5kRMN>w)8%Z~^n+~DMy{wyj zM5{!pBZ+<=I+wurB>XLD6mb60+=PNPI3xLw{TJ8a+-~iML1VHzv<;9Jq$iuQ zo6hwCDB|mUj7DAa7@bf8I}>fdof(+mk;rTC?U!=I{ChANUhCsm$7`;e&Z2A#PPzHP z+6Nr^wQ2(L60X<=xRdd6%lMiky)HN zie(19KZDy{shwEYk|aAehSh~q%2%R~)$*l;9rX(b3=-^jp<_ARa?O*`g=2lT@QjCb z#g(-`Dp--_bN6jAKUWgH(EQz=?;7f?t&EP@R48vUZtVvZdCk12f%aUIcW-=4*6E#A zNZ{Fow-paC&`xQHPB4~2R%qX+u745HHJ;3HtHN2M%4qoE z;Z)6Z@_dX&w-XSj<*&>+mZ;{Jz5T@QN~v$s7%l5ZVtfCoRuFyI%IZoJL)( z>*VwSD4xq&K7{PsBt)rOj;T)5S*581qFrUsaIKotQvYr3GU}Hlmg$bc7%JD-J?4&{W-|`YCyIXC+o^zq2W|*81s}~gq>^NQc zXlr@^6id^TZW{=aHgR)*1gU^v-A?SkRp@a?D#!m>hF*vNQ-)^gS^`z*rgW#0Jd?BW z>gG{PJ}*DV&Lq}tnz6~g!J$$5D#zU)PJ9c3HK5z%;4rj=`qc1zHq^NGr}F(WoEjGv zla@Kaf0=WkYnjd-9j(ag+&UW(=6mbj9u$;tINCj-w8>#>*~cq)_Zv{(=Yp7fd`MaR zuWTt*)qAM_e1c-F)9BeNoL+~sr*>ImP;g>;Q2M=ZFG{Zz)cN-%$84!#pz_Sg6p?O4o$IqxImSE@TSK+j+ z^rNjbCiN+sNCCGTyJz`Ar`_)khU~X1HAtk{CLubt)~%pHPP{_5xWIPpk237+#9YRS zHP`%19?w()&IUL?wVa1zrRDZr6NB9^IOERN*0&U3+$3nO4vU~A)1Qk)Pb%q}&B>vy zvJR< zz}Vbp5G6m_wV%~Dqn94ulYJCFMMb>32=9Xd4iVu0oCW#HoXw<{pTeAX=ERVEA9oLW z>qEDt2I>)U3W)z*PU8D2RW4?6<*oLoZcuffaca@jT>F!ajboX%IvN}J7#LCQ`wOk1k`U~VY#n*N%;29uw1Gyo_J^T|7KiV4 zHvd1e-a0Po?s*?xT3Sg70Y$nSX(UBTK)O>T1*B6#DFNy3MWnk+q&{2xV_JT@Ur_IH+C}8m5|3n6QHTh7 zJD0^bRC@@RNBD2QVaOGpJ3FR)1}?qlHEbQoeI|Kb4brhaUhFNshkC^J>=U<{h`E(> zhda0P3QxGuQws_^yc0UGLXn`RVHnY`{#({%tXSgcpziDe)1= z;p9Vm4)MJwb#__a48qKIEfpmh-&K&&bA3`9CMRyEg`YHD7q%>P@AI1JGQy8g_3AA4 zkMjh81?_$qo_XWu@nvjdXo_ru_rU2S1fb=2bD!~E@Uz>|9rfeP;jGvx$+BISdEDp^ ziXM2!b**QESPsY=2i$;+uiGH5dcoVuCm?|Ce`ofocLg&&3rlNWKMW+tmOJ=2`y9Rq z+3_ZO`KZGQ3x7ia^`L0ZU~lg?8KhQ|zw(&eV3!qBDe<8d4hYJjUQ2!P7Z4;r<{*0E zH&qdOdn5fTei}`+p?_wj&Sqoj^7S2WaZF8vdf#n=Fpj$rV><3gBH6Y-wT=Fpsv@8& z8qSeM(+U9V?-(D1%q-D|C+do!gg^agW7Be(&d#@0e9xny@? z##_jn4aPM(mL6oZS8y_nZg`xC{v(;59HfsQBvDqeMVZ=?y(uISL&5 z?SQ7Cx13mA=VrbXvH^{6)NNe%A77c~kzm{V9iIE=Si2_5!AqY~l~@NB3fz&S=Ii|i zkd5#;Z&;{nqHS~#NcH#rkBh4t3zDT?fYnkX^aw&hhR90$y@_qXqZIc>kY)d*pXP(U z{!?fEy;<)@o3*3G+zxMVY6{VU3}LHz3Z;=>jfW~)`-PlGdoBWl)#?-n(<>YRP3Wpd z?D=KZuGVhe;V^*TVXe9gslrMztGwICgh4PXJXH4YJ z5CjCou^&Z~*-|XtZ$sbx{uo+c`}TYOc~QeqA*T6`v9>=%B8K!~uvjH3nmqd>s#dDj zUvhOJb1baGkGpDBK5!xhJ(?YUll>JJLG#O;l|GvB{=XTx(IqOf6oCKTi<)G3VuJ4aVcCx#z3;2s zoAix1#WB?BFAOzQ2&XU&xJ~;~qvr0rTmN{t8yK`$^?jW^_TO?nxI5SQq2ssPiKb4^ zI8pTG&oL2wQhqRT_QFBU%-+J?Sle!?|0(nK9*hhwruAdu)INf)9&kso{L1 z+gR-rual9DR2Pa{CP8IQb&8mnpTr{NYjWpWJ(tV%++MoQVs*Q=!}G|6-n>vLEt)8)y*&He@!`<;(_G=K$ZOpE-SuwC zPEJZv6uDeI@IG&lQFtn3)n{I@8_2;UJ7iuFW&Qveu}st2)m8HqI|0&vRuCoo{H4vq zf7YM{Uqjkn-KsQ(ZH_lf(e+4kNC^Jd7weCo?o!cXyx6N8rSCQ@Y2|!#@l&Q+cgid7 zBWp_oU!85mVLsrxV^8Z`b$7>|2N>-TkViY`Hq|q_=G7v49gcd|;+`!KddVFsB}3wS zJ{D9afo&grmS0&oN4AqF>a%ond3;>bRWT&ekd^gw=d_$SXj%;YJMJebeE(j;qf1Xm z`A3>UV3#{1k(OG|xv{0Jbdm@2M_MAY zd=<-Rfz;5-A^9SPV)MwG#@(Se{Ap68dSReWDxY2$!ENZlX7lZy9WFL@+5ed)sMDrd zYoDp&VEmim;lozLQmtfuS&rm^Z_oKRQXFORl&M~7oCC_)$HTXps2I8z^5bJw-Ekg< zo?pf;udYVOZ0jPX3J*V)H$=76^p_`y#`kqBL?T!}1~J7jAn z;8kDqL~pmsx+s{w9D`)N>p|q&6OziCJ$^iA^{#x44HzSAE{8u!qtOo16 z+LWxio1omC%A|=>vs0IFQ#o!wv}$lOI-*cc?v{OkSyV6BmkPc4{`LUAk!C(z%8T%G z9)S+T2{sx{RPoKTG|9#~Q~TH*7l(L%du{2g~MQ33LQq|VQf{V_(Mrd^LR#sjtfMOrIkX`!v3x?#Lo zaxjV9)Hi<$Y}s0xy|ySRC*2K|v#pbUBEBLt(2a*iyyn9k?KkzuMfiq%n|E31<2 zJTz;+ci=MaaYgT_Tk>SDZlp@7Y$2*I8qe~56#jtygzirhSCtF(1uwg}Cb&UFlG2l|+tzB#f&&gITIOClYPe zLvi&z+UHyr?kjiE%+9rvcGR8WGmItbp%{8r)E!zzuuLu|=Jk*{>9N{=b3TbYGtp~? zX=)l%q)%EF_R+Lks&f4F=D+$3z6d{y7F4ptEH|JtFP~|ocF{P=pV25Z@4O+L)b@rp z5}uz1i|UTEDd^T#*Zy*o8}yvH54sim8CmF%^pcls5iH=-$e9e(9n#)wEQLzB_VVoK z=hz8p-WHjt`mqxH(O2H{TACzm()0+Y;-&A5mFpw{3TNTKqA6FBfhs`?m2c{~mmE4; zM~veoW_jIlOf}W@$DiZfZYwP3=O;z@sybhwl{~rfZgSqVAC|)KHhKh(!&jA?CEv)Y zeveUm!~Ttg%gX^(b)@&PCxJgK5SJ-ixWPGR7u_B+fdVLy!CqI6m;Y81G}BN+FfQ-E z#|>MfBPXa%Z=p*5XA5dXqvuYUWC7d2yU#Ge#NTaIoJh)9V#I!9#BkpE!*6cSRDx2>2w&t6dIU=h!?&>A zALUVne}HJ`vaceJ`-`I|VEk1ug1o%uWty6H!CRWm=a*H{@(nLSv24p1W~*Wo15EH{OikH5NpC#C^N8KTrlFxqPSIdE2g?VGe~Km7 zs`l6Fm<6`T(vs150XpAYCEtAeS0djwL#`^mai3Yw7am?)54GSwjOSQIWL+e{uJiq9 zW+uOdNs}Q0A9f>F5Y*!|Y(r$RAU3Z(t8YRYlE7*;tf=Xqp)_zB(NB$d_%QMPEymQ@)%64iK$DPl zAgygwUhMrR>Sr;{;KgZoD}86{T0E=9xaK6F#l}ub5ZItwTz>xNM}B^=bao*z1YMRA zi>qwwX)YUhQ4h(PlPJ=d_$VSKe*Z4hH>9Vfqw^9mu(D#($#`*ld%HFufr9nxV`!Af zWAm5Ea$7og;y3V7982H1yB6zWP*O)d*g*-(Dl3ax)g`eA=Kp*Bs&BG_ygyZ$e)ZJ-lna&({+gT9P7yO8Ftm1glX|(o;wFR^ z3jMs%Tcr)E*@Ia>4gdh~&+VB7q~w&8HJZ%z(=-{5A_OorgOHOpc8Td>GD@}vH>H(a zkL&9x$A&Pt0r+>sY6k{gYMNGeKXKXTcxqnM?yk6A?0{@%E zVE5wpcHEWG^vr?wS*327MmmF6Ci2+l8N(>F+9F*H8ZQw_a0b4}kRHen@oF)&VNhF{ zHwPc3GjMR;o`2V&&WZDeHodd6QxJ>YBt|Hhn@ezfNC>@lqIvDoDEO8pf3pmP<@`Lp((8vYtq?oZHe=B6>ykt?9DHkN7{1ii?Y@uI3%b z6hnV#fq@zLvU5+JZg^&9$GHIuwbks6$w8z~~L$M8;~feaI75d z_bj=sO&t8#n&iooT<0)WlJ)@tUKT)71`-Q&L>AmP!ts~#UMzL+Z!_d4H*d-)3=0o` zL5_pJfu6Yt{j0s$9cgK4zoS%W7mdY`*g{J!AHi(G!@^2YAOzSz&)Pp`{)6;6_B8^D zfXz+_z~}?Ij3eD-=0&G*S%L{Y9X<7!^VFX6`(IcBs*{z-h<-p4!Ib3TC;P9lfdX>R z*bV{pidq)z$|-PEA{7bx15G)%j$9k{OM*9EK6UfITUP-4*}_wgj^te*(qWwX`gg>Hb;5O*#J=sAq3;{+>`VbiS z1v`6dTq5y%wC`Hd&(Jc6;1kp-?Ivt|Ys(nxP^Vi+{O&bpV&#;z=hyM>H3#(qp5%dY z6kof|n0MCJIXllt!~cwXao`059S2@9b4>UnNyO}cVi%h%``i=$2#|6L2*@od`uK?I zv|{^-Q9Z^g*KcKdjw6v7*?G4?(b%w*NEXOfVOEVX*J-tNz?v zM7OOu&_ur)$CStJSp*VV|4=|c;Lw~oN;Z=GCEtq-f&UrS#DrQyRci|w!(E61S4z|x zp$mwShH@iWu%s*!G9rRg&?EbXxg*z}qB>gv8`_2nx?zx6bQ^y!HWdh_dDG zw8X&sa;?F6&sgq*1L-GI&R0jko_mwT8#+`^0nCmm>rJKya_~UJza-*yjp@-@g;6_d zeM`{GOi&C0mTEbW#Ix*l?zBTlRBgB54Vvk&X;;c#5ckJe^S-X}bovr6^;q!f9vw@X zcb)D&z#KNOetW$>kX++-Yz`%$%S(HeHwx-O<@jN?1gusRCnqOIy&#CefnQD*%~gzf z#)&2SFSi_<)%C7N%l>_$QjG}sf-d_vf8twGG#-RVB?wcI<5Zw5LV!;Rp4~96`xAT+ zylc7WU<)uyNfEH{^lYrEibZBmy#zHlTaEN^ad2R5ZHDN|0+XQ_{ZIb2qr|Mb^n=T8 zt5Gtx)0JC`f0TM!5F);Q^RHLqJ7E1@tqLJZ^#6`i}*!`OB+g zEKWaMoSjt?X2!-O-?kI=wdv?#_8?)j&>3&=}H#|${EXrs~cwBSLHI(j%1iANBmofHN*YChocb-u-pv1g!e2rieifepfo!Qv2LVj5H3Oc zPSa=^xqVh|xLQs3$B zexL*K{qcAHx+tNIZEx4iIY|Ja=&s@2NEXfOxYbynpp!E!^MHkeF5N*XP7aQ?9Q@cc zZ$GgNC{$WAF7A_qc%}_Nc@LO}N@rK>pwJa5;7@#%kU&a8$v}YCTRS0Yv^}%4e+##3 zK-sK&+sRTt?>kuT>l&LGUJ(%yc6R&yx(y5|+6DwGc^R3{6FaGThQH|K1>PK;Trc|L z0(^{28Pr;YL|GbWIeLO}O=e)@I+EPQJuARCxNK*!cZehYR$HbC%Bq1PV5SvX)viJIDicn_-~IOX_RKIL^a!+d)=nt@ zTAKJ1F%=rlvViDCm;|8ljY$Wl#YnWn8u>{B#%#epwhb zSFwv3iRChKhL?b8>bS)<@WQsngQ&+sET4po4D_lg(=Gy2e0)2 zqb5Vz2V0UL%%TJ76&Ip#5l98M@q3h(L|$e4k|FINQpOlu$NpRD_E;{!CV_`Wg}F?`sT6X?t|XPa03i3N$v)YLRUas4LeJLDZad~Z+4{0CJd7L!I9 z1Kb=Aa%HJV#Y*O|hzPimue)X1Im7ZcBQ7&L+y4|%+5LY{0^xUN0^uln0VXW?JyvQH zP%*s8Mfv&YxTU|d8X9I+jxx+3W(aV%;NO!|CSKYT?Nt4N1AZZGU_iN54B7^O*SZ?3 zKMt60D(e3J{?-VPB)DPuud4<8#qQPBoUWBEa6f@nCob>?J7YKU}a-t z)&zNn^53P9;e4K%p4MbbAOwd>AX}!NfhtRhv($|f=L3FNaiL8cj`Kb~ZK);_w$+`+r2v{B!*5`np zM-6kfl~@_O|8xGzh>mp01Jl;kQBjY;EU;n0gQ-pe3ZHtH?0>C%sK)vpa!7>9knsO} ze_at+0beuCsZuu!K`lUBWJH2w>1U6^^nXJtvBX6G=lkHMj=YOG{gl-<;}b3}Frp>4 zVId=fW(ldE?*jIKu`(iX6}3?_DF1uTv(?qr_Wb?s;vXJpiT`!WlsO|6ouEMO1yU7T z79w!0ll;8J#q9oPn9V2L#302PMJVY3>=Yai4&~?D$Cu!BKtn~HWKgjjEs!ThF6E1R0@qST%498L*l>l0-9ioLqx>3W(GeP zgg&@4!8{8Jm=^qvej)ypHzEqnEh@t13ba(BjeeRK@>TQyOi&rIg8JbDz-I))L5PHe z1aO0wX#h`pA(7GpeF2F_!(1_0XxhC)O7==>HKX`+U~c1wd?p_)r7!ae^C=|GI8up&bCJs>MeC z1%w~#p^&{y#_vT%gmIv|oZP5EwNrj?+DE{@`wDvL{gO9YLjf|C1|NNN;iGF%L2n>l z0t0~^aCC&uMkzwdz|;GSnk@$(P?jn^mxJk&uFLgmY*Po!P3lp@BO+?5tBs-Tsf)*# zz(xZa;|gw2_Iph%k;B!Zp|mo+dCklSLbk5c$B%EsZgvdrwIh-LTC*T$Ihf2h^edhv z^`k|~2Wi09+RR*-pPC9z{COe)Y(xfxaZF!ZxU}Ohe1yQ&2s<_XzV*9zhD~A;z+L?+ zxX+Jq3u+bqf_Fs8OL6Fhx2em98fx%hieC08ZB7K^Poi&G-Fo{l#tOJfDN_J%RW{Zr zhIg0?Sdb>m4LINmfxa!Svh`UQKX1LAoMKoY(=R!WEb~&U?U!DLb{N;p1QH{fH(7%! zjOtgG@LqZ4Y<5ug9Qoh4AmBg|k=JTy3xVHV40ea~x}8NM-$ZsR*{83cMYX=(dj?qB z(xQf`Vha0-7HMuj(dizLwie1Q{?;%k`u?5&YBM{YMF+5fCCl>)3NTI7oTR88K9ng& z%FxL`Rs;6c#s+eC%g*!YS5q-Ktr-cNIm(D~8L|N90vxVK0b8E|ZO?J=h0J3nYdIR= zS1Z0)Be>GbK?eI$3xY3L=)+`V%>3jy{fnq4xL}4LCNruesz-pdthaHwkxnN{ipXWu z9GL|&NFD4P9OCC5up4UxdZy?7;H6@aLam8dD{4liXLKPX$g$d-7a5s@CX7`=0uDv4K(}{ zdh;w=&4);pVw@SER}QHacNcBD=~F4AZ#||!{&!H^hEZ78i`dwrqp#Dv-4~WSu8Zs6 z+xap>uE#u^*N)fU%HE<@1qJajF@8f=XZZA<%5D0uU@- zzHLi#=%#Qpt<7DW0#Iu+mA{<6?`t^NkGS(0t*p6@QsT7pNx5YTtI~8S8M9QLiS+&~ zzs=TQGk^ENcgx!I+UAUT?X#=UzLP*=@H_-Ap+83E=DemY^WNmpH`Y{XGH(i4 zi)0}Cb{`&=0+Q*0SjJ|PhtEu-i>okMT$|xqc@3}kEQkf0^|^YAQZ+u$iSuKDh;;$g z*$E!GN!4gj0>g9y(upPq`2r}%F*QtwHZ^-qE5%AVnUAs5ojvwDdS0_morA=}D=T9V zW|+0*D@Q?W2caq2C|SveNWh1sh^Xjjy%0l(_(?unauVoE$Xg2{JMZ+M&3*J33ySYy za@$3$R~b*q;k$&;ngNFH0o@0Wx+s;}mcgA;?|g_5gHs#>No@y3ISPs8-+%)Q?a(Yy z7dq~rPyXpj1{rOLdR)7T$6AkW?t?fePPY1k{>f*-hK#r51K=fapctK6lhQ}cbitf zDI9O4D+dYL29*|^<;Ai)mA{yOW(p9vD{jU60dYYwO9=M^a0Bi=J6Ux#hc*Pp626;;%OVAz+o7vY6UKF)yW{k{mizOp*AtYo ztv+8kFUgGh{@lnhkw0S)*ezvK?-w0E_V=+l(5y3=kXhb8vW(X=&v9;cH7?UMGouMY zgGg{S;fZAlXucZI>{)kJMFbXy9925d%G1-@;{{JASm)a>B}g#Jz3$grL{4Nn8JMkm z8!dzf&baQ`@O$`b_Pa+G(%F6p--eas)r7yU$zF{jBCLDq{mAQjQTggj@ZfsA=C1CK zPkMz}*EKBmvP_0@;rL{9x5wHkU>0TL1ao^r5pNTq^4Gqy1&)+=yjRbqL z*eiX{>o&jx|1vO?;U7nmqVbjd$R55|M~oe5{gsdAVbZ5lhn~&N?;XaOE!KY3V(1St z&#F@!ltfo{BF;sU51wEDB*yV@Y*$>TUVQ;htk+g%-0@3*r3Sxbxni?TZzJ6tLh%I0~Rc*^SHmb;0LK0WyH(Ov!R<7th=Wv2V)ioRCp}oqt+^-8s<1OVhVmh4Xrpm zgM9zmh{x`gRnH*JWklc8<6h zdp@Q``~wf8zAYi8$3_NF_Iw`%X~z2~fm0)p$PeHI z)=zu%eXP0wpyXWpeZ%J1(w8M0K^Kj?1IOYA$hl08X0*zPpvn#?<6ck@3dF0sn+ai* z?#Fe_Hs%j+hr6U-R>?K@EvxlWIx`1%oqR*4<59eupR|-J<_MZ^D@R*s8~%(xsk1=U z&vd>gCLVt!$}|TZqh?uVBugFqyFYlrk|Y)*Fmww9;_c5(j4^wEHK>3$VU-$BTW!5iYynwgG-k=RyHXoV*T z#Gl|tDx;5{Ao6C;=(E>RQFuenooBSo&h?c+mbtKCE?U}MUk0qVq_O!l{ccNkt1EXV z#vOy;C^B4e*nSoQt(y}rXqqX~}i z$*^0O+Kq)*Hh+bt-`=W6juebAhh56x;-^uUTEFPVEamOinTPy6Yt3V>dOQ%OEG#HU z9y=Daf|v(_1HK(t2c0)PtWQbvMHha>2`}8OXtY4hQ;CS~jY#IKW7KJB4n;vdT3Jz6 zux+Zf-6vCBeePQ>fez*r-Q#G~Wt|Gj6wi>4J739J@}#9Vo~Vjbn46Wk41;27 z(ZYY0)Kn|dw1JO%+a~IJ$wG%H1Ws2 zcy0N3-TUdi+k44&dpGCx_X6$aqGyvU?rE-HwZuukEYvNxy=J{ly*N8=wkG*+K)yuB~--o8{-622{8 z&>Qg7bxu}MT6#uNKC*Qg)MljF2omCYfj_lX3=B#Nh!L+ZtWu1i9Kw9Na*+^FvpZPw z6A*bxG4$P2Lbw=?ZxCIP^K$39; zT>Br$6go}N?XG+0v5{jO!QIfVbo=Fwc>QLEV~PqK{A?Yi3gO{fzOnoC`1WPfW z1*C$((kYTWrz(k6!w}a#>AVdx)X#FQ2j`CbnNV+9LUZ>2jHDupvV+nZ21YS-=M`RH z=T}1nW*m7lrJb$q_!6d{*Si#>ARe&QSZ#)-0OxBbjD$cBa)j)2iD`C^$r=5I2?{61 z!oGghW`@TaK-xCtx?Oloq}?#6BK;;nIPvrqH|fVZ-K)kM1bP(s??_^Ni-A&qZ)Y!j`mRf$LWbkvhB*Wrh&Z@9 z4c#CrKVYuPVeuW+1`*>~2+{-jXT58XePKypnXW{K^gp6U zNZ6PEdt$ANiy0F;W=-ofkFf^#10i#L#BBQg?s*Rnu6_-s3bx#=v273zVsQ_$`zNK5 zoq4H7K*(`q;Azu!U*7*`qChchqV~8e^j=)l{(cWUOl$E+Dp+p*vm*s(69YX$vtyLH>_FjN6z_*D$O)ycxW*~tDo^4ZZzfkdVFKy0RwA?pufAo4EI8M021 zG~;DYYu*{=s{t~cr9d&b6%vwtcr5By;(b~`tZUy^tk*Ef69NqjcQoGXr0G-F|DgA| z@(bF^+2;bYE9=QusACG^nATG%BY&p{o}lMH{9{K>Qmnr!(X{q(w@1mEvJRmTvuIbE z_TY^R2439Q?Q=gVM5Y(Yy(}vOo$b+HNs6n*CUHMd?Xa!Aod4K9lY56qyAS)w=giWQ zcV2X|khAm7j!Qsy8RHT&{q}o;ZDl9m9uMtxvQ};X!)9}!cd*@j@NopEU)YT9|2~ZKaC}|z<&0ViI{ES z=?5a-4<)dfI|G*?%oq%ofk@GS@dAG7%+m+gu7#S&}0)#>){PX-+g z%_=MXk^v_Nqe$(qVuTp`zVCzKLDV0K4zdFJ*RlrA~zFtM+8+d-J4qNhKUM0 zDa`2AutwzZdR-|7@m{xP2hXUV3~LA-&nCl^Vt+dQF5Pf=Q9u8h5eb?5-9Jb7ubp%H z*lq|Ij6lDiCOx5mk~j;bGOj;jdmW}ejj?xRfyogfWoP3^5jF9%m4BwHsArt_y-ik2nD%#~y*su=TVUQAxL)?h zXXg#ZN}?Cb$M3B4E9d4Z^{-&SJD+;&vjwoz8{&1yns48}oCrJ6)hIFR(wCS3H zg8t@r`8D%SOn5RT`Lo=>fth(9)3<-(W+;j7-cFavc;tD{#VPruItliJEn&E;`BJ?e zczV*Huh7(F=3%>rG!!}Z=q85-8n8g0kF%90XL@A`?hs%(T2diF*pdG#S#R6NDzfMa zcU!dtqe@(}Gc!zs7uk+6q!yN%bt1RLPF1^O6_?;Dh7`PsWMQ_Lzf<;Xy!~v(l)mfp zv3*@B^jB=hn)36r_3k`SB*DBBoal$tn}eq1R{R|+yG9Q;4YrPx@`5@0_l!0& zTQ#fq$#w*5qcXot?s^Y#R8Xe!&ma5IxP0N1=Nf(0jza=^_59T{(PTl)wl$z(w?8;i zup(VOy`ufFm$?%8AL4>yFTJil&-Yimhw!86G+0DxqVRK9znciIt~5T_T-pg0!J55U1@R5MI>=S9MbP(;xsZ6{sZ74| zu`t<*sJntyaE&;9QXscX7nDBl?cb-gF8t|2r}wJb73mW&JAXe77sEoXE7OIfiHcr9 zB7>&0Gs1$i2>i)E6h&0tH{)wZGU=KPr+c{hD9~6buvw-)eamDGl8J4T!^v9p=*^ss zCVgkRL#qBuGxdR)lP-mxFFhkNb7O0ah)p4S@Lgl?7ehBaw{T66wITPo>1i7$Q*XRl zpMkyByNa?@aOTmnh;p6@N&8IU;ca5>+4oh~VUDQ2abg%MmE#JpgiB>wlD{xwS(jbzx7x1jC;C}d(!tybj z&9`FeTa6y2kv&k_pA4vSY0UJ~T#{7R+KmpNBUBcz#|+M7X0+By;^r*0@^$ zexjMM!Krbvh;<2DKDegP=ZY2F)W0HJ?gF$NCfLz~BJz5k@pRc>@7%raySU#z-hsAV zekQJkmS@Crpntei(NBIhxI*ceYbZ!ZEZNq~-W`%r`w&hfzB%L5 z%7f_(morY48T0HBPT4T2D_n=0&bWA;zzRsdDcLM-0wvMlp-=8k%|sAP84o?f7aerP zAPAP8$+OEm$g;~h$h8~taZ_oG-3fYw1(L(RZcQ=7YE&eiPo+HiX>AO094x~eFyMGJ&M!V2S5-Tyf*s6(OAQpdz1c*MG;Zb@*q3;7-q5i4Emw2p4LXF4sX- z%$2=sS3c<3x4E)R%G~_h94keg=T%Fm z4HRC+d*!0SlGkD$&-5~V_dN52_`;sOdX7gF8hGj;CL!T}3Cokt9!W|f9WSuU0XDj( zdd3=ejpahA1S&)s>yO-G&9`LiQP(%SwHK{|ewNWC1Mhe`8ItwBIz5o;)LFQTtgbfm z`1*4SM91_go8xaT$);jRd=5tf5?G5aZW$s`lrA(jCnY|dh3@cfl>A+TVs6v456B%f zB&Ne9OY|*b&7KA#?8vmdDPM=~Uqu}tCqQar4fpFY2$0XUc(H z^aKAU)TeP})CKYHDg)1*rKc85Q{_BjMHLs%8b2V)Ep$I7d=sYVE_R`DrV%N8^=n#m z{%G^?O0QDmBt8y28OmGKDnohhE3NMWrlw4UJ<`0Bgr9x{1zgDC4!1d7qC6}$_LP(a z!2EvQDTd+IE-%iC{Tv9@ZD6=Rtpfk^On z$kr!8iEw^~#LOr9BjX<7?V(4*y#ug}3@Dpx&WB3Aq&mkmmzDP1h3u*gir^vf%{oxd zQEeRnYhQ9&=|;A>$6c+gFX?(a?her_L7|bim^xHu>qnDx<#>SsmhK1!0 zkkuMdV|RNy`i?ymiAeD2zrvoP*_oNOGV6p_0oSwY3o|a2=Mlt6R2s`?1 zMUCbl6w?thYmsl6jr=_q1Zu(4Nf6P9H(6l;QWMr_PZJcwPH?vn@)wZfNJmbo5CFC8 zT{FdTM=1#DPzMc`bMx_iZZ{gYLJm7-Y<&gZ{q4&ri1XTHF?Ok`|zNM0XOq z&TnqoqH<@v?s0q`@=7zMCCR#ab9YSV9fs%s>!i#BCSyt})k2K3|5;o!N9_p(qx)U1 z!cUzeQD&VN7uwRge$EHrn49)Hi?1n39?IwhiyAnmCrbRN)V^~rSJl(s+91$RclLEQ zVca?KQo3EMC>*_<>ABai6oh5d&220z_*VnK-nXB8!;*fGO$0X@vBI$Z@N;=NHgnCo zUB3%QvYO@^kz3nqJz?BcGfbZ7+x>Ho1+REv!c%E*2j2-US-IJ3E9mW6^ zYlaynb|gn7N>;AozI_eybUzf^mUIfK9Ydgb9lz+Z<)7boFdSVp5>bbd`;*;$kMj(i5uh~mime(}8N5k!Z zMt*R+>;Ll;OoXe7ckewQS>AX5SY@dZ)pfmvyDZ(nW%+XPVe6HOt6;f|9TBNmsS1rJt@sgWyre$O7?({ke0>mgx#NK@X1hUNgXDsx+PI?a1`lWKDaMAl^UhJTaF( z>m%wxu^p+)DsxUYD)fXc4OI39!1{43v7bx!s;c-qJP$gU{BEqfFFT(rK&f;zq3Tke zlg!C0{P#>Te~7sjJUaX~y8f=0!7M1D*Qk|NT>a`joY<;Qc*9Jn)6B4ky2lc@IF%od zdf8X`<9wvZnI11#}#vkd{|_|E zvBB%ln>^s@m0tvv9XmXv z;DPP*s(Y$%#GJt0-FGlr5|gHR#b6}P+x6kDSMD-2@!)L;Y2t6w3Mnq{k(htZ23)Zi zXX<;6Zr0J4OK@hRqbEj5waGoCu1qIh^lElGJaEFoTlUU--Dj?{fzIP3X1lU9mR0y< za#9nNo9$cU947$6_W7lpudGmu0oLLGq%f!YWL?QtyFOm{(g`bF0!0=z!H`^Eh~oVE zws3-9R#gZSO0bF!jY+FL%u4_wlndsDX{X#%a>Aa5sJtbJkXu4jm|!~KB9)G34z-Yn zGcn;D$6o}Fl_*TlmhQ5g0?ARQdxc$0jm=8K}BD2NHFVQy*jT~Fuh^Fl3? z=Om>O6Pbtrts9garGfEQS4jzXhX)5nF!YHKr!5wS&*UZd@9m7`?S8zX(MxoDq3W-? zf_xVzswlQq0H~MammtLJpXq_eW|QTb^z5zyXB9_f8hdI})F+Y1)}T!8F`fNP$lFUK ztN@f;FY|IWrlL;rV!){NvO0@!Ro6~;7MrEi7QeYD>RSO(0_U9>N|jk9CZ&I5WaC*8 z!B*z=)fEw|?&R<=d;YPfBV;pqE4H;cp96_0+k?$^HeFloj278{pgU;7M}7m=5x);O zcN1T1_`zueef|u<3R)$Zvbici#)d!mb9Yo221?lHp8S$a|2FU;rKKEbv|Mb?&Wjob z)6jWdfg}5&P!RLUVOQ%v%l^mn?pG9E6=6?r^+)Q#4s?;=y&5uTHfD4gzMB=~n^y>- z5#5R`%>Z=hxc9lg6WU{SYhKJY`;?Z$t}2nvg&WPm|7>!a{S^_t8|)Zuzb_RMW-V;}sAEbqBWpX8k&Fn$17eUVo9aKmHp)z8921p|T`pRi< z)L%#|;5uY_@F(~JxFgPI4A-W4IPt*hA)o-DcfQz_2(h@;nv&T2sXjl~Q1H6yWH?w7 z1OqQ`y~A)(#iTNjoe%;~L7`-+!7$lyLmQi-t`%`uB`1i+8Ul1Mb*} zdYtPCxJHyJLhV?_jL^?trL#d=KU4XEQX52>m>!`Cgm*zR=Oa5I5bd+{>d(`Z_7qtF zte71h9su|*d6dD_w`8Bd5G32^OEAQ)m#n>&xm9jsYYV-8;@*jQ}z^7A*Vf_zAR;6q;1eka4bB!ZaW|9Xm~ zcdhi8a#{le4Lbw*1SRkkAg>BFNMMkYM=+!u3;-E3#tROBN3@}x8NrfUoMoEKolkaj zeQz1k4x~aX5?JL=Plof=08B12Y@>*h7NU(vlfg!B`avL-YcJ$U1Uy#_RH6<<4t*{K zT$AqKm?T#{U?+lhOh$kIHXGI;kuv^8Ff>gkIetfWS+=0xEGm4myqKn8FjJuJz6r{5 zBo73sWkO;A|74B>z+1~S%>_vLqkCMN^nr2Ki2r&nxB@~aYZ-LAe);yr!e@(XX1auGoQ5VNpXLR9&Rx7>+B) zyvP=xm!=~M{filD;sijvGEH{eH&ehR0=eDd;$r4GVxW>-$!6{N4;dl84gjKJaCLqC z3aek>3#jLq8N`DZoMFVm(AbgmoNdmQZ|64?pmLzXSfBx{kzgwU6|U2A4j={D57lZO zlpuoc*YNL@18k_(r?w0@J6tMyz#OEJ^8=-5*T22=`&uT@-yf*US_5EV;{_VJti&2# zH7C-bxyyh#0Qo)@ZjG}HWVfV-DR1LH6@PdOAjuGIFfA)UbQGo-A|LgyuBo9W)_KLT za8ngnHnSHr90#u5mkP=Rf6)0H6zxT$A;Lnn;9JLti2(pjqutu4r1%hdtQg<;*zeMUt=G^>v$g)mN7rTbqC3hsWpy0$R2uq>L$jI z7yvD-FIoD7EQTwF{@C{~xM(8*Q?{RDdUUis&hG_Ch6=}f>vleS_+V3%EP}m+J*T7- zeCKp@Bbjsvq^HI)d(re!AQ^la$YJ6DpvQN_T?-BHc)blyoY^_Fgg9nsd!H#+Xj-1<&XGud6&b z=^=2XMo?nD6nwZ&ae&+TI&NmA31P>)^1P|S;c}RgyT--6D?lonU4N}IzSKr7?T^_hAwCW#aCil@=I(?H$)}AqPVe&{ZdNios4WQ#OEXM%S^!E8a$AAn%ptJp}`>1hA>4w^UKs}MqEVIaep=f&M1525qh7f76hsg)= zc!sL(oJk=a&wC9&G}rpnfsJ@v%|xK?r84!-3R?jLrO@kC+7&Ro-2IFhxUWyTe*c8E zfyUGRuNG)w`bt2qXhj=~`8&Bh=3p!?d(T<~CYvK(Iz*8~G`D(YR&GEu2)`)X-%oNf z*?XX55a1j&z?8_#orcRy5e#KzR5aKS6E-j>!qOUmPeKZuTMa8@lW(!XAT@n>e7wWG z6DP?V02bfM$4%%kUSFD|q|4>R$MyG>K<)WO_4fBmNfu^h;U*+Ppp#U4y7BZJiz=3%PypNr>vyZBi5hLK!c*-6Bd>m9b0q0 zF@}w_;3zbV0NnV4Spy1R8cnZsvdD}Fqrd@7_}9EV^IA5)XA+8vL@V4k<7FhcA+0gB zk&UlfE-x9Ix{~*3g6*MLMk(Nt*PKPFurN%VQn86umvM=M)C48?FTH>M%!5Z%`^WwBUqxj*6!N;$Lxxh@054gjE$v%loSj{9< zqH4sAAAJ3R$p-w*XSG?WwY7%qH=N`nV%$sKb6(K-NW^GoKGQc@W-aQ_XKq(Vkago_^Lc)}|B(KTo8l>UBYzv~25rT|l(sjZ=)$^bsZ z4m~4b&6j_=`3pUEYE(gW*3Ho>*t4$cjt4U_O~QfU z*w@pe_Cft?28J9#1cOAjEhh_>9C7@&n~q~tpqEhe=i8w5pwR&xQ57HH(3f@v=Cxda zs@={L$tFchvuZEgV~N$k4l~LU*WNo(hz48r1b|XR{;F#A5ZuWp76xgMM@&hW; zKrCNmWj+~ve42+5U}$CP!|(|$M9|>*2>*4=fo(O-_oj^q$}<&PiL~_GyS{#vva!$Z zQM!6s@%FVTbr81o#iY^@)-SiqG;s$Spwm;z5Dw={{|66nsW^Q3Jq!e4s%}1in%aAB z(v?B%?0((6^OwiZK%f2lcjfpge{K<4N(0$tCpup25MRVKp&!C5L?&v_!g>K2&z z?uVPpYkv^(&GAk}snSNkY`1>kG}&E|`xRu8$m9G~iuy7!?lO6#kw&gQ8`2OXL9i)# ziw0`G9Lvv1-A3&PvOJv0>(D?W<0h(IiYGaL;+sPaKJk>Cwa%zQ4RQ{J1O4ysmY9frmjna}j`0dXnFp%BMBw`>~17 zX{h}Q(4qmd5vWW2fp7PL@Mj*PF=rTga% zI<#*z_YA9>5DvBT1HeEqttX^wX^*(UOe1Yw54CqH*63o|=k@gU zm$lTNW8(Q6$--L3rvJC_3y#uBSRm1`vPXB!jESVKE>$(-v3{I`Hv?!1$O=?paVUm}Li030lllZPJ8B3(Nxsa~40sSvpgFqKBU zNr?wD=7-5p0CxEs*gu7oR8$CEL`LPkt1$4%j);#vAS~yjeO8<4%R;GB$n@sisWFPU z$FyE7lo{vC;@jK|wRR?@tHV7#sGq3_Qi`IOjxpd_+;ZK$>mG0F>G{b|5ek4E)Xzo} zU7;g%`eO86cp<;Oerj>2aFU`yf0(H+km|JeP3l;jYvM!M2J_-82ep5`F;9&3_4&aA zQ5pzq18>vP%pc{AOxBVV=!v8rF@s+kAco;a=?BUAjlCi`)sS!n`7x`oQKd)3{fr%6 zX~r_au*Lu)h;DvP+SmO2e0EN`#hQmxG?<7JX$&$9jKMz97V_>9jT|Z*j10Wby1di(}$3T!6 zWW*;f(}QdxU==J2Z<-(z}V!3 z0BK!bre>m#UW<0kL_t(SBk*4{2frCq1JKdAyrLbf#zBRT{UpC}d3818I5Xuf!;At% z9x+wJ2_OCf^hgHy^KGN{!tZ;T5Y#p_PVA|PNrPSa)!jX(ItGr3r^`hqsX|y$17R6+sBDHU5|tLZQ!PaW4S`MF~^#5JDJG1*dyu zeiK8T3?vV%BYHIi-e1SZfp?5JeKFj;LSgK9?(unJuM|4p>;Cd&JHn9RQK-63uOH zDyjZ^FUNIX=i~v=kDG=l_)5RvBLs=YU`3vAyw5^Lu`B61v+?AJ)wI$a`6V8zy0{3f zBndEtw=TuXz2a`Oc{=aU#oK7o6QsEcYo@fkJbE(s+qVpy<2XYs1aSf+PlTzH)4>0* zCmT@lN@N)toP?}6*bn6A3u2F-tBdT zS_+P$?;}Yh*`lG&1Z068Sqk5fyK^N|oVG1ij%C(f7U}Rx( z8}-{=lrZBJZrXz@#Z0&y3noOnzW>4<&b;d{O{w(~4E6S!mg<4*&MVcjA|{qQLq2j7 zQ&Yw|I+S{*9@F)~rcw zAAGMfU6SU~35W+A0g_%oamBY>-k;_ z0nmgPH=Trtl9|LyRaIFT88kjUiJOIsIL0OAZ)X2;h5+G}r{>C#{mk3_&V)c$zr{3wcyP7l^6Ix2lneQZOS3@&I8)Ld@*#Bg{nl>q)Xrc&G?_dEpp3 zco9%{z0v@ZU0sVi%N7BwoY9toT<40uhLI;STaVA{wTSG>MW)hKp~&iT2{V7r4>9f* zKb5)d{jYxTSbLlpgoB2exr#ZttLqY>K4f5_&Ts1+94};ou^`9QJ|9)r1E;m&b9Oa8 z9jIh^J_eF6&w|E>hvRsemt>dIHZ*~)Dk9Am4aXN2od_1E^`1(F#e)6p6)}8xL%sw7 z>WYMmLY3;xH;>RF(B+VU-c@Cx;M|UMcJl~ydHuR~^7cysNUq`@$y^DR+bZldr~L5d zeZ)~FPAXP>idfWcJVTVgZw84Fs7wa?7Vz^ZxI+}GC!*SAeHj7pG@E?J3*fox2O@=o!FK;i4))bxST(ZmaG z(m*L;DhMif+bnWb@VZgrlYjLNCE^&6;;DDF^|B7(li3=0r|z|PEI9&X#i_CP@M6`;MRiNoe_V8LM8`_ zH1NmgMG$qZgc@$!k2wjPo-7>(d3nf*y#}3%_ji2GPd7XlMey?V@$aK{7CIqq7xL&j z_=(TraqU*84e_pfgE|TCKgdz&5ia?GwlW&guSWe4(bCb0E(nBiKzTu1Xw?@sK=wl2aqj<$_!;DLSalJiA)lo%i)C#qGzvLy-OH z5}qRtZT;4tqhg$xFB8F1@~9_aZs+JpzJdh0O%%|kyK1SNN!{xhlYkUoTP~$>nF?Twae>sr0ASUVc$%x6G1DyUNN_Hc+F$A zaO&dxV0r3heod62YC>IIUB8M*DCx8x4$*xPk@}sajcWpL_W#`T*?MQ((?x_uEw{%k zZyB8W^hNO>h(q-GgqWa7CVH@&+yaHDw2wm3JCQ;h10Xd93w32Liicv3IK)Qf{&EJe zRO57rAyfluH@KLOc2&Xqfu9|1Wu}hLya~ru@6E@|g^MTG#hD#L7S);c`O=rDfK>7t z7@n(Bhq&Akd=d1;`WhTT8TmB0TtJ{_A>gLZ(AqJs>9}N_xa8@N9vd?h1yT$^3%&1; z2UGrDAtkJUv^5OrlBJr`jcer0VHrVXHD)GLTJ`VHa@|ys-5?7bD1OSUZ-BXk`t*88 zSC)Pn$f|nao2oS)a=fJ!S78>W*LDu2kcxE$K5|JXc^kMCIAX`b5>=zgI2l%G#f@R7*$ zmg`SGy?|%Pnds5q=+Y}rioO#$*~wg*~G}c5eKKmA`X-A=EYIU zg|4s}Wd164`xIR^COh-6wIKIuWu0}Mnfg-jqW~(2!NEZ|!OzowBSVn4SPDo7b=3*P z0-uKi@ZWp~&75BcbqAt^*P+bMQhEtB7N&lgP31!33(z+s?+QVaY{5XwO9;LRy_{5% zMb*WyG%9J@g2r_Z9(s;Ij#>Xib7l4&FO9LnCtxT)&fN>3R5^sh=@AII=zf%HC1Z)7 zuse7k#+5`SDk=(TfDFFo){D^;$ZVOAredQAdpbup4!W0|?G%9Y3hZiFm?{sp9uaDC zadG`5|Mar~1d*G)Q+IoKL=UI^LD5(>T>RWM3PV;obbjz#x7YQ^RNf?UpK~RwQqVm9 z^k@Jm&1q*VSx;^`Z?~~8>RelESGXC|iR;&Sg-%C}zwz~$i8hp-X2g_0TMUo1;RRQd!yXSZaLJc>S|0E7< zKpI5+BlU32$$DLG{^ZHWDWyq|jdh{P)6LRhaaXqqJb&JmpLfASsLNy-p%h1g}Wf0Mc;L@gkON8 z+M>Wk5YRtD)IxiE)dPR<_ut}Y`&)Oif0|`g&VZ>9&uMe8!@F8}{LhP}Sb5hw6=dWt z8Zj6yun-AdSaH_i7R*ZZED||dlvZok%EEt`TJhoeclL_?^D>(P(N2#Gul-K~OrXs` zwXT^O-gvzae|~uDNN^q^@?@Sp3y6p%pQne~wu-9`3%8Q)F**LvDVZ`|)zN zN3BurV95Xe*)gnsAP{>E#cdaXe5Y8|F`d;eu78eYHD2<>g?WS8L;&0Z;o;%khzy$A zFs`s?ZbQBFoVz-pusH;w1d0@W8w@e8$AjdAg)l)rMlV5K9rn;M6TU%PA0g%mvd-)m z;*oN|luKI-A6p~EMk5BU3fYzDefO*rz=mrP2u2j7A<&020edvDr$ak;^+v4@T}dOL z4McTT_&@d>9=iJY`0&v}9+2t`&}M9^=ad-MG`|uK&|AbjkcXfWQj~AgQIm30vS{?h zxlhIn9r5GqV`ryCCz|j6p+KT>a&l6FY1+A(^Ef{*kMxaX@FU5xsf(VTh)(kxjcA}N z!a=EqnHuodp%M-RArvE+j$87#k9uFf%bZEH^zk@0;{kt^d!YA+dFrlZ6(9@C#TF@2)wm&!DrIeBq&%@o6%)&&=b4K@z zwNH*iqK7>rJG?bVBXdc^+*!0*927U2JSmf!JtGF1c6vSP&pKb8gAl{zk*p`X#jv|V z)Y{T^tLCKX-HOily6iP~!qoajr#>CNn{u|J-3s3evlb5Ok7EaT<9Dkw7_5M2tyqY+ zOKF@}KG>N9t z5I+<2;9)RRaJCO+A*=(-nSxRxIQeH z$%PPn*o~4i;8Gp>x8sY|I(M+D>%I1JGXIF!asNcLe!rs2bEQ_1C zKu$Mz(7m?q`}fc!Rl4Vh0;bJP1i_|`LJkcf_*YUQ4!t@OCbzY>Qcq1b5U}^1J$b3j zn5O(d@%^QvmO|b`V~g(d>6590k>*>2Zs$#_%c{-ALzpZ&;XpLL< z)3Bpx_VYxldUZw8%`L)aZVf{r+r`85#=Q?#rQ&YqI5Q7!rufu(wvujn9C!zPp(AAs zGb+mP;UE)a5W8-W?P{Jw!)ut%Ae4ujXXq0j{ll9k5DvLCG&Duu=YA&b8mp;($=MLoV^dOkdu=WN;twv z2=e_&9-k~l;imn+$+;SZV9Nml;td9!b^-m&#>#8R9^En3{DJ+MsT-j$d}^F>+&jAudH82EN|IT37RO{6{91Nz?+xd^o^qcJ=Fj`n zUZiAuD5Tx;qW%)PpUl-W%pD!4e;(!3|Ik#0I#Vg;&pRAq{< zDh+_#3KIcRUo9=bV~nf*3UsxS^73LwRY^z?8SrcXXhH-*m_{P7nd~iHFHuu#LxR^i zpi(^=8T_tzr#T^kQ(oL>Kf%IW)o0tm4QF`$6%&WeZV}Vs)r(CsNAnIjogB+U4kH8W z&NyORJ?6{YGW4IC>qz{(#~0jmjz^V-Kekju4uKng{2s#kjoOlhrlXgiHyd(TbH$PP@Cy z{hTiq4Vfj>(?Ej7gfAmIyS2F)E)8yqiFx;DL9KEt1B=seB3nTSeXiHT#ukLgVUnxC zSn$MwR?v-4p{xY>xk|Z)d=@-HXGt%8PWI>ZOkb9t-6mOYR^%sgzxFUJ_oi-6NBb}G zyY2=NxIYE$_W!3lO<#rRvsjqyE`M-+GfVSI=cSkb4@(0uV7B?!uQnP#C9N2F?OmL& zS_C?;Kdbsld6rD7-n7kl5#D~?j*z%6HX$MBaqgeT2!c-n{jhYd7UklyHXEjYo3+K} z+ikr%b+YbKxqQJIU3;)DX1bBnRI9NVM09yq*zcOoa7r$3SMvE^_RC+7WVZZ_@7$@U zqEFgmykNeAWjxDcu4`I*H2PwhE4IS$$t-n+|Hj?Hk^UBB$0l=Nc=iG&7~m9dsFbHBPYFl+-C`X=$I7+f8&N2xKdNl)3nB z*)cIWsnRHs-utt)wZBLF?p+X%jeUC#K^eow)`pHSFFwNblbJw*9Efq8R3SkGSm|uO zneS*~?b<)jEMMLu@ezJ?o6~#n!tLmJUVD6!z{`b>evhfOGUKez!S@8rueo}xd?5;v zjqnVueR0qdTCe1)`vAYLe`!_tg}~YOI4B;;%4TO|EbX~x_j7tyyqun?VM0(nfhFtCMJcei-igQ4kdUOM;ziH?1 z*nXc)|Cgd$*r6v=hkN-)j>kEq8^6yMo8Q$ROl)XyN4MX6?eyJa}+@3J?qDQ&%=DGQSCR7&{w$09lM-@IZC zuDSUPv)(o8*XG8Tir;?qI*G?43KC);nUamqQxCtYImnu+N=9<_#&jA2ckiv{%Tj;M zlkO*xF5+My0m3X8_;j^Ki~xVZFf|!qK~W5C4E(z|9nAl^_GRnw#)h{J$knN-MSS{n zE4t0RGqKd9(QjF5(seEraKHP}bbz6-Em8d6Q_5#mIvNlVFrEB^&rJ?rpH%EkPRaziz&V*W!a>PiSy(@5-Kytfdr% z1Wu+T7eU3uI&|G+;ya{y*l^(yiU5IqgW=!U;2cnJQdmfZtM&yM{-I-JD*mofQ%fr* zKK@r3CL#e3Kt=TT_NJ+EG;t7nhE8FtHGb(iQbwJ3|9)1Km&a2EDOyQzOaa%|1Lo}S zDdYdwl}MI`q{~z?z4Qp;3fseH_$?Dbs-FgP6t=w)IU;cgZnbk#r zimjDV$7`(J6D^^jpdcfIJ4Oh@ge8wONdyIAyrM{Dz7=ck@ygjQA?NRt?6VM8T6UvH z;~YG8ot~jDbi?=D4Cf*>+QST=C;Z85mW~zb8f)Ic&JB23u>RK#>fAWqiFO-~RBu$q z#Pw(9;juF@L7@YSOG%^20VYrf$5VSMcHRpw zyu*uwhdTuK@7&QR({own8Y}FVpxlk3+u6R!5z+J0IPb1aTi=0!?KOjo`KlVv8_Lht zIns!ypC@&+UtL`FaAq9;%H8JEI^tB7xbgZ)*Yfu7@xM17w4T!$U5 zA_wAy+wE~(jb}3pF3EM9T_Skp>l}Y{ERX*>&=0E+_08_)y>_G4QTas4h7oeJOY_Ia z6aVim8n2=@Vn;(-4fjSkUY9H*eQ)3HXMdWU{-RGce4>5XWkW0`!LZ6Fe_2x&Yxs#( z!KeGKA-8F{CrxUZjI7^Ne`A5#Ugb{98Xr4boDoE#;vogfo+1&wCv4`Vd!MLa3Ds6l zPcs5oxqskP`f0y>`reZxg7A0mU){~>b^cpB>lG_Fo87k|BFUQ*NmK8>eNDM%8gU)OaGmqnZsrO?8Bp*yRzbr1O2qep3kX6qbm0uW5d_#`3QOx2q*cg-Wt_a zFOu6P{T~C+&EVaw_AG1lk+z1`y?-wk{dA!y5W&w1jp6lKb=2sbsm)!A5) zB3T^6qBlQzUbI`KK>4>Jvue@XSO4pG#hS+a;?<+~53i19dhGIunFRYKLZqG(}`Mj~b;XuK*c`nc0hU&wnW&c)2LxXaESZI~BX)i}gnKW~R z$Ddcd>T328Y#gUGncNHEJI}Z{g$gSIhd0w_q3mt9=Ca?(Xh#DB=jSBPuqQ_+x|9Z-{A z4E2h~v~mRZ{saSDAlqiSxhdbU?DTtn8y(-n_Si%T+hgW`o$?WW?o{t9Z{!*dUEpI%3+ZpA{@TqJ$$r5 zyCd6mY4&PnSrc_}F2mK#u(E-dn3Ltdv=s-X*B3A6h0%sNmWzKTlZss~aXlx{LPbkJ z;U>v6kVvzEohX1Cb|RfLO5BX7hKYp_s`UN`q%gv3->xvE_Al)mSn%xKx#RQCQuvE_ z3mH$T2+1kaNW0BsbiC5N6o(JyGF-}dX_9n+;W(iCxPXPZvNF`ruNmX zwk6`bbsSpbHGer6D{b_+2zvZZ-7OpW>t5u1cOBOb57m&>cTGapMqq!TDYY<5bu2>{L*pYm5zJzDN6TFxrfpZ(}7)xIazg_68hAd?h7~cC=rcA7?tQ8jA9!i)W z1G^Z~3bS(ljOQoeXXVSj*exbc;{J*o5w5l=L=yJA=d@**XwS3`g~O78D6_7Xgk60 z8cx5sOmxa-NmcD}koJ8vO0*g;zi8g2!So(TY^8QQ%@J-(QJ=H6OH1nR7V2}~U*|7P zrf0wq*pMu^2wxxkF)kt}EZ)yiN*!MPuTcG;Wk1FPqgU5&wo1J0^gdnHzhQwPZyU); zcz2g9Z9?0er+D+=#_ulf^iMaE-7u+tv847dM@2>XoiLIhh$ks{&a0Pk2drO{w{py~ z@D2W+lM`(UaiE&Vc;!KU(?q^u#-4*J1P!!A8}~IZ?%GrchkWr>FtbVZ#PeUQ*7d0w zXt^oO+NCvqZD7G5M5wShhzrn5`y57?LJe1qj6i`_f+A>|#r~**o4wqiI(HRz>~o5L zE^j>%$UVn9W6gcQz6_z*xa`_bY?V5>bufB5||D7ud}T%=$^5G6r@`qlWx7hsBU z?ali~nh*qF`>=*@Yn-cKI#(N}sR87)2>oJCc=2a7TDW~um6OB&I~Y34Qjk#X(z8Fi zI^O7k_j)uxDDc&+^v}@Q*`bc%iVxJ6i|@|d_tKy=8l%0O@u%YB?#}BqgHGDGP}KGd z3b+pX06L)A(dbYBAHu>*0I8Cel?4c10sZ+5KS9q_exknJAgP$DiN4CRY@7@M*3)bC z?w>lJ&Q(}%zu2@5edS|WR_meUg2R36CEHSAgB^1bg=(J<`Jc!Q9Rkp>U<4_#Ma!qD zVJ}=&&S7a7Zcex0l3@@V{J%qh-xKD^7h=iAJ##j*cLYMclskv~hv=(+JFg1%V7nM! z)SMEoFJt&rjux;gPC1sovOkMk+1?JFy<%} z!MjO^t6@2SXd*RcL?KRrCqq}-2PyUO^RSmI z$amk0w3+{(E9UrrT=8{q#fCSAd)*U4uV@H_T9Ao5Cn2?eM|t&aAliEomXv9Atk_>l z^Re{~aktO7%u3o><(y5OTbsI=LuK&*%E(&pL1Rsf`^S!6+PQPSPz^=xYr+Z_*SwUu z1(&)RuIzf)#Egp0yaw0IXvhvL*=Jz5HB9{5S2OW|w2IOD=PwZFydhSitzTquFpbk_M3?CtPP)1k zLaBT2t%2d2v%^2-GF_Naqo2k9HC}xwR^t*56C($d4F>Qde0P`$8U{49v>y30OnDz1 zO<#DOmHr!^Eu^#NqMEapw3O;8N%t+!YVrzC6r^6M&vS}TacdbIl-qhNy%QYk?}rS? z+{VWjaDVv=4$e8hAi8{ZJ9qH6v(kWne%-OVSBUG+w;=;np5q^)_46jQoxh#_q!$-| z_&&$u&K82A5S;2czow@HNRA2;>GYI)F8wpUH4nBbNZxEe zH~j8V;C=QtpB(O7;NZc{9g6mHIoL3bdCAGi6%`fAAMYOhTmS6iv(xF(%DvhHztX-V zDCT;$7g+wXIHhK*{nxK2)z07Z#g4%BW<_9|C;&88US8h1bX3UY^6To0^CA5M;vZy} zq|!W}9Pk)<7T6`JnxRy(--U-CbXqV#TyX`g|1}_Q?%dJN(K?2=kvTX{)Q^oAPcboc zq^VJIT11OjEMkQ&%uH0TX4{^Erxah$B!Z(qq##VxR8&Yw!U4Ojb@ zMh7z4|J1(l57!DWamFdR+T5?-)j% zKg;w>x=>sfLP#rf%3&f=fKmYwNw32teiJ5wLoy!^gHMZa)vE#hs!3CiQOHz~lY+8Bi!KGdvn}mU@-#Q^PSjdC}Vy^55#s*yATtZYnd<^cy_yxo=-&%vu@VuJ~g2<$W^0LJxnC<%j?ja zx!GAQE^VMSjNv_f%Q8(#8tDHy2bA%_ts*rrnDI>IV@Z&bR^xz6lRsj#S6O`9=Im^s zWFq=Cs9q)lM2Rr80TQ8!k&(XbLF|aU$?eSou$Fih77SF|XAE6;_xtm{a5Gp&1`muc zfUE8Y$W=&|5x`gr!BgiQDj(-I|FT()z-DW)x!WJuXx2Jel2Oc5<+7!we(j_>dQe^e3#`3I_>%`39osHkRl%xSB#o z<_IG^2cP`>w=YdT2k_}r3G&ORXcA6M`AO~X2VDL3^1=uj@1)5I5@WxzJ2*( z`PESVJqrp>4G2>ZjHRR`+}vnrXn1;hLUqis%avIU6b-6ibmUI(Hs+sZg-}f_R7OBL zk0rTC9ubEjk>HSkc5=sH^!4{!#arG^xPJaDjWZtmzqSOB!VA>^a+{^a1?Kumg?;Su z!z{i3^-T2AlZ+d*1~9)BWGOQybuIs~_=bgr!Qu0N+KXPe%(f;bsi~<%i%TikN^F#8xtZD72XN#; zkA34?82h_`hMk?8i&c33bKFYMFIwX7*;DWUf6-GX0NhWWxa`c#J*c?jHN$otvY6G6 z{*np9Ah=?umDAKdFuMTdkN=;{~28bgkI#6K<$Cn!1w?TbnNo>^&12|Jt@^v z9B(kn0Jg*wz)XNV!u;4tLrRDn*@q!@L932mFn|b?GJh<-4%#lwnLSz44&95~?Nu0yI7WbYb$SumYoe z9S$lhE328P3K%9>BS?^hmzNh^C>s}-LUwpmvLoD?3r1?=Id#n*|sl~-`-?(FnQpKdg`XU-se(&=`AJ}YNBqG4_O+ujc z@qL&nct&pXvA{HRFhwcC7tOnqq1!E8bmS0?%A`knNIEulBn0QQwWBt=-xo#)7BBY zsWjTBw-aV(XCazhGJNkM4kLFR?X%wl-z)UuuAw!HvcJuYKc+0 zr1=2SYc@00XO!LfGH7k5^NJq^2SvpKRA;>3h+s`vNXTcchEx0kNQ}7cEC6uMhvKgL z!>7Bt#pa<~MBbz%Tc90$>veL}<|8KmMy5O9*bsXdTa$6iLnAe{hVkI~uV1ZO-d}NC z=-Bd3?15crdwV-7I$9^s;Aq^j8*1-`JT3y<;YXpDMa5!aW(aHG>y@EGdNRg78raBR zT?Z;tLj??C1NN5cBD!479~-Cyr(ff`1$VEDogWwZi3RW8&4UIthfv301K-7J$p>VT zL4vsegaU5fT!Bg{*>d)CEhNr`%wR;_DdM)HB>GV^mYASXwt6)m@p!$DxQK|y(f0h~T=LD6;^fSMp4SXtgVoz01tYpi9o?3p#!=znF9zsLKwM5YAtYPF z`NsJgIV}$I4ItzUyr|mOE062myu&DIg7H?D1B6mUM8g?AD%TgRfekL75H=tj_bxpU z6FdK7k>UllH7Xrlf35y0hDv;LrY6uF>(az+q&g!25P*bOCkGoo96|87E3g_8@4Tas z2Kc=N;6+pf3-xJUD`!#?5{24^5ap=a0F4uUU9ap_x@!m~mRM&z#WAF+A5E~+960qnpD6#BSbK$2K=r$RlS4%zkI+#zHks`Z^ z`)pX7-iJRJKg7mvIck_cDYN+l+Xs~W{bK`F)kaFJq5+x9727R(aP197f|B{|1cvW) z@Sqlmu8`B`b1k7wjj#jP9u6aE02rRCdi^d%{N~LU8zVz^@KD26uU+~Gm zyifDq)X6*D{6TgU2ge^Sk^ReH8K4)Y4YI-Zs-2ZV-5x?k@TAE3Z9cvN&!cUq+F6%bUwCy#;GcWpKreDUAEf1zH|TeAjL@9k)kt9Ly& z8}XX10E3o85>_kWRWRm;a`ZUVYiMc;*^U1yQ%D~Hyj4+g@qh9ACMSBuE6})~PBh8`ip)ZYE+Bf-VTLMd%hji4LZ$tIzI|k28OB29l{K^|NcGnO}E&3kc$v&)eOEr%?M8<7ZyB*9p>s? znx + +skinparam WrapWidth 270 + +state "STARTED" as started_push #e6ebfa;line:blue +started_push: DscClr(//trying to complete transfer process//) + +state "STARTED" as started_pull #e6ebfa;line:blue +started_pull: DscClr(DataFlowStartMessage) + +state "RECEIVED" as received #e6ebfa;line:blue +received : DscClr(DataFlowStartMessage) + +state "COMPLETED" as completed #e6ebfa;line:blue +completed: DscClr(//trying to send TransferProcessCompleteRequest to callback address (CP)//) + +state "NOTIFIED" as notified #e6ebfa;line:blue +notified : DscClr(TransferProcessFailRequest //or// TransferProcessCompleteRequest) + +state "FAILED" as failed #e6ebfa;line:blue +failed : DscClr(//trying to send TransferProcessFailRequest to callback address (CP)//) + +state "SUSPENDED / TERMINATED" as suspended #f5cccd;line:red +suspended : DscClr(DataFlowSuspendMessage //or// DataFlowTerminateMessage) + +[*] --> received : CP +received -[dashed]-> started_push + +started_push -[dashed]-> failed +started_push -[dashed]-> completed + +failed -[dashed]-> failed +failed --> notified : DP + +completed -[dashed]-> completed +completed --> notified : DP + +notified --> [*] + +[*] --> started_pull : CP +started_pull --> [*] + +received --> suspended : CP +started_push --> suspended : CP +started_pull --> suspended : CP +failed --> suspended : CP +completed --> suspended : CP +notified --> suspended : CP +suspended --> [*] +@enduml \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/data-plane-signaling.md b/docs/developer/data-plane-signaling/data-plane-signaling.md index e423bca4421..bdd49560134 100644 --- a/docs/developer/data-plane-signaling/data-plane-signaling.md +++ b/docs/developer/data-plane-signaling/data-plane-signaling.md @@ -39,25 +39,112 @@ The data plane access token may be renewable based on the capabilities of its as ### The Signaling Protocol -All requests must support idempotent behavior. Data planes must therefore perform request de-duplication. After a data plane commits a request, it will return an ack to the control plane, which will transition the `TransferProcess` to its next state (e.g., `STARTED`, `SUSPENDED`, `TERMINATED`). If a successful ack is not received, the control plane will resend the request during a subsequent tick period. +All requests must support idempotent behavior. Data planes must therefore perform request de-duplication. After a data plane commits a request, it will return an ack to the control plane, which will transition the `TransferProcess` to its next state. If a successful ack is not received, the control plane will resend the request during a subsequent tick period. -##### 1. `START` +### States -During the transfer process `STARTING` phase, a data plane will be selected by the default push and pull `DataFlowControllers`, which will then send a `DataFlowStartMessage` (renamed from `DataFlowRequest`) to the data plane. +The Data Plane Signaling protocol is represented by the following states: -The control plane (`DataFlowController`) will record which data plane was selected for the transfer process so that it can properly route subsequent, start, stop, and terminate requests. +- **RECEIVED:** The Data Plane received a [DataFlowStartMessage](#DataFlowStartMessage) with a `FlowType` of `PUSH`. It acknowledges receiving the message by responding with a [DataFlowResponseMessage](#DataFlowResponseMessage). +- **STARTED:** In case of a `PULL` transfer, the EDR token was issued and provided to the Control Plane successfully using a [DataFlowResponseMessage](#DataFlowResponseMessage). In case of a `PUSH` transfer, the transfer process was initiated successfully and acknowledged by sending an empty [DataFlowResponseMessage](#DataFlowResponseMessage). +- **COMPLETED:** A `PUSH` transfer was completed successfully. The Data Plane tries to notify the Control Plane about the outcome. +- **FAILED:** The Data Plane failed to complete the transfer process and continuously tries to notify the Control Plane about the issue. +- **NOTIFIED:** The Data Plane successfully notified the Control Plane about the outcome of the transfer, either being a success or failure. +- **SUSPENDED:** The Control Plane sent a [DataFlowSuspendMessage](#DataFlowSuspendMessage) to the Data Plane, thus suspending the transfer process. +- **TERMINATED:** The Control Plane sent a [DataFlowTerminateMessage](#DataFlowTerminateMessage) to the Data Plane, thus terminating the transfer process. -For client pull transfers, the data plane will return a `DataAddress` and an access token. +##### State Machine -If the data flow was previously `SUSPENDED`, the data plane may elect to return the same `DataAddress` or create a new one. +The Data Plane Signaling state machine can be seen in the following diagram: -##### 2. `SUSPEND` +![](data-plane-signaling-state-machine.png) -During the transfer process `SUSPENDING` phase, the `DataFlowController` will send a `DataFlowSuspendMessage` to the data plane. The data plane will transition the data flow to the `SUSPENDED` state and invalidate the associated access token. +### Message Types -##### 3. `TERMINATE` +The Data Plane Signaling supports the following message types, in order to allow for the Control Plane to fulfill a `TransferProcess` using a suitable Data Plane. A Data Plane gets selected based on their capabilities by a Data Plane Framework Selector. Furthermore, the Control Plane (`DataFlowController`) will record which Data Plane was selected for the transfer process so that it can properly route subsequent, start, stop, and terminate requests. -During the transfer process `TERMINATING` phase, the `DataFlowController` will send a `DataFlowTerminateMessage` to the data plane. The data plane will transition the data flow to the `TERMINATED` state and invalidate the associated access token. +#### DataFlowStartMessage + +| Message Type | Start | +|---------------------|--------------------------------------------------------------------------| +| **Sent by** | Control Plane | +| **Resulting state** | `RECEIVED` or `STARTED` dependent on the `FlowType` (Push or Pull) | +| **Response** | [DataFlowResponseMessage](#DataFlowResponseMessage) | +| **Schema** | JSON Schema | +| **Example** | [DataFlowStartMessage](message-types/examples/DataFlowStartMessage.json) | +| **Diagram(s)** | ![](message-types/diagrams/dataFlowStartMessage.png) | + +Initiates the data flow by signaling the Data Plane to start the transfer process. Dependent on the `FlowType` the following things will happen: +- `PUSH`: Data Plane acknowledges the request using a [DataFlowResponseMessage](#DataFlowResponseMessage) and tries to start the transfer process. Will notify Control Plane about the respective outcome after either success or failure in a later state. +- `PULL`: Data Plane returns callback address to pull the data from and an access token using a [DataFlowResponseMessage](#DataFlowResponseMessage). + +Furthermore, if the data flow was previously `SUSPENDED`, the data plane may elect to return the prior used `DataAddress` or create a new one. + +#### DataFlowSuspendMessage + +| Message Type | Suspend | +|---------------------|------------------------------------------------------------------------------| +| **Sent by** | Control Plane | +| **Resulting state** | `SUSPENDED` | +| **Response** | - | +| **Schema** | JSON Schema | +| **Example** | [DataFlowSuspendMessage](message-types/examples/DataFlowSuspendMessage.json) | +| **Diagram(s)** | ![](message-types/diagrams/dataFlowSuspendMessage.png) | + +Leads to the suspension of the data flow, thus stopping it and invalidating the associated access token. + +#### DataFlowTerminateMessage + +| Message Type | Terminate | +|---------------------|----------------------------------------------------------------------------------| +| **Sent by** | Control Plane | +| **Resulting state** | `TERMINATED` | +| **Response** | - | +| **Schema** | JSON Schema | +| **Example** | [DataFlowTerminateMessage](message-types/examples/DataFlowTerminateMessage.json) | +| **Diagram(s)** | ![](message-types/diagrams/dataFlowTerminateMessage.png) | + +Leads to the termination of the data flow, thus stopping it and invalidating the associated access token. + +### Response Types + +The response messages are either sent as a direct response to an incoming message or as an indirect response at a later stage during the transfer process. + +#### DataFlowResponseMessage + +| Message Type | Response | +|---------------------|--------------------------------------------------------------------------------| +| **Sent by** | Data Plane | +| **Resulting state** | - | +| **Schema** | JSON Schema | +| **Example** | [DataFlowResponseMessage](message-types/examples/DataFlowResponseMessage.json) | +| **Diagram(s)** | ![](message-types/diagrams/dataFlowResponseMessage.png) | + +This message is a direct response message to a [DataFlowStartMessage](#DataFlowStartMessage) and acknowledges receiving it. Will be used to provide access token and callback address in case of a `PULL` transfer. + +#### TransferProcessCompleteRequest + +| Message Type | Notification | +|---------------------|--------------------------| +| **Sent by** | Data Plane | +| **Resulting state** | `NOTIFIED` | +| **Schema** | *None due to empty body* | +| **Example** | - | +| **Diagram(s)** | - | + +This message is not a direct response to an incoming message. It rather gets sent by the Data Plane if the already started transfer process was successfully completed. Successfully sending this message leads to the transfer state machine to proceed to the state `NOTIFIED` in case of a `PUSH` transfer. + +#### TransferProcessFailRequest + +| Message Type | Notification | +|---------------------|--------------------------------------------------------------------------------------| +| **Sent by** | Data Plane | +| **Resulting state** | `NOTIFIED` | +| **Schema** | JSON Schema | +| **Example** | [TransferProcessFailRequest](message-types/examples/TransferProcessFailRequest.json) | +| **Diagram(s)** | ![](message-types/diagrams/transferProcessFailRequest.png) | + +This message is not a direct response to an incoming message. It rather gets sent by the Data Plane if the already started transfer process encountered an error, thus failed to be fulfilled. Successfully sending this message leads to the transfer state machine to proceed to the state `NOTIFIED` in case of a `PUSH` transfer. ## II. Control Plane Refactoring diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.png b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..b2541e46d3ba9abeda9811266ccbb5c1d320bbaf GIT binary patch literal 9434 zcmcJVby!s0+VG{3?hZjZq?GQElmP*U8d7=yfk7HXL^>4dk`Ry>8l;t$?(Pm5a_D%s zKIfe0ob!Eue1E*(TohgpvX!m5##cldMyjjFpFw@=Ut#|tQ^ zXvV6Z9eXI_&)1*z_KG<5-YRCdjWEIDlNuZRS1E5$i_WOdFW+IrSvy8Y%+~M=+ns(p z4@M@_?~7YI==W zF^vA(vqr9LirF~=-0m3K?pt%!+WK);S1)>9NkjuSS5lDj^~gQB5oU4e%I9EbLeEkI zPh33Zig2iF$8B}LsV>kGwf1%X~zHPRa*3PH~ahD~pth}+kj0p5;E=h8*(d#&#b9cP-E>XsYC&u9@OXXh9+I|&1KWD8F|1gouDxK2qT zFW?)M?)&~?Mw)OIsIW$KVy~N$07P>v2;no7DSJUpMn?0+{W&TigbTbsHSc zOe#_>N#aYjhJ7F-5BZ!You&wKIHPiKDxZS=7U=jn?2{fOiTCdaLYj`82%YH2ZZeiI zUn6GSm$sH&YtoK*+p!Hwo=;A>oA7kem6f1$A3L;ju?3#mEsWLbYLOWM_D!bCDFK4QL149A5|taS+5>O zZR{*oic|1W>Pu>O@vvUWka(qVC$2r`i)_)|p>kTAUc(VrNUVa-p%W(Q0z#P;T*GMX;k5vM8r?_SrtxL!3XIjBpTx*{(@Ak%Y(OzfQf3J%FS zk6&Vu-_s3l)y0tj>(7$!#d}8P{egs0>lS5+6}d;VqXPjU{?@TWd8zl9ytH0zHFoTJ8p3v$ zQmPHkk#~(!Y+N)bz8gL9+}@YQ@38Rc=Zic7m`J4wp~K>7HhQ)GIcs~SN2OFNJqg@{ zq^{L(3S>)Wkor@frB$lkCs7#OANL!!H*w%nax8Ve*9z=(|Grs#zHXf6_)vTxqxP*b zHTxvD_8|PrDQ57PxB2i9D3q1%ls0El@QPT{xQ^ajU*Gd*PwvxahRkm?7wa5AdDJ|22_*~dLc^$W zvM25t@eMxZbJTCxGQBpavtHy6_!se#k+M(-7sRkyzFXGrYejW#K4u8tJ>8)lwc!!< zUHS2?$JQ9jm${8g@8Cy#Lz)4Q6r z6(e2T%>n^m(0pl_iIDOcgp{d;3aU7ba{{l{BM2SB1hv_=7I1)(8&^)WmT+TKADmIl zV@Yl_bpVbzC0NRHZC4w?od~~+zCRwSO*#!evFmFz5H(-bL}apq7(9=3y`5Zd-_jq$ zFVsoC(Yx_W@1yRHIZjpklzQXS7zyREVz259yd&=A*XS#Qo0)zX%-y0k#B!83XP_c6 zObo`~d1x8|MG-jqM$XgT+UahF5~=+J^{w3PF=mXQ3j9mWAA=>?2*j4L+fIHtu~leO z+N?dAgHatB710wL-_bE{rP5ahIQwbeL4s2tpe%KN0Q^%UF`xepErYcSE;#2&_5O6x z#l&|ZLIvfc=o@lwy^Y%ps~%p{%H+X_lR4yLWp8$(xz#6filwTqh?C0hbOz zOf-x$fr6me)U=X+`jqaJ!v^`UBN<+4X@H3{9=k~TG8ol|_0d4g=diJ{!`1b<9IUlY zv=&qR;ZE?2v}3)aV+H}sswIA?;me>-LTfF>KukaJ5Ft)4P;mG{#mzRLhZqCNwb^nx zY+=fAR(8~{rklsd?av*jj_T5wKES?MH4s2vBgEcvuH=>Y2)uW&nYlx))Bu}Jf=zbE z&-(GZ_Tnc}+QOpRQV3}5t15bavOw&@$UoJB^e7XrslJwBlKQKA&h)84%%4r?8uVg~ zh@X1el}xqNcqtY|r#DDNwTLs3^jp2y=}BSYjWookeG;aw&(_kp6qzD2EyGcE_a=*l zE1RUx0wQ2hLQX_PMzP@3sw@y84XJ*#9{8PKwtxC@z`;9Wd>Rq>v3!%>{mkzBVTxV3 z3R^uXhwonj&IgDWn3Kip+XkI&ZEd|pzCh3cqHWnDI|+Op#p*4NdS;SJQdO{G_5}-& zSZ&0?lvq***@wn!NLK=`m`K6|YxAYU;4igFfOPEdD?q=KG3kHYCgnbI8bzl<3j3Wk zZEd>&zJ*Wsn@Y3qz&f|?&b;%RS8LA_PIzB%@XZ_%!E76XhO&>$5ykJlk$uJR&zU>7 za!gt7n|!J&s!gzg%U*a>*Cip9N#nWOb(vm~{~;*8HU9V>{S4wkRe^8PmChKs_senn zaV!FAR%O=xDbs6%7{8E_k`x=>Ha7;=Du~$43Lyf~p_x|aBp_*W&6xI;*I113)y6x8 zS)`_LEmciTzjuW$EJ>nLh_NX(gA)>!O4SzaB;|fOd+?gCp^n_Q`6Z|B2XbN8UoRJw zsyalRX2R(+`lyawd^h1z$uSFuE1fp>yO7jZ>%#LDH(7h$?5VU>HF8qCu%w2(qiY@O zJXkRG1Br))miY)ExG+4cWDs*_E#6ZvF5@E%usYV#)1{ve<%8Of!_T&Du>NgE*;J?L z+o9J@as9lPC5~DkT>1^CMRP>*h~DirJXRXj*4Y2OXl_Sg@S}*~IBG8?>Kl7>3(son zG)T|j%jzx0AZSnWj66M6wC?4UFT1k%*4M=qbn^QzcN8Nw_nyJ8}@f)X&eXk!g zJKfB!3RnNXX0wWjCvY3gg+Gl>pKG+Db?AIp^2`%Ur1tH4BbP>oIBAU0$z<-D)SQm! z*<4C_EQij7`qdEdgnUlEc{Tk;+;I)-1%LKa#MUv$yJvifqUkN(4%;T1jYI5TNmrB) z%^yLNzUUsEE)V*k;cR9Ec}~>VQ+$VpTP7^%r2eU+IfZ2x!X1@{M?{uo0urd zH^z4w=I$;u6%i8=GYVSsX5E=aI;9~w={5jeF%X(~`%OgOtyDiX?KJ{3gQ&o7u@>`* z12LO~Ls*F7RWziUBIpHMil)7zREleokF~p1|GB%U{Rm8>=kVQ|Vu82rJ0q5(6HOKD zHflSp&Y6X+y;}97cWhs)s~_L+dyvAAx$X49*HtZDZVkUQeARL%CPq%$<|<{uiWW8O z+uPl)|r>X~PVbn}i3PEo>zRDG%JUX=ja0ZCu)LZi&!D zS4Q3L8UA7YMngC9P+fQ!I`l)X-W66x{rLs>F)hqD7EVXMFU7^x8DmqLF6v&srS^*I z_qpM6ZYzkn^?AqbYBu)|b6Mb?>!V#~g|5DlaQo{|!Ic{&lsDMX=p*r{Q%z?alzN@B zr{5U;ua#iTq9iI{`!|D_c9;d|DqsSfUWKw!s4x{Zxw4QfD=?AmE65Gml8q_vHOll?u2g>iQi9!RYUE_?&~0xb2v ze}L|&ou{4!p#0WSw+97Gx~SV~^?*j6Qy2Nb{e_%1L4WvtmiyKA`$?_>k`4FH# zd8g(%Q(qr&*PNILhC+Fyi79dz<^MHiR)4t~BXfz|-9#Wvntd+}Dy2ZRJEK|zFU3OwY1=mXQ_)aSiLeO>7AmZ8Yj@)dY?L2JOE>F&eLg68+-FMd z8WkSSWmE(Gz^vqb`pfHh$gMgQUc)N=GBXrZT*^n#@j~*y z*8c1`TLUgNu`;!^u%LNj54*j-VDvxFGOBe#!yh|`94`|k3kfe{9i|{ zQ@O#9tU;=(_X!F4fbz8?oIEZr4nMLd5YVV|PxqZMPHQoj74-f7GCm+?UhTKEcj{gpOVn0@3 z-JfD0^kyA@zkMq>EG(?ndGS5VOs(_aUM$xBjklA&R<+Z7$`!v^UA66ScFT$SSS4zh2B;+8!V!xtF>lLydNO5X zaMaY)EKZTTlfVYkS1JYs+(8;%|6`G<>znYUHxD3R0W;_N|8o%I;33R<@)53!^8aT2 z|K%FA4i-zPl7OTVM+M9U?B4&;1h?n1-qai+!Ktup^J z@T}&7gjJJelN?K7kJ}`|_oMgzhGV(&9a>Ue5t7q_H%xKe^CqN0VgwP9e)ZEl1wKJf zQl!FC*zK6F0tAd{7D)1-VnP!%mjTHC0xXe;?vh_1i%9Oh;!u5QMYV0QcCl_*DCCZuiic zG``;5`=L&u36HLj}j)i_l_7wru+ zQ8)LE=?q&2X3-Ynj+v}!Kf*Q4_HUg<>}JW@J`^*j8kYw++TKvwj`ei1K&%qfC)v#9 zFur21P?HGtiR5|*zQs7I69ogc0fU4ZZG?7jzCHQ+gds(QlCZQe7uH8uJf{UFm9fN2 z<7XL_*XMcXcF59mAqA^x4OK`u@Sr*$+rXpy39T;k3PzN>7V-P(pU zYj#BOXsY!+WMFoGl9{ra2T3l+Y=W%c{%#<<^H%h}q4<7rQrR|x=7y1v6 zZoVja0f`oG3pi>#q%bUtM3s|7JivB;rS@Y$_?&@N|3KMG3%O=dI5T&Q(r9P*b z&}s4PSHvE*Z-Y~6?R_L~91_%Ur9?VGG7?nAl{HTkAhWL-M-s@7T^a!(_PfsV(n|sg zz#2hsZEQtQs?N&AN5HG&Rr2W9GlX||V&5^fb!Ff7Mcb$yCpd;v@FI2$AMk&hSRtp4 z+{5_*yh+S4yzpl!yaiwM!&Zt#x}3;z&@E7@hnwTlN)l$^eaW91^D974C{DkwG_bkM zPIJrTr#B2&f?EdWO)8VM2JwCOqG})Dp=Yx_+Z}I^spT`Rtb=U}?tXloYkFhSJ65MGS+?`WkpKt@*$YD1@or zMg1jS0x$T*e`2Zo&nEn{G63m>-GimW*At*1i932soS=6VvmK=YMY?r3Y{}R;+%l#W zWIQ}vELDhBt1!v&->51BQyUw4CmF0fUb4vHb(MI%`@@p*H;Zb;!1=b!9kVi4$*l-% z+Sb3pq{;nE9=p%nK(WZvcy};OQPL*hU=h4AkUncIFIDRmG0}X3;73p_Al3oep-&ap zsbkZ!uB}BsIQjqwCGYuDk28xpp;#b7^x;)2wOkDNgzo)|6_J3lZNQVvks=YJlf^D@i575)fTYgc~yPH743~>s+bWXuu#~_|(~vM5;Eg->7oN z)y%Oi8;AT+HakNQ2ZLE(;^4F_E!8x0mxew01Oat)Sh#;Ng#061PzhkzwhCIf0nWpI z-z^u68e3ke&4v=V))?ZYhp6J0UaXPiA=0qb1V(P4^_MvhMpG^_#exClRSyhOrF<|V!frOQPQAJX*LmLk`{dvvr?W}>(`PBxUQ;Ejl<>n7o`?>-$|+deOOhKC z4wv9l`d-ZZuB2`9Ab#|vlJF&Z5l?|+i%)~x2g@X$Jvg6^r`<7U;-1lNpq zsO*TIwV2Psks(rk?=Huv698J1*w`v+x5fjpN%$)Df`RGv?g3wIlno@k-(efQ3&E!r zemW4IB=vg;07>T-ae4G6yDtX|sx9tj%1)Ql>tUM#0}6fqfWuZ$DRQd?E9_2|*G;UX zi8`y9y*iLU3;9q`A)*Slb{%LW*MIWFZXVi=)duupEM=%I-vC}hir?Ngs55G3tfU3# ziij}@q<(-|2@aaxxc|j5&@m=YfX~4J$L2aYiDAQFD%u3AW4<|8NbGNF@gGbAKpCUU zui)orx|=??{T|AjjKdDC?A(FDXNJ2W|8u)f}N@5RYUU6%U}C6_Ua zsr2R%ITsQkA}hMZu6~Kbt=oW`9vH1dX~?FmjSrEN8NUgVm){*Q{TTbvdpix82=R$Q zGV(Wi9&RR-PPfiitWosTTcC(*ro-Y@B_WV3=XvI6sFYZCWvgB~UqqPb>D?wOu_uIscSG*l7j_1iK|~Ds-F7=))Qn+Czc(whM`> z8h0D3XPr&KdXu}p#=!-{@{73p?oI#Hru2zIjn zvO4C*LOwL!T^=|6kQy{Cyi7kghm&wz$nUkI(f47tay_t)O)*1Y%D+{(My*B|hW`-|RKg8X)%k6eersITIkskr}xJ=H!9e&QI zMGcYS%wp^Y-GX;=xmQ}gLyNeX1#tfj4dfODXc`u}SnKIfeR3c|^2NfC=wwdgI`wYd z!VfqUYp$>+eAQT8Gg>Zp%eo8H7NmiW2heY-(9>^d=WQ_f0R;(Deg0XL4KfP zF92Yjq@it`f?CfBnq)7)yRht#d^!)F0|+o@9u}!PBQv<}dopr&H&e|!$Zh@e{8-(X zlj}wCR3#86RG+nU9$!4LrnpKa^qT$hjDSWw#j$CWgrbTc*XX1aoLaXqZ?5e>jyCm^ zpgWv(43#2RNx`l*K{~;HOU;=*dwp2S>zJaXBi*Fwc65}oxr@E^I_4R^pup5m_O(Gn z1Ecb;jnB24pn+!&E!X{y8lC4g1&$4bdWFUqPcsyqCv$#Sxn_g23_f?h4aR9XaTQr> z%aN4obsD+=uN+m+LaEWU+#XAF0d9!1(JvohnUx%pI_HZVE2PLV2NX?!HSLN7uu%<1 z`o%XnnEC;wDa(R4aTzxHsm z^qE7P{zelLp(WXick62E1+kN|0)CKxHq?VH)fC^gO!^{2CSxz{g4@)u1ay|sbRiV4 zyuIiB_?t#vkq2h<`O1rBOo80dEO4xsLNIcNP@Q8HtN z0-mtf+97Dc5c*RnZ^%~mvE}O|tQ}xsCp-$>&|t!|vF6&L-gYzg%-EJPWNa7BnpxQ< zs1&?CU9BzbAti{_)VtPBRBN_7 z7-@LDTx9I!6d222-fru*F%omGsK3j@j=sFD(^0FF$dJ@va(yY{`x-H$;|cT-f4_Z} zLykj9C!)t_>1LWgezkVA;_n?SH7WH9+t&X&UXTZD%~$B)rT0OG6o?_`?AL2&8?qzH z8U}kyq$~f_F*|r+3LaHaxBEei$~aFJR#8rxcN8R2OuhN)UA5nR2>#DrFTL+vs3TU| zn3M1uF0hG1vZT8;(0PJ7vtnwDWljU7?uHOJ6uLi)pIBV z&six@FO_U9B~HT?C^c&NF`Z`WDT6fDl2j{VIN#agn{Zv@0_7~X__>wEht)lu@eWp* zr(DH^!6HZ20${jtw+zrD727e*K?Trn{KLOVv3MH1CjDCwh*=xr1ag;z{2XEbkMTbw z`A<;Dx7-H6gpzLNWOGYgnm6dz9Ee~P7VmqF2;Th-3aY=Yt~IT`P^KyMzup6>aLZlF zy;0G9yQ_m>p|A5f+Lh_ZxQQ`Kfn%eiVr_@Z@-yagqy7M}EjIeGTs<>UU)LSVu&Z;o VS&N+#@IOoURFyOp;qqp0{|7?TxJ3W} literal 0 HcmV?d00001 diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.puml b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.puml new file mode 100644 index 00000000000..f20c6ba4919 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowResponseMessage.puml @@ -0,0 +1,25 @@ +' +' Copyright (c) 2024 Fraunhofer Institute for Software and Systems Engineering ISST +' +' This program and the accompanying materials are made available under the +' terms of the Apache License, Version 2.0 which is available at +' https://www.apache.org/licenses/LICENSE-2.0 +' +' SPDX-License-Identifier: Apache-2.0 +' +' Contributors: +' Florian Zimmer - Initial Version +' + +@startuml +class DataFlowReponseMessage #e4ebfa ##75acfa { + @type: "DataFlowResponseMessage" +} + +class DataAddress #e4ebfa ##75acfa { + @type: "DataAddress" + properties: Map +} + +DataFlowReponseMessage "1" *-[#747c94]- "1" DataAddress : dataAddress +@enduml \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.png b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..b0f9aec758cecc17042248973028a73be4091c27 GIT binary patch literal 19827 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 literal 0 HcmV?d00001 diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.puml b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.puml new file mode 100644 index 00000000000..6d481887aa0 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowStartMessage.puml @@ -0,0 +1,39 @@ +' +' Copyright (c) 2024 Fraunhofer Institute for Software and Systems Engineering ISST +' +' This program and the accompanying materials are made available under the +' terms of the Apache License, Version 2.0 which is available at +' https://www.apache.org/licenses/LICENSE-2.0 +' +' SPDX-License-Identifier: Apache-2.0 +' +' Contributors: +' Florian Zimmer - Initial Version +' + +@startuml +class DataFlowStartMessage #e4ebfa ##75acfa { + @type: "DataFlowStartMessage" + id: String + processId: String + assetId: String + participantId: String + agreementId: String + callbackAddress: URI + properties: Map + traceContext: Map +} + +class DataAddress #e4ebfa ##75acfa { + @type: "DataAddress" + properties: Map +} + +enum FlowType #e4ebfa ##75acfa { + PUSH + PULL +} + +DataFlowStartMessage "1" *-[#747c94]- "1" FlowType : flowType +DataFlowStartMessage "1" *-[#747c94]- "2" DataAddress : sourceDataAddress\n destinationDataAddress +@enduml \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.png b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..d80d3c5da1be9831ddefa4cdcc63874979073731 GIT binary patch literal 4197 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 literal 0 HcmV?d00001 diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.puml b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.puml new file mode 100644 index 00000000000..97c350318d3 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowSuspendMessage.puml @@ -0,0 +1,19 @@ +' +' Copyright (c) 2024 Fraunhofer Institute for Software and Systems Engineering ISST +' +' This program and the accompanying materials are made available under the +' terms of the Apache License, Version 2.0 which is available at +' https://www.apache.org/licenses/LICENSE-2.0 +' +' SPDX-License-Identifier: Apache-2.0 +' +' Contributors: +' Florian Zimmer - Initial Version +' + +@startuml +class DataFlowSuspendMessage #e4ebfa ##75acfa { + @type: "DataFlowSuspendMessage" + reason: String +} +@enduml \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowTerminateMessage.png b/docs/developer/data-plane-signaling/message-types/diagrams/dataFlowTerminateMessage.png new file mode 100644 index 0000000000000000000000000000000000000000..d14dd2e0c90174a3a06bcafffc000143101829bf GIT binary patch literal 4219 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 KP_s(i0r@u`+n*Nz literal 0 HcmV?d00001 diff --git a/docs/developer/data-plane-signaling/message-types/diagrams/transferProcessFailRequest.puml b/docs/developer/data-plane-signaling/message-types/diagrams/transferProcessFailRequest.puml new file mode 100644 index 00000000000..c46147d848c --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/diagrams/transferProcessFailRequest.puml @@ -0,0 +1,18 @@ +' +' Copyright (c) 2024 Fraunhofer Institute for Software and Systems Engineering ISST +' +' This program and the accompanying materials are made available under the +' terms of the Apache License, Version 2.0 which is available at +' https://www.apache.org/licenses/LICENSE-2.0 +' +' SPDX-License-Identifier: Apache-2.0 +' +' Contributors: +' Florian Zimmer - Initial Version +' + +@startuml +class TransferProcessFailRequest #e4ebfa ##75acfa { + errorMessage: String +} +@enduml \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/examples/DataFlowResponseMessage.json b/docs/developer/data-plane-signaling/message-types/examples/DataFlowResponseMessage.json new file mode 100644 index 00000000000..9d6a2211a40 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/examples/DataFlowResponseMessage.json @@ -0,0 +1,14 @@ +{ + "@type": "https://w3id.org/edc/v0.0.1/ns/DataFlowResponseMessage", + "https://w3id.org/edc/v0.0.1/ns/dataAddress": { + "@type": "https://w3id.org/dspace/v0.8/DataAddress", + "https://w3id.org/dspace/v0.8/endpointType": "endpointType", + "https://w3id.org/dspace/v0.8/endpointProperties": [ + { + "@type": "https://w3id.org/dspace/v0.8/EndpointProperty", + "https://w3id.org/dspace/v0.8/name": "name", + "https://w3id.org/dspace/v0.8/value": "value" + } + ] + } +} \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/examples/DataFlowStartMessage.json b/docs/developer/data-plane-signaling/message-types/examples/DataFlowStartMessage.json new file mode 100644 index 00000000000..bca0fd8d2d0 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/examples/DataFlowStartMessage.json @@ -0,0 +1,32 @@ +{ + "@type": "https://w3id.org/edc/v0.0.1/ns/DataFlowStartMessage", + "https://w3id.org/edc/v0.0.1/ns/flowType": "PUSH", + "https://w3id.org/edc/v0.0.1/ns/agreementId": "agreementId", + "https://w3id.org/edc/v0.0.1/ns/processId": "processId", + "https://w3id.org/edc/v0.0.1/ns/datasetId": "datasetId", + "https://w3id.org/edc/v0.0.1/ns/properties": {}, + "https://w3id.org/edc/v0.0.1/ns/callbackAddress": "http://localhost", + "https://w3id.org/edc/v0.0.1/ns/sourceDataAddress": { + "@type": "https://w3id.org/dspace/v0.8/DataAddress", + "https://w3id.org/dspace/v0.8/endpointType": "sourceType", + "https://w3id.org/dspace/v0.8/endpointProperties": [ + { + "@type": "https://w3id.org/dspace/v0.8/EndpointProperty", + "https://w3id.org/dspace/v0.8/name": "name", + "https://w3id.org/dspace/v0.8/value": "value" + } + ] + }, + "https://w3id.org/edc/v0.0.1/ns/participantId": "participantId", + "https://w3id.org/edc/v0.0.1/ns/destinationDataAddress": { + "@type": "https://w3id.org/dspace/v0.8/DataAddress", + "https://w3id.org/dspace/v0.8/endpointType": "endpointType", + "https://w3id.org/dspace/v0.8/endpointProperties": [ + { + "@type": "https://w3id.org/dspace/v0.8/EndpointProperty", + "https://w3id.org/dspace/v0.8/name": "name", + "https://w3id.org/dspace/v0.8/value": "value" + } + ] + } +} \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/examples/DataFlowSuspendMessage.json b/docs/developer/data-plane-signaling/message-types/examples/DataFlowSuspendMessage.json new file mode 100644 index 00000000000..03b22a32840 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/examples/DataFlowSuspendMessage.json @@ -0,0 +1,4 @@ +{ + "@type": "https://w3id.org/edc/v0.0.1/ns/DataFlowSuspendMessage", + "https://w3id.org/edc/v0.0.1/ns/reason": "reason" +} \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/examples/DataFlowTerminateMessage.json b/docs/developer/data-plane-signaling/message-types/examples/DataFlowTerminateMessage.json new file mode 100644 index 00000000000..631680dca16 --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/examples/DataFlowTerminateMessage.json @@ -0,0 +1,4 @@ +{ + "@type": "https://w3id.org/edc/v0.0.1/ns/DataFlowTerminateMessage", + "https://w3id.org/edc/v0.0.1/ns/reason": "reason" +} \ No newline at end of file diff --git a/docs/developer/data-plane-signaling/message-types/examples/TransferProcessFailRequest.json b/docs/developer/data-plane-signaling/message-types/examples/TransferProcessFailRequest.json new file mode 100644 index 00000000000..87de0f3c51b --- /dev/null +++ b/docs/developer/data-plane-signaling/message-types/examples/TransferProcessFailRequest.json @@ -0,0 +1,3 @@ +{ + "errorMessage": "errorMessage" +} \ No newline at end of file