From eec904d34ea8245079e26c2e047be06e9249d713 Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Thu, 13 Oct 2022 16:28:52 -0700 Subject: [PATCH 01/79] Fix: codeblock wasn't properly closed Minor formatting fix. Signed-off-by: Tiago Alves Macambira --- .../supported-secret-stores/hashicorp-vault.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md index 3c7a9bb4fc5..76a33c54c32 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md @@ -64,7 +64,7 @@ The above example uses secrets as plain strings. It is recommended to use a loca | vaultKVPrefix | N | The prefix in vault. Defaults to `"dapr"` | `"dapr"`, `"myprefix"` | | vaultKVUsePrefix | N | If false, vaultKVPrefix is forced to be empty. If the value is not given or set to true, vaultKVPrefix is used when accessing the vault. Setting it to false is needed to be able to use the BulkGetSecret method of the store. | `"true"`, `"false"` | | enginePath | N | The [engine](https://www.vaultproject.io/api-docs/secret/kv/kv-v2) path in vault. Defaults to `"secret"` | `"kv"`, `"any"` | -| vaultValueType | N | Vault value type. `map` means to parse the value into `map[string]string`, `text` means to use the value as a string. 'map' sets the `multipleKeyValuesPerSecret` behavior. `text' makes Vault behave as a secret store with name/value semantics. Defaults to `"map"` | `"map"`, `"text"` | +| vaultValueType | N | Vault value type. `map` means to parse the value into `map[string]string`, `text` means to use the value as a string. 'map' sets the `multipleKeyValuesPerSecret` behavior. `text` makes Vault behave as a secret store with name/value semantics. Defaults to `"map"` | `"map"`, `"text"` | ## Setup Hashicorp Vault instance From e56b4a0f32516bf820dbd1e31569a55bf5e5cf98 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Fri, 14 Oct 2022 09:32:15 -0500 Subject: [PATCH 02/79] update code examples Signed-off-by: Hannah Hunter --- .../pubsub/subscription-methods.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md index b963d13daec..65548455941 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md @@ -137,12 +137,10 @@ public Mono getCheckout(@RequestBody(required = false) CloudEvent ```python #Subscribe to a topic -@app.subscribe(pubsub_name='pubsub', topic='orders') +@app.subscribe(pubsubname='pubsub', topic='orders', route='route') def mytopic(event: v1.Event) -> None: data = json.loads(event.Data()) logging.info('Subscriber received: ' + str(data)) - -app.run(6002) ``` {{% /codetab %}} @@ -151,7 +149,7 @@ app.run(6002) ```javascript //Subscribe to a topic -await server.pubsub.subscribe("pubsub", "orders", async (orderId) => { +await server.pubsub.subscribe("pubsub", "orders", "checkout", async (orderId) => { console.log(`Subscriber received: ${JSON.stringify(orderId)}`) }); await server.startServer(); @@ -163,11 +161,10 @@ await server.startServer(); ```go //Subscribe to a topic -if err := s.AddTopicEventHandler(sub, eventHandler); err != nil { - log.Fatalf("error adding topic subscription: %v", err) -} -if err := s.Start(); err != nil && err != http.ErrServerClosed { - log.Fatalf("error listenning: %v", err) +var sub = &common.Subscription{ + PubsubName: "pubsub", + Topic: "orders", + Route: "/checkout", } func eventHandler(ctx context.Context, e *common.TopicEvent) (retry bool, err error) { From 490f4371501af5bcb05256cbd38fe6040362d14e Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Fri, 14 Oct 2022 10:25:16 -0700 Subject: [PATCH 03/79] Fix broken link in components-concept page Commit https://github.com/dapr/docs/pull/2875/commits/043a39d3d161a7b44b95a7099ec862329d70eefa shuffled content around and removed a section called "Pluggable Components", breaking an existing link to this section. This PR fixes the link to point to the section now hosting the appropriate content. Signed-off-by: Tiago Alves Macambira --- daprdocs/content/en/concepts/components-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/components-concept.md b/daprdocs/content/en/concepts/components-concept.md index 2ec3c936dfa..9a2c2bf416e 100644 --- a/daprdocs/content/en/concepts/components-concept.md +++ b/daprdocs/content/en/concepts/components-concept.md @@ -11,7 +11,7 @@ Dapr uses a modular design where functionality is delivered as a component. Each You can contribute implementations and extend Dapr's component interfaces capabilities via: - The [components-contrib repository](https://github.com/dapr/components-contrib) -- [Pluggable components]({{}}). +- [Pluggable components]({{}}). A building block can use any combination of components. For example, the [actors]({{}}) and the [state management]({{}}) building blocks both use [state components](https://github.com/dapr/components-contrib/tree/master/state). From 8fb7d502fa0c864d4d1af1aa8b6b2bec4f201145 Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Fri, 14 Oct 2022 16:03:57 -0700 Subject: [PATCH 04/79] Add Resiliency to the concepts page Signed-off-by: Nick Greenfield --- .../content/en/concepts/resiliency-concept.md | 29 ++++++++++++++++++ daprdocs/static/images/resiliency_diagram.png | Bin 0 -> 323844 bytes 2 files changed, 29 insertions(+) create mode 100644 daprdocs/content/en/concepts/resiliency-concept.md create mode 100644 daprdocs/static/images/resiliency_diagram.png diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md new file mode 100644 index 00000000000..ab5875d33ee --- /dev/null +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -0,0 +1,29 @@ +--- +type: docs +title: "Resiliency" +linkTitle: "Resiliency" +weight: 400 +description: "Configure retries, timeouts, circuit breakers and monitor app health" +--- + +Distributed applications are commonly comprised of many microservices, with dozens, sometimes hundreds of instances scaling across underlying infrastructure. As these distributed solutions grow in size and complexity, the potential for system failures inevitably increases. Service instances can fail or become unresponsive due to any number of issues, including hardware failures, unexpected throughput, or application lifecycle events, such as scaling out and application restarts. Designing and implementing a self-healing solution with the ability to detect, mitigate, and respond to failure is critical. + +## Resiliency Policies +Diagram showing the resiliency applied to Dapr APIs + +Dapr provides a capability for defining and applying fault tolerance resiliency policies to your application. You can define policies for following resiliency patterns: + +- Timeouts +- Retries/back-offs +- Circuit breakers + +These policies can be applied to any Dapr API calls and when calling components with a [resiliency spec]({{< ref resiliency-overview >}}). + +## App Health Checks +Diagram showing the app health feature. Running Dapr with app health enabled causes Dapr to periodically probe the app for its health + +Applications can become unresponsive for a variety of reasons, for example, they are to busy to accept new work, could have crashed, or be in a deadlock state. Sometimes the condition can be transitory or persistent. + +Dapr provides a capability for monitoring app health through probes that check the health of your application and react to status changes. When an unhealthy app is detected, Dapr stops accepting new work on behalf of the application. + +Read more on how to apply [app health checks]({{< ref app-health >}}) to your application. \ No newline at end of file diff --git a/daprdocs/static/images/resiliency_diagram.png b/daprdocs/static/images/resiliency_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7168f0ef14a1f8ec4dd9d810e6c566eb412475 GIT binary patch literal 323844 zcmeFZby!s0`#uT?h#;Yqq=1wRAvtu4(xB2Ujl|I12r4KY!q7@c=MY012uKdyNar9! z=h=hr`+oiY&Uw%I{C_@P7c$P?Yp=DQXFc~*_x6p3+G9d|YJ3a~3_?YPhfgsu@N_UR zuuJi9(cg?~ZeUQYXR;N?n;nZ z0RE6O+MMVmIbJ$!*EW+px)Axf`gKb~^Y9x-W?y#mILjLG+4~m-QU?1X!CfbHi!K(_c# zbN6pls#+W<8r%*C1g>qVt7xUFiopSV#>2pTWs89ge8L2NsDU30jB9b>7}tT{w}GFB zSy+Ex#nZ{U_V;J(QuK{7&*T&pf#1)}T`VmfU2Pz4oJ4PdE0|-pn!0Yfsw$%95C`t( z77#N_ZZ8KX^bibjFHzv5gQeSZ1}_JDM^{lV38t$%M1jxfuX&glu5NL&lVH+S)nJf= zxL7g>aX;XGz$A&!z`!8xVqqov^x>nwh6DeSV6t&@a}wp@@$~fM_T=Y=xLEV>iin8t zJmBNu-3v_e1`E&O=LAa~E4DH(Q7!1Nyno%^>b>5=>0!iT?TX zd!3eEw*NDeqw8PW0yfBlzQV)H{eb76X9GjU(cg+{*m_yo>piq}0K@~#A<4@tA}oG2 z;Qw~%f2RCnsP6v^<>TcS{B!6Zm;TS8TCSEZau5e#Qa8!}(am3j|GfCuKye=Q-v5xr zZ$V#u3rJcLU!3P3tx4i@F`FA=U`S&qK9te)!rYv`?nh>M()#Ohob+n;;f%6|G#MEg z_7jcG9BX8Rr;oLSIlp)FUbmSxp4E}lE%QqCi(yV zixx8ksMHKlT2pN3~AZFtKiuo`7{#VR@oSOfh z=09NSzo79aQ2iG){%|$_1&#lL#vc;+{}X5^M3ujl|9=UkNWxk#FAiJSU1D+29yW^! zn@D6aCSr_p@*zer2dlJ`Jh@obCegnIkkZEl*w>$7t0xB%j$xs1lD5UcgRz&;ZZK*z z;oy}P%yeWnJ^mAz{xD0D*H2q%q~}#P);%VoK5)j_U#)YAokW#HUckGnB7*E423Dd1 z5QZtal^1aQ+ZtNiD0gsG#@q@j((?uP@U5a7L5|v_ ztIG}_^c64gC{ti{<+tDdd$fypyBs{-Xs&v_#Z6GGFR#g5mH#RVODGE>jM<3_MTk0> zz=T9gR-B-tz1DAmsL~5~2_Q#uWR=O=+-S! zKHWQHs<*H7NsD8z@scpLzXDhDrSJHXP>Z%I!iQ*-_Zl$c963W>dyx$FzlF|O`UGB~ zO!iqX!LQ9OFV1s#(pOY{QDgg!mRfe29`wL4VLU9MJMFkitHQzsO!x0A?&YE!^!tW| zGE4GGi%^@%UHGw;D5zRy6Nf>DOgNH2EH; zGQ4T+#?>F2i&*M*U5vjEwVY9hTbM8=PkUQ40umjZ>Jz4Y|Wt7?BZ@h4y!YBY@MFV|G3+`md70!5_=Qr_s%B zBd30l%|n<~-bUupXx&F|ok3VS)+nN5>}{FOX_%lB?A!L++L>vr|Q+8hs22ldvERAb$YK> z@4;UT_N6M&y5&?mW-hK070YtIzgMb3j%{xmwyj)10TRfP4ZR;?B5D!}lDzbbZ#>04-#qwS%cz{WJp-?qQFb{G&- zh3}yw_KC8L)3%} ziWk_!J}JYO!V@~zgFAnsP?t%|uMn)nWD1EJuW0hNg5-@Sf%YCjo96Qtc$&vJ zrFwfyn0*xmuWn_!v3lHS-qFM7Vgbq*BXRg7Yoe&AxZT~0K;CdDk!=BQN^g*Bhwx$z zKMqO)74}tFssB9%dfQpFI2>}_luNUX1)7qd$ObTj?3UAla z#zSL|rAfsXXotfQ412=t0+8SZ?+#J4dsA>nKDUmVk zG%`b1@{YSD&DE_-pz^Yvz~19&-{x9dho0{N;MK#21<2^#61v=bLDD%lNDO0b9=|;K z^F&MMk`~-F3K6g$)0n8S(^<3s^xz-O(qkR0nIp$$q)~uY!DDVdOI_)eUWzi_nqhob zlH$;n?nC-yjG~&rcsh3Lg@k%Q&r9lI;%#9ZB~V*+sv0ofBgI)F>( zH_ehB!0%;yhIau+s2`gLvQ$`%vfS=s@`>9LV8o=Z_$xFYMo(6I2T|Lq}RHwsg3I#wLD;X zKy!7hIPg}zjr$ILW}?Y-vu7!90zl)B4$7K4G9>;nV<0dN7RFm#Sy2WYDykgSu4H}WpZF60X$wU z;Ko_D+-dp^KwwLx3Z;HpdEb6N<|Re>Bxg-`#bK&C|BOTW_j+#J1Ll)JUJoQ5LtYnCdyoI@77&T7 z0zn3?n~TuvE4$#qJhvVZ!&diAjzybOVFN}R1-a)-Qi(byK|!qsk1c&?X?v=_m8GD8 z=^M{EG&ZA)u$+W#srO4{>0hn+7g;~5DdVtd7Bjo~o*O+7hG?n-^|-Htk;ombBNMiYLwZXKr zZBIGag*E(1#-5?2LQSxGJd<&{H5S05X-?rmhlwo?Y|HC`!WEP-M{cESP5i$ zX}cdK=wQ-dPAyX$>X`v0&8261Fo>8v3 z1(kyv9&wcE!EJiz?>9xc!pGE)8_g_2%O=U0O*lt_X=HYy&ZonP}{wjhlca{ zHTFjHtrg>Z_f5jeozfL9p3O&k=shqO1c4vOB7|DoX%u49(l)WR$105S%;`3Lgi2QA z4NBvKr7Ulc0UkYNgr_gjcW;&P)2B~M^*6fyajql~2BmMnfC=5YzUXXG^?#^=87 z;%QL9+$&a=N$a7jY@L`0s!g_YlCO2_SsHrgqa2;l^HDysq0)9iO|ROksPSNewzI42 zUGBtlR9^0Ik~7<(Gi)H+Uv6Nnv9T#G{+a2SCw2ZX-#I*S`NU|9DaV+^@2#1{w8+qx?8)yL81&+`Y?qAGmh-?>P?O0?&$~6nAq`#TmFW0$4W|*4Bo!ue8>WR%qmpfo z1hKGu6`37(%_6Mq-*@YGaZ9N^Q;OCK7K{1Lg$~SgvTj2EkfjpV=WvgN$;$`DUyM$E zMh@@xT|zmOlPnV6gKzP@r9&VNCs&7_`6i0i{WRU`qpOW}2~llqStAmw&V5TaX%v9k zka5{6y98whHdhY~E2@<;)l9C}H6AZI9FIM<}bneOqwH82<`;N4H|*xq3j3S z(;L{DV-?_jS=71@jnHPCHwxCdy9BpDljsv{s$7k`C4oC}5n5Nlj(Cyckt<+1%-gOR48Kgq5S>m9oW2-8^UrQ9Eh86Gvji*=GPTn6>KGi6@QuBPlF=byas&RMShtx2Z z<6g8KcLyz^OI)7Jrbadtw3jPmMXj5?@{CZ3fT&ah9}*iJoenN4BXg~-#sFkE}hT1T@BYrMoHHxtwnC34J`t#n-@rv@&{44A4$Uvzfu5umZvYL~;l2Y7I znND{~%dEIYmHFde6px#{_a0sJrhi4%;atW&xI9SJ=1*0el?2i?gXXm;M!CvLm(Z$2 z;pw_3Pa+|cJvFQj&J13w{mm8CcB2ZZwFPXGKVaIWKZJ}19Kpob!@kp2yHr{2TeJqj z;?gwbwBPS*mvr%QRiA{ChiJcf!B_IURg>RyV`QqfccfT+)~%ZK+I850rT@YB-3T0Q zn{X}zm!%%?%E_*f{d*3@<=Q+VxXR(3(}S%;uF*F(yIwjRJ-np`wRvuW$VedvYNZHU zBlDhhhdiygk{lzCmo#o-CHlE3htHnbjue;LCR#!{jZ*J>d;3mntq&>24(Z?T-J>Vf zG)vy+MM_D0BcOEjm2zBr#0;cDYFNVS|{JE6b7y<()bF$HrlN8l*B zA_^_zigjbTigc`@b_L>o%kE5QWqmOKvPQ4Sr&l#B=^t1JtXYJmJLsglqMgPxHYEi_ zELlBx_8xQ+ONt8D1BwSE1z1?rrm$bzEG`R#MjylK`&YJzzTm2^3LoXJ7}D8ia7a7% zdon%=1&MlWvhQzgYD>hj2>SQLd%9u0r{y$w!JE2WK8~+r($>)-HUODE8627pJh}ty()(@ZES-Pv+z1 z<9SwG;%#O~vvU;u=%?~bY+1AZw%W$-WI*8C8&Nh(y;W}{d=I*hS6VC^oD9vakH680 z3B~4TiW>Rs*{nlb+}5-a=^YlNS+Pq{lfjp`X`Ch*4p{e7h4pwEcOH1JEsf`~d_H$s z$$WgGO)N>#9CnKpW_1d87Ww(wqta$z8P5)z!dCioV`hL|L$-kDSo`S&JTs()cJ9 z65!%OSbw(LX4TY|XYlps2B&cv3tQSzaaFG}PX;Iyx5jx8P<*V|*24#Cf_-) z#-pF=yB$*gOl`;C-um~}sv=*)Fm{j3^SkF?)p{7Y)#EBmxuMve8w5~^<<(C4B5hDH z@`bg+t`c*B-~1cANz8pTgQc1iQ?4xVwGso#qdQvKe7~~^5)({cb9LpKVDdJj5U)^B zwK54|`BGD$iwOQ30 zZS`KjwgOtB7(W5{jYx|ww&WCU-3d5K>c}+Z?5s+v|ErO%tl355O_QjW3(J>=f#!?%fS8N#`M46Fvtvr0O|e|^zwc7Oj{g_+Vvkg_9( z(74~AiU-O9A2IaYK^tx`_dCq zn$8ne79=_4POUw3sFC%2#Vw=ct)W-)5c4#UW})@6OnA=e!OS(5fCrsdLHg?;Tzr+f zWjqsysY%mT*t>j_8PF9&#Xlm(rR}8y1X2#^xdoG{&(st> z^_R=N_s(;=F9PPm1obz1=p$de<;v|GNkElbu9l>OmAu4*T!IPy3Cr$T-+= zgvNBp7&MfWt(5niG8{s|Hzo8w8o+4H>zEQ!>)tNyFS(cBBvNmKfbL6Ne0+LxhWQqs z#3im2<1@OnpB2%7D;+2`5_A2<)qmz9eh|+`(vN!SiI;J}eGh>8U*!GB)ww>}*~wpm zc>>rZ>`l^f-m;S8*z^L9PapfZK^Vc)0-7iLcJmZWZadzXP$qwu{!&!tG7l#W z(K?!f&&O@xmkXuW?Pzg6L@_G9+IG6Nx*WQpciV`M&AN6iY0(I%uedye&&cra zwX>y8sQBN884aYrznnjkp;aGz2WOAz`A#>kjtye}uJ<&k77Q9b(GeWnBTt9zPN)T5Yn!|6vzJELx`@sSe*<%RN zAFW1s7`oUl0yF61Y#vqw^xErp_g9~9darcoOCF=kSzdSmchLJ*Wc|wB+3(?m7bDb6 zr6iwa9qQ*{lad0X@32a4*>J9Yhz_{-AsYD;*K4RWooQ=A&;yIcjD4b~aI~ONEsMt}Yr?dB7oh-?0Kxj<>24m-EgecjvCLk#F3VH?Z&DegNFV9C-Bk zai09^U0Xe&5pzG&7O6Rl)qXX;z?nx+Jn1T{P-&w)aP}6_+Dui^g}GMz^!hK@Uspj> zJG&s%QtVEgKr2L=fJaCQXl?>hJ3^Oj?mkw!N^972gN$j1k}qububNE) zFw6Od}sQ^&Aj^xf+$Su5Rg#15MTr3#9QwpM34)PWY(woctu>cLIDJ*dLMC;#Vwphinv4>UoZ;F87U(--kyVNmZSBSKjR3>4Ub6*Ai}ZEvEhQ zU)moHOd6eiZ>Qh3FIBwcj*yN5&!lY_NTt4E%RG}zwSSJX=_bwA$4C)%uScY-ym&FE z>nRW{A?mg@@kM7OhH-2034%Jp^NwhBlh~&Xu!Fu1%(2IHCHBhb*x`WDS%N=eUn!9f zf0bAk=r#5XPdduj2ZcqooN_C>cqFI`_)!)0t)tW6cA&}gv=7=rH`-;3^Bt%xx)u|b z;x*q-brOrqA|FKNav9v_nJd#O(jF|<8~8emz4Sr<2K$@@Zp(osb8`=-hy23uIlS`)=$xZe|xu~q_1CSknD}(>v8YIi{*3d&H1uD zeX6>nx|t`>f~}8W=iIA}$>|=J;O8GD+#DE@bz7att>A|Rx?L*y@Ce%JXU^dhd_y+~ z|5tM)conDJsNfJ+cl8~}f1D=xSrAASqEjg6M>3sjL$TZdJySdHH{$T9+^&A=eHn{@t zHt)^7gET+r-a8rr_J-%B1TY7l9j<71vy(k7m)*MLMfE^h#?RsIJ0&w89zRPFKgJR{ z-5m9s79CSLKF+>N!ohjd&C(1d&rkm#E7bRc5lTHE@Dr(S_L?v9T$Vc3Q5I-%7eFK7 zNc!B!DVb{$)hrQ%MATk8^N%AJH$H(Dk5|4yx!EThvM$a0` z@?c_77>@+_<;mrb4E{|%=xkIdue&7Be0fQM=kBVwg41HJA-|(5Ws(XW^7JaGlp77H zM;quk_DIRBV*q6Fq1N|{tb7z=aJ}mwtMwJk;o3Ch;j=7{!&@&_r{VRGgYf-<;lA3Z z{a@l(s9Y{^$`t$Pxl|bBrRwKG0-nM>BI1>=;a%+IFDxcJGr`jbHOHrmox&I2i@Mi9 zt_7YUI-bsA>!$IQzJfHTA8iImRzf|eKMK6JMfCKzGzRG`2F=uiI$QyVpU6H0lcWC{^1>l^V3?lTKBg%VyJxFC{vElsZlh? zL2HlrcMR&(GxHoXY)B`t9_hXE*ph9DHmJ5?Ae1orR;*X`d3As8WpaF+Fp42W1cJn-rXH|U&$9XQzppS|4 zmhL0;m^hVsUt2@td(rQmItq_60#7)^6JuhZ0mU)dl^3lq3Df%Bo<5D^?-PUB0+9x4 zqnhr>xE4*jVz`A3v;XC}5SuZhq+Q1SLNWXKXH6AVY6c4l+IcE9VB zk?C70xaYvl_=&pCK>mr^2jAYXDDy8t0xwlE0<4nG4nrezy;0IT(ts2CQGY~&YKhI~ z<4rPpdJvMO{UB8k<>{GIA~fan+2Yf)Q%)+u!m6^muaQ-YpNT0?mgQ50*FH+_E<|sr z){K^-$0S3%+&9L-ZRRHcE6=6@`J)x z+k>0ehKp*&5O&(92K#j0X*bAH>L-$u(G`4*;9W|mxJfkE7&wc>x2d6 zC2z(ndKM(gyt)T>-BN*SO%CY}uJjlN0i^sT?h`MQiQHth$%?#v{``$q({4mXZ!KbA zINT6D%kd5SsnwPzfrxjHJByK{ijS6wJ^_`gslZF&+4vKd;Y9_~*S|W%qLO_tkHc(Z z=Ys?sH6LeqFRLi35>~TkZv>u5aek;+nKRpMM!ZKo4#ThG*) zK2w!nK6QC{>>b?V9%A4qskGcPX%WIOQonD5$cr5+LlXP-htY}UDIRY3SdLe6InF4& z*(jsobeN1vN;b*hK?as9Byo3=ZRs}`ZX+g&IobO5A`lT^hL$OY7BgKQ{JvfO%&z?MT((o}@i!$hWOA&r+%Lh+C^< z>(iki1>}u^WrGO_A*Db zripA=9&YQ=gQ&ZBLEWA0xSd zfTQJ?+PAb)9q_Ol*TA?pmr;XO66g4ObywE3ir2;|P_*m0l;Neki@>)Vu}?fk@#mVf zQ1tpth<<@1)7YfW6BtEA;5`>$7k$o~S_K}@cfW140C?i_)r+!*;x1 zr#++jWI&IB6j)EKKMdABP^_1wmFVMccgyfOBNe)^?o0-}6BPBH?5azvQ5n>=+}wGba=onkH>leHK)vogWh855Rq)dBt`5GnwZrrxUk zbU82J$=q>OpC3=M$;j*$^~3G~M~ZxnZ}nuoFCf^KvLE*dlBzMEwR29$CNPQzC< zG|JTj&NmKKBiZt4ihLX|oF-lQzlZ?zx&TtQ1dHZFC>h9mscUO@6yChk6S)3~if?cA zfX_yQ#W1SFx-M;XAeibe)Tr21rJc4+61%`uusCgF}P=0eMQBj zp*^>g@$vETvf|fP5XkNo(2#ptzkPyS>TThSshybsy7i0SfjSopxGbg>f5sLs;i+_J z+#dhOOqO$%HEU%l^U+I>BvcBbFXNncT~{jeL}WNQz-oWV;rSz}(F2rYM{Y575xUYV z8GMFy8Ok$}D#Q6Xl-Qq(dM~Twj@K(f8jr4bV1Fic$>R@V1`uH+4`)}h$s9ytuCkl8 zQw+%|w9CTlFzU{RaIV!eklZKjU*aX4|H65#D&B8R7k2B;V1pMN01 z-?enqlMrf|>KQh6^W9xua3F6j|(sl`9cc@#8lx*ZZd-hDVD!V3a`D@L%^CVe4K%MI*pO5bAxEpBCeKUYcQVxeR z<-zk1Tl_j#9QzbiZ3@iOs@aQ6OMn<1NhVY-3mII$v^WSaiQ1P%`NogFk6bbMQJDj! zO|+c-#DR6-2de1hMTRI%{4a)nIx0D{XjBa_tsduK0$7gR0 zNo8OiG`u{Q974+Yk7LOBO0-A0Ul4-1qpisc-SvQC=U}#+x$SsPaIt>6LrC`-INH2z zpb}`C-2YVb)Z#coWxTnGA!+zSFEmNppuydNRqzKguejJK586tn)_wg6CCSR$PDR0w zmPO%%d8(;H0$j@WefMJozwv>~ya;>+RR|P4@EQ-dG#4vix&saF_iSg1OFxd3+Uh5A zJvhw(8PqPP_9_3Gi<%ou75D^77ZZ$?B~_`ic@lmsHF!6TG)-#C4Jh_Ih`QOBtx3KAb%AvMTn1?;-XZ=4xr>!0t?;T=CxO<7i>yz0wly>0 zD&txYTYc%vF-u_tXaYnq`9Ur!iD#BIS_1YIWbQuu-BdtP} zRb|!Qu~EPSYiQrqUTV~XZByQ#Zln7mqY~vHiDn5(%j2)UJ0=HJrs?QyWLx%tONbK= zW6VP+1CE@HydkXXyZhfx!wDzTbreCikrcU9)xI$`c2(&*wj+JLz5HBKi-}fRv!WIB z<~4di;mZ3MpX0eKkIakyx6K@8-=``O*lr25*tZR9OAJsd((>c!q1~2OBzT5Kpcpjo zpo?ZzF#sg+5FR}Gm#VBotN=shUE{&J*UJ5BU5=41@ocBA`~DU~-+KpJ0zrtMU-_S$ z7esl`EExqK6{o zr@RI2SnJokn7iO-UPG~bB<$~611}_c1v2T58iz^@ss!XU8{9+sK4kaSBs%7E6tvgZ z*H^k)Z>p0fTDv05L6FA!di*U3c!=~cNxy0SN`?Vj zJ^Y|ckA2{~2lgy`E4AXTS8f_FrcO$2!E5%=6ESLTHr-PrqOZqR2;cjbBjp54mTGG-|sDoVihc%5h@)<{&=8T3ntq~kfo8w`HTszAK zR8R9AE8pIk`F10%{M`R~^ghb*8mHzLTs=((x&tEga{gv3kg!VuOo^_(q`%1Iui5+I z>IAd9NGp4G3f*j~>K(dgN`L=f05xbYw7jUQsv0X=^X#MZ2hG_AASa1W+dA%Tq!S}h zk@|7L8Uh87z(GG>abtw=VfUB~mf%RqG&fbsMKiOqK|ogGyKjS4)~?S2;?~3j4YbR8 zh16TNQN#SHZ@#@-uN#N0EQ+0$?JFTCl_shcalj8M3dJXOnZX>vW;JMSX=y@0Lrpqm^ zs(>bawUP5>tdl4@cvDgRnr`$!n=p}nz1I*(q&|Fads?Z%!-0bayq#d#&1ZSalX;!M z^sob_pN-lWEwhwV4nBk))=jwIxkthogEpy?z1WW*k6?ymjeROQgqSp%w`g@MAhVLc zaJ7Nn{gxZfQ^AAOCV+TM(0DfZ$aWM4vz;&fgfhwsCO=7!0VsrTYc}rE*k`X`V1Wt` zPJ^4S{P17u3=X{~?ew+H*$VXg1d@@CH8-__%RI~S1_7E4DeauWT#DCT?6bu$q;T(L z>^Mk^f2kM}JnGMmY`LuBm+)~@uiuNqblDr&nqHa#QXB51mh*Gh&fZ>Es}B9#2Z_4o8NUy@(N6?gpDIbQbh= zy{H@TMqo>SZh+&Yz&1UfOWBtw6FMP`04RH%!=oxm`5EG>XePw+z?ZY*6u#%}zF)D# zl;B2O&qCQQ_Bs|+n}`J|zpL`Iw%qiIJu9iD=!7}oxbz6V5_5GoMoJPNALvnj@p;>I zDtuN+U|Bk9nXDdn!J4%k0m4;qAa%2Nb0LKpn2aKg35)=jyyl)5~*KgOW403ASQl3^y&FEkU$@m z^5Eo2HAr-V65l{ztmaV=hKgXu*zvQ*_#DG#4_LEx)&i8Tf5@Y)>g<_#Oa5 zn4|*B{0`IW?_20+>=3n_Xh{ulKanMrx@?p;_TRTYK3Z7H1I3&-b9zqkPJ!vf(KLkt zhXB-;zFwtU5yZKJ$d=E_o@Z7Z`H*w6X*Ea2{oZ^k<2o_8 z%&Qwshe_Y35B=_^q==<21vaBdk5TDN$woqB-h8vAZo74qJw5Y3!SVvDve)qF0~Tpa zbZ(((U5?GiHt+`98#(nV(B{DeI-}$L^kA zwLAjqu3+a~8#`-GI#JC^JJWS zN0cpVU0z19QLSn?E&1xM`PW^8k5)a>%FHLn4Hvb@e>($+ z+w^aH%HMG?nPwUv!i=9^<8(V)v!-J0-;pLCH}JTI?kQ&)o!`v#*9NdP?I*S#P~1Ho zuf?Pg8dC~erT*yCq&{ZwXKeC18iPycOGoU}-%!Y&7&PP7vR+ubm=Wj)n%I@w$pZIE zrMr9r(n!jmy_JdXJ_kb+a+A6Hr*4j37-NWjpw8(vHncRhKT5^4SiW0d#C@ z$BBe{{8si($%k8$gQ^{I{S*(31O21m5i<{Gn|w3HO5U7qLzl6&ZG1YSrgz)F)Tg?= z8Y!WvTYJNE!GI>T0k}oU%66A&;v|@EZ`l{%U2a)a{6a!bhi(-2<4_0v>X(~6*#+9x z{a~ZiEqd>V*KPY5NH(*>{LlBPffeKv;2(4Xw`=h6Mbv)F>R#}E`_r5Dr(PMdWp)l% zdsVW`Fogxuq(wHAgVKj_ie8BJpx;>+a+uJZ&{}9Vc5$h^5kW93t2PBz2u@UM^}RPd zqcU6pu4|VZE?uDFw`s~Bq_g078}!(8`3G$+{4UbkKngX33brPX0}M!71uOKrXB@wp zl%^W>q*&hmZ3$Pn$Gi0NL4Ug`VYi~>H;u%$wl&iyo||{PzB9*e&?rxR0yy1}Ku|+Lh!bi4rTd{eGZq$#1~Bm=;&;jLyw8>4n1n{v||FMaxp0GU-BqOxotDu3bYhF7=JqK%dS{E zj^CfyM>m1vOB4~(p5z{MbR7-TFd0nhK1oWOrq2d>xVnC*9#M2T))N*VwZa>*;{4jW z2_Plt*|&tkqZO4w_*fiCDO7l07|NX&zTI(2hKy`a!=V(qFOrat*qgfWfH#Ftv3;F_ zzDAIXghHq%9|eeY(9EIxwQFlV>1J?u6D$2jj<-NU z_p!0U+^37qlXk)WbiIfTxKc|X^L$8_-ygzwc22_zZ~MJRr8Ou`Zn=Z-tI$F zWknp@{?_kLg1Plg0{t_*=RRMOs3>l1?0zP)0|AArZ=EM|aF5_9|~USnyQDYNdMAD^O5GYEhT@SpC>oI zc(Ab)GIjn*abo&}Zr8De>@YE@~J z?anqFX_4<6yE^h(Qb&jM<2;>!shmk{xRvS#G?J(SM+bmzm~QL@p+cXDPy1MnT{J>J z4E(G&$`ARGr$l{R{Alh@#q^^iibo<9wus&s$`XKt;2H`FiR9?<5Odq9Wv#Sw_i(D{ zb*oDP{ruZJRiPea{GBrt7e|!cKW<{1ktlpj0-fw{P|Edm>Zjvu5^4$dS2s6;4fk<3 zbL4|dI|{2vPot!@Nc#I+qUlxB=J1g#QvnA}E1`wuEt}V{h83mnhSx2P+;UkWzZSW5 zP|@M$w5*yrW8zrXR&D=Y?+pC3BC-8Pe-2;_EAe@>qi|gF7T>a0|iRCAho0gy8n#ZUKV3ySsaEhd^+5cX!vFvV|GjYpN_=m=%%Elz=^SOh3M_c}qW zIhpxb=-=?+zdWIyG%t>boqxr7v2MGYZ#jlYeVKy~zw`IOdE73b zJ{*>M6>#>9g2(`e(+*q$VXZ{$+UG8|eiB>FC z-LIhUjwO$vD^_AqkCJ{BY z6fmBI>$V|~u>_1r7b^vxf{>Zq^VhV`kyPEMRQj=#-Kkz)tAXWsSu4{gj((J_nYO8_ zr0#U%6#^_WSj4UN@5McQ05DH3MzAnjz7I5-Y+WdszX4fB_AX=Z)%^SN!`_DMTn^wX zX4DBMp!R+^LTC4;3EtkGC(H@Te=dn)Z?l$iW(PIhpgo+ns1&%@do;bZqoqBZEV0`q z#&WoTx4AdOtm*R2uVguq*&UTD8ICSHDyqBi$H-VzkwzSWd?TM%el=4^1+@TS-x#Y% z1c--G0AT~?z)%GLCqMDupqfs!`rz>vrF-0ObXRffR_e;E)!=i(drUdyh=fAdn9rzk zQ{rd`L^_@AZUlOo%1z2UBG~!DnG+cm?w{=1&L?F!o&|)EgH#Q0 zZ4(TJ;^Y#t#l%wu&sS%OLb$RjoUjk#+F)O>UN0hhR^Zzob_JUr5>S@SPJV9rV;M_$z4G4e zzUC(qe2(N}6k=j_9;9WDj9T3FXmJ{GO1|GjIdx0tVr6|>gKExod3zD5vEKs$_7yO@ z-VY)IcnvFT-H=v0gXEbse-ZDIISFlfL>PBdq^SjVIPP2m6aq5<9Cn9z#$1;x7yx?W zDz!d$$|~AvtjVK~ZOVLG)b(nlseNs0V)mvmlPwAJ3+`{DL?k;lMx#NyV!e(6v-;Xn zGtL};v;41t(iyGlyw9f5<-Xj1h>A21J2{E7rS1b=hhM`tj5=5ozD}n!@RBDWO{|&q z5K?H2CcvdVw4!T(ZWl6$Mx#b$)yt&amBS>o z@^Ht~63{j%vGjPvp^;6u>V`Sr_7Gj~R-oFs0HD+PVvr{q&Tlg=cg1A*yg>idY%-Cc zd;?anPOJ%Y<}S;JR<1ddxFzb4KvyuN&Fb}ZlKF>ZL4ySb6mgb>04F<{hKB3q0~Ym8 z{hV>?*+yrA=Z;6~@B`tnbE~mc)ZWO&q=o8gHp@-eZEZHlB*V1`k2TNF;b>O9ZfME% zidh<=vUWKzul0tmczHBE^_K(h#VI*JV(@3x{F&p_h(Ny){zFw1*@1hGprJ(avB`Sf z>wo95_G0k9Tfw=5u}ft$W7yLkXwtOgBZ6xy7%M(Ng z&JD~W+^*nYej;)l+?*^E->lHvJ&IbO%UA;~muV9~3rnb>B~=-k71Sn|R&otCsed@L zGIz~iIepHA=wF;Y08BgszL}9Rv#Vz>nM477wo)kxXsXWZ0a(ltsKb1i25`9c`s?f2-M7T?uIz_hZW(Ka zaz^%P)rvv*CUQAG&!1CojdW@3^h&?dFFgi4b{K0_%h4y^2v4d^tg``|GRcwgk@CW? z)iJyCJ?*tClP9-W$W^b0%;`PF zHx+A73j+EK?as3O`9y9N8Rf65EM%zv|0&;vP zo!8Xz_fbbpjG&(tfYZO;LaCwMiSJl+aw>HwnA|CLZ7snZWDeNcfq|3A7+}2QSNd%4 z`3An{)P%G&`<#_mDrURv2&2Q(n*Q3Do6{8g-h3#_RLpvRBSicF%&zZ8RqB zVN)NzmkTbi-=~7u6k-;yASfDH(uT~M-f1_`DdqtCx z59z>wxoNzVoI)K0?De7aP`v+0qS@pZF`S5%r{>OD|xQZ5dm&9f_Ar3r-}FZoL$zjbtlcy*xGEq zO11i#Jp6>tB+`39+aBRqsPz#0uvVeNs{|nHlI^AyPCT?9+b0Zcb~P$FXp7vAbS6z? z{nC7|gt;>B*@hv3q9iW?Smla7!G!#?wMJRT2jD}4+8ySN=(O|lK1rFE@NozxdcHoG zF93b)XQLNr@4NSjI@aqHtB`%z46 ztrnMqI0E3!pf)r-6(2BAp19F$VH3M{E@q%h%sb-9db)UVd*ZZMNzXB?9Pw$eg+olPWZOkloCayYb8jHCHEpqDW zbGw140Y~b*_k1rY>zg;8NRu_!Ih6N;EP~RJEs;4-Ioyc$XivY8j)BKb>}CpQ|`AE$xiP znYD9xOl61e#xnYB0zKf}&xmZ#tXH_ay5$5zdL#;1MSR=BC*5i2NX66kC@!eS4FbC4 z=9`X-fZXNvkc!Xqy-%LSt~cyA@1~lC%6hu}Q&-jw9^EIQRW0YMl<1nSt@iY>ke27N z0e8QdOp)cAiP=~GS5;byd1_iMXiZ&9gJ$S2zw7WWN4c*&X6ClCmYz04RSF!VHAgR| z5t}njGCh-8F9$8nOf+9ywxg?eQDwfbx7z1 z3xvg$Ag8h1p5-R&0*rWLP$|WnwrAt>9x$PDL=2O*b1T=lm48-zvFp-yeHm%XsT=)l z-DcDXM9&;=Ydo} zo^Y-<)2)s`#9v%(a>r1?~NDU-dY>ujU;8x|ptzkP$N$p zS9(3mB>x@Br%ex#`<6{A>Y1V*Mu=EwA(zjEHnxXw`$hs)d@Dl?$ZVpHlDo zM8tz$hv?n=lke8v=p6PIdZnk3x`FX`Mq1@|Y6H0xQ_V`mWfssvO~%7pb=wrzx(F7& zaqZAfVuuL4)5=D@5h5S=~Be%nHimhSdObK(N3lCJqfdfiCt!cGfYSUm z{cf>9M#xzL=hVe4l!7a+J|p^B>!&3JmX1SFEk4pShtoatAHU}Bas5bcAA#oeVP-e~ zR#nvEW%V&~S*X9O7nPX+rIu;|EVubD-KHYO5AiX>)hS{h4S6F#B(!GxmYX*bf!=N9 zKx}4r=r?6lX+?&%rH-ehK&sE|Mg*T1iFNBmtxg~IQQr(O0my(Qp_>T!ds~K%BYC+= zQ!Z}~B&{?Ry`>M82(zI*V|Eg>3X+UPoquR*Tk5vE;`DHD?>!YdCa>_x1iE!AJ(1n$ z3eydsu;e#-JYen#j{XYwvbJiz(x39!LSpwQ65;aWI$gjuB@;Gr@oYWdKkZy=UCw!S z?RXBFB{Nz$U94ZQ+f3R6{F!r)w-QH%azbg|U0OAZJdOr1CyC5s4hRN;lLWb!Jjj|2 z_cNsf%cr%sz;gL(IKs0mAN;ON1f2>w2u472`#M*lQ=pPPfK@A0u9mzvQ>nLh-QsR+ zv-*hH&aH!5YG8EJ4)uPlqyKl)UO_)Ckt5)JD#$!-D#*O->+_|r&wS!O!#h}t zrLIUbOo7S-r6gy9UJKnvth^Qzi+w+%Hi0mNyNy2pn~&g+7nH8w@wYujYh_Lc(jG@8 zYqY<$v|kSL+;JQ91e_GahaovlO}6W#I2@@u)M^nPpa0~!nNb^(E=_;}O#erCr^6pn z|EMy6S0ueQ;AdSHE#rK)?UtKtjY(w={}1*x?RBTf>S+hG$AdxbDHCx&=;FyH`-z{|nnD_ZfW7#r?(1Ql_{9!Y1ILLuiHmvzDA0`4u!-A! zGS45>Y`@2!CEIb0dD=Rs`?k;)T(M%>%54_iQs#d58Pr@C91|f^C@Zowe#A0W2y-h} zX~A=dHY^JwaB2zDl?wJE4?!9Cjp&=CI}@9OZ5 zXRG8Tpzb8&I^?0GYI`kwC}2$n6erxkR8?CD+Ei0&=Ee9DXNqENYu(8|y|oGkVEZX? zGhCqmL-_mrzycV$hGoaO!ci%2(|WVmT^ zxd9fG1%9Wb*3w}Vo+bKR-W%tka>5kjtPZ9T9`+c`VpgMxoRQtn`b6(H=Qrd;S*VIV zbX+^kJhzGqO*kqGWR4^YBV;~Na{e~sG&q{o*$r^q&kD7{&G_QpR(ED&-Pkw!Tw3W$ zzIhprYo907?;SAA3@p&Wb{dwPYSky*nw1Br!gvhopGmmVKF25A=sMEpm^P~qm2Tuh z1#)}_-v%DIYU`F}9B;%Pps-p$FV>j?dv?hB>ZEH19I(GZND+8s?MtX3C0*#MkKahy z|Iwf0Oxl2fVU^yyC|#Dxu|7bwGNbcgWu^*Qnt8O&=w4@Oc(}yeEXTleQKJ;E(+b5nnRFm@9pc#7{H@&Ol&hn&9N5_pY zuWD$E^LDj!&hEzeYC;S~(_WmJmex%RY8nQr)$jH8_4Vn7$;r~$#7XO_#beacI%0lO zPfq7VOaJv5aq5eB7AxY3lT@HAJ}wmM?pav!>*H`no5ZiMgI&7FxWM~&=Qnd+2q)&# z$UjrVD|B#|G?=VX_}Mk9pzFn7v7OKQJ! z7+kz$!sk&$@q>$-n?IE;V|{ZIlDNzEeE|K48BD&Hjlv0k>l=}jf?M2;=}4}o%E{3F z53w=V?e=mzvhZZPn{L=9|5(o)oev&#!!Q1=c;pRNi;jC6FL&7?+Y>x2K{^F%SG>dMOd-QtN(SWfq zJ$DNFmXZ@xN?%xCppo1SV3DCd$YIj=K9cK9E-uOeU4E(Ev*nr=kTqozXwDlcN(D0~ z6k|x`c;lWDAgZizXec;YS>!>_*hjO~)`CeLOX(2Q!XWa&a>D7Yp{Lw3gNm|+NOWi; zch|^RGcLZ~r&h!~!}s{*D&P0#e=A|`xPivApjkj=)dRK@d^qL85225-pRK?1&4y#l z(r7j~!EjN?7kMpOJ84mmk=Vl0KUP>=Du%szkF@o#8wGujY(Fm)@Y^;y=Oa%TC^lZf!`dY*cgl?YCLy>^*r!APlIKCxKR zJG8Ih`AP4n)#5fohm;J!rN6^5fPLCJH;8M3lDC}clR zb317YPk=+!xaG4&;se2SaIlDVU=F>_2HLOM8Fcv*Px%pmSrtmk3kO-(twm45cKc?| znaTh=q^O@BaY3`b3@H=~MaaUqIn>Lr(?fhxP;7#MU6?*7=L$1^ zC-`&cl&}d2zp#viZqeUbYiw=!6{KQPPG}#gB2Sb`=B4-_a z)AjU)m>BHsWKvd`nIgyj97I~@Na|wZ9Msu}n|l`iHQHzCckb@)M;I|=2H>Kw)0KKi z&fyU~ec<8Nj*j&Sv@2h4QmV&?oQnkzFqQAB`>DDXS+^!$5@zojj{RsPfz3}uHum-b zWKygM5;enVwYf?Y?OqqXeLvaP4vP&^JVzFXL`9qiMcSXw$vUn>F?oa6DA_oF<(VYu zO_;P5cTLtH5iBFNzk#ZdaVbMfOJgIxLG7ryY&&buZZHGynsgQgoX7J8!T!Y$cB-KT z{%{JEuj{2rZL=@^h=ibP68g!wDnD%&G-wcS&W!fV`q z$I&5Dp->hhyQ&ctg9M9~%f~7CovurJ?BvYDRf7VyP;IA0MVTb|XJOflW*^mZ^Wc=q z_DSq=9V6HwTsaw2vc{BgD9xV9X7~N^Y&MT)1@C(kEuuJjH3Gnw5|taOkgM70kDw4z zABBejPwYpdSoXF>IbTDju72ZoAwqjJk_yom#O?Hhzfu<`Ka^5w5f-_N*mj?33gfe! zdAT@%_-2jF^>tD^znfhKyvFtL`o5SC3^?lOlLt zx?FgGB{M>`_}d1UW>gk$Ac{4O_I%j27Tm+e*ATqj>E9=AR?9^jdP#OM2xy8_`6h&l z-J11wJY{P(*mOG0NJu!!0CYY?1I2pdVxEM6nuz5eZ({3j>Q3TByluV@XG zX&?jH@Nb#~qAiXAe5O?G9T%eiz`&=ZmtVIep0)@FeviXfKc9CHzM~X zbG6NV3&AG5($bN)Kbc>Gm_G!g?&y?;3U|^sa`CRUK~3c&M^UhV(jg0~vg7St zPH3(Rjm1{4U&QMhKHRPfBJi~i(v5N3RRfo4(~Ts$DhA1up8fFV$C6P zIp0Dm_A0}q0E6}9(;CKoBO6lOJ{_+m9YEY^yt}yTKw@Lt$M8iFlVRyw8==aT5Phjs@Otm&2BKx` z!jgSMK3KQcBXsxFk5wGKHX>#|>(MJDo?19;W8NOa`7`FG22%+IvOsfT(r|!Xb$rR2 z3d8(X_+?3!JQCG@7f(T3I-15pH4;-5ORKIZIDszUV0vs|K-krpqC>2URLD z<457!oFokqcXs!3qW$CU1c?b_6XDato;`zAit%b*5`SPd!$onz`MMVniQX+?DwJ^^ z^%kg{@0w6vuINWZ!)|ctI)NMZ_m{?XAZ2oQV%L!2e7jL2!sE=T57AJc3&<$;dflO+ z+q8(|7e5f9@=7{d4Jj)FI2%=E5**lgYK!G;U`!2Wp8@@{r%Rp>YJ}OLO;8Z%VR5g# z+oa=zwa2^|_uez%5~TnWq6nE2ERy0iC#W~30}j>sL((ASZaAud+#y0Mi)t`#M*a7}7$ zgE0IC&1(#wf;pqCzNEs8!KSEBLo#1rHt4!!)4kvKL&R%b$fWwlJv*GWXQaS7R9IwsU2iFx0B%m}W*`8gcipPq9pJW>n4!Vi7;UXv@~b^50<_ zreS`gj1t75#2)Y%B*o5f2Zcr;lyCL-=#Q^s*i7hM@zCy&9pP+uXFH$i5r6uWkP`Ye zqRgyV6HCqP0EZp5hVTJjcFV}nbPyF)QGfn?<~@#^m?}if*7$~a61SX1ykrM`{$=h! z8vR|DNhZFa1xoWB!=c65s*Q`?faLwUpQj|VV*B}xRZ-pzX>k!cmCzz-d)#czsPG&K ziV=oGa&)owU7Xm>49)&xG>JbV3gIhE%iWKj^AFTSXz|>XM3_k|uJ}~LcxtE4my6?$ z9(yZa&L59yYY=SdhApm6o`tGxHYnrdxaI5&*z9*@MR;9h9DguH5wQ~iX`~}|M4tlA=6DC&kD6^WiYrI`=>tSGfC*I_zbyikC}d;LCwvr#bff@gw|~}$AtEw_2#(ls*k?z16)Nwd$u|s5tL8+ ziuJvTwA1^n89^Q} zl>NZyc%rm2y*O;zdxJJHfq`vgQu?h|vrXgi+V=;Fn!B9ccHD==G}uf~-tVSDNT!e+ zK1AE~QCET{DaWWUuHU$_tZ!CbRnT^>H=n}Uox6To0ag%J2&v1JHVdlztOZwW)9Qms zG94_b*v~%$$N1)`91pH2sTKmVEMMJfWHP3~u*T}N0lt*x^mw|h-3~PCq}!ZV-}Thy z=jYeBw=_SWb@Lv#eNAi0-@r8_?R%@*q-PAW8@Yg(sAzx-J@HxerSt={i9cpj+AnAa zj1Gho`7UBK3|z%<6{XAHIq#c7B_&7sk0c}{+pA$$_ISRO3OG2RF1M8`?2cDjn3zBS zOAtHP@(x^YCE!DVl`)-bcx>|~IW;zA!1nZ!_!)V^rk$ChjWA5&bYhath$`iHEgb{E z>YC`6!b;^=uH#x~XN1rIBHL`CF7JkUO;Z%KEo%jO8_Y3c7O|T5FkQ*h86_@Jz#^-d;Otj;CE4H9P#9mgHqQ<`3Xpz(GtZ!0BQLmBiMwe}Uwi-N$sMvs z^?>XTY@+nPJoo~Se@!6rLYGfrv|SA(W(r>LW6Zq!`Ky6{V*YQ@X9#}Rwmonp5-5Rh zO9tS8VG^68S=!pe#NI)m+8g(U#JFsz8{>o5x!+zNz^1n*%^Pkg>1fK^l%M7)RmhHq z9@A<$(CWxPWD8|~3#5AhE0k{lvD*He$jTQZ&*QF4cj0yeW;O|98%A%!5hx=JU>UT2`8SM3XrLV(!Qp}7N}@00w&-Y~bKt*w-b zRJ$2HR_M=Q>O9sg$1!XC2#R3j&D@kPk{`lHiw#SFjhWF9 z-D(;U>QMN5SpEU#6t8)%H#Ty41s=>FUd;%X?I`zDGNDUhm$jb6WG1({})s7 ze~+gw+n}mK{J$RY-yEZk?=xAUJyE4EbS<g(0^(4ngCXw$_rMvJ}>IqiB^3EPCGHK@5cu%XlizZhF2axQ@d(32rMr zmu%+N=MYy+Cg3r)_~bLehhyWU@E783$O?90{xl5S9T4Sa!pCPF{5;JoY($`YD`q0~ zyWli->;JvQKdlNEY}N!h^8fHl)@T0R9N^O<<)c(8woFFA{!n!%Fr|_T^M!OoO$YXm z1SyS@IA%knl3<5ZjHrum$EDkMwTqheMsjjk`{S!hK`!UxDzPJCnpbJ+Y(Rux$`P@# zsot-SdZWy)OpcAAlqgRe|7rk9XmEX&zlY@cg7l_El)0l)!a)HptUY!AZcfj#Qn$@l zQA~7snd-M`b%v56!G74;W{i?*Iy{tgR3yl;NK5S~Kqy_WU+RcUI9)I4!sQF|`OP7= z)79oqeyTN62$TPB|EIsT=Woo01a!`nUYrlrTz#wB>aV~W$>M?kgG|4}siy%qy`Yh1qT=mei_eKGmn3AEm0|b=lRIu``P77%EnERV&4bn zmO`MlX;|+K7U!@}@McJbjG<-(qb8M4(ebSVt>Emh0}uau0RPS)@;+BC!D>T~W0Z8p zv@E&jiDr&??AS$J9gKXo@2_rw)SvY~hLGwlV%j}%4(mp!H#QVF20wa{YV9L>9wk&< z`pITPp_-W`?+@`JnNN>X*g70+!Xe>Ie=k+ra&Ys0^lr9vgh!x^j&UPAU6z1RQzK{e zWn9Q`ZT2LV=v-m?!`l2kbED+Wa9rn&SUIOeBS;?SKbQH7i8?_7l6^+o5`Uj?62AuV zctJSK@iHR@rU&=?0y%4#NIqQ{phNNlP<&TE;mr?E_e`H^gGKa@f#p`NfY}o*<5dsF z#^I}uv;jX1qAB>(os6HWJxph<(h_{;Zr=H1i?dGBmloXCD_Il+8P2tC$a`iB{j6pD zIMp5a8db(`y|C@wz!~m;NaC}8M^!$nXeSn72}R#JE+C;~xK%(csd*yVyHrXg?fx@V z5m-YG;c}24A-SmjiCgPvEKep?bN#fSI!hp=?g4J5gv%#XO2o#wk|bjb_@ogLZ=}P_ zf%(+usW>r5oaAH<_uB$lU^n?k_<9Qq8ud6K6e?z82mff&)ctA7lHLXT28RI6=Picw z>v8oGqB}bJwtEgl!qZ%(K(zni?e2v91g1+H{po)A->B;xgah;)l-V)@B=f1>Iw2qns(bJ;4x-xnTZ`z=sC`U6p-IWO&=YQ*sMN1XepNu0GX!yYm% zQG)r&$tc8ZY)~a?m9WUjDHb_PAxi!t-}!3&MSdRNYH7w({|dwQYdJxfqvc8N&jVhRN?2ar(|G+-q+9)!?Cb5)fHpN0On*-^AKkWQKdS#4 z9S1Z7j5)3I`@&qY0@9@xQ`Q{cZ=Btz2FXkP&ktf*-W`vUwZFnkdp^X`l8}7BP)f@( zR}sq(BmEzr-Zfm+4!kGHKj;#Ozpws~$H$iIS7VP-TsGQbq|jg$9!eMpm?%j20WiZ0Djw|#brlXX=f1Bb956rF3+Z8Hz~)>o{= z?$G-H3|Kl$ru~<$zfysr)J1G>ZB;0>+3z(o*a=gACz)qso=yzxVrr46s64Tude|#ybAc?@`-8ZsC@6-q^TcaJ!~*Kwv`J?`zM^ zMQT0wz`9@WNzWO@t@Z3G_Qe+#UG`s7OH){!Dc8bx*7%8WK&u5##K{Sv*V^D8f&V3r z%evzPfzdQve{b|XhbNcd??UmJ5{$0{u_IYp4P4(E);iR_eSINJ?0k!<;502+s?0>; zSslT}VRwQeC+CK3OL@09y7J@Zh#vL`S2@tPxJI|t1!8}vCyo*)cBRG1Uoc(ws*{Le4^Q`Lv`FRhH4YB#Mm? zYsMNg^TVS2TU76k;S?vC6mtWZ!wBb~v8UfzpOx(2aU(f*{p!i|*71#sQrD0%(d}(h zEtec0Y9IiXGl5@szm4(H3lY(2I~*!w=?$w;hk#Y3Jw7Q$<)xdm zF{dYYL~}2lHc!BJMK{2Trb@#XIY>?0yB9{|d#@Mb6j6N62sA6uYKsYxcQlW!!;( zKQ0btFp80pQc@c~+dT|L^K({INl9gekZsLAF!jx?KZ^Bofh}ke?n@*7d?m-=ad|)> zE;lx9mSDq<1dXH%#z%t#Kaw(|Jh-3X1~h?yYdPKKyi>Uj-GF{@QqgfqX%`@odY^wq zSY_80!iHN&28GHoYlh!P<-^wWRwHMQ$Y!)A`Qw|S*X?0)Ut@R!h5BmX8czWE|R>-B-4 zmg7evylPI(SuHm9aA*^`Z1mAqStN=!bpj+gjV=$k+x2;ZPKf={>?wnrvQiRDHHP%- zn%lEaI{5B@$&<8wGUKUGlgAIZ!04xm`j_3TpBh7v#w zPL}rfPF--?==<5~%-QXa*TsP?R@B|TP=S=iJtlE_O4Z-9oT!CvU{K5<|Ij{<&+=8o z>YdF0?E;8P3%FM+*@oq#zwxWk`O>F;iSnD#N!tD#w;l(yCX2eT)nBiy%MpHS0Sy9; z)&TZ8JzVH(>v!$#QvM|2uk~Xm%%u+9A3jGRfIT{I9uz-uj^w-fgzmR&-<~W%o%XB4 z09|At9NOn~kPEkg3P&cKI++hB^37Da0#2@+QS&pxXIX9PT-OYG?M5&NXgZ-j1#*v{ z#mLn~RnduBEQ%m}j(xSdU-BOgXB?pvD-dCWR8Na}Wp?+t=qQcbFLv4PpF>{+HO6OW zp)vH)w}E!vRdz7ec)&oY<(vmRZ5I-3t{XaApICiroI6H1885u^vo**gZ{|;!F@={2m=0 z295lMc-b9?ie6mzYB$B1X>8)Ff{VU2NPx^5}>}lgH z{52rtDqanTa~A=U{o7wY#z&CstE*P5KNX$x=zlQS5|s#ThUs|KUPaVCO)j&&Vw)9o zoYN~4zT6lMNiHi4cl5CaiPBJBSKPF9SaCE@U4XZw!3x2rw-+&5uAq$XB@ac@cYNO_ zW(T2IT>v47eB!eE^=0n6Q>Z+Vi2vQ%5$$Hey$~JOKyx5st+7+Qf-+kX*jf9Oj)c<6 z)!vBK_$Mhirl=XX8lq^mEUddVPj+#IvY-%2Ohl6LIW8!s_!sZDz0gq3#g&>v-m_&1 zF$64INmT$dpHBpS@&DH6k5CtsThDW`9Ciym5*&+S+l%6U7tpg%t2soHx6K4in=4OI zlr}8}dS3I$EzD6DXt8%Xffvfh83DU4Kr60v7BM$?dA30z4N$Wa{@XRlW`ubteh5YU}6G;`$Tj8#!pA zM+!cij`k-5Aqc-w6Fg9azr`4pK3u`@mnPKHesl{rM?L7G{Gi~8glKGYfTeP@&9JS3W^`IM*Zz*8bSRsCnKN8etH_l&3yR1MGGT|N2At8?m?*#Wc zRFp+v2ok4ujftMmgs+2je99T_`sginG7WRLRM{5&;9!c2DuH0&&ZXnEqx1Yj#}=NK zlA#(7PVhKL6?>pQm{R|jefoq-sB!;&GBbNNKy^d;d3kz&0Pz-~C|0@bCf`E0;2t#K z80kP~dOC?0dR%NW?~@pFI-LAeXN;7cYjeAiPKb7g*I|LE(dMM^pTz2Te zgRJ5^oUf-Qs%FCqmzNv@H_3VBi4D$ zLQ$#B@(>PQ{7zq#3l$T{71hi)RwO|dLLmFEh;5^}Z1{U;NzD;XART^lka87BmQSS1 z;KyXA#UG#|)o>*VmFkc12bPxpJ#$F}vs&1f0_%lC?j(Sj)r6n0tRZU1&h4+OOPbD4 z&+X&475fKH%M<;frugq08UG0d2A>?_sOac$`tPg;Dn(zH%UU#(eVvT*3RYooSzz?k z^>56*jRJR(mg8M6w~?+fG{q3r`fI5obY!u)a6D5^SFpEY6jL14?kTFXkVw_ zKc6kPdvK~ASC;Ncm4>BRLket zKjp5P5o3I|E0r^%)oP?vnXPCkqd<$|JnvwK<}Z{@!QVMde5euN=f~4-DR3?Buzpjy z)~TpJJ-_?qEy8M7EO`984cgy)hKk~pRT%oU$?FRoG67<|gtB5IiFS>=Xq%ggh?l_j zaA*g)7eSsB>LLc0qokM!COP?tNs4Y+lwd?V_N_`O9V}nn^w+gl8zLh-_-$~12s8>L zNO-9x-{tRNxa`OSw6HM$K<9T9fo}lzMdE#~f@$@e9q#U)K$4QCnilN)s%ZS#NX^mZ ztnG{G2N?@uX`NrT|NIR_GGvZH%y|AGaS~I0IFnDmxtb3EG09F&PC~{e%KNMzLNHE< z85od(Z+`@kiq$0uTUiYWy?OEO18#4ZnPQUFaLC-9F~7iyjez*Cb$Dt>{rg0Z%T1(^ zvYEm1k8_dRs&nWX((|P zm`o5Ay zXylGNoX)2S5`!2U8=86>v?+6)B13ju1+?*C%F)nBb#$5$1T*nh z&kw1RGS-z;lG>sX1Z{M=`*x(VVIl^rZK-r|f`m3Q??k9`A5A2>VMWYYSH@k z_cN(iCAN3HeP%lHyuqjBdtX~^OKh3s~(LUFGZ?cck9gxq zH2w>Y{Z3M_DM!HX(3G;coPs>xcR7waY=%_?6Ni6AH-Zw%Vj|}=;>Yp#t8Pml{#bx& zBm};Vrgi*hz@kK@!Rs z;P?3lKo@`FZy_{vdDt1<3~ZGy9UIGig2NURs+WAnG=}8-C?x_hSQ-wG1lX$X1qJa_ z*ym0;f<(Miii?vas|)){r*I`BPVeEIrGfs5Ht_3EK^Y$+1heqd{P{L3_{F{5~Tl5k(Xz> zpvYCJ6Tfrg^o`AGQ+7l+C}Or%oGK{I^+L@X({y}ih#rRrv@AXioBx=aUY^WsWMpEt zRYHYl1WuN~&(A-KZw+oeRq(H&O`wAQZeUY&n*Sy{gGIV{H@3z!94)IkG!3#U(p zMtqQu)q2^!Uz$U0x^G$64`(=hEan+9d8)B%J`v#};m#r^&~Vbl7*f@GJ}uV3uGlU6 zKSeHsWbU6D z<;8<;b(Fz5T^PXkp&)cR#v*0i$*6_2WL(&1U#xZ1RN5 z_w+oPkoZ9qj~YH)JMGG$dnCuZklQ%7zuHzY>FClZnw`zC6BZ;b|0{QFOHJ=gY$p{) zGJ}k?$rP#qAyb;d|_4$jY(R z3d1jN9wy3VRUZy8sOh?&2#?V(u=HH;bo6=XXw-N)8{vBUE!YDs*K9F(Uo0bw#8jhc zc7S$X1M|g3Ia*Kj`FS?z4*B|Zuk*E-WNBmsy97XImu-(Fs&G%CoMPjeQ;Z6MaTI{c z*ENzFJm`*+qBNFqqkl9@EqGuEm=|;CDD&_*-ctn*-)L86Ahh0r2>-Z!>a4V+ilrpc zy>o{Y?NGQ}?JUT=52s~9v=(&RaJnwnL_?VDK0NlNLF`XbYZRxd{a6*kxbe7(2_E`u zq>;`t{L^X2c)qB+{TpATkl^5;p0kdpo+&vCFUuHC;YS6x%U+}bQ47R!&E^9Nwr9Yt zk;X@uKOP(;E~uA^Gj)EoiyZL9y+Y6+6K5QC2^;=Su`YCVs?fQ21$<-O`vUVZf0n{% zfQ?!2DC|^{D(8})CJc8;&=$h(>GsQchr?Ag%IK#ezgIB{M#G&!+bYuuIHDy8dY&~2 zC%>B2Us#JNea`kqDqM`jg4~4LC=Y6S2Vq{q%r<-9pm|uc<1fMcet_27?wp8YO}e_e zpwrS%Humy+Hs-63&d)lk&)>b+wd7cYZuHZnW}uV5kk4Y z7=2}lDP=aj(UB$Mg{X5b*7-{iV(xQ_Ag!~Bdi^2E@ghE?c_LPgtk-D4V9wgz&QSGW zKtxp)hsRt@S);V0t*vN-&*)%FYORSiK z2j@aC@m%?nnn_P&JKiBn(@qj&ZX1`BdfxqUZO`V4%3Xgwu76Ih5_%uJxy?F%&?TME zq^>TVF{K)dse0|eo|K*4zg_mE6d)=}p4IOpGyYSTC`r$6*kQge%ZneO|MC!yRq>bO zT`6aNa`e^?kbA9693a)p{{I-3%JjwcQV)GO8?OXXVm+?Pb*hYSOsjkRJUr<%n51=7 z)D>N>%JKJ41!Ju$%DB>ZqSc$PKk>YDsD87})P?on6uZj#6lu&Ek_%e)Pt;w72LiVj zN*YFC6(C)+dgRqRHo(L17SLs`-N7Hw(!aE5MVRNkx8Dxh!P1z4h^|!RnkN3VjeLqe zk#tET&G}oh56d2zxEAc&z0-*~82+JraZEry*VuGpai)gS)0P|HCxrbG5U`1CR^Fj6 z6}A9;MoT%(!YsG~NKgOjLH{-p=CCwRH#`6zfLJ$?W3CdO8j8ZV55sI?rMfGgAZWBd z(W7OnM0~Zc-R1`6fPoq@OWhN9$9(C@FT9O*{(P0XF^CcF>)V{(WUFK}adx+!ZNa4h z3_(#3Vl?hS9p+-dVau)u;2UhLcfAh^l@c-vgKyNxBZ%r7%NDAm6PT@Jw>E&h5jpb& zs;_TWmdm}>gGQFjM|5$05okNP9OUWU|BVj+7h7K)Rdw5REeDV;De02#l7>TfcZZ~a zbV^GoC0){;hwc=ly9Md)?)-ju-_P@Y^^a?b%L807*Ua8~_JFVJ3Z}8ozT(b$ouh|^ z{ToJLFlh_}%q+(L`70n(p#{;>UK`I}ps?&;rtOT7qgIVCh9G01A%=dbU!H@GeXduq z*oK|fuHGUn)hf~kC)z>`6$6gjg=k|t39IA?dEUIP`R)7MHltY>E~|-(hd0+*UN}@x zXPUgyxLwzgKRiz|cQNsg!bk|;SL&G>wOE!dmK<>DX%~@_VleymS7Vf1g*Q;%3{F1l zyL%mx9GyigDfc##n_g!J> z8$cla{=q~1-L6?jZvVa#&t}8PPnqO*xUeQyBh8=3uy%2x^M!cNRfeMnR8%;e6y&Eb zu@$yT%^IF9+t}nS&YnFtLlf9(+ie!{K@<`YwTB8EDFw_MyWjR0`J=zXo8?rdvcKJo z=gh7S;g!{5A8s>Xy46?;?c-guW4qGQ)sq7coD*^n0FlVR!@y|G=*R;`6UM(;^kLuA zC)0)f#WMcAYHvjSN|^>SBM12f6Xig?krJI%X4I=i-}d9LX?=X;jZTb)d)}mAx4K0e zKR;Plc-?jr_RjbQoN&>u*!@8%l&TchT8p!78K3VCU6%ZkBl`2YCWS7HP&d7LoHv#? zs+P)y)UA{)sxz=MD)||jH z(3)^hCSkoX2%sx7JVq;TD_*^r)_ja}-C+9_v-&YfBYz}K z;MZrQTgb2J+U!W(gcJKib39ekik{mPa;{lg1CWRJ@wU1_%f$K4%Q<)tr2(O_>0A){ z53(Xc4!oo&HDfjknL*E)lIFPbR+4-GqnG1UCgTVLyJ;Zl3YJ0M-NnyCO}03&ft2># zu_lnisT5{*#i0{@z=u}7W2;AP&5UBEJ^Khe?I~UK%skVZ`CjJJ zmpmgdp<#e@olBW^*l`(lvDr;hoU5#SZ7l`&`ydRWOvm^*>XPT6rn3{{1C!1Yuj&|6 zS(SHh6!$Fv6xu< z1SGDhak^H7<&As7BTo(kK7a}E=(y(q(OE+7DrT`qN*vYTWUwg+l9AIiVbOH zD&0_J4o_%pcXt)`hx1iId>4nhBzI_9R85qLg&XF_rrpc!qOLMN@BR4u5%J}2W+ znJLyYw$>%qsVhZEuNLcl4UecN_JlS-6y$5D?w^|rtA`^e*`sKy zlK!wRo-esO;g;&HQVZ^L%mNyQY-guy2qa*8ARgB_j{fP6Pf6=Q4PT4Y@!1E5uKpl^ zvqVz#_G~j#JS?SRW4tzcF?In^X^S?PMtkI^mN~TL_YJ$0hP+zFEZx?rcqiAP1D`4U z@&Bh{Qi=nxP{!)779T!9ulIhJbdxRRGK`!3-fIF{W_*kKg$Od!tL z_2G{MKyrq|y0$(kxA%o!I}!}^v#cH@C$2OfzZO1TLSdL?z5WHLPri|5F8MRyj+&

zG9u?@hUa!yZIK9#MbP!-%@pK?vlV z44L&k71YoWzJ*xN9u4HL$z2vL-XQFY@iMAgw~7!^)2Crsjz6!84!;H3G`ZAq_GIfY zPA?dEX~{M*zC4e8mzD_5KR8(}VX^s5=e&wvFqI>vrp9J7pS#~=|NNws#=HOAkQ@6x zft2|A*dlCgN=-i*xt7O=pYVk=#eK|C_FofnP!iY+DRsX%dZZ5w{6!}(zbSJ zL`ZuIvvY6oObm`y+3uHCA$|cH2Z*73pf#@`JflhfJ)blbFn#qq%!4CgbHqZft>Hr{ z1^qCk86B;kuTQ$o;>2MNm)nJaVQ?RCcEk99CZi5#P+i?tyVN5xqej%O17eNk$)uu% zgXR`Ox4!1#y!!Z%JLbuC{m}K7-D=t&oVNBB41aM>KS3xR8hXRFmJxFNO&*?j+)tPn z`%d#s2n>48Fgq+b=_w8GCCBxh^KQ=u35;hL2nyGCL9UkS^ny>sO;GZpX7G+`Q1*Au zFc&+GFmxIRBfh7;O zW^Nh?D(<6Qr=S1eFG7BY^oUfzN~oxt#Gy5WE?>p!0-sqtlr%cQc}nBx|-D>s11 ztrhd41dE{p3iJPYf9T2Wp&xU6&iX&m$9xrkY1D$(8u%DgU(a=MFc+J}=FcWvnwRIqXO?tpQD$iZmVw0q4B+&|;}w6vZ> z+THsVQ2HJ&?vJmrZ2>`|^6qNVgkmfeK;JscW+7J^KT=i*yOH|%FlK7AABuEYvp0*X zsJuS%X?+ccx^r|CM|2BdK>(FI@NUTc6Vh0uwo8KtJ4V8jmq;4r+T-1A$G^yIlytjs-!G^v9DAz}3 z@T`4rx^GU)#8V+b5%L~8%jHlUwtKI+?5MI7Z~v+@;@Zy~-41%yf9)zZyMF%}LUM(< z%j0x~ulGxt&M6RR{!aHyj5&MidvyH28U7VTdJD>pc<3u;wM6_-|WcVi<|M#jHfy{!z zU_Wz*a#GB?`g+_W@J=@>9F-CdJTk$I*v)c&BdSLgMnfYH{p6?Rw)e<8%dfn=6GdL9 zoabjkj{j6M0c~UQMa%gSe1OJ;Fx}U_+-js;t)sa9MIzInNw(_B z%%LeIBOjqaanaZOg=Rao#(+2q)8Ca893g;+Ks6(cp0@+QSu^42L<*sA-3wT$WPdG=g$jS zCJFm`TaYhqqcWn)+XVqg{|$0RG8m66(|{({p-77icjlwemft5*;w0ff2Er4k6ugdx zVr-0)Q-=_7q!4hK&InL>eu)a#D+KgZu=Ft#j@faww>pt}y9eLej&}_*eMzFO;XIhq zs<*X)Lfi<^|14i^jrX70^ZzVF?Lpew+UWQn-7T7VTG0sJBkSqu4Ow-%B!i1yx}>C~ zugB#s1k4lwZ^7W7itkk?_TU*)B*or!*4dI-p6Ptp^ee^px|6o6@iJaYkL7clSpD^l zCXWPvyC=dly59F${j!4h6p+8s>;h6G`qKq+K-N@3qY*`bamLl=X4ha6lUi!g@@!!D zML)^}_Ld>hXQt>4?T09nZUHrra>zhD(bzyx&)OH>jJ5m<`md?^dV^fcJ4L`J_}=L^ zcPeGQlmEK6s*GnodX&Xn7lVq{UXnw@YHhBm?0ULp+u)_WU!TUd+XT^azLXG1$LY%?Fs(C08E*M<|h z|J27U{w7pL7MjEsV<}Wl<#&OmlGh0d+tOZHRYr*K_`LTP3Iu9%NzOJ z>DO}x>E|Z6#I6Nk$1NAe#l>%;^kfR=TcUA~xW;(_UX_L|C!zMSYg|xoG>UrM#>-oFccHi*`$%k*8~VbUw^yoL4Zh&x12|BPED{!t z?h;7WXPGTM5%gcuY#B_=@n)020^AsubMn;}`QznLr&Z$d7P>JAQF)NzA756WmOi^3 zqxy@6boyZt%39M{pEH)tj=wpts%E5aJI*snyAuR^?A-@Z_N)uO>~Hc*m#nD)S3=6a zQ4XAiSs|XWW;b*N`x%ZPtx`pmIMeXx-GTt#Yu3sp<}(*M9G27Bj9C96gGsa-g*4op zqCF0|&m94<(Bh*=IH`WO%fxSh?MLGFs^kL3asH#eigY%0prFHpJP<_q^w{miCCAdp z5)QAvTuxB;;Q%(EBMYsHi@UccWMo4YpC!RUC2XL=qNi#5AXx#Bg*o{%!-(i0vLW=dA1xbFj7@41`X~`4fm1eedH6YeLThhzt7v74?_bQbl>6-!~OYCQpLiIon zlIe`zcaQ76n?(Iz?(7vNORQf`4iW#e7hFymF@Ik$k0G(Y*`NY`S?n@Mmt%UdrpWx7 zwtqa+$7K_?(I;bTYTC|vc$Yf8FboOaHX_s=0F_z-nE7&jopZ3|8EDD~SUKY+wv z3iLwohiDU6S}mYE0FZ(wvqukHd8 zh7ya8uL%8ciAy;(v&r>M6()L;fHM{4HN^Aa6i30TuyD0;Hx|f zu-S-CNkQ1a)DI?BbpP4XC~7n?b;(u&-mdDX1p5IhjEYw;?U_T#k~sN4v(`R_?r z8DxG>q@#n5kOyd(gUu^t;$3`>kj;ko?@yYuj z3!%#|{Crhx?XZbRE{?-0R~u@quo&ZxoiG0f`Thzn$Ijj@iMt3zE~W5PUUG!ZaD5#@y~Unu1VOW~yF0%gN|{g_fB^VnJqz1{nhgoEv5*8|BTIU8?220GQ#al$_3j}JP+vrGnK6S^}9#^gt@LPN0WM?!;wzhV9nZS`b|auCAY@^L~Z7UXCn>eJF!H9b8ke65;q zxsY)%kBt~lHwUO)Q0(0r2!O6}m>*nloppy$Jnk=9DrQeT_K~dA2#})v;^(q$0%20u zVF=arxd2lbk0!15_y3@~L1wT$=rvNme1)IH5!>&C%0(_tNd6@#H9oTTM9*VgdO5|$4km%6DbdlR&YOS5 zHI5CY03fA*PEHQ(bR#OTZk{ma!v`QvYqda3>hiAeU82A$8udm83OuH}Wvp5X@))c{ z(-)c%#rFv*jn_kDFhPg%wM+f=krnRE|7Nv-jssC1P@2u-j;J=t69Py*<*0+@c0oE1 zxi4vaqNm!V7>kd;yD$~qMSr|MVsTyYa^(V)Gvmty2>1hRi3~cX&8|(+Q>bKw-3nSo@J@z4`s;%_u}1l}3>ziVcAr zo2XT7ptH#6D{$oAW_No0H=hSXU{X_SzN6QFT2$Se06mP#K4w~LDpGzYH#PRh0zF8S z1^=m!%@n=ot?<0m(xaK8fmceyVf=`=yxQy*0>26PSm}iF)7^jii9s4W+7pn~ls_Oc zfH10HOW%}W!Gqe*VFVU+-?x?2YQAb2>gi5ss<2!&s=;3^-B8ZO)j9nte7*)qRy4Ni zT&!Q|HD+Iy2;N^F4YWvMbS*?B$47)x&1=-?#&&i<$r~LlKo!Ddxe$rm0-EWr8Y|n? zobRX`jVDH5DK3>$&+|@sSo|lzq>PLx{~o!!+c& z({)WL=f-4&tZ!&a%RuY8*X(BF+4Gx;ihU+UeZ>b!mTKz2=Te@+|UU!uy>&Jhb9%Hy3l?{0j&18E5 zJ@|SYfYZ>!W4)`}T?bS|yqAeo7zI|q`1M_$Y|3JlOb|ag;BgUXhFGg2W3R;Eo_!f{ z+(wW~qah|vxsEz-jgFB_5WvCJZ2EL!4k0u-#K5 z{(Qg+%-P5&nrg1ND1TQ$e+SGZ+Qe_%3`{ z#9zHCW;;i+d_BM-PHL$!C%s_nR&^#UVlob+D;&A3^C*=WjY6~xoAsw?%5h@EEzsQt zP9`PA?cZ2S){~Q!9SpW>I|aJZ+bx4lf_jF(O1OxYbSP7S&))sb#3;XltMjo}b_@3D zX6WS9OKF5vO_hOvp@9L-+ZF_k@woN>7n+Mh1sydEp7pI-@ldfp|5>-c1ElnBZsnj@ zYHK<1CpB zB|F7dU-ois#xg#)(^Zp_7cd1Bh1V6iih_%C>i5;svr7MG$F(y-3sV|X{RV(bshlt zMqZG807BdwpoPWXd^Au_YL+$O_jt1E>}!UE)woi5xe@uloSF4I!^PcLVv9P;@g4mn3!?Xw6P= z-<+0j=o-dh9E=KsysK%6hs15;+}_*yW_FE0_@_>tyAvDVM**!rfaQgA9AD9QKfgaL z&O45$gzB{)VIKr5fE@N0;bkF&RpQ5cLlEx;w15+yNg2cfk+0Yefyb#ifzR!AHc~v; z9v~a3e$a~ojV(onj;;Qso=M z#7ik{$#$j}GZUIL7-a48ObZs39$uHd_g**S!cq-6E_TTTuw}J~&aj=4U`NqzvzMpE z--LQBtCgKjW2$T0=Cg5a02X~8Hg#HF46HUJ^D~Gj*NYnabffV%^-s{tEBF6cN685K zkG69o%O((NQUNZ}D5n%(*eolJ_TnOC@MyJ^NZS{VKB+6wl3^69JH7GXbK^%TnYroG z;qT+GrVQYzD(r0rG|)ixYM`Y>I1r1Ro*plbjf-oMr8ll)M)k0GeFd}zs(r)3p}ENs z4<)UUTb*p+)p;lk7`n}|+b9sbZi7X{pA zVYaUNFO$LAlwhPSpve!gz>eb!2>5VTN=+XX1G~6>j=AGO%Aoh5k-q#Ymm@hHQX3Pm z=`EY^V<57J!G;I(jfygYxOG;i$~nhowQ*5p0|`(dl_tJoOjVYWlas6uy*K((hdvo3 z4voEu6@*x)Va&@7`FnL~bU?0kn?@UbDLb7vtgBaF7JQ|G5Ir=SVWLB^C#sakWd?Iz zu)YWYo9M(ZM;!c5InXfxA2nxwRv_?E4XGwQ^Az*xu9V4sr9-`&uvRmzm{&zHV@ZLU z5fdQ8GNq@XEtQS2fV`cVfwkpAgxdY|Hu9zSn`Jx98+M7+GLk`siI;@mSw2myo@hMO zG03@B77>#zRTK%gr!y2AcQtJE{_7e5tRqY=t27z|&N8uX^(t^R)^vh`M3z6P-*G@i z5=Zz=myFW-tPyb7EC1s5RC7b!9$i)&Xi*;TT2LZ9=hT#djKY+rb<_egyO3M0_=q?4 z_GZh`6!}jB<<9=q!2Vn6M8Qk#V_!7ykFCN3Gr*z9>;$|FC7B#BJz$kRZ-<>f)_8J1W)OP9KfR8p=le=RJ(+F`H%o!JdW~&?T*t{dNvN%- zG$$H-zz{L&nmjTgt15WN7M~>|4rfdxl0Uu8sQVOzCUhdM@ScTG|4SdPtD41OQ)+(W zwC&~kOMgh~eZXaPJjbn^n`<4emEw0gOD4VM>gnOK7!_uw5e}zK8R&4}Ku@nbr6R<= z25mLLWG%9N=#8AdU7|rDbpPL}#|jOQY1ta!bk?~w3`G_8yVQfz{WOSbr>YO9s;X*b zn5zVAX-R&tfQ|Bm8%xF>w(#X&&jbIpci;p%omvPo^j))PSFn0eCk(AZ6bLAnqC&CR z6wCC;7&R(X#2pO8iGLty;Q~B=1!Vu{#DCNt6(2z_COyY3&6rItCD4Ft1bjX2WWI|( zi7)?aptwsUwz5K7DJj23l11vFa=v$c;|0)4H+TEcCr5m(Lrk+7M+|-J2E#nH`dY!&0(cNq@qIH(f+&?)Y0*-fjA!3q4JuHlM#uS-zX?- z;X?9fz(r<RMY(B*D8A2enV-ei~04GT1e5B@=*DFd#AnjU*s87V~098DX*I zk$Qpu4Vfb!`4?WM^Z&RG+)`xv%#y7;=Zos3XI85vk!~V-0O43hwi`)Xvo2Akzs)S= z#SsxucLG4z`*Oa~zqOrFJj{k@xem9FrTSz=`b`Sw_L!ux?9{7r|0j6cl@eySj)v2c z)i9nAqooBXkulesiEpSbq}I4t{QPuX)|UPLsE;RTbRV%ea`OdQv~iqzb(*gT!wJV> zUJNT!V%VUG*wlp0knn)H22f;VZkfsyn$hCSV^4SYRSb2%JsyLR8mxGod}pD|!FLtLzcVFN2)Y2 zDcRWp(?Up5)!Y5p*JP>?teqfDiD2`VgM(+I&cND}`5|IU#5zuH-uZ95zxEF1eps@S zYvgWbls&_A?N>L2Ze)o@gO8Nt5Q@I{YVumh` z!%DvmrMY1NT_fcjobN3}3Bx|Nh1wI+s(>Dd^llo4l_780&5;3-d*w;c8peNKpqE@r z0wJn4bW~92m2YXYDVzTl5x>z97xXVGD3z2&eS%QpwgUjt)HP-R218xf73ZH z%*<;-tc`nA-oaxVkAwlNIE`Mj#-_3ZS?2-Yzn?CZNhmmFbr{Y1=0C7)kR15Y(cgf3 zOctIk&*S;YTd!rrucn5>AvZst?ljSGyg`e`biCm+5+;zC!UN9D!B}c_U&Go%W>qzX z{e1S_-5cP={Q~){&}8(4KN3bDmK%bGzj$VV1MmdHf@@Bpq=r zGw3s(o3pdnCM_H(W|E^@@DoyCm2lySx%74IccCY(h5a-9Jg4mun_6;aDZNi`phQP? z(1`gvK2JeQ0meIU0)SsxnMHwB{IMKjXoo6f{TPfuRFKtZwGPGKox9WeeMz0vURkV~6f<~4?fcpE<+L|eamB(*K0_J#N*6-okQfg8k6)Y@ z=xkL@05jQQ$40e{&{T*aSKX}^ov@z9KQK@&vr8+}O-@-Ep(m6vB_k2w{=>KI*L(DH zhVQQ~m9glvbB<}lU?m8&3Q2i;IQHLep<0vyZy&K)k)XFP{+$8kYc|8P%o?9`hIOYW z_`txxq+BgP#fB&vjNHFWx)6#GhXHz#5zPE)bsS1y5D*uq{Q2{XF;Kas<}9e-EjDuj zsh`BRBOE4v*ySOCSAy~%fi`z&@udJ*YNMz65V41HA!<>e4ZrhFqhKU#6#|P*#K=kF zbiX@U!0Noel{d*i6whrZM%e{ak1z6-G&U#9@=;Ghoti@06wZ(QiWT$`gu|Pimq4jg zfeZz#FON=%mPLMT=Ng z3|JG81cDcj1q%~+>L;#)x)_mX^3{awpD`I(g+Uw%K3ZW|fHkJvnfQ9Fc)KX$ILMu5 zrsIv1{LpIxBj=A2@{@i@rQBf1lf4l%f^5w0+Iyw@~0BqGuJwAR%nV0GP`McgN2`?c+ zc}o=nwlu@}n1K#YLfrnaBb)z(n9=c4Nnxr*Q!OH#Bta5qH6Q=A9<`Z+d%vVH&SuJBh-792?MCE=EMtBpn{Vyi=Z~CG2m|1lC9f`elt!G^4lw(mpi8 zFgs-GZF)*!WzS$)W~y8qhj_ZWLcOeg6_Le+b-9jt__6FzwNlc#w(iB!f>AN8A4xc| z1*OBYCM%(t6n9U#$C{UJ#dr5JQSfRbSt~F*2Dn&p^#qxKpQ~sZuM46e={2x1Z~XxS zSbGLe8n-{qIl?x%T?d@q5Z!it@4@D-sv<$8{4NYlAhL1! zuEBm)qNs(fzyCVR(QL}k2g{Rx6&669{b^Na2TMU|gNVH#;k6zhdTz*&A}q3b`_ItL zKrTmX)0-;1;m}B}u>mW%JsXSy3scWFRU!I8{$kQ)r!noG>Dz3~R-rvlPw~`$JH#;& z3fmJee-sYVFirN1Oc^BXUUvi41)!UG2b35wFd2Vg9Jx#__&zw@OYK&8DF-etz6PS< z0qkx^fA=vjjNjGN$e$Kvg8lrs0q7XMvvd7yT2b0c4WK+#AV~ev%NZ)lfLW;eW2jAopj-L*>zlO`;s?@@QVXmESQO|kY>$~ZS_0$cC!-Uq15`}vT7PLwT?D)rql)Xa z0d&j{c-IVhX&<5uxrw6?;>bYvSJAbhY3Ky8_ti;aA~SU6ZTXcN%EXI%cu0;vBjU(S z^=9I&ide`-t5RQ*q?Z@X3ueQuhF?~C%F0DA;rwrr_kZEsN~SP7Kh=pHR~4W2>eDgx zE)?n6lHEzEl$1b7xJ0y;xRk}-+CS{1o479?i=NYDtZrNBM=7loD8*;|{QUI9YinzR zUO0$|2zkh5Llp2`*I$U5&LY)WKxA{LXoxjRxx*k#6BV}dZ-v@w3)>ym+wB3x zbzYf|=|3X3H}4jtzmVXPdQyyHWp7sAJTr9 ztD0mnad%q%Gz7FanSKA)w5C`kgZ#x%FYwehNH)gvQf~z{QvQ6QW*1Q|CD)-q1fmK6 z+!+ddhRea0(K(Pl-O4pWF|mblTCRi+7x4{D6sNY|Xdikxa1%reKYe*U?Ggu!%RTq+ zZT1jd?|}fYI$V|}=E_SKvd<%I-+-rO>E~!>p0{gSQ|H6#N=(2(?)V4~6Ea%XY~vop??tid<{jydHdS_VK>|Cm@wiR87IY$b5cxJe_@v$8QNeIs0QY#wuMiSL8 zf(H{AYx!Evm+O#`Fu)xt;GXb$pLuT2i|h}SE>KTD%Kyl=dIk}lPX!KCWP(8RLLB01 z5}_%ap?z_*Y47Bko#x)sX$(;_>cqtaA-V1U#129?B*o??3CK!XY$B?{U>!9K21}H zxN_y3C=P2Kk)zgY>&B~PSL@j}Rl!HGG}TY>s`Lv5W~bbc#o9-y*@4Kq;gni^U=WC5 z?-ek>a;2~Y@t3{Z*U-rE0Lf2f*jQMFLj5s3YHc^!WgIqI7c(NZ#WL}riPbDe&$_T9 zf&9V#SjaJ*o2$L6+~`%0HL@Z)xT6FH7!*$bC1l8nUbp*vbeU37KwI*@E!DXqu%zcq zU_KuC99UkcW6YJ*L+{=|d@>_R|AuzYLoKJh@K?aTtzd%oWXl{XN8gq-drSv`FO?>N zrHKxJwR?m=#6&5;c$q>&hg5i;&+ALYUx2@@^I_;a60I-kNQO|k3(CeFw{!jL!-<-z}kC!{q4A^!a+q=mR zQ271bh%CQ5=&rY^&%c#$?^3_er82|6Z{bVyx_)%{z}W-*hgTqJcwie!oQhM9y`Egs z6-=rb>PYRInS?t#J9AYF6q?$DjvW1@33`kOA{E^c8FO%sn6 z*8`Z;uE|i2@p3GRl=M|?<`y)Mv$MUMtL9-F=T!3LhDcI5< zyZ3wJNWi*Yw-Tf1`16xnB7a$0Y;0^+70^wx^z#&uZ&_P1O&ioa&31X<8wCiWHw!3Sc3v#WXjWP2?y2ug7Bw; zII-a?e4lw3p~WP;mmWO64{Q|anx$NEJMV-GGE+X4s8#xXV8_7VsVPN~zu1naUk1L5 z<#=i&ThFhJ{vYCIi%MN2VOKl>^kO zBxlR*^6S)v9_X-0L(LU2TF=&{w&}rUJn-%_d(RK}${#bQ7yfSZw#f5+*1mg)p|pc7 zA)I7#$M?tnxVqNeym_%(62s?~>Lw<}R3AV;k<1400z6jfWOE2?;k$Q;CfP@=QpojCgVyOLal$YS{E_w>_EiUizX8d zZfHjO(|f6(*2Zam{Bmiok!of~68F}!czuh{3q85vwBBy(trH$RGFB;~sDoG11?rn9 z?I9lVbn3Yur;A6blO$e2p}`XSuHh-L0SPzD7dT&f?{*ba)8hEf#X}Kxu_!f*3#=ED|?AnmS>v3l4 zC`W*~KP!nJs{{U3#_(zHq3ks_i!m|*7a<1~W`uej@(0VA(zrN=WX1E)<_>PRqfb0Q z9#{E$Ld&JxaixRj@omf19l4d`^V_n)c-gzA5n=MdgyrIPox)3Wa_iZpJygn;sLwym zcc%?xX|RAJ%z>fR;$F`2k-x{$NZisg3K`$4{^3TH3q(J$0bhyvG9e6DL~utvY@goh zpWeh7GTKCFmeN`3EwEQEKKQ$*0yj2Q}oE z9gy^=i?80}Ww%y-MKij|`So4SRpq zW8jSy;0r=zXt-{x1f}Nz9=LvqEvLNSDyqX5%^%8gl(&wZJJ~Py?YAypDshuP z%bel-dhT{=wQS3-+r8P6F5nxQ7(s3W|NezAqa&SU|^>*-d82i>DY7A-#BM1pgm`jZUMB9BA??%K&f{1vNMsQ z#Z&cl+=ppimrhE}5jhhW<&BXv?bK$Gx%%UpoYHs%JDc)&Pu15@Ffr5>?)`#zY^D&x z``P&j93W0OdG8Nak4{ZD`vG3w+5|5L`tPZJ<*y5(ja@#Qxk?iG=a@4>t*@m=XD{(o zbT)8X>XEA9B2-(TP5K}+<>%Q@363#ZB2xJIjRLt#Hm^|ec`mOZ5Vm?6r*`mv0rw-d zwR78HqQalg^+2kozWJz0R<_-cZrsZp$al_Q6*Afwx`G!G)qqBibTP4w1pVg7!QDv* zeSOn`IAJP9Pc34fhLkvFL#6qeBARx_0}6d&2t?E9=YzonV2nwt&)c4$P8I?K+w0Pp zg=5fYl8(^1n8K{>*ikvaJ~|aMYuIkMH^WFZU4omywQNcEb8Q_d`>+m$AuAP& z#^W}Xi3($BJR!)J53xVqKbBaaIt*2?tVSHxD%pktM=k_}%WROCXlOtx(4<&TsHI%{ zQJAq=S#kGXPXI*E?`*;O-_?ei1?eR_+IGEp`HH_9j*?JaPjO^ot+0FvlJ{OChLN#p zsnU6P2%T<)kzWfi?JXQ&EEQ54T;Q^Gdj7tkIp8)gyc(o0-ITsh43U4siKahxa6B&@ z`#ZyxzGw=^C$9&!XOHu(cpOHZcfRX3P*5;>h;nI7%1y3i@5~0brmHSt`YWz~NN7vE@%WsGyCv5L+UiqXZ>uauE#(HbhC|G*k0y00H1#~a zE+6kgNS>V;6pIk17YA0zkWBaDQ160D}X{1cl)}o$&8SoT(X3bXdUkZzA)lTQmX2K)8M9W zmC|shZ^yYcmzWwlxwqe_MOTGT7$=hMv6smvGTm)!4;+0fBU|wWv9fY)-d#3)Vvo#d zc!Nf&qkDBm-_ElIOy<$rCx6#IlvFAH@-hM)d=B`x*z~9acb6d-E(r|Z;$#!o;JARS zIq~_?4)XAH&(s<|5M_+4$<*tjh-UOu>evd9A zzeGd({BJ;kf_X3?1vjhy9KMHnSVDgF_oQRtuvDqMT~A7Sdl<6*whZmSvg~-5<`DoV zP!1(`_wPjIOF}AbhEvwh9pgNe-h-|00WQpbWn7;L7W#2q&W zO3j1@sS<0#T&WfHr<(4+KDR1+&jg2TPgKjK@_36Yq_#wT6pjQ!x=OA+6T*0vP3puR zP$k7JW&SEw{zaJA6lya1iwT(Ca)kBHMkT-FpAPfP|YbXO6n<{VsJR ziB)WWf;koj4z9oQ!*|r_HwpE33%Y--YoCggkM_%prSj#HFC@2yk}oR}TR55! zRhOaO_@GHecvi^6@MCK=Ik%^mtu5!^GTM@h27`D1Tr+uG%{4hgnMj9={BvhsYMuU< z!KWLDRe~?~2wVmG#^ATA+g%DuaccBj=MJx!S%c*msouvK2GYTVM|xidUa}B0Lw4OX z4|w-_KZ>PG4I^>Apvx1)V+dcZtg8RX35%7pp!jnd|fhZYopPvPmdP(%rpS_SZpjb zS{}mbGZOU3yF{lz0T_T1E?i9%;$&#|ux7db`DQ*n>m)Ty00_F~lVCtiv-g);CZWz; z)BaMGMn|T@k-gGLFgv!EF^pzmC1SBXF~Q)phiaN`+825+P=6SHrPH>8z-4Q3%$?WX zLSyyOp}2Z39gq$dfYy6lrvybEWyQo?^}%MG!1nUYU+?@%X7uv!Tb{Re9SUzR8A@P9 zgR;Xsc?Z1sqtmn1>M*d$%So%Ywz-1;a|qff!1h7Mgt9sTKsf!a1Acr}=(EG=126a1 zC~J!V_q94Ws7a|XfNlzwf%AP6hVpK?Y#e;7Nw;I~{<8LJ;UPQeN(5*YB0i|9SRPNG zXm>e#q&JE`ecqQTjGb!1dI$&VxmDs+m*>lP397IP+!m*-Alg)R^|wDQdu}IxM^?%U z8Oc>s0lkllmE|*Ky0S|x9z>(bVA59D@bho13deU9&o$V6vDC4^wj6p)?MzpFdi1X; z6T?3mUY_3%O&ImkWE;B1@s~}64BmGw3~DGh%IMXF#!&WYtTOgSd%o=R-{1EM*zBNo zB8T}f;0x}Res@q~3>}>}#$#^@aIrC8s~5gPx>Wk3B#iUX21f1e2j)+L>gOMz%4BV< zrrAXD6_>4xE3D4(%It2yhbFcXlbb^q`cN)Qs{f0tuMVqnYu*+FDN(`=5(0{Zq=10* zMg$2Fq&uX$yHP~x4v~=V?iP?PX@pHkNtbke>p}6nzweL3buPfode)kmbGq;g->T(agyvzwzg|{!ZRt7*IWK4Sc}GSUg4XOJ`FuoUiBjKnil?DMU6QAu?Fq6G zRZ_A1%@eIyS03$@1$BjNHMmHiX_}qI^K#5C!#mIapi?M!Vh8WJl?jZ(zP#!k>5|;9 z+1@IA?2aR+WA{ZGRq`$&UZ5wYPVR{8Z4h(3>3I3@a-*Y=9j0Q%K0RTg!y;JYM65TV zhVD$3l$H8dxVo{S?##xnOd5Pfi+@WsR0=MhAeHR*NNM&FTM}K zE7F%`(Cqy@OFYM25HZn~q<8L8uyEp|?Q>ZK8=>HAxg+gqC~R6R9aOTcpOt02Kc@gg zXWWUNjMbUK`gmm(kN5MW$}v40z4}G25MU!U@+r4P_;q1+h(Gkemli-FMj|lIWx~lW zVv*ugM7pz5#ljKA6C4@m-0SIi52e~RYo4|8=Rg{5ET2K5txIayy-&~X$x1g?K2C1c zzir1aw;NbwLnM#AH|dlsFxzkk28e|kxdIJ!I{BYxvB`y|-IPds37qvO4_znwu zkmq+`_4H2fdc@HkLp`0DN#1U2DE8qeparl7;EK{CMdtl{dpjDyGTj_edYk>XSD1?; z#2Jv!sR@j#Ao&O9lJ2=Jl(efq#7pVe6vI)C_Ie>eueEenNfN||9?<7N5S2ZQ*|{ir z@kzm^HQ?UBZqZ5*d50tx%it19fX$cPu^0s;n6Y$UJb5ecQqd=UQ711j^wmW! z?Agj&cCYN^*@s`GO4{8H1_BYnjU*_}`?=J8W}kFaBHxBC>3#oseIVE95flr|yxuLr z=c;mw1|CNpmA^bLH(%u{>{zUd|zSB`n^Z zJJFFnoDU6A|1H*&852is*8fE$2L#~x8Is)Zma-}_8tAD;2vRVjvg)EoOx2lm_E!+b zZP?Gfrz|!Zee_6`BXQYU|2P=lw5!&%bWRys&&Vj7{_Axz9j9TOXDyPFqG~tzl@%OB#z*4CC6^(`-?ouXqG__l&5IUZAA)%1$S|_^pWiHA2Ssb>)34%JA(ZbvR=9s zI+&3%X)2Oy7+-F5aTnNb9kAU>r6SW~7lfk)$)*E4M?Kr!x!?KBCkK4sHR!j&J!-SC zHH#HROo)d^D{@Q1rGnfTWZ^|J<={yA$%3;xCsypNFInluc zJ~0qDe(vNKRM|LmniQ~y@j9`(2-#&_hfW1V{ihx@tm(r_;Eb7Sxr0|ndLES+BoT|uVWRwHpYN$}F8F2B?>!wm~J$#qmd{0$)-cYf`Q%CCDzI(@U4tb8;#bUWte zpI=wPv8;cKK+l#Y)DCPrlf)D?%#2J#1DT%++~?R4Q`!plLtyVSv?eKdox`xp(}xdR zwi7tK83GRKan)vdUo{Yy7--@umC?z3dO}1(h+{sR0@us=b<*Ixv&zhep1T!Eh_wD+ zh9ceASwQ37{wy4d!k0ksH;h(;w_;z&Nh~@tW*?ydra`wZSQGp~5=kflHN(SWmHoyj z@|pfcD_>Zt*^R=M%C)Rm?$CX15}uzn8`Zy$jGh_=pKGn6a@h}X*75<#Jj&~=B3$WE zl@o)Sa~jJ9@rc@^#m#}ES)-^Lq(_?f8@gk6GjEbwaw0qrrzPGK{3FWwsQ_$|y7!9s zD)`nv?9Y&rjPBubTk-4ue3a3(!0>0`jg^^TO;0r~<&g+PEPaS8jER_zcJv<$54v1P zOT6588PuhrT}{k}3#W(#W>;>P(-d}J=*F3LZHBsDzUabAp_2fPQXRJpF((nFPMgZ= zjfYR4N++zUO6i~d5bBKRSVDXD1ov`_pf8Q1sOb4ydz3Fv{sNH3a^x}-!cdts^=Yxw z^_IYLGZNT~%j-cMiBiX>h>+682eZ)fR_Y?spNMcPCg# za@c>}YkB$J2|YEz)470u`}sTFUQ%M_!X_>kA6z9p6cwVmp&Xd%zC3g@H37t1Rlr{Me-au`w2^9#ReCx`tt$C(0TP{M1|8+6!s`bZ*b z&8F%z>YpFcA_0)8Zpe<6kB*HE+oM%xt+3sEt)$wFo^6>yf)id!utn(!&&J>#$O{1; z-4$B)3{{*9O(FB3+PM#3I@H*=(SpNNHwOsU>Wprryu%4Hg_V#|sR}cj@)q_OuiSQ?jDB{bV-P=iG8z>DU6DWAySwKf0A* zUqEHFDffvpQ<%+SNM4hN236^utK-}f@Y1?4VP(9$&mntSqr@Q~X5b^wdDQI7%$E1N zSnovd;+)NTDZc7uG#mb(e@B(XRGKYlxBJDLe&`Tf9LGwMn?LLn-Up8{grYI6EaaYM zEL0paqrYv(q}Kouz6v>;9w$_@wsta^h^KH>LrU>aGmkvu11k(RW?sQL%h# z*Q{=aJ6#B~#f|l!b}Z|)gZsMy~>hbC0}E> znz+h{MW%Tt;n4@rO)M1D8=|cNf?)f<6~6mE?2DNU zObLn5IJfgM#MEwYxe2TM%4)2(Lrc5xhe;F82%V0;J`ra<5h@U}T1h z_3)`p!KvB5h{U9{lxPh1A6WTG zavfO=mbyJ6=)jqI@9DmRjAKWx=8XKMP zoMv)623ktIy|2%IY%}TdL;@*MZZqkBi}!%aRMSCE*MYN| zhw0R5L9V8QsPPD$Y4zt=K;$5hMQ&VkFc!1);ZZqP+#f6Q-)ZvS)%#BF!pK>#n>ES$ zd;O%e`_2(55^QC|kuvESs#4}P%sl|V9=Aq0JQGC0`9PzEBAgl9`xR#V13d{aNQ1qC zu+}9nTxsoqx%Ce;U<4RMeU&`}rSQB3;0&FB^Or9jsLsBx>Z942dIc}ifVP$z&k&@C%@ykmjxM!C~A%o#vDJA-QBbd^MaM@&n+&CMQ?1%?BPWMmDj}E5&WeT+vK%NG;giYAi!^&ss zqB`(KWiXeKjn#3>6%6K0+FhG?rI;@x&3|{~rFeAjYP*QGTBW=oUhmgCy@Mjxz|to= z)}vx04akt|87ymT%8OnG;`0a0VCvL6=iivCA|~nE!#Ee35%2=y8xV84_Do?#oOwkN zOyPc zFws4+AGn5cDhW)!zZI3kqa?ZRBkG$s=AC0!B=gO;qdWIZSUzIKbYoy+g(01hfT6(b zW%+170onbg6;*Zblick+ZnpHmBD#$9__kyGa}e`_QSfev-ra0|r&DI7lfbght1x&I zoz`n_^>)WKz~pQ??}l^e9JS1QL2jjV4`08k1PU3wFz__H7gQQf`8jSMc1G5LO%K{jIdWT z99XSrfd+eB+3^q-r0L;ZCU`f4i7zVf$!<<0z;%C|?r1)I81J4L6e|KSO=n` z`SPTM2H31~5Au{ld|tN#vu$m41>&I)Yvfj!*Jj^4Z9CUv8OPPNn%_4Mcr=n$6wCi! zmX)}1t5Ovtx5X~ISprv48n{^&6Uf}N@k_2>g%OGcRKU11KnkZg4l;JcVT)K?nn54& zwtEOCV>>8NZxKVT_nEocNm3|N^b@-2l&f5yLXpA2qplN^p~^}yDxd98g;HEtSSsPmC8C61%NgyP(M$< zH81GKbiWT#fp?!O4jp*V3rSmg{vJ6Gx|?c82^L5HCIX1Tu2we_1ste?;cuxLeBYF+ zUk>YYyC#J{sepY)>6A`uE=^^V-1}H`#|%%JSo&WCEj+<`#>2)7o!40%+j+Tcw`v#E zOU>04rrc{j&UZ$3>~QB}T8EDQ5%hVL5?0!)cPX&=nZk^i`^f$$<|sokhyS?r-c`(D z#33ckMA#|FP7zg)mEKz&Aq$J=krIt%J^BNcYbC(H*yJXgl8eJ4%4X2@VhL8V$RGO$`Q$ZEj}xCCj6 zkIoNeb?tPsHHaqi3$%ZnTSN#@O&UD^{+adcglXseq=(96r2n12QxJq_v~;{AtELn0{S_Aabm!!v)X@uPYMl1FJRE+=Pp()1xIv07| z^;dc&v#o(~tmdaTN`$*X5M+jK?5i5Gwf>i$&LEW;RpWeDU3RCX(Oib`+& zVG7qEvjmNEGDZ{T$>18L5?_qcbRQ{}uYFdI=|ZY!3~>10dsB-LX_PB8EEl(YlD@&MftPYq}z=lQUcs5=ONHH6C#nKb!A^-T?Sz5b;4c*LC!C=!N1 z#`Moe8nFQmoNP>{y;|H%9^}8aL~2$m^RS~?--h{FUv&rapLy%a8t8}No-|)!NJvZr zBZv5(Z;)eN#w_wDswbD2p99J(`Hvja zT#v_%q4Y){h?i1C%ELM%myuhjePfL;E&K93#-xEK{BM4P{_swwD(5rts7^{3`$X|d zQ4jvvi9i&^n9j%eNSnCQgky+%$k&&bzpJxZ&^LHo5D`6bOvqJrX}2EER$!!U_N|Br zquN!{@b$jje~=8-9%cUC+|(%d)8I2{pZR(KGF>v?7?uB7gOaD_PgB>eOzwZ%!mu@u zUlyO(8aGvR_KrcdTwsbf0U#m=49Bo4Z^(7uZwygWFQ&U5Ef7~-oEJr1r*C4t(M4Y{ zMI&%F6yJ#HQ1}QcD~-Wtj`!{!Sst*U4}o$H zIP|fLy92;M{xCRjLc=q-az`wEiUb(nK2oFB3VtN&;RR~t74(9ZJ`=hcMNRwbZE1Vg zr;QPw47heIJ)P18?(a^wT`Zhxr5G`8rt;jS*T0ODYYz(bx?USixqcpjwbNA*h1*i+ zG$vhJ&I5DyEHtFDWEO7KJPCLHZ(k_1T#%|!i_Y$+B3)rX_-DA1VIl9nAvO`0b=9Me z0lkxX0GVV;4Vf;%l-F+nrfh`a*9gZ44>GGN9AKi`9U1fsC4CAKFKq`1`-VnJ^spkM zHS2@(<0n(npMV_)ii^FfEg?<7#J)UeuOTv^B|Kr;=x^i(P)DDMki0*)WIAmK|ZtBx;TRndaT|-?orxl zt@Z8fAUZ3ATxD}t~uY%Xjo|SF=2`>0p2zs)fnCl6BHC&R@B}%6`Sddq;=Zu znNCwb5!>k#$Y9J1=aHg5`aOuI+a0r?+`IaR=&YxNt~&Cfmt>|nZcJ-M`&H7lj^;

miD>q59iO;(WEBFtKpX8kKHW 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

a6v8Ar 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 z

m+9^T*B^G}&;rG-QG^4Ez#?mGVeVy-`s9pme+?dk8eBd4#Xo~Tq}%9|FlsB$uS^yu7c39oS?%xm7YB$MLosdZkvdD0^%9jq zm2*P`rl8F8pAy?&9req(2{M10QB>Fe%6~B0Ikd7WJXsux&g@=p&xhgvS7@?v{QUjh zJ+|7328uO5Elh(}hE7s#<;cWD^#A3RG|?R(-5Q$LXCD6*%1ZQ_Ihi#l;`{7_@V0C& zqv%SJylv|Ni8Bh87t*xLy2@gvIQF=4ZC-{Jq$o)S^@B-h%KaBDHS_@i&B-xA1ncx? z2fg#daznTn!Ip47uOBC>vE`k-1Yv)28-&^-|2s= zf4v%hu8N}m*cB2aX>2k&+m_1g*rsO4NaE}Dbb7E^3>&e;%J?zJy1_kRNa>AdJuPj- z_Sf%;>xR|P^f6p)KpxZQ?C9&(=~1Wx9|ju}=;`_Kc0pmX4v8+WbKX|?kDdTC^$O!= z?)(F)i&`!yn(8%NyWf$3cx00c87UVY=GAKvD#tuM*@#R2j)Oe#SlEkwQ^mt0;drZs zSCV9}hdQyS+s$s!th&JIWPPmQdafPp;YD0T7llFNWgpCDSS;sbP|jmfvQtj4ZNw$@ zB+=n3x0RNN1@+(L;6K)4U76i3Oe`Fl-M{pDrL$b3DrIr&TsDi zOmE<%BJSu|P-8zhw+$i$S4*I?fixfm}&Mdg| z&b4RNMLzK!ZEt6G+x@q+_m4Y@AvK;2=?GDyJ=c4`XJkcb*OL%3#u4e+*|Ixnh^q@# z;kE=q%It2TgYeg)uC9Li&i#rbW~JGe0>zGtagD)RwUIg%RC}D!NvpbRtyhNW0@ti)%k}pDxF&g6ObSIQ3@Lgl09;*#F$a9MPocYM!>Iz=&r9JuU%}oHh#Jc+4;KGgqI7sPL zg z(DI|Y|6XewTm8TqwhsWZ4tnY&NCn`=0Z*c$qP#lSiUNkd9f1O(>rWcN=K@L+7c)Kp z&xBMz>*3#5y3fK^X=eD~16Qw*B#nouP7y=-KThIu(W>`RYVbS#(ZycN7^m<>7K;US zK$TGdE*fxT0<+9c|7;k^_N>N$jANLdRckHwJ>?b%G|=0}GhoSO$*nu|_~VcCWE;`Y~6t(4Rp zL64@uw~tbx#Qez880b+}3&j>$5LiXDS0ADk-)aDBhsH$c|g_hP2AsZqwuqv4DC2p62Y_ z+}kIs;F^%asK5B(?K8}YJHy;$zdo%s;c&8^;lpdHIMDaxFxp*QK z#F`6Sdy7AittM=g$^cpzc0k|va6db@aT);xLMT``o#`ZS;VW23hHC{?0+UXQ+0JYd z%*V@-ASX@05qVc>88U=jCMpumg_46KR#A5kDCWq8o&!Q=d!Rx9yB_ijyMd+K;Ny_H z-Js_;d?nx->)z_f3VaU>x z%q->((l|G6XeFZYR<^8?l1nUdEXm5e^5DX!t+$;~t;6lH$muo+b8D$|}8&(6C; z_oyFdN7o#7jNGK9J#Gp+S*0$+;sy+UuI}4A`S750;QpmA4^{{3R6G39Z+*`ED*9BT zjnN=rVt(QXJ`cEdZ&j9*BB#%cvcUc9Ul4T+Y~ zzTOHzcbMP*tj4II$5y0ZSgM+7CAyaH0ZcIc=yUzDoio`YH?l~R=%|vcl93LnP zp!H+P6B|JpvqO5<4wf;lv7p1fN%z?`G-z~ET)=u#h5SNZ6Z_5it;|s;Ji1&l5Ye1l zvU!IRj*^$Z$;LsW%;|fvxvU})vmYNDi^30OZqrp?GoMoT!e73g{lsiUH0)ZC{4X15;g-V zkF9}F5qDnXW@~+H6M+>gb7J4f*B6rr=Vq%Bnl1y|3#Y!PO*d?ARjpJg=*qt#WQe%B z^6f%yQNjyqMDO&~Twnz@afny18IUV+UlWWgaCP&4%DbV22&d*zBE3s6)(L0MH>UWg{ zRMex0z0hz^#%yS-UQ87)d_ON??>%ksDIfBfDjp|$41YRW<=1&MLUjQ&&#~MFA)Wp- zTGPu5fq4Z!9hvI{%H~bpl!TPoMcXzA*G{9ea-HI09IKL%L_u*(7OFCao_DWIPFpqj zFb4*S=hmRkahXbkU~W9^MG2Y0KHmW9T5*{od+1j^zUD=qbMwTF<+b}u9u;AKsb~}Q z@ETf7-s**@I7)|42o9{`<}!aKNbm7wI_Uu1tN`FRQ4N-@GrcEMlFnRS}2E+nKo%S?;&h zaAM@XXE*R8z|o>G_L1Z4_qu&S@4}LG@4b?W9+zUL-mB^;kL*uxEMjyW+!go{9HJno zrLpwZYxRBx5!&aCy|8j9TIZk;#jnSXBp0;KQEc$B%yl~I<8()2k@4!7NRTD)nRn*t zB63%csqVF4bRk7MlDe`Gw&VsN~WP z40l)3Djc02IR>TAHm4btsKZ?aY3pJ%T;afL?5p3#t`{vh*u4NHazZRkx(9!z@MRYr zjZ?*CJ`Ab`B!MPN0M&Ys4y&6;p`Wg5pq%>GiF%<)7u=f+Qoodcr3N1ptNNd1P_Y6N z-0H*>Bf81%_M9?a$KQ*j_s9!h8%ymxd80Y$SR4C}{3#vSXb(?|cm6l%_gtf?WuCX3 zmbnutjOVEX(2{$!UBa;fu6@=$-Tna%wsh%5!Lsfx%JJs)#@3&mSREiH4+V|@=mP4d z&%D3+h9>wu%3m>IteU?PgiT{n#`g72ROR{M6b2c_m4Y6Ex}=?oXSU&XFs{o25^B3f zK&t+@u3n@WMays(Z_ytXiCB+T;%NiF_tbSA|CGt0j4zB>vZA3*?Y_KpGsmD7vzAzS z`a1=KiB$N_+RUA`q-B5B)!mjJZe ztag4R0>HN7A?wQoDNrGKuvtwxN2*H|(rGwpE;0buGzl8jxVw?2#56UBiMHd3?c|;n zlj9t{5gmydUJ?<;mJuzyA4D}U#wQSFXtlcADh#S$s~5>lQ5W2b$=sdmGJ-hKJwZ44 zMScFzKh0FsogaDkHd^ZwVtuY-`4@k&eLu%`#usx<&_!~^?}V%`Rm(N($(Euos|p$0 zFcX)^sI_!1;nGM(8kLhG*Al$&3%PCqXp_RzSd?|*)gij=KeUn>$c}!M>}XsE|F1%U zeg**JrvfhiFN%R(QBOGZvJ$?lKx_arN?!EZ{WOO4N?7TwBpTPvJgz0HtUI>f3S-LY zZc-{Gyix+2TC;jrJ6};KHTu{9M%;8m4;%C}fzisCrhHP0*9~~z>8q;J?KvRJYLzUW zm$03f$@FEe@tA~I4)VofJZ(?C#`ByJw1?LFUaR)u6~pyb^fXUO^n9hj@2YCWteR%> z(A%P+(Z|-!=xUkE-gc#+@$`h@iSX2ozeYiH73af*KfCLZZ106e1ldR_*7f!V=_E&G6(PQE7_PO=Y_r~8{hpW|OpA=OZ4X9;oE zovh~8NfUW8sw(Bd_iWLuvP`^=-bWnJf^_=sp?3Wd{Q1rgNRDD!W3uu0Mqrw9E zTYw@3Q==VW219J?>H2M|-EK82n=i=$Z3@R^x~dgXknOs9Px$-Vct9Pe;W(UPpXZ)@ zwRFk3(S5Ej3f}c?qAuv8rP|)wN(?%^5+7TxT~JvS`Xgrh{l~Dq=BzKbq2K$2G13){ zf8_{o^+GwKk!f)tfWOtsYP*7a< zYrXY7&HfsF;xJfS!yHa2CiwUm9Ouw@+mI}DqA(s6MDxJDQeL@H>|%r23}{DB%oYwA z(*3`}eQ{YP~!RQ>TuSDvO5jxdEB?+(FU6 zlu;A)t?Mfka(*!ys45hbPg^-2){rqIaVAF5TNP~|679W?b3=R4$l-dJeq=%d^Gxg6 z-CX#r08HV1HYHB``C>cIEDGPRt(d*%izWUijr{OVLmTPC9n%3+ z?-GjK>ZuMho{on_$&P*B*+0Jsl1^XI)rFX@4C#Zz5_&JaE7j}%JdfWFa8@d3O>}xs zEAmWPX!D9WJjG}9UKRoLVPaEJ?-M^C8Rv+Zuyr=-QNAe9kk~WCuIFS5V4-f6b*|R~ z?{C(_6Q6eNFJFq*=k zd||~vLi--59$ib(s5&p35<<}T3Kgw;$BgbFYEMN0WLM8!(V+)?rh&u2$-jt`69yo zQ(6#TL`Z_B;*5lU7{j(Bfr3vyGKlt|riO(`jSRQ&y*>Rn{A0t4N=2)w$fdVXZ>SR) z@laEXJYdt9r7Qyxk;zpuR_&MVv+a69pHzJ;8p*#mO0snn&N*0smN8J!xR(kq<1nD; z@Vnj;dW~h35g>9{9$XqvcX;IsZ;-JR&y)L96qjJ)`7>X{>mNIV3JaI|_YCBzAA8JB zPdgr%d3WGxX&`lT_bsa37TTkj61xgB;S}9pfmvpVDK+yYEinHjVRA{#*8qWdF%i%sReD9f53h%N&vLY|A z9FRu_F;MtmnAT0jyRbfzZyVZ~so5B%saD~mF`$JP@-*%-4Bc{|H2EMm{^cWQ*;{hT zdo;fq*TD@Fjt8VqXF)vJ9jC-V+okjS9Xb(OHwz3~BFHt)0ZOi6oAe3X0N8J$Uhh-9 z{s9xS8N{IVAPooS-{Au9V2wBLsK8cyyAxUHrR zr88dT?nduVl!H1@ZuNQmVO!GYm06j zZ==cDY3)*8p5hb@+d)8Y{QMpTIT2KW5V81co{TPBHDA;T@Ibb$ZCum& zu6$B;{z#k!8JX?)=8SSDNQ8HW_Qspf*KdMTJE>Y2I|6*EP%dT-lO{7><1{~9aDdY4 zWj=RA^uN}H0q7j)r>p{J;88|Q32O(57+UA<6%ol&ED~q69xc^7J(^_laT#YlWQ0gd zKXt-=8{31F@;PzI&C~hDV{w~NSXlEWvHY5;mT4W~Xr)uQQ+Bd2LN=7lve`$MFI6}JErFh#v@gNe_IK5)@ai7)e!D1a7z^SYf2iFejaNj&o&LOi(la-c#@Shx0NHJef0ugz^i9VTt? z-s>E!6<)&CiNRX>`jl+5omt^z`C5TSOXo?AM=h_T6V9=;TKl8IQ1R_UtVDJ7n_v8_ zX5Ui_I(6TQfMhI}5e+k6=COm#(2f|>jyQ|QK|HIqIMYfCYma5eq<^}YB}tu@KIR*s zZPI3*#sJ8yT88eKG`M1LcG})k)@yimw`#FYxdr$pdR+A9nk&8imq-J3HABI_S2Ktj z*JGAjckc?eM9P%MNres_+2mTx{Y(>{Jv~y11*erxa+V23K-WZ!&`Fo}d|lC(HyrhQ z%lwYRCizKK^~c3hE#sTtj<+YGy+S#v$<{Nb*!xiJ+i>G5 zCGbYjE*LJ{2*^P|j~(8;dpyJBkn&=p2JeyA4~1u|d@f4^;xt~y!Bh^Cg7wI%bVi=B z)7JP$HlyN3y2QlJ6=!v6kDM*ECwZ%j+&5o>GU3;|!$r-uI3A~eUND+&OkM5#neyns zYqFfu?h}19^VzH(yrHq1kCrvg(6QpqDsIjnobJYfFQ{s?NQ8$-zKb2chsTlY8C)uS ztvg9oTuW=iSE1-?(9E3AM2#WkW@i1ZL}>Q<2iW9kBtRnilT`*4CwntV7jyn>7AhE2Kj~5f z+Op{6c%Zwq9nO;?Dlu6pG=|_f`w?JsJMEeKyZa)Y+o}|8e|m|t4qlU%{|>|xl#(EF zebt{{M>X0B{eZ_VXlc)9R3r{R+i!PFI#AkOjzM;s#qGw$(;D6cC|5A+3zNe3OQsCz z#j3EJ&B<^M0*bu8t+jEzwjeH!$R>i`zF)7vn~P)5o}A3$Fh3?_(@A4qAIgtcO!D;8 z_Zjgm8r@nc?(Q)X8A;-LG+@?k=`rwUkO}$^kQUj>U_3}^n2ZvG1@v$t|*xfR| z=k9Kkd%}<|Bkyj#89f;8x4qG#ljoPolv1qW2LVY|)h;6^+9PYe%>@Pr#qM&-U#b_z zPMgT<(-RGn*z7IoDiS}Dpt8F>3`Kw9sJLFgr~?N>yuE*}d{N$`c(uSY@K_mjxaXWj zKY~Gr&20~crE3?z;Gy5>U=@+o(n?;}5csf|52Io-^6|(&*!1yT#KJZl+?cMN^@3xe z13>ULOki`hL?jq8`{t?g8r#+DuGpR*wekl(yQ~C?bxwF5nb#wkll1pwcBY#M_Hws- z1h-Fy-sA(@XSjBZaG0Mc`$C(r<4WhWP!QK!ufwEwReHP6GhBpM@mV<=p57uBxytc^ z9;ma%)II&2dAH5L4Sz2`sH&*@-A(Y07)SlW_qAMvcK)cPZH)R&Zn;M=0?;33;`0)C zut(5SX(z$xZlBh^1;?=pzxi1DZsfFh@=Cr&vgaYB{!rMnG=d=0=-y0gcx;nr95u2@ ztAK^G5ZimRB#CPO{#UP;L`@^vL$DGVZE(udF{q;s)OZD zR&Q8d#Zn8}BdejpxQoJEfPxV-=HUP~8Nhu@-B>1_{)CZpa=*aKb%9z%VrWw2;#!e zU|nBbmzYkzSixV`8QfKVb_bY?x&!sx+0FyV8ad0YFeLH=t&h7E`GYCZc;V_*EQ-3T z7;IynD@Q%C3Yq{2h_zm zwdh8a0aDG69Da*$S0NWxW>UqHPHd+gmsQXDy7la|sjA-ofCtjDp-v_O4f#>zdn%e8 zjk*#6pvr^7`j_iLuUnWCOFo{l>f#7}w4Ix$^JB>aAkGGWIB-M9bECyBLjt7BfcMEy zU*W&U|AEV&!;nA20Ee*DP_6r@2xB?BA&(Qv^*vZSF_ID;+j-|otxana0l_Ui>fx_; zllb61izQk7rx4RnKAe6VN>q#nM$J9776YduKBX)k{JsRIaOuSU=bjI276(Wma7~d9(wmCi({*OcxoMVaO};Za+%T_K7_Hv`N%E4Sl{=Q^PGlG|>gVXP-@)rj)Rb{DMtS^U9|x45Q@eFLK3 zd-uDxnE&SUM&ip7Xll@{{!}JTZx@h;p;e zoh602F0N|9AVoR32w-WGuE?1op6b_VC;J?-a>+NNR~}@(Fx^>9uIrcGnW7l__+Xlf z-)1)~KdcJ~FgmA}_)T>=r0$ozbOzdLG0 z8vZOT#_AAwa=J@T4su}?(0k5j?%ADtLCxKIIQx2?2c2s;jl_3{Oj^qC;cc$%%kiU} z3Sp+N;rd&5cwjTY?Tztv`ca5{)Vh;Q#A^iS=qgGE_PD)G zcE8f1O$^ri#~zS#>?h3N)+kKHjmC%as@5}ZJDt1wX^d=n&&qgGUoI^#7#*_+x~@h7 zOqTRsfTi(F_~6TSMqTYLklw`7K5~b2=iVuWHQLj%me-h+ueHZuniAL)Hyl(1o=bQ< z)pN3nR?R%To2MTC)n!Fm*|%Y>#9Fr-AHE=Cy`U>T^1v5x!u0$En~5?4$)I%a_)A zT%c`vhZz=-&5fZ)jAt~L2m+>J4It}iXovPJbi zIny-sGI_VNo-*yk?_ht6SwAvDwX!e~Tx7r`Qoo}`y63wBHy>$E-G2R=!NYuup>lQL ziLwXiZB?AgcuVDBx|GjRYTW4G=Oe13!ijA;98F3_hGeUb*}K1H5c@Im77LeU@OR;ueWqtq`L4KoyG~F<27M^PHid)sWS`GtFMhgCjcrGZ zm7H8DiSuyG=7!k_a<0Ir-|EF^X@DadF6DHWFja*3K1L=dg za8VQ1LY*~{Q3*IlcPBOfii&wDnk# zPZqJNoH7SFxbhs1lt&MTA2ek8Bxn_|kyC%p8Qq>d<9H|*C}FlSHLx(9YRf)b(i@A6 zi>vMjBDX`vmEu#Sz7tC)fJZ){G~o%Uo3zoHaOW!Rd%tEhScoUg{MQqG;4}s?dRd4f zR>gAW+1IhJp_G(;Cs~r67z{I(%D(SASq5VtGuAQht?hZ<@Avn6|M96Y zX1VX{I?wYuj^jMeUp4s4fb)1++c&4DeHZ>*F6H3Ypf%)FM-%Eg2E}nqDW*U+CUkmkxY*Qs3=W)t=_Mh{4>Wu=(he$1 zqoU|?+tMK!D@L@XW2hety+zx(T6TAeRtq9|MdRjQ${zj^XccPZ_} zTe%`qLfEOd3Ag!l$m!o`_V~=P=d+UdnFR`P;rMx+H)|t0IPfs_)02G4Tc)(lfXOZ*V^aY4Ac#Y z@}YHNlfdx1+*0)m7qw*l!`;{CWCiY_o_b=xy_-Q&tjzpmfkguQoW9(?HbhaXI^_7`L8oO!8 zA|GmNuTQ}NAf&ddukGl<5&jg~WxEg_C3z-hi%oUBIah?b+p#|*sb2!ygaELJl`4=W zLn$0tcnyaj9hB;Q&jR!IXN))(P6a-7vCL#*U$0L*7D!P}Zf2&hcIZriZJnw!dI8ST zAE4C-n=fWNBdH{FYHIW)AdYJ<=mOGUJ>t#g(Y=5y!S|)a>QKHGJ^JJ6((a%Z$`Umq zJplKw0~G1%Lhl4t)B8dhdzy^#P)~;hJB`HwHHt)jbDswdKCfICGz2ZyhBB9utq}== zz3VKO7{|UAOn!cxQjhNOuCUTbSX`z~sutb3sP#p`$|^w$dq5M=THN&j5wLNONn&Fn z-uftsv!LKM^tKBVav@r;EkpV?)W3iWB#qCgS4iI7d`7vxy5ab?Qp#3m1xnb@09^Zr zd2aSU^#pQR5UzXl`8(`U{mw@}Q+PF?pnsv!`u5jt8IleL zN}3ai;`8Sl8WiTF^Iv!4ic8_k(v)eOwCQpXAME(JfOU@{0yp`^mXq$u4Z!&iq(866 z(iM+EK{^t_C480pMpo`29hy!J(t0zlQ7=9mqd4j5)cfAO;DhCFOu8*%WdjyPbs{7f z0IWlNDXwSWqY5d9{`?F_+R|2_K5uYu#M`*{PaTb7lJs}~0m&lnm*8-|nl{b;v0Zq(HZM7^M%f*v>< zt=L=!>g&oYlDNmo;%={C_W|b|%dYWKK+x^SC+SJZB>il@S;KYGLC`XtSY@o;-{`GI zYQ@Gf36hfi0RIyHd{`5x;XAU9YkS|Pn+Rlw6xTpXlghrj*FIfm1F*Nk>2=Yw)0ens zp3~&sD(TXquIY7LziB9YaO~TO?KL~u_E@bRavlzYX8KzyN)nH~NikLYkWD)4MRJHFIB({SeoXqX2UhbxEJD=XQ zLi~#O7&~qGmQu?7p%v0_N*fUnbJJPQ&32#$UfZowy~3+i?bM60f9UEO;=VqnZU}wO zDOrha%hP~$2f*IwmLp~2x$X?#og2w;e4hr|oAOt`FFkD1B9I1WCOb0ex==DR2bs*M9a9A26k# z$8N3WlM6!=3pmK=gq#^Ms8Ps>uC8u3I@VrUSyiYs(+m0G;|SqfW6DkM@n7nP;7G!$ z%y^7jh0HF%S@w2d-73;i)=Q`o3OuzvRaKZPuo9VdE}o+AQOqK}aXh7&D36j%q^^!m zS}z(aD4mI9#Tew6{9eyj3kY7lpSU{#cpv+o1k1)6~H;{k*X*R;>6P6Qx%^X zXo~c%uXdpCe8ut0(D}(6{?x5*Y}6{0C>K9H;rdG?^7B)b1K!EEu$ksQfBF~snfnm< z^R7$r{{GV9S-O<92iKaZWUf;Gxo$vnF)+)>gj}l3{YCgR>?{#EwTE0hl|M&j@RRR? z@^N?g+@S52MyAayg>!#@BR)iE@PMG}eg8AVU+mPM7;$EpqLWGcH)ve0A^iSkbIEWJ zG$yGE5N;K=gFp|_Pj{buOa50D1x=3B9^^gr6&jkIWw(WtQM7D3i~M&xO%O)8DUSzEd6 z#_m2o+Oq}Gi(0e~Sf=LGj0p`1hYjQbtE~VGQcV$2_1NGVs5eMiAIn&i?y{@uD1ca6~9o}X>40!K5t|! zH=XQF0m$%sK9iKriK_3;tIFf>(%wzC@ui#`LfcvRt1q^(e8q+$aZ^)%2IbFEi}Y)U zrJTa54g0(S=RJ4f(rCW))J|peQIc$6@%l_Uhfi0yEmx0>(zkCFZpe(RW7K!;3@w;j z+39E9QpJh;Fwdx^W2TY&R?D77)1q5r<;j4|)Tq5nJnvldRK+l8uLM7*v)Y0fGwZLF^NSMqTc2ZWt$ym-!~KTCRn;OHBsAm0;>%02a% zUd?B^)hmmSn)L+ygZ_l1Y(-#FfiWT+yE0=uFsPf(lz=1YFtB|VFxBvjUm6vtq6W?I zj2cTm2GW2|p1P>}zq}MoU`ZnK`$k|I*I*v+bq0Bd=1J@0HDk|1m@9A)v>f`x$gZ#L zdi*v3mmwrOk@%+QVX}zy>6kOEK#u(+hlWHe1db}n`GEpPhy=J74i3<@mg>Uf7HBrtJ#%Xc(6+btm|H zH|HQb@8qm!*pbvtKW96@nD(2`1B9y6Z9%6QvYu*TyNbmX^Nc-i>pv}9K!z6q0G_YQ z=m(|0?-z48p{DSDmZmD#;SZn9Da+e*sHb;SH> zAn1$;>&j*7;HZu9%BcF20ULyK5KMD_lXtO&Hn9ybrR0)5OEuI!fVN9!1QTqU z3g}hoUis(thfp@b<`Cby)1y;Y{jHHr4fs+=H5Y&RqF~9^IeBV#i{K7TN_L(&bPsCj z4PVyrTLxeKKId;rG?*O*pPsZT9esTs0DRqdAT_>$U%xzyrqa(teN^^H94Q`LOmhS8 zQ(Zce-kZA$42xqsm@l-TzIN@$&-~+HHfv66dOrNyIQyKgeZC!0wPHAs`1|18~ zD4h)W#+PN4etXXf>nt(xc5MaA?oA@@Oi-<%uXdn%8R&NGIR8@x^K;DMUx_c*sYLwQ zW5FvlV*68y{^C3>+SAD`K992A|c&Lnm!r*Q50 zW#O9*qN|^-AFKXDdWTwyN~;Va&65v7;@2VhFQ3WoT-Uy;B&XD*p!ewA9g_!~*DmwM zU00aH%T&TED^oQnEMiZV(FV)u$&eXuq@>H#v^Un9=AuwviHXDEvx%#RTY;rQTeB5b zab@usv&~MB$@Q!HhZ+w6RWY2c8`a*?yt2{^BSKpi6X&+FSs#Ze!MTmqA7T-sxKc;#- zmFHmsTj`<~DPpnC93C?fwXz@SqTc+T)qIMx-NlU3FE#8ZbcB-yw;1iM4QuzTOiS5N z;Iqk!^kJS*0B$qT(IJT7_MQtiW$$YO&l(w)KT8BGOh^uQJ25?1`DPrVr9Iz5`Yj5@ zgw>vg1-$LED;no>O(k)ac6;u&T5->y)>Tg~-m3e@VtRj~c;M@`ZQQ<5<(`Ht>FQk` z&pV$3mM{`Gg%smf%6N~UH>Ac9{ZaH6@I)b~a=_d1cNo_8A#5{#=u>jr`VZ@xtDR*# zXy}+nf*Wwetldi%vdvZfFgYkbDIco&9&qG)A?2n)Ut|srJl;@_RS=uNxmLL$y=vDw zdIUU;=MoPOiwy44eH@LOd3rH|2i?TQrs?8(Wk=^k3r9>G`mTkfw6<*L=UfA3QVM6))G&s4+| zgT?3r@YYQs#jdls%+!e1_8vO2=7!~zl8P1N#?15cOD|qn)FNkk0Z{6??ZlVx^%=K5 z!hLKPB=dCV!2Pgw;g(_q*11AtEY#S2C&@lSu-wBnHJS-AL@ZW~DPf#aJw5C#UC%c5 zkCzQPYz%f!=J&5UX{Q`of3kO7XhkuUUKuVV`t(zz@1~3{;C`_&Vn12^whQkV3cG3S zwFyQqR*k~lo`^bal71>zd?943GfhbO=zUI(Vh?t2?_)&(j`0xn5!|UI>)@F>aK%HG zr)IjlryuU`V7)@&k1w6vtX~j^lQbP1%vNclGFvV$1#EJB1`?!!+w4-2}-dnHp z8x7Pm(ZlBbdsZYYn5s@bA_A>>R0ihg4xcCM=u;;WJ@L+_*Z<)0MQaOwtXr)ZYhlGG z*kXDRPB&iXQQDP$Tn+7zLf{SJ+H_yX8DCB_D%xckDRH6+ZHG6{F^xHezZ^o zz87+vsntk_)mwy^z=;sNs24Y6k}*BzGhk~j(%&^ z8%!2#5ViWShmw_GE>jS_r<_399bm@czXFDNKDOT38>CaKdfx9D8{7Sr=*ddQ(9jj{ zgZH*ENlC)=q00s*t;XOl&4o3^&Jn-$cj=*&aSr(p@Pv4e}#`w2Gv>8IP5 z5GoHb+=$VpjVouPNPg8u!2-O%EfMfP6!-r9*k$YBmoHrfyqqsVU%M?kUT2W>KE~oS z4JUjspHtpk=XV`R?p~TqMosxtmszS+9NzM1FcAV*lmfX3?f+`3$Y2EIhc=pZNc#8e zB^P{AXt0sq$w?7ChWwc-rCPK;C_? zCH1=COA(n%e0K6o2fq2=qn@RIqvpjOuSN#qRYD~QnB0B$NgrnjSQeuLhG4~a{dcQ% zhnDug^Tg|F6>kX{RXzW*hZ+X5%vjtP4v4+!ud%T%BvEF$eh2uOBIoYZ z(Rblwh2pfV_5RU^{+DI8B#binS?!cx&&>;b)+@CrlyoB_sa@e&W+K_Z;<#(1cMdbz}PAtoskKh0LQ(*y!I_@LARyr(&+jUN`kU^Mw3) zqneH9_6Ac^z{QVUd=C$;M`4yu^J|5YFRqj%Nlzw9jE)SmD6Qv!2QFy=L9<@A^LI=J zpyi7+_tn)CA{aB+SxwVGf!=dh`uDv&2cEuu2m-Sq_YX^lijBH0o^DIugHDDVML^l=|10}j98Py0r?9pHXSBP^>VgZWc$^^!Kg-TDp!ENNRZX^0++!oImk7R9=n zZa%{=CIL9%c9WhG?FJvEShM+C)-?(1Ym1gRC&Xbmcn5H368#3dp$&JIlceSUK~UZj zPH5j{^}%JKQEsg}75kzn*~+0>5=Cdc!M|~l6GmWB!U-GA_|vTue3$x@p|CPveOdfuOMYfD_oWbc zQauhknDdIZ*C4Rnt3PbRV!cMm(Vy2?qAUt9UK(}$j1=s(Uvr$TaX}bWhnX<1~Z?y-aQm?&9YnPLQwe%WJ3xMhqH$D<~4T)FMSOi(wk z(NN5b7kvg~1b2L>-&$GuZ#M|;1W{hrc_-tYBEzD@u)8o~1cNysWH(8mesgkl>Z0Sk zuBp#Qig;$$nNcGf?mvI*r-as@L3ACXH2_) zdaM6~uzTGSFs`H6s3AzAZacM>ai%~Xr!QFabmR?f;3sgmkw({L!Jg|Sqk_iAR6%Y3 ziB|>Gzy^E-Hr4!PW`CaW!Dl)Aslyb=8q+x`I@@(*SM$7_ADH3<->JGpv6*zcCi_7= zXY#>(m4MZ{PCuAy#umO^HMrOwyg-LK0xp@ue=b=YLT*}OIOn*4%yQyO{P$MvKySbinNE#VnuRqj06ZomvajnZO|&+J z|MI)qTT&$#8vX(r#=$Eq_xnMU8++eq?CklU!W|}M07E<&Af=f#m@PM#9h9!@J!`550%;-1+lTRqDm=&BrSdQKa~IhDS$`#_a|yzqR2}P8oU4M z6|rAZ=_LHnDmK+}J~t8B9R)=!Tpb>p%u4sYV>2FrcEEoT=lz zi~8R8!31yvn^5}}`5q|4!5u>d+`9u|_9#DGx8XQKR^zi?vYc+IXBOqJa}p~X}Z|3YttmrM4e5*_)8FD3B~iF&1) z?lb%QsL`on^q9GIvRtYzL&W!}LgWoV1535+Q+G-FeAth5J%#1~+rjTNbJ>b>C)+I! zJy&_#+gAq)_w6|5>}{|81+bZ?2rrjhhH@(e{?0vFU8FhrOz}^O@v$5cotL7>K0$iK zd8e1i=&^0n5Um6{m-w7IZ-?nRQ48&`X`qJP2>4GD+66fap}i8)?aS_Mhli0uI~(>j zT=cdk6K_#SpTxiMa|x2X8D_;*DGzo0b~TKciH{mLjC-n;C)EA4Z;Eh<+UkyaCV*k3 z+&*X`e|3%4;NUBa&O&N4)Y5g7;nZxmqSNZ14rZ>^cj_7ShJ3K1Vpy$a`UCa_6;^9; z{+)MUTaPOPYvM@^Zb&+o8~Zw_h+Z%ekL}1dg8DcX+S(?wTyXi)tgF>46wHLl@!WXe zh^wiI%m$_F=nAr#skzF%`|i@4X<=59@7qYJ&Dj&+e|jh(TBD$)frs_ut#ow+G#ir# z*#2G8VkFm32UW!~sQmw>Oq?%bQ$VvGMXTE5ccva>C2r%Cc_0uGBxVT13Sac8RL_Y3VcPYUr z->SS1{Xjeow^QFLY49r)`+AI8h=Vsf^DtFgK zf?E8kZ8b5{i5d42vGL-C^Z-5tVo_3?Frg(`uo`pwmFtEFQ+r<2sf^vZj`^0=>J&jx z8>Y(#Zcv)JpTbD);y*YbNN|*v;<`t;*Xd+Q-@7R>w&B!J#oRd?``ZWiyA&B64APlz1O9IuCOM*<` z8`vc?Uq1IDFG3-=Z%O+^;+L3qe(W!+jn;~LvLP^T_HUwc73QKwB~z|XQFV{?$EWM% zK8R0SN=mvRI0A{gr>vX;UX6#C9-&nIe@o_^1qkc6;xYae@PWa>^!*O3KR^NcF2Odj z6cH{0M|w%-Uz2&vF(|#nv9TL&rmdFyn~GLm(TeP;iqA7rq9P;TeUGwx;5Yp_#*bOU zb7KHUvCLIdt&>YK@Wqz*RiSD7x|{wr2>WZ9deHi#cQUrvs3XjRI`zxvG4?(F3whJa zbeClGLG}m|7{avhd(;m$3HAq1iYLs%T~)d5V{11{$0dOoh=L;JJykf&sL8UMc?qnR z>Wb4pRge6ci7HsG)+}_|KZNvRZAOzr+RLRMD|(nU zs$7Fg!)1S$7i{)3+>(%sM2NJP=q|0)(l^hM@XXQu-6Oau@+d$?LSn*O)@gPS9UvoH zG4$8)>fR0N7l_{zF8&6r&-_)2|y!eD#$PpZ$8`>`3hRk>hn(@j^PyqL0tM z>_gyVClX29F4O);idVrQ=d3giTTc5UB8Yny%oI4q12}VYQgwr_0-9u;+V05+=$m^Q z-QT@_jv!ZgE}SL*tUT%N6MSvapUu1J9S;I)5|OR3;SY{$Hzjzxl6LGG1^(zTfn^Hp z_s2nVkwxr9e_O8~6v;h*9)5y6H1OUG3_u}k&F=i|J~}%#l@kj&UgH2jRaa9OB)_c` zu_@eA`|8W{$GSg$+#%XSAu}Oui(H)qBfq8?{(KYQhrz|mC2h}}e-2dp8{Gde2LN;T z2pCuPSapx;`GfoS6Xq!bSX!eaCOZB_HGsd_CW+hU)Bd;a{+p+N-7C&6&bS1%& z@im%fT{M*xvaY6bqr&mdIs;~a6avwe4wENmt6}u6(c8}3O zPM9Y{N42Ir0Kmj0dTuH z+#TM?YFD4KF+wJ%nfm-2zPeu`HfIsVk3Qd6viLSQe<}IjRR`?Ab>geW53wcU*1zCp zxdQ6@Q^`C4ps_%tx6*$4A)u(p2-+#V#jf$ZW3DMZ*F2(5r`9#D$TXd85U$USUdFAB z^eeQ43ooX~dI(^C-0tyvSnq)f06O>p7v0MH*kqU2PPMi9Uq=h?`0nSl*_8&;ysK@R z)b331SWK~#kSt`^I#qg7bkIFrbpCQEkw=WFG`(79f^b)2RfNV}g=|39rscZ*G)1=; zh6l`c*qX1X4wO2P3i7C$jKif302IpM2+`p%NDb^s_CTr9+Ap@cYM-CHPI$~6Yq1kE z%O+4!4JZoWQpV=$V7m!d}b!`mf~%br6=9LIi& znD-uk)})*Z>B{kB0B%BJtKIzu?DOM~mK$}`70(~X_~9@T=nT&-V$?Ha4;f&NN}7gM zsXu7o>XkNYl^7>OVDdn$GvA|*0ip`cXbd!VX>|1kVY+?yC9F7`0EN34JAirK?o8Nx zM++`~4^&fH*aBy%|AdmOoLT3Zs4l)R7ybRM?$7ubC~C-iAxp~UE&7ZZFssDvVxgC>l#lcwhocUlHl!04+&Xh8oMjH z+hl2{)w(^YoU|d8pu_Z1skuw0lN`sd>7{4;H1c7VS|ZWzt{RQn!uRs?4J$(hC6y;_ zEe(K7Fq4Z()A(AMG=h|_XtMtbK2N?4pc((!I!2sSKQ=^-0`Xi+YFvx2w#FktcO8ho zC9vv`_Two$q}29Z73ow;pvGDI{?vi9?$MtaP@DSV$*gDMw@PH%pXS4%%R_>+Y$+ne zw~-l>0~QH2&16Lf^AQg0SDW|k%81B*s6YL7PP9xRuwfq{icCT;F|Jrva2*IpTww~x zqu1YQiJn}7v(q0`XB@kEe%_ac(B|R1Nir+k;WA;>LdfXGqV4d{gZqHSQ?1gO7 z$qw$)9!U5=ndA&)7P&j=bi6c<{7S35xING6sT+*k*(n#WxX)o7NERb@oCZzjp`zk` z@-A0x^PhBzy82?N-8Q7bTYj6qOMrO{HOE!6kuI|yY@J8peS7;i_u@dH{TUQ}jG`!D zMJVOH5Ve&iL3i&T>i~JE|8c+>&l$^~tq`_rH8VvhQRE(?Np!_#erOmJVBKxF73X%W z5{(=Ci0mxLA4x1RLDdcm`?hh!>Pd7$XY#Ocdlpg}$3#H(z+6y3dySHT%e<95VNlCy z?h3?pA!>TbDe!o}ffX8ZdTZMv)5+2QndG1K=v;B}&ZC#_@-x>Kh;E>KYkfCy3h-2f z{97x=SgY>m$t)6l*San82EmLgyg*05fH&UY9b8#CfxFGo(ke4w{d;7JFt-G5q zm-+kp!)1bTyKw3uz`J41b+u8~Vj+CGM*yGZb^g>!tDaxwZ(i&O0V0y+{2jO7g5bD^ z!D>WslvS}dfrgPiz(5ps&N8AFcqW9}>i|(?TBYM)9*+HL(|*{>9th8~AfwN|&|UcH z`zOcY&(+6EP$ID_^gbzW#yFJ=-0lNUqYvtWxzhED#+C@5tYFFLW7Gr5@3({xyFYwB z^yyiExW3XCX+X$2u?a9dyG^0CJ!+lit-Kx~++X~5lpNCLA}f0xHyM4KUx3xE-l$Kf zp>i~#GZWHT8K)0+3-Xscetd&>F*8UW=sdK`-JyIU7EEP0a(y6E-E@giZ^gCn3A~HN zu%~k<+cG^i0Pej?)q4rfdj)v^Y87+xc6-7y)%grd;LiFrkp#jt-W)0v}C zC8#_3=_8HB=r&elM~_K_#nGO}ri4)+3-So#z-6L-ZqqUL!-h)iKbz@zT+)(%9z3GK z%9+M?x~|$=*3<;MuKHfs&a<;MHlef517`1bxK_BClZ*-{mmVGu{Qd^R{@O5ZRf`nR zrj`(kX(klt>UDkrJ*nNW`{267Svw!Dn`<AKGhwzVFn54g*O4hFcp zzu+-~>ncYbX<|2}Z}!0hi0Fhq#qO<*>jT6#3s9wscu)e4ngOn|onF1NP}JvOC2?H$ z>E7US&_d;(V+|05^QD7p1EV|=$(S%wRb!)p&(XOBB@6zU$m zAH3aWX?p5@tXHOrfglT8VTM(A#B=jAGb{z}7_-FRQ4-&n_Gn#oMQ-G`PkyB7tnBqe zoew@lduZnIg5a)F z6WHMNM$k2q^E8Rp>_FkNllZ5q1}W~PkpcCCZV2< zc1W?^WW&LaCz?C&XeFG0`fU9(M9;uL4bp?HKlvzs$@2(MZWs`7uUF4`2i$a(C>rksF6~G5_K1`k}__+A08~(2pa#eG>}p8*u1%QMa>K6 zk#5mOM%j&gqi8UJaMkwhe*^IZ`jFszTcgcaPzMQ=&c!I2xVw z*M3zfeMR<1GX8GO0oK0v?s*>~WqUosTil*pZ;}NDH;}I2filR|$bYXNJ$3GabgQ@< zWtzIzQGj@Ie$A5Ju+vdl z1miPk`x0C6PIZ-qH1Q(fpe9S)vd{J3g`*0`&+e{U93;02EMn&_NUK6VcuhXsy%hRvf$N{$}rj4gI8A=L>}@n35{G)Lk4bnf6LNM zy91pWX}R+72mLjz+04vYBw`myFAIp5W<0~8eGiU;@Zae#L}XQNAR#h9jpo`@>-1nY z0PhAFjyMJ6Ha%BwT>$MMv>04lT3vCNg{7fEQ~nkc3u#ekaF#-(AAaCx1ZP z9aKfk-4q4f8vr5K@~A1sVy=;V7o#WInOV{v82)Cs5R&q!77h;m_FXyECCBOA>#ou! zP08X{SMZ(U*+|R$;z?}#lsBl@lrkmLms>SyzvpwU`i3Wf2)e^EjoacLMSvnUi`$Z zD|1LOJ9}5;mYdnlC&dq9G*bP}cg*%&=`!4HUj(ORtledhJ(*(?xXX9%9QJq%BuLBW zm+4lW+)F%j6h-$WF@YB+&-&_B#A2$`XdOwVRk54wqxB>eG>#+R3|F9L5BPGA4^f{^ zY-PK0a^!rlJ!4>)CS+UHl}d9E=A7_Ap1T?27h2c;_cZOSaB-waLx7^de`|H3x`4Y- zk0V?vLp10q?#REVjDdxlx~XHlQuN}N9~-*HX`o8u*VLyG+i2va5x_na1`DJ_XH=IB zu8Rk6fWR4?Wb{V@JW2g{_3^+rTkuIb=Ne)5yN00zd-DN~gND6THbC(UI0djmO>*v% zqmjo1%6rW8-F*SonMZK&g}RL|kWx_DB;TdphTyw(8lfWg-{EV^KHd@6h{^j#=D`6c zE`?Wa^mW))1G)%eautJ`KBl1tt0)9mVlP`WivEzmG3_F{mlyhiTqwHmpQL0E6!m=4 z{9iGCklaInn$G6DZu`rUI+&6t3oJGcO5f9-*(H{7*B8x$_uC)(Qvb)?*lQ-`k<^~HUXB2b9p^g+?3a1mS%hrcWvMKBL*g_ zIw9(_pfW$%hon`G(fLkX5rXz^fPb6X8A;dClO8eUQJn>j;WJ)2))|H2H>bI(BL!zM zu;91eX$i~6x#Lr{h?I4jg*4E;hIq`Vw{9LGQFvF{Dqi@*NczFN>lWX5f}mh@t-0vd z6xCS1w&W^J$tXoKGpp&zjK{DHDu-6;6zJ05O`OlHgZcD|-yVjTo<~W&&_j8 z`cB7ODe8_(m=7kCUXb3e_rQ5oiV-Ktf^;I=mqcy80cDAz9@}k8vMbwIUXXvc)S4=n z*@P_J7eAiC{h3G6#Z81W1xl|cyh)1s{Oen$rUSts$QY%QZ_`q<*v(xFrhe!sRvP<3 z@wAu0r~b{AK+o8@1(fTz$Y8~>DEbjiSPb&E(>_FdIJg*Lr<01$yxrv(9eK%&K!WQAR%ts{2k!6{Rlp);F*s) z9P6-kI|d>fg5bSr|9uNUoP61Ks4V=^T`=9&jK4N^Q^O@-$r4h7F40oI`Z}pR(N4^O z54)-Q-bD2hLBKR*p^w7B1H$-xI+6;Z`tf^jtw;SuGJ<}+D7yGu(}w4+D^Kg#l22{0 zWRgo?@UdC}yuj86PFj38&<);rZk1&4{O~&fcFIyF? z8@x|RVc|8xwN|q4XXia)6n8B_N0!oaFLgmqSJ?-ZKY_rC>29Aqu%9@N{5D+vQwnn4 zwH*MR9Ue5VdZL$Ic6&LF+VQwqz4H`95#$>zxFcZ*Ox9}sS-#&~kZj`z$kum(fO@9} z^34448P`;y*dTII8Yz?C+NvJyt92V)f~j?nMI85}nZZ@hp#Tvd!g;jsv_U@kfvQ&; znrt*n#B;s6)G?HW#7LTAL%7mN-92Yzn@xhOCQIX`v_k38`ru<%vP+ka zXl_c}%^&IR2Tf7*5Xn(a1o@0-y z7Vhf1h4uIAPKnRe<-lJBI+3i%rpk}4L}$~=MyGRVFXAy<$sBASGZ@)m2m|Pa>wf?Q zU=_3}15};;Q~ju)a&S2@l5Nu6Y}lQn&SEll2S?4=(_K5%6MUkd_%QE!b%QTO>bdB~ zb^0&|-ThG(nUNymbZSGy-GHM4_@>#+VdmCrcgQzl9=6Rcx|N65BS=Tlype8_;||UU z@$nxwfA@}tkgoJmZZ$vwD*|MXChI78R8>>D3Vu@dG}VGpl098wgv?97q@|qKbiFgC z+5v|5H<*>-T`X7Wr6G%K_z~$j?zu9@g1_quopMd-N~?VcBs$(KIFXh5$+qF)kVTZF z)r|hEH*$3o3qT8!OCW?X2QnQ=T6Y8BM%Xy=+b29!2Z{_dXk8n&jKBPd<0?!$y0}_c zY0h|R&~T@pFvKE7o${X^RFo)Dy9yKjmaxV);O&*35JBztSZD>(HD;NIPfw$w>l8?J3cnvJfMBreJeDf~z zWHrN8X%2>KmYoR}wnJ@%s;QiN<>r?Z{xern}*tbSvP{68X6OC#X+ zR`}z@eb0b|;Jd(Zgu?n*$hge*UbpZ@A(Y*c(3M7P;|u%l2^!Z;^NlL^`D5@Am_cEw zg(7hg?nYenaHI!%H}Src^o;KthfZIL0gtB6YQ{gRO-`BMK)iKA`->;T-J1P*9=!c} z+ko?ymG_VK(y3vfKT$O%MyKm4b9`D>h>_FArekNxHf9vH^qG57G8I%?Q?+8Z*me;x ziF+EPgzVYL25o(DS&%vO8W6A^{u-Uowv-5sJtMPT&?;L1DSYO$rojbyK$1JmMUzu% zK-XmzW@UD;HTk+r(GQ#zMC3o#NFh0-ECRDKz)iUc=4Q0F_2)-}j>Czr0LqwF9?W{= ziNqK#(zWC~naDyoblN&2eZfl3dj;qqZ93MI2&QI`7~)UnBl0PfFnGY|bI?iPuRP3b zD?LKG>=vmxT{rAzI&)#Hmv6?yo7Z|@RPx6+ac_qZpa0az_gBu}2>vsavFx8R3jU1? zS{q5ct@kbwnZ3}+U%jtSdN1{Zc8XBR8DI$dx(UNq2AMr}R8N)xTen%*6-5Jq?f_O%MB}RZKM1r8pHM zG!lU0TEXj{J={LMWn-ARI{WK;lyWXp-m65o^kvY$jc!1q2yWDR&*S>>TS+S=}d;kjzhpMTED$q_4UiJ*`~t1#h|Vmyx# zY?7}`mb7o{XL+M1TxS~^mR=qX92Az0w5N&Fr-7u@wz-zZFu-jVf3{dr?paK-+a;Kv z^r$O7$91Wr$G8(<0peCxY+@PfLJl9>zCc$5(@0qV5?ak!Tpru+IC_U&>HpZHHp`Kp zn|rZdWdwL==CB0juc(^#1|GJ+4?ysDTcjR&)K%M!%8O>Pz~F260n~6IU-|H}w0X3< z&AX|*JCC!08F6B0W*Kqjr!6oru&~+qN@6JQXHks1rTjppuyAx~H4SJ;ceA~pe)JA* zHTvWe=J{xjs)nlId152z;e~q&!`+>ABvc)0AH#)jcMyuByf>zOIhli4Yoh8U2)7bv zmuxdBsJi7o=ypEoRa@>iANb@#ChpAq7;w7vZflOD;=T{KS+WTTG#le_;u%^2$GI50 zp-=XwjD_tVLRXgsx8%{YUOj=5-qOmZr&j2RCp9C!mX9QnIGDez6Ox~wzsL8et?j4C=dRX?6xm^G3if4B+Y2{E^UH4h(+tMtvOaADAKeSr&1$ z0mUuHBTdxvLfvDNS@>HSJU6AD3jA}kt^DnDQjOp^wObkxpu|OPe0jJrQo3*b^zua7 zmQweNal8IUZ5fd-9J6W+GB1RJJPo z+X~!{pAVHitH~h2DVz(w#+h{%Rd#0F>i2I+7tbwS^ZM+5HuK^ykMe)o`|d!h-}i4T z4ka=gWR+D`AsJawvZ;`4nb~`DkW^$xWy=m7+c9#`urjkbR`$#~IL7Zjncv^1@AG;7 zd;WR)qu!nOxc7Zu<8{5RV^_6Nz@@Trm~@Lp5rJN8i?k5*6te0os;`?N1q@c+_qqOj zG1ty*_ji-5FdoYh;_sL#8weJ7gxA>bkwOCYw#jGVP>;7$+f4AtIf-V~Y<++)wK*<>t}*}afC#LKfV z60SL}uMYD+0KdRl%Bv4aV^K5bxXx_RZAU3n0#GaSKLiCzGzx zs$?qj3mlY$5z3E^1>!Q|!+8??J9|G?iz7q|Rzw;bIbpZyo^|GEsW;u?;k*cF6#&ZO z8PT6_yDBmulAdWxmhK62e-TsaYu1_U1J}6d$|cpY7J!&94Myk>XP4+M!{fx6+#cx z^+tto;70kR{Ucd1{wy{ra1ckuzVtU(oz~*s zEhA=G$*)Te_P+;YjMWO)NrMzC(L#IoGktEbE_z+9@)%xUuP+~JrOI|!B^QL^F}&;mc5WO<~$CBA{#Ll z)!{Ht)7si<2@<}*THId$0POQueJ1YoQ9s^eI>+)3W3=v6mpANg$?0))`SG3+KEFv~ z*p(yE(|Kj`dF_j(HV`9gjC%W)s4dBbL%qaAwsu@W;A?y?01Asf%X-kJIxR5hiO%S8 z6auzmS}*rhcWxK;B8R0i2GQ{ii|EZ`GEM{q*j%q%QG4b22gMhmj*Skmq1H?!5n4@5 z+kOKVp(y+WARvq$=uY;0)fj#p$S*Ci1xnXu7>dLS>PMUftD;;Ji9mH`9OSn)lordE zG9UD$AByNJ$l&;(O?w`elMcd6Xv2-;qggN>>0p-ZFecd|!@iZY_?!s%GMT~776wHOhY960vhYLS-i`8}YNuu9S{ z2Jr%OUpD)m&%96kIQq7C?B(q;9;f(hytzL@C|_e1{2hdI$wWefrfoJ1f7|~4`Z|U_ z8(?E^BC3tD7f+u|LeaX3w!t}~vhq`l_xs8E(uw(!QM--tzCsM7&$2Ar{}fH{R{>3c zrAz@19szs)idqs;*A1w+YqkFP2@W7(CFgBcFEYC#!u*UHTdBkqq$O zCKL9K?e+;((uY-aB>SHI zUw7zjjPo#%Jut}Vt$oziK!tSpdk}4CJk_0;^DyTk6R?=o6>xRdm%CJ!Iurn6G-CL; zVys++Gl26d7g-K)ee9Zzy#C~D9RL(E>n4?fbgU9ULi@F`+jzRRf5;+T+?T(dZjh9! z9cXN#9R0JFomkJreFddI#l223Y@jlNgx4^iXHW*A-z);o*M4M73}D>J_Y0p!tjzRP zpOU@bWiWFO<4=y>`DEKy;FqcL#6mG3+i@U6$tC3gZ>7H^N2Zx-@$WGMH38-f75uBc115XO-vWl?h^A zYE7BCMS=N<)^q*Vcm0OQ?WOrLQJ0{*$FQ2-i{!xVvXw(9yeIS_C|d~LQ}HK;6X&!T z%6HJkSP3dK#C%^K<_7uWi&PzST?pu0T}^#m0SHr>2u_=fjqBp5W zuuF4>FIKB^Z^p)J?S6ZmS+?_79hckkb4GOjVB@=J0GlN>IDpLp#*2$5wiaMDxlSv4 z*#@!kViJhZA8n|06RRjgLqn5DZqG?5d)&*c6#MijHwm4o^6~w~8&xxxVZWxfVnvJP zJ0Ox|OPWC`5^tr_W!p+;0o#?U#SNGt_5AU2QK3UaL<<%Eh*x5G-4R|a+F4;$n z#f~@0lK!YqY?q?raEfjdJ5BsFw;dt7g?)i8P{&B^APN#AB7u+x=W4Q|sOLd@STIsn zT{`n=t~v?%QlwFK3*w{)jj-!a_o*mAMJ^Rh@KMFEHbf3^P{(I&8CIJ2y5DnTPL0-+ z;Fh~O@MOHpF!8Y=4Gts%4_lt~47nEa6k1t)`kRz&JF`mi_LUC#$CLbaT#F~3m?}jQ z$F;ywh6@)2yIj{i^?li7e6T(CNe;Y6$k)+>&1XGaScsX|8y30xRe*!3h8V<87-ekD zEwsm4I3aDGU!WQ}wY>8oM$=wT!)2^vqp5|=@jH4Rt?7xjsJw-a;U^iNv!-!$6CVfo zu5UGG;LrDkaj~wv`}GR|_!CF=EfudHe744EHdvg6A5M#>=CpdKzK8M_;ND8(1csKz-D~2xx~ih zBwq`I6s_BeyTIzt&9*`_VJEL2_Um;9I^zKvRu9~Cib62XUWYEl5D?40ymS5jw;&pG zZVTRP3)l?}uWvd=0b&{1;@AB|H{|H+Do~rx>03*IFGmq@&j=acBu+BvzSeXqHc!W> z8OcudNErx^JXV}wJ-1CYL$NtxN~xecW}U8SjmO=N&+>sXGVJa!xzA`{d2$k0VcV9y z4C|zp72WgRth0P2x9Jj$jEqV@%@16aQ44qN63TiJ>5#WPNYZc$9Nkc81()+g6$%gh zvp~#OTaB;MJttUMrCYHFon4g#7upvXWTU{hly4m3=~ z>Eg1QI}*9Y!+_&r-lC@HLTZ{q@xJy$FNb%xGXGJLg%CXo*eviM~PxA`!Q-C+q&(Lm&Bz4$mh6RZ^{Y#h!ZxIETCJ}^YI9NPGfSGQV0H2T!J z9{Kkbqwmt1o%m1-gZ1u~LgV;1-G6^Ag(4zmdtoyU{N%5r28%d)@JweTcPq;7fep~~ zrfk638~saL8{QKj;fbS@208g;XnY2|?!8{xiIYV=`jH#6Ju@*3YEQdz7$;)8O3{o1aXn&al6d#R>_p&QSNdcpGN@$u-=y2xkSOUSo=>T5rmU)A{Y;AB<;xDeE^ z3}(^i86H|qryJ_Rdo6v`q$O`YO`T=-VTNr%I88OD+eEzQX290y!i1niissYj__+&} z1x1Wn>&0T&_6#YVzt{DwCEMS=WVM zxSi~8lKNVfQ{>L(n#KIX-Hi#FJiRCP9n11)kJM{#7#R?1vh){Vlv%FH}`U>#Ackl3+HEI1X|H z)!Di>yW>dfe(DfD<2{Q9Vh-fBJyu!Z-wj|bQyDDHQNRt%ibkc?Z?3vAi6Bw*Uc=RM zOVeh{`DWkLE1yW^fslQ*r3J6%Fsa>5sg31$A)y&Jl;y+8p;tc$cZToWzaLavxg-4G zG@VG;6R)LGn?gdzbgi=72OhN{mLL+bKctM7KZF?oYwzZiW>)Z;on=7{cC}{!NHF%s zus>p!jDfoLdp)4wc}IV~R^}$)rRobitr8YL)upq&ihs%CA2yl#H%ak(6V@4TB{2YL(11SofHsI{QEz%)LZfH z#;}kG-;&3i62@^;Ck0EEo7$5jFI*b=_{sClWhw3$hD-J(FL;_=2L##zr)mtooeEza z3AmBe!*J=67oA;=xxBQ%`(Wg=oJJmF2JzPJ7~HJ)tY42y|jHtS+~mk{)x`z`W9mv-WuiYzg=e zCzBhHQCbtRX73KfR#Mg%Vlpz%w?==zTk4F)jUCuWY25!7sKqMr+#Y0-dJ;P<{+xL3 z>SkWJh)MASU;K_=BH?x7I#ulx?VWg^>QQ+{8P4N90!!7)+p!*H4j)-ImlRY!-gP^- ztVt`nV+`NQD{8B7^Dw3(Hfo8A)t86)#YVFCFk_e?RI{H7eq71#0f3F}A9wiT*IUT| z{?@TA-&n%9HgdSe&DhkfExCi+3i(OBbD{tfdjLp2{y;xmyfV7hFwhUDo?)v~XljzBsvHmw%>U@k~KZ zu{nyku*nhwjTpWXG9Zjt>%_l5nU@_s&_7>uz~Vw$D?hZz;B`$>=ILFr)hTA4nsS%e z0XfQ==MLc-R(KF}W5 z+*t%UkL~D#EW_b zuxpldTp^gSRZfBk%n#Jgs|qIBvaze1c_PGy0aTA#&}nNHmC#}?L6 zh1cxHH=$!M>BdEQ?up?Zc&jicjCI(F`gb?m?nE2UGsa{2AK0nHuorfFm+znMk7fds zlmmwkdb^p0Ypl%{8S{s2U2KZ71y!`!Mlc1;e-7GHQ&Z!Kj_;FGQ{VeH`p2rt$N-)f z`aAQbLS7OVBeda*Lit3Lmy(rhsO~ddz3sRl!s>=fHMl@ja|;!PPyCeM8w(Q`mXnM- zz8U}4E<^c4-i6+z_ZPXV&H_Q~y~hVuW?_F2S==Zf+3@YPbd&Xks<|Lf^i>}ByFA9L z@;4Q)OQcYU@JKCQ_lX*v`6eR}{*!$GFLibximV)tXaINxX$dzMwRGE6s^$xV9E%cobIV)tuwOF6-ct7Jl(}W7#*05FW>nlq61jRtY+Lw{QgE28i zbM+d!v-^O34J7uZq_^`^^WA6DOA$keNOo|=SqQ8bYI*OsGX4Aax*Iv_I%vB;v&_*{M?dc|}U zUzL%WHbOlgheybuC-H?U#%sT>L?Lfx6mY|gOoERR#C|A>c61G_HSKP_5 z0|!9$7EY`1-r6F%il}M#sn4auNl}EN#iznj{($3IdQ5;NG{h$g*QH7F}e8C zTEKKu`O=Br!jE(Ks*{A}{I=d(1=e;iZ$JMoF)CyIORKW@3l^42GXoW5Apu%?&P^x;SFuLt)7674RM zd28Z*-f{KaTI<7BFT5(9Dz6bfLwW_yd#*FutItLZ#2SK=EeK;z2^X;AyZ89<-A5=m zqm#md8xoxm7f>PEyG*2AH1qDLdA~RTAanli&tq-T7m;I{kx)g#Gua2ZMMyAXhHc&l-f?z zN3D=2>>fLW4h2X355eK9i2*G#b^t75K(syd=MovSt0t=YSv@< z7bUDRF!^kTrSgm`Q$aQLX}9dD+XN_ypVasIWTY26Q=PVM^%!9d&LA z1W7`myQ8uJWQ;!bh zfei#1{**sVlG%9LW4K{3bsk(1nE;DjH-DB}t=rASGx*M7trN0Nf>`FxT^xR|gN7XI z4?H3;)A(T3MxS6L=RYJRHFCi}#1I5^X=&(Ox?KMTk)Mn~<%q4}xazc{qmig`)Ge(d zbvEFzsxUShq|!L*b6bo7_$EWq(JDV`%Ck36k9#H)n~T@VhKM|dx|5}E0J-V0p2KN- ze9!_Q4kEi&c8q{SOibMxqy$&%b#siZPSHl7g4es`^yUqNI7tgk8~s)(VHI41JX6H zzMidlC*rF)1Fu`R^_;{KB{HQ+kW%Qi)@U0i4-E`UHih;_A8~sudU^oG6|@&FB@;|ZCtjzlQ}JJ z2^A#IM>kqo4yIlLBP4={j&}o3oh*mqzzPYza#TEobP->vTThIehi42RM#4fvhs%R5 z3S0sLmHtFgR^LqvnMl+(^U!C{3ZRaEBABbCL00keaJ_q%O?!De3FBJWDUpGckBcOH z@Cekp5j^0)pL*4{pJjxUH3M_}{$!J?JnHoi#v%?%J?d%iJVsrqioz;N!Qu<-U^zRbhYaNbO}KPZ(0TC%VAW9U%n_#V^O6nM zDhsL|mbefW>8Qyae7)LIeY0;w^9;W-&Y7_WX*oH849ygupBdy#tGlF^vo+Mhi!4Ty zpLVdmeDT6sn-6w-0x3phrC!{#34A!cUc@lnBl;!Qav+QN-Aq1leEj!kg17$JT292J zharB%sgSt7Qo*h$;g>$}2 z_nIvBg|x#JL{TPYkc)zzKH89uT`Aqe_JF2ilOhRTZYH!Utm%F5Fv%dfa-*c$sHg>g zv!oixTmAT|-9`G%;M;VDZ*QsN z>eUv-*=M`hZ<&uasVpB$nrE3i3}lDA07sV2UyrN|@)rLZ)6OUISnECFcrSjV_morek(K2nAeBV0pL&btShp zI#v8HlLXXM4T0{6;+VOW7PZ!GSv)o(d@=~A#3||s>WgPIJI9o`R$&gl4JkdZ?DiEo z@XiAudX4;?=sw;x2a|>64gw5#mASw}EI+5{;(6&QMgnmxZ*DeSTqfK11Xd5&%W@j4 zZAK2>MMzW7my9s#+p+$oe%>RLuqyK2fbs|ns|trX!9UYS@5JpBQqEmtDVp6PFwy<3 z0`v$HkloZq|2^r7%sVk_gyf>_;?#JNaEZvDGg$!#iFm2B>QhX><=^XnNU{NT3k3{b z##k2f)ITNxlOz=JlFT-7k{QQP4hnt6?N}wCwO@6JnRhL0o+kFNr;cwMLyVALtJuuq z=UImJts!{zU>z(77(#s>9P(w$1cI5)G=9HT`LA7ZcF5brMh83S7_X3Nqc$r6n%E6V)b4(edf~~TDDdRsE7v>dKX0QXkB8;m!PTTa4J~`+ou{u()cnmaI zTo3Ra2Y3Gd%2!4pa9^*od-Q)-mkXGKCvZlR>u(3oKbj5rf*?7p%+9C(wvhiat{8nH z%qDh{>2OB$Ay>#0-lr`9{JzyAHIQ*M!-k#xFQdK z_-_{`5PmgY$F{KlcK@&%{Dk~!F+*R;4uAM>7sS{Tuf8cf{`Uu2z=P!FkN#_852}>F zFr?YqEiL=64-PR7Y1;Ulll@D_9eiu=7B5~58YWI~;oBband-ScnTP>v4IVQ8oO#k|zHJNn|e^mg}-=@ode3S~OiSl)9 y0pq_ur~n>hanAkMIrjf2 Date: Mon, 17 Oct 2022 17:40:03 +0800 Subject: [PATCH 05/79] Update redis.md Signed-off-by: wxbty <38374721+wxbty@users.noreply.github.com> --- .../supported-bindings/redis.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md index 8fabd7bc3df..501ad2707a2 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md @@ -88,6 +88,55 @@ You can store a record in Redis using the `create` operation. This sets a key to An HTTP 204 (No Content) and empty body is returned if successful. +- `get` + +You can get a record in Redis using the `get` operation. This get a key where you set. + +### Request + +```json +{ + "operation": "get", + "metadata": { + "key": "key1" + }, + "data": { + } +} +``` + +### Response + +```json +{ + "data": { + "Hello": "World", + "Lorem": "Ipsum" + } +} +``` + +- `delete` + +You can delete multiple records in Redis using the `delete` operation. There is at least one key in metadata, {key: xxx}, if there are more than one, append key1, key2... + +### Request + +```json +{ + "operation": "delete", + "metadata": { + "key": "key_a", + "key1" : "key_b" + } +} +``` + +### Response + +An HTTP 204 (No Content) and empty body is returned if successful. + + ## Create a Redis instance Dapr can use any Redis instance - containerized, running on your local dev machine, or a managed cloud service, provided the version of Redis is 5.0.0 or later. From ba4b8bed0bc25f8a8f72fc374325e75f1266caff Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Mon, 17 Oct 2022 11:19:52 -0700 Subject: [PATCH 06/79] Remove ServiceInvocation.NoDefaultContentType feature flag Fixes #2869 Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- .../content/en/operations/support/support-preview-features.md | 1 - 1 file changed, 1 deletion(-) diff --git a/daprdocs/content/en/operations/support/support-preview-features.md b/daprdocs/content/en/operations/support/support-preview-features.md index 72cfb47ab21..224d2e0654c 100644 --- a/daprdocs/content/en/operations/support/support-preview-features.md +++ b/daprdocs/content/en/operations/support/support-preview-features.md @@ -17,7 +17,6 @@ For CLI there is no explicit opt-in, just the version that this was first made a | ---------- |-------------|---------|---------------|-----------------| | **`--image-registry`** flag in Dapr CLI| In self hosted mode you can set this flag to specify any private registry to pull the container images required to install Dapr| N/A | [CLI init command reference]({{}}) | v1.7 | | **Resiliency** | Allows configuring of fine-grained policies for retries, timeouts and circuitbreaking. | `Resiliency` | [Configure Resiliency Policies]({{}}) | v1.7| -| **Service invocation without default `content-type`** | When enabled removes the default service invocation content-type header value `application/json` when no content-type is provided. This will become the default behavior in release v1.9.0. This requires you to explicitly set content-type headers where required for your apps. | `ServiceInvocation.NoDefaultContentType` | [Service Invocation]({{}}) | v1.7 | | **App Middleware** | Allow middleware components to be executed when making service-to-service calls | N/A | [App Middleware]({{}}) | v1.9 | | **App health checks** | Allows configuring app health checks | `AppHealthCheck` | [App health checks]({{}}) | v1.9 | | **Pluggable components** | Allows creating self-hosted gRPC-based components written in any language that supports gRPC. The following component APIs are supported: State stores, Pub/sub, Bindings | N/A | [Pluggable components concept]({{}})| v1.9 | From 8fdeb6182d23da53b304349c9576a07f0ffc2055 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 17 Oct 2022 13:43:11 -0500 Subject: [PATCH 07/79] dotnet submodule Signed-off-by: Hannah Hunter --- sdkdocs/dotnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 52b82d7ce65..e87b9ad6eef 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 52b82d7ce6599822a37d2528379f5ca146e286bb +Subproject commit e87b9ad6eefaa05390144d82642df13c5b4bed17 From 1fdcfbd7dec4a67d1234a507fc1a225a49ed9600 Mon Sep 17 00:00:00 2001 From: Marcos Candeia Date: Tue, 18 Oct 2022 11:47:37 -0300 Subject: [PATCH 08/79] Simplifying kubernetes YAML config (#2908) * Simplifying Kubernetes YAML Signed-off-by: Marcos Candeia * Update pluggable-components-registration.md Signed-off-by: Marcos Candeia Signed-off-by: Marcos Candeia --- .../pluggable-components-registration.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/daprdocs/content/en/operations/components/pluggable-components/pluggable-components-registration.md b/daprdocs/content/en/operations/components/pluggable-components/pluggable-components-registration.md index c1242eaf874..068780d3b58 100644 --- a/daprdocs/content/en/operations/components/pluggable-components/pluggable-components-registration.md +++ b/daprdocs/content/en/operations/components/pluggable-components/pluggable-components-registration.md @@ -174,11 +174,8 @@ spec: - name: component volumeMounts: # required, the sockets volume mount - name: dapr-unix-domain-socket - mountPath: /dapr-unix-domain-sockets + mountPath: /tmp/dapr-components-sockets image: YOUR_IMAGE_GOES_HERE:YOUR_IMAGE_VERSION - env: - - name: DAPR_COMPONENTS_SOCKETS_FOLDER # Tells the component where the sockets should be created. - value: /dapr-unix-domain-sockets ``` Before applying the deployment, let's add one more configuration: the component spec. From 63495e4d595bb146a3fadbbdaad93b1a93aa59c1 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 20 Oct 2022 14:47:57 -0500 Subject: [PATCH 09/79] Clarify GH actions doc (#2906) * dotnet submodule Signed-off-by: Hannah Hunter * attempt to clarify doc Signed-off-by: Hannah Hunter * Revert "dotnet submodule" This reverts commit 8fdeb6182d23da53b304349c9576a07f0ffc2055. Signed-off-by: Hannah Hunter --- .../integrations/github_actions.md | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/daprdocs/content/en/developing-applications/integrations/github_actions.md b/daprdocs/content/en/developing-applications/integrations/github_actions.md index 1853dd71862..b0424bef009 100644 --- a/daprdocs/content/en/developing-applications/integrations/github_actions.md +++ b/daprdocs/content/en/developing-applications/integrations/github_actions.md @@ -3,14 +3,21 @@ type: docs weight: 5000 title: "Use the Dapr CLI in a GitHub Actions workflow" linkTitle: "GitHub Actions" -description: "Learn how to add the Dapr CLI to your GitHub Actions to deploy and manage Dapr in your environments." +description: "Add the Dapr CLI to your GitHub Actions to deploy and manage Dapr in your environments." --- -Dapr can be integrated with GitHub Actions via the [Dapr tool installer](https://github.com/marketplace/actions/dapr-tool-installer) available in the GitHub Marketplace. This installer adds the Dapr CLI to your workflow, allowing you to deploy, manage, and upgrade Dapr across your environments. +Dapr can be integrated with GitHub Actions via the [Dapr tool installer](https://github.com/marketplace/actions/dapr-tool-installer) available in the GitHub Marketplace. This installer adds the Dapr CLI to your workflow, allowing you to deploy, manage, and upgrade Dapr across your environments. -## Overview +Copy and paste the following installer snippet into your applicatin's YAML file to get started: -The `dapr/setup-dapr` action will install the specified version of the Dapr CLI on macOS, Linux and Windows runners. Once installed, you can run any [Dapr CLI command]({{< ref cli >}}) to manage your Dapr environments. +```yaml +- name: Dapr tool installer + uses: dapr/setup-dapr@v1 +``` + +The [`dapr/setup-dapr` action](https://github.com/dapr/setup-dapr) will install the specified version of the Dapr CLI on macOS, Linux, and Windows runners. Once installed, you can run any [Dapr CLI command]({{< ref cli >}}) to manage your Dapr environments. + +Refer to the [`action.yml` metadata file](https://github.com/dapr/setup-dapr/blob/main/action.yml) for details about all the inputs. ## Example @@ -34,4 +41,8 @@ The `dapr/setup-dapr` action will install the specified version of the Dapr CLI dapr status --kubernetes working-directory: ./twitter-sentiment-processor/demos/demo3 -``` \ No newline at end of file +``` + +## Next steps + +Learn more about [GitHub Actions](https://docs.github.com/en/actions). \ No newline at end of file From cae4de60c65eef4e827fadff175148ded3c5e994 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 20 Oct 2022 14:56:42 -0500 Subject: [PATCH 10/79] dotnet submodule (#2904) Signed-off-by: Hannah Hunter Signed-off-by: Hannah Hunter Co-authored-by: Mark Fussell --- sdkdocs/dotnet | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdkdocs/dotnet b/sdkdocs/dotnet index 52b82d7ce65..e87b9ad6eef 160000 --- a/sdkdocs/dotnet +++ b/sdkdocs/dotnet @@ -1 +1 @@ -Subproject commit 52b82d7ce6599822a37d2528379f5ca146e286bb +Subproject commit e87b9ad6eefaa05390144d82642df13c5b4bed17 From 54e15473944e240dcd50ccbfadd93f274b25e0db Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 20 Oct 2022 12:58:17 -0700 Subject: [PATCH 11/79] Update latest Python SDK version Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- .../content/en/operations/support/support-release-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index b6411eaf2d4..1163b5be16d 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -34,7 +34,7 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| -| October 13th 2022 | 1.9.0
| 1.9.0 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | +| October 13th 2022 | 1.9.0
| 1.9.0 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | October 13th 2022 | 1.8.5
| 1.8.1 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | August 10th 2022 | 1.8.4
| 1.8.1 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | July 29th 2022 | 1.8.3
| 1.8.0 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | From b5ed1515adb4ff5cd6ad4c0f6599c87a2406b6d5 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 20 Oct 2022 15:33:22 -0500 Subject: [PATCH 12/79] etag true for dynamodb (#2902) Signed-off-by: Hannah Hunter Signed-off-by: Hannah Hunter Co-authored-by: Mark Fussell --- daprdocs/data/components/state_stores/aws.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/data/components/state_stores/aws.yaml b/daprdocs/data/components/state_stores/aws.yaml index 81584efb09a..65440d5802b 100644 --- a/daprdocs/data/components/state_stores/aws.yaml +++ b/daprdocs/data/components/state_stores/aws.yaml @@ -6,6 +6,6 @@ features: crud: true transactions: false - etag: false + etag: true ttl: true query: false From 3422654634b52ebed8c56c27e1887b2995e4cf0f Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 20 Oct 2022 15:54:04 -0500 Subject: [PATCH 13/79] [Run w/o docker] Add tabs and port number (#2905) * add tabs and window example Signed-off-by: Hannah Hunter * edits per Mark Signed-off-by: Hannah Hunter Signed-off-by: Hannah Hunter Co-authored-by: Mark Fussell --- .../self-hosted/self-hosted-no-docker.md | 79 +++++++++++++++---- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md index 0fdf85a6ab3..8bbe050cdb1 100644 --- a/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md +++ b/daprdocs/content/en/operations/hosting/self-hosted/self-hosted-no-docker.md @@ -6,36 +6,49 @@ weight: 30000 description: "How to deploy and run Dapr in self-hosted mode without Docker installed on the local machine" --- -This article provides guidance on running Dapr in self-hosted mode without Docker. - ## Prerequisites -- [Dapr CLI]({{< ref "install-dapr-selfhost.md#installing-dapr-cli" >}}) +- [Install the Dapr CLI]({{< ref "install-dapr-selfhost.md#installing-dapr-cli" >}}) ## Initialize Dapr without containers -The Dapr CLI provides an option to initialize Dapr using slim init, without the default creation of a development environment which has a dependency on Docker. To initialize Dapr with slim init, after installing the Dapr CLI use the following command: +The Dapr CLI provides an option to initialize Dapr using slim init, without the default creation of a development environment with a dependency on Docker. To initialize Dapr with slim init, after installing the Dapr CLI, use the following command: ```bash dapr init --slim ``` -In this mode two different binaries are installed `daprd` and `placement`. The `placement` binary is needed to enable [actors]({{< ref "actors-overview.md" >}}) in a Dapr self-hosted installation. +Two different binaries are installed: +- `daprd` +- `placement` + +The `placement` binary is needed to enable [actors]({{< ref "actors-overview.md" >}}) in a Dapr self-hosted installation. + +In slim init mode, no default components (such as Redis) are installed for state management or pub/sub. This means that, aside from [service invocation]({{< ref "service-invocation-overview.md" >}}), no other building block functionality is available "out-of-the-box" on install. Instead, you can set up your own environment and custom components. + +Actor-based service invocation is possible if a state store is configured, as explained in the following sections. + +## Perform service invocation +See [the _Hello Dapr slim_ sample](https://github.com/dapr/samples/tree/master/hello-dapr-slim) for an example on how to perform service invocation in slim init mode. -In this mode no default components such as Redis are installed for state management or pub/sub. This means, that aside from [Service Invocation]({{< ref "service-invocation-overview.md" >}}), no other building block functionality is available on install out of the box. Users are free to setup their own environment and custom components. Furthermore, actor based service invocation is possible if a state store is configured as explained in the following sections. +## Enable state management or pub/sub -## Service invocation -See [this sample](https://github.com/dapr/samples/tree/master/hello-dapr-slim) for an example on how to perform service invocation in this mode. +See documentation around [configuring Redis in self-hosted mode without Docker](https://redis.io/topics/quickstart) to enable a local state store or pub/sub broker for messaging. -## Enabling state management or pub/sub +## Enable actors -See configuring Redis in self-hosted mode [without docker](https://redis.io/topics/quickstart) to enable a local state store or pub/sub broker for messaging. +To enable actor placement: +- Run the placement service locally. +- Enable a [transactional state store that supports ETags]({{< ref "supported-state-stores.md" >}}) to use actors. For example, [Redis configured in self-hosted mode](https://redis.io/topics/quickstart). -## Enabling actors +By default, the `placement` binary is installed in: -The placement service must be run locally to enable actor placement. Also, a [transactional state store that supports ETags]({{< ref "supported-state-stores.md" >}}) must be enabled to use actors, for example, [Redis configured in self-hosted mode](https://redis.io/topics/quickstart). +- For Linux/MacOS: `/$HOME/.dapr/bin` +- For Windows: `%USERPROFILE%\.dapr\bin` -By default for Linux/MacOS the `placement` binary is installed in `/$HOME/.dapr/bin` or for Windows at `%USERPROFILE%\.dapr\bin`. +{{< tabs "Linux/MacOS" "Windows">}} + +{{% codetab %}} ```bash $ $HOME/.dapr/bin/placement @@ -51,16 +64,48 @@ INFO[0001] leader is established. instance=Nicoletaz-L10. ``` -From here on you can follow the sample example created for the [java-sdk](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors), [python-sdk](https://github.com/dapr/python-sdk/tree/master/examples/demo_actor) or [dotnet-sdk]({{< ref "dotnet-actors-howto.md" >}}) for running an application with Actors enabled. +{{% /codetab %}} + +{{% codetab %}} + +When running standalone placement on Windows, specify port 6050: + +```bash +%USERPROFILE%/.dapr/bin/placement.exe -port 6050 + +time="2022-10-17T14:56:55.4055836-05:00" level=info msg="starting Dapr Placement Service -- version 1.9.0 -- commit fdce5f1f1b76012291c888113169aee845f25ef8" instance=LAPTOP-OMK50S19 scope=dapr.placement type=log ver=1.9.0 +time="2022-10-17T14:56:55.4066226-05:00" level=info msg="log level set to: info" instance=LAPTOP-OMK50S19 scope=dapr.placement type=log ver=1.9.0 +time="2022-10-17T14:56:55.4067306-05:00" level=info msg="metrics server started on :9090/" instance=LAPTOP-OMK50S19 scope=dapr.metrics type=log ver=1.9.0 +time="2022-10-17T14:56:55.4077529-05:00" level=info msg="Raft server is starting on 127.0.0.1:8201..." instance=LAPTOP-OMK50S19 scope=dapr.placement.raft type=log ver=1.9.0 +time="2022-10-17T14:56:55.4077529-05:00" level=info msg="placement service started on port 6050" instance=LAPTOP-OMK50S19 scope=dapr.placement type=log ver=1.9.0 +time="2022-10-17T14:56:55.4082772-05:00" level=info msg="Healthz server is listening on :8080" instance=LAPTOP-OMK50S19 scope=dapr.placement type=log ver=1.9.0 +time="2022-10-17T14:56:56.8232286-05:00" level=info msg="cluster leadership acquired" instance=LAPTOP-OMK50S19 scope=dapr.placement type=log ver=1.9.0 +time="2022-10-17T14:56:56.8232286-05:00" level=info msg="leader is established." instance=LAPTOP-OMK50S19 scope=dapr.placement type=log ver=1.9.0 + +``` + +{{% /codetab %}} + +{{< /tabs >}} + +Now, to run an application with actors enabled, you can follow the sample example created for: +- [java-sdk](https://github.com/dapr/java-sdk/tree/master/examples/src/main/java/io/dapr/examples/actors) +- [python-sdk](https://github.com/dapr/python-sdk/tree/master/examples/demo_actor) +- [dotnet-sdk]({{< ref "dotnet-actors-howto.md" >}}) + +Update the state store configuration files to match the Redis host and password with your setup. -Update the state store configuration files to have the Redis host and password match the setup that you have. Additionally to enable it as a actor state store have the metadata piece added similar to the [sample Java Redis component](https://github.com/dapr/java-sdk/blob/master/examples/components/state/redis.yaml) definition. +Enable it as a actor state store by making the metadata piece similar to the [sample Java Redis component](https://github.com/dapr/java-sdk/blob/master/examples/components/state/redis.yaml) definition. ```yaml - name: actorStateStore value: "true" ``` +## Clean up -## Cleanup +When finished, remove the binaries by following [Uninstall Dapr in a self-hosted environment]({{< ref self-hosted-uninstall >}}) to remove the binaries. -Follow the uninstall [instructions]({{< ref "install-dapr-selfhost.md#uninstall-dapr-in-a-self-hosted-mode" >}}) to remove the binaries. +## Next steps +- Run Dapr with [Podman]({{< ref self-hosted-with-podman.md >}}), using the default [Docker]({{< ref install-dapr-selfhost.md >}}), or in an [airgap environment]({{< ref self-hosted-airgap.md >}}) +- [Upgrade Dapr in self-hosted mode]({{< ref self-hosted-upgrade >}}) \ No newline at end of file From da5e7a23afe961b5e69ae8d56e7d410d673cb05a Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Wed, 26 Oct 2022 13:04:42 -0500 Subject: [PATCH 14/79] 1/3 update per alecor191 Signed-off-by: Hannah Hunter --- .../building-blocks/pubsub/subscription-methods.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md index 65548455941..82c2d75c1e7 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md @@ -137,7 +137,7 @@ public Mono getCheckout(@RequestBody(required = false) CloudEvent ```python #Subscribe to a topic -@app.subscribe(pubsubname='pubsub', topic='orders', route='route') +@app.subscribe(pubsubname='pubsub', topic='orders', route='checkout') def mytopic(event: v1.Event) -> None: data = json.loads(event.Data()) logging.info('Subscriber received: ' + str(data)) From 830b4c2076d04f3036ddf7c0f4f6ff49bcc760b7 Mon Sep 17 00:00:00 2001 From: wxbty <38374721+wxbty@users.noreply.github.com> Date: Thu, 27 Oct 2022 13:54:44 +0800 Subject: [PATCH 15/79] Update redis.md Signed-off-by: wxbty <38374721+wxbty@users.noreply.github.com> --- .../components-reference/supported-bindings/redis.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md index 501ad2707a2..d47e06c1d31 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md @@ -90,7 +90,7 @@ An HTTP 204 (No Content) and empty body is returned if successful. - `get` -You can get a record in Redis using the `get` operation. This get a key where you set. +You can get a record in Redis using the `get` operation. This gets a key that was previously set. ### Request @@ -118,7 +118,7 @@ You can get a record in Redis using the `get` operation. This get a key where yo - `delete` -You can delete multiple records in Redis using the `delete` operation. There is at least one key in metadata, {key: xxx}, if there are more than one, append key1, key2... +You can delete a record in Redis using the `delete` operation. Returns success whether the key exists or not. ### Request @@ -126,8 +126,7 @@ You can delete multiple records in Redis using the `delete` operation. There is { "operation": "delete", "metadata": { - "key": "key_a", - "key1" : "key_b" + "key": "key1" } } ``` From 61878784e50166e0ab490136a694925489f56235 Mon Sep 17 00:00:00 2001 From: Bernd Verst <4535280+berndverst@users.noreply.github.com> Date: Thu, 27 Oct 2022 16:30:05 -0700 Subject: [PATCH 16/79] Add missing rocketmq pubsub to table Signed-off-by: Bernd Verst <4535280+berndverst@users.noreply.github.com> --- daprdocs/data/components/pubsub/generic.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/daprdocs/data/components/pubsub/generic.yaml b/daprdocs/data/components/pubsub/generic.yaml index ef757e4b394..0c80e502af8 100644 --- a/daprdocs/data/components/pubsub/generic.yaml +++ b/daprdocs/data/components/pubsub/generic.yaml @@ -43,3 +43,8 @@ state: Stable version: v1 since: "1.7" +- component: RocketMQ + link: setup-rocketmq + state: Alpha + version: v1 + since: "1.8" From 08455c7134e4f057b0f6b4ae7a303ea5be811752 Mon Sep 17 00:00:00 2001 From: vishalsignity <97443129+vishalsignity@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:54:37 +0530 Subject: [PATCH 17/79] Update aws-secret-manager.md Signed-off-by: vishalsignity <97443129+vishalsignity@users.noreply.github.com> --- .../supported-secret-stores/aws-secret-manager.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md index 4c21f190fec..e57aece7bd0 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/aws-secret-manager.md @@ -2,7 +2,7 @@ type: docs title: "AWS Secrets Manager" linkTitle: "AWS Secrets Manager" -description: Detailed information on the decret store component +description: Detailed information on the secret store component aliases: - "/operations/components/setup-secret-store/supported-secret-stores/aws-secret-manager/" --- From 2972c26540644209cd877e714898c0d0afc20012 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Mon, 31 Oct 2022 08:48:47 -0700 Subject: [PATCH 18/79] Update daprdocs/content/en/concepts/resiliency-concept.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- daprdocs/content/en/concepts/resiliency-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index ab5875d33ee..0597fb01ea6 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -6,7 +6,7 @@ weight: 400 description: "Configure retries, timeouts, circuit breakers and monitor app health" --- -Distributed applications are commonly comprised of many microservices, with dozens, sometimes hundreds of instances scaling across underlying infrastructure. As these distributed solutions grow in size and complexity, the potential for system failures inevitably increases. Service instances can fail or become unresponsive due to any number of issues, including hardware failures, unexpected throughput, or application lifecycle events, such as scaling out and application restarts. Designing and implementing a self-healing solution with the ability to detect, mitigate, and respond to failure is critical. +Distributed applications are commonly comprised of many microservices, with dozens - sometimes hundreds - of instances scaling across underlying infrastructure. As these distributed solutions grow in size and complexity, the potential for system failures inevitably increases. Service instances can fail or become unresponsive due to any number of issues, including hardware failures, unexpected throughput, or application lifecycle events, such as scaling out and application restarts. Designing and implementing a self-healing solution with the ability to detect, mitigate, and respond to failure is critical. ## Resiliency Policies Diagram showing the resiliency applied to Dapr APIs From 0292942adeff8c610d93428acfd574c7efa403dd Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Mon, 31 Oct 2022 08:48:54 -0700 Subject: [PATCH 19/79] Update daprdocs/content/en/concepts/resiliency-concept.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- daprdocs/content/en/concepts/resiliency-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index 0597fb01ea6..4db4ef93cdb 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -17,7 +17,7 @@ Dapr provides a capability for defining and applying fault tolerance resiliency - Retries/back-offs - Circuit breakers -These policies can be applied to any Dapr API calls and when calling components with a [resiliency spec]({{< ref resiliency-overview >}}). +These policies can be applied to any Dapr API calls when calling components with a [resiliency spec]({{< ref resiliency-overview >}}). ## App Health Checks Diagram showing the app health feature. Running Dapr with app health enabled causes Dapr to periodically probe the app for its health From 93eb7c06b83db0653524e4bf2f095bbcd3775486 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Mon, 31 Oct 2022 08:49:03 -0700 Subject: [PATCH 20/79] Update daprdocs/content/en/concepts/resiliency-concept.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- daprdocs/content/en/concepts/resiliency-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index 4db4ef93cdb..bd7fe949110 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -22,7 +22,7 @@ These policies can be applied to any Dapr API calls when calling components with ## App Health Checks Diagram showing the app health feature. Running Dapr with app health enabled causes Dapr to periodically probe the app for its health -Applications can become unresponsive for a variety of reasons, for example, they are to busy to accept new work, could have crashed, or be in a deadlock state. Sometimes the condition can be transitory or persistent. +Applications can become unresponsive for a variety of reasons. For example, they are too busy to accept new work, could have crashed, or be in a deadlock state. Sometimes the condition can be transitory or persistent. Dapr provides a capability for monitoring app health through probes that check the health of your application and react to status changes. When an unhealthy app is detected, Dapr stops accepting new work on behalf of the application. From 717ef391de5a5cc5be838ecd30227b5552eb0883 Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Mon, 31 Oct 2022 10:35:28 -0700 Subject: [PATCH 21/79] Apply feedback to resiliency concept page --- daprdocs/content/en/concepts/resiliency-concept.md | 10 +++++++++- .../building-blocks/observability/sidecar-health.md | 2 +- .../en/operations/resiliency/resiliency-overview.md | 2 -- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index bd7fe949110..e2178559d5f 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -26,4 +26,12 @@ Applications can become unresponsive for a variety of reasons. For example, they Dapr provides a capability for monitoring app health through probes that check the health of your application and react to status changes. When an unhealthy app is detected, Dapr stops accepting new work on behalf of the application. -Read more on how to apply [app health checks]({{< ref app-health >}}) to your application. \ No newline at end of file +Read more on how to apply [app health checks]({{< ref app-health >}}) to your application. + +## Sidecar Health Checks +Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{< ref health_api.md >}}). With this endpoint, the *daprd* process, or sidecar, can be: + +- Probed for its health +- Determined for readiness and liveness + +Read more on about how to apply [dapr health checks]({{< ref sidecar-health >}}) to your application. diff --git a/daprdocs/content/en/developing-applications/building-blocks/observability/sidecar-health.md b/daprdocs/content/en/developing-applications/building-blocks/observability/sidecar-health.md index 7d8027dc832..9385473dd9f 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/observability/sidecar-health.md +++ b/daprdocs/content/en/developing-applications/building-blocks/observability/sidecar-health.md @@ -6,7 +6,7 @@ weight: 200 description: Dapr sidecar health checks --- -Dapr provides a way to [determine its health using an [HTTP `/healthz` endpoint]({{< ref health_api.md >}}). With this endpoint, the *daprd* process, or sidecar, can be: +Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{< ref health_api.md >}}). With this endpoint, the *daprd* process, or sidecar, can be: - Probed for its health - Determined for readiness and liveness diff --git a/daprdocs/content/en/operations/resiliency/resiliency-overview.md b/daprdocs/content/en/operations/resiliency/resiliency-overview.md index bbca61db52e..fea52eca2f9 100644 --- a/daprdocs/content/en/operations/resiliency/resiliency-overview.md +++ b/daprdocs/content/en/operations/resiliency/resiliency-overview.md @@ -9,8 +9,6 @@ description: "Configure Dapr retries, timeouts, and circuit breakers" Resiliency is currently a preview feature. Before you can utilize a resiliency spec, you must first [enable the resiliency preview feature]({{< ref support-preview-features >}}). {{% /alert %}} -Distributed applications are commonly comprised of many microservices, with dozens, even hundreds, of instances for any given application. With so many microservices, the likelihood of a system failure increases. For example, an instance can fail or be unresponsive due to hardware, an overwhelming number of requests, application restarts/scale outs, or several other reasons. These events can cause a network call between services to fail. Designing and implementing your application with fault tolerance, the ability to detect, mitigate, and respond to failures, allows your application to recover to a functioning state and become self healing. - Dapr provides a capability for defining and applying fault tolerance resiliency policies via a [resiliency spec]({{< ref "resiliency-overview.md#complete-example-policy" >}}). Resiliency specs are saved in the same location as components specs and are applied when the Dapr sidecar starts. The sidecar determines how to apply resiliency policies to your Dapr API calls. In self-hosted mode, the resiliency spec must be named `resiliency.yaml`. In Kubernetes Dapr finds the named resiliency specs used by your application. Within the resiliency spec, you can define policies for popular resiliency patterns, such as: - [Timeouts]({{< ref "policies.md#timeouts" >}}) From ac919b9fde127fa2d038095bd893e6c955820b2e Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Mon, 31 Oct 2022 18:15:26 +0000 Subject: [PATCH 22/79] Mark pubsub.hazelcast as deprecated Fixes #2708 Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- .../components-reference/supported-pubsub/setup-hazelcast.md | 2 ++ daprdocs/data/components/pubsub/generic.yaml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md index 16962d4f5a6..2610e300516 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md @@ -7,6 +7,8 @@ aliases: - "/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast/" --- +> **Deprecation notice**: The Hazelcast PubSub component has been deprecated due inherent to lack of support for "at least once" delivery guarantee, and will be removed in a future Dapr release. + ## Component format To setup hazelcast pubsub create a component of type `pubsub.hazelcast`. See [this guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pubsub configuration. diff --git a/daprdocs/data/components/pubsub/generic.yaml b/daprdocs/data/components/pubsub/generic.yaml index ef757e4b394..ec02c93f8b0 100644 --- a/daprdocs/data/components/pubsub/generic.yaml +++ b/daprdocs/data/components/pubsub/generic.yaml @@ -1,6 +1,6 @@ - component: Hazelcast link: setup-hazelcast - state: Beta + state: Deprecated version: v1 since: "1.7" - component: In Memory From 638ab77f2b0ad107c45101ccbf57523f05900c8c Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Mon, 31 Oct 2022 12:44:44 -0700 Subject: [PATCH 23/79] Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md Co-authored-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com> Signed-off-by: Alessandro (Ale) Segala <43508+ItalyPaleAle@users.noreply.github.com> --- .../components-reference/supported-pubsub/setup-hazelcast.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md index 2610e300516..581d5a87492 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md @@ -7,7 +7,7 @@ aliases: - "/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast/" --- -> **Deprecation notice**: The Hazelcast PubSub component has been deprecated due inherent to lack of support for "at least once" delivery guarantee, and will be removed in a future Dapr release. +> **Deprecation notice**: The Hazelcast PubSub component has been deprecated due to inherent lack of support for "at least once" delivery guarantee, and will be removed in a future Dapr release. ## Component format To setup hazelcast pubsub create a component of type `pubsub.hazelcast`. See [this guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pubsub configuration. From e024c0a6e14dc030c766fc37fc085ba31ee62758 Mon Sep 17 00:00:00 2001 From: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com> Date: Tue, 1 Nov 2022 21:02:17 +0530 Subject: [PATCH 24/79] update supported versions list (#2916) * update supported versions list Signed-off-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com> * updated supported versions Signed-off-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com> Signed-off-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com> Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Co-authored-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../operations/support/support-release-policy.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 1163b5be16d..0a3fb49176f 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -34,13 +34,17 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| -| October 13th 2022 | 1.9.0
| 1.9.0 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | +| November 1st 2022 | 1.9.2
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | +| October 26th 2022 | 1.9.1
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | +| October 13th 2022 | 1.9.0
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | +| October 26th 2022 | 1.8.6
| 1.8.1 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | October 13th 2022 | 1.8.5
| 1.8.1 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | August 10th 2022 | 1.8.4
| 1.8.1 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | July 29th 2022 | 1.8.3
| 1.8.0 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | July 21st 2022 | 1.8.2
| 1.8.0 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | July 20th 2022 | 1.8.1
| 1.8.0 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | | July 7th 2022 | 1.8.0
| 1.8.0 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | +| October 26th 2022 | 1.7.5
| 1.7.0 | Java 1.5.0
Go 1.4.0
PHP 1.1.0
Python 1.6.0
.NET 1.7.0
JS 2.2.1 | 0.10.0 | Supported | | May 31st 2022 | 1.7.4
| 1.7.0 | Java 1.5.0
Go 1.4.0
PHP 1.1.0
Python 1.6.0
.NET 1.7.0
JS 2.2.1 | 0.10.0 | Supported | | May 17th 2022 | 1.7.3
| 1.7.0 | Java 1.5.0
Go 1.4.0
PHP 1.1.0
Python 1.6.0
.NET 1.7.0
JS 2.2.1 | 0.10.0 | Supported | | Apr 22th 2022 | 1.7.2
| 1.7.0 | Java 1.5.0
Go 1.4.0
PHP 1.1.0
Python 1.6.0
.NET 1.7.0
JS 2.1.0 | 0.10.0 | Supported | @@ -75,14 +79,16 @@ General guidance on upgrading can be found for [self hosted mode]({{< ref self-h | | 1.5.2 | 1.6.0 | | | 1.6.0 | 1.6.2 | | | 1.6.0 | 1.7.4 | +| | 1.6.0 | 1.7.5 | | 1.5.0 to 1.5.2 | N/A | 1.6.0 | | | 1.6.0 | 1.6.2 | | | 1.6.0 | 1.7.4 | +| | 1.6.0 | 1.7.5 | | 1.6.0 | N/A | 1.6.2 | -| 1.6.0 | N/A | 1.7.4 | -| 1.7.0 to 1.7.4 | N/A | 1.8.0 | -| 1.8.0 | N/A | 1.8.5 | -| 1.9.0 | N/A | 1.9.0 | +| 1.6.0 | N/A | 1.7.5 | +| 1.7.0 to 1.7.5 | N/A | 1.8.0 | +| 1.8.0 | N/A | 1.8.6 | +| 1.9.0 | N/A | 1.9.2 | ## Breaking changes and deprecations From 47bd8726c81c92a6be1bff4743e4076d2a770626 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Wed, 2 Nov 2022 15:10:32 -0700 Subject: [PATCH 25/79] Update daprdocs/content/en/concepts/resiliency-concept.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- daprdocs/content/en/concepts/resiliency-concept.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index e2178559d5f..284176de39d 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -3,7 +3,7 @@ type: docs title: "Resiliency" linkTitle: "Resiliency" weight: 400 -description: "Configure retries, timeouts, circuit breakers and monitor app health" +description: "Configure policies and monitor app and sidecar health" --- Distributed applications are commonly comprised of many microservices, with dozens - sometimes hundreds - of instances scaling across underlying infrastructure. As these distributed solutions grow in size and complexity, the potential for system failures inevitably increases. Service instances can fail or become unresponsive due to any number of issues, including hardware failures, unexpected throughput, or application lifecycle events, such as scaling out and application restarts. Designing and implementing a self-healing solution with the ability to detect, mitigate, and respond to failure is critical. From 528d6954824ca43dff029730215ee191d3736a00 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:03:37 -0700 Subject: [PATCH 26/79] Update azure-kubernetes-service-extension.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../integrations/Azure/azure-kubernetes-service-extension.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md index 1eefc118134..a972b5792a4 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md @@ -7,7 +7,7 @@ weight: 4000 --- # Prerequisites -- [Azure subscription](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) +- Azure subscription - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli-windows?tabs=azure-cli) and the ***aks-preview*** extension. - [Azure Kubernetes Service (AKS) cluster](https://docs.microsoft.com/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli) @@ -106,4 +106,4 @@ dapr-sidecar-injector-9555889bc-rpjwl 1/1 Running 0 1h dapr-sidecar-injector-9555889bc-rqjgt 1/1 Running 0 1h ``` -For further information such as configuration options and targeting specific versions of Dapr, see the official [AKS Dapr Extension Docs](https://docs.microsoft.com/azure/aks/dapr). \ No newline at end of file +For further information such as configuration options and targeting specific versions of Dapr, see the official [AKS Dapr Extension Docs](https://docs.microsoft.com/azure/aks/dapr). From 19393252dea72f9c860787956a6afd772e1d0ef4 Mon Sep 17 00:00:00 2001 From: wxbty <38374721+wxbty@users.noreply.github.com> Date: Thu, 3 Nov 2022 11:22:46 +0800 Subject: [PATCH 27/79] Update redis.md Signed-off-by: wxbty <38374721+wxbty@users.noreply.github.com> --- .../supported-bindings/redis.md | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md index d47e06c1d31..95fd372d040 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md @@ -66,10 +66,14 @@ The above example uses secrets as plain strings. It is recommended to use a secr This component supports **output binding** with the following operations: - `create` +- `get` +- `delete` + +### create You can store a record in Redis using the `create` operation. This sets a key to hold a value. If the key already exists, the value is overwritten. -### Request +#### Request ```json { @@ -82,17 +86,16 @@ You can store a record in Redis using the `create` operation. This sets a key to "Lorem": "Ipsum" } } -``` -### Response +#### Response An HTTP 204 (No Content) and empty body is returned if successful. -- `get` +### get You can get a record in Redis using the `get` operation. This gets a key that was previously set. -### Request +#### Request ```json { @@ -105,7 +108,7 @@ You can get a record in Redis using the `get` operation. This gets a key that wa } ``` -### Response +#### Response ```json { @@ -116,11 +119,11 @@ You can get a record in Redis using the `get` operation. This gets a key that wa } ``` -- `delete` +### delete You can delete a record in Redis using the `delete` operation. Returns success whether the key exists or not. -### Request +#### Request ```json { @@ -131,7 +134,7 @@ You can delete a record in Redis using the `delete` operation. Returns success w } ``` -### Response +#### Response An HTTP 204 (No Content) and empty body is returned if successful. From 80b61c484c567d25237f6f889efe048091d59336 Mon Sep 17 00:00:00 2001 From: wxbty <38374721+wxbty@users.noreply.github.com> Date: Thu, 3 Nov 2022 11:23:34 +0800 Subject: [PATCH 28/79] Update redis.md Signed-off-by: wxbty <38374721+wxbty@users.noreply.github.com> --- .../reference/components-reference/supported-bindings/redis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md index 95fd372d040..8fe7638e048 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/redis.md @@ -86,6 +86,7 @@ You can store a record in Redis using the `create` operation. This sets a key to "Lorem": "Ipsum" } } +``` #### Response From 5cfba9f69c47d815fed5b4c1f89169870881e34c Mon Sep 17 00:00:00 2001 From: Ana Cozma <48124384+ana-cozma@users.noreply.github.com> Date: Thu, 3 Nov 2022 15:37:49 +0100 Subject: [PATCH 29/79] Update eventgrid.md command typos (#2932) Signed-off-by: Ana Cozma <48124384+ana-cozma@users.noreply.github.com> Signed-off-by: Ana Cozma <48124384+ana-cozma@users.noreply.github.com> --- .../components-reference/supported-bindings/eventgrid.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md b/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md index d422a19c726..a7f9a3c995f 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/eventgrid.md @@ -44,7 +44,7 @@ spec: - name: accessKey value: "[AccessKey]" - name: topicEndpoint - value: "[TopicEndpoint] + value: "[TopicEndpoint]" ``` {{% alert title="Warning" color="warning" %}} @@ -102,7 +102,7 @@ _Make sure to also to add quotes around the `[HandshakePort]` in your Event Grid ```bash # Using random port 9000 as an example -ngrok http -host-header=localhost 9000 +ngrok http --host-header=localhost 9000 ``` - Configure the ngrok's HTTPS endpoint and custom port to input binding metadata From a64803c09d5cd90dc2a86262372a1ef5a4be2591 Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Thu, 3 Nov 2022 09:23:21 -0700 Subject: [PATCH 30/79] Add sidecar health image and fix broken links Signed-off-by: Nick Greenfield --- .../content/en/concepts/resiliency-concept.md | 2 ++ .../integrations/Azure/authenticating-azure.md | 2 +- .../Azure/azure-kubernetes-service-extension.md | 2 +- .../tutorials/configure-state-pubsub.md | 4 +--- .../supported-secret-stores/azure-keyvault.md | 2 +- daprdocs/static/images/sidecar-health.png | Bin 0 -> 82475 bytes 6 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 daprdocs/static/images/sidecar-health.png diff --git a/daprdocs/content/en/concepts/resiliency-concept.md b/daprdocs/content/en/concepts/resiliency-concept.md index 284176de39d..7b8cbe6757a 100644 --- a/daprdocs/content/en/concepts/resiliency-concept.md +++ b/daprdocs/content/en/concepts/resiliency-concept.md @@ -29,6 +29,8 @@ Dapr provides a capability for monitoring app health through probes that check t Read more on how to apply [app health checks]({{< ref app-health >}}) to your application. ## Sidecar Health Checks +Diagram showing the app health feature. Running Dapr with app health enabled causes Dapr to periodically probe the app for its health + Dapr provides a way to determine its health using an [HTTP `/healthz` endpoint]({{< ref health_api.md >}}). With this endpoint, the *daprd* process, or sidecar, can be: - Probed for its health diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/authenticating-azure.md b/daprdocs/content/en/developing-applications/integrations/Azure/authenticating-azure.md index fb08ee08907..93e0e374c08 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/authenticating-azure.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/authenticating-azure.md @@ -84,7 +84,7 @@ To start, create a new Azure AD application, which will also be used as Service Prerequisites: -- [Azure Subscription](https://azure.microsoft.com/free/) +- Azure Subscription - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - [jq](https://stedolan.github.io/jq/download/) - OpenSSL (included by default on all Linux and macOS systems, as well as on WSL) diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md index 1eefc118134..04055ffddd7 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md @@ -7,7 +7,7 @@ weight: 4000 --- # Prerequisites -- [Azure subscription](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) +- Azure subscription - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli-windows?tabs=azure-cli) and the ***aks-preview*** extension. - [Azure Kubernetes Service (AKS) cluster](https://docs.microsoft.com/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli) diff --git a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md index df08db4ca39..7e394d70842 100644 --- a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md +++ b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md @@ -64,9 +64,7 @@ For Kubernetes: {{% /codetab %}} {{% codetab %}} - -Verify you have an [Azure subscription](https://azure.microsoft.com/free/). - +Verify you have an Azure subscription. 1. Open and log into the [Azure portal](https://ms.portal.azure.com/#create/Microsoft.Cache) to start the Azure Redis Cache creation flow. 1. Fill out the necessary information. diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md index 9c1f63bd7cb..ce2e801f45c 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/azure-keyvault.md @@ -53,7 +53,7 @@ Additionally, you must provide the authentication fields as explained in the [Au ### Prerequisites -- [Azure Subscription](https://azure.microsoft.com/free/) +- Azure Subscription - [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - [jq](https://stedolan.github.io/jq/download/) - The scripts below are optimized for a bash or zsh shell diff --git a/daprdocs/static/images/sidecar-health.png b/daprdocs/static/images/sidecar-health.png new file mode 100644 index 0000000000000000000000000000000000000000..a8aa6819a8f46bb8daf4d9225ec2ecea12773977 GIT binary patch literal 82475 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

\ No newline at end of file + From 6f5788a9631000f351c261ab7825fc54b711ec40 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Thu, 15 Dec 2022 17:28:01 -0600 Subject: [PATCH 67/79] remove duplicate table row Signed-off-by: Hannah Hunter --- .../supported-secret-stores/file-secret-store.md | 1 - 1 file changed, 1 deletion(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md index b856aa1c4ba..7862d0b2253 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/file-secret-store.md @@ -40,7 +40,6 @@ spec: |--------------------|:--------:|-------------------------------------------------------------------------|--------------------------| | secretsFile | Y | The path to the file where secrets are stored | `"path/to/file.json"` | | nestedSeparator | N | Used by the store when flattening the JSON hierarchy to a map. Defaults to `":"` | `":"` -| multiValued | N | Allows one level of multi-valued key/value pairs before flattening JSON hierarchy. Defaults to `"false"` | `"true"` | | multiValued | N | `"true"` sets the `multipleKeyValuesPerSecret` behavior. Allows one level of multi-valued key/value pairs before flattening JSON hierarchy. Defaults to `"false"` | `"true"` | ## Setup JSON file to hold the secrets From 15cf08d0386a1fbb7f2b7413326a859cbdad1794 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Thu, 15 Dec 2022 17:39:40 -0600 Subject: [PATCH 68/79] update acquire lock dotnet Signed-off-by: Hannah Hunter --- .../distributed-lock/howto-use-distributed-lock.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md index 6cb9e802f96..e1cb80826cd 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md +++ b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md @@ -62,12 +62,14 @@ namespace LockService { class Program { + [Obsolete("Distributed Lock API is in Alpha, this can be removed once it is stable.")] static async Task Main(string[] args) { string DAPR_LOCK_NAME = "lockstore"; + string fileName = "my_file_name"; var client = new DaprClientBuilder().Build(); - - using (var fileLock = await client.Lock(DAPR_LOCK_NAME, "my_file_name", "random_id_abc123", 60)) + + await using (var fileLock = await client.Lock(DAPR_LOCK_NAME, fileName, "random_id_abc123", 60)) { if (fileLock.Success) { From 8fdb4ca78ee13f37c33059ad6a4befbc07a57fe4 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Thu, 15 Dec 2022 17:54:55 -0600 Subject: [PATCH 69/79] update unlock dotnet code Signed-off-by: Hannah Hunter --- .../distributed-lock/howto-use-distributed-lock.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md index e1cb80826cd..21dac83e2af 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md +++ b/daprdocs/content/en/developing-applications/building-blocks/distributed-lock/howto-use-distributed-lock.md @@ -149,7 +149,7 @@ namespace LockService var client = new DaprClientBuilder().Build(); var response = await client.Unlock(DAPR_LOCK_NAME, "my_file_name", "random_id_abc123")); - Console.WriteLine(response.LockStatus); + Console.WriteLine(response.status); } } } From 4f717d97a531242667bd49b7181fa5c33cf83d88 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 15 Dec 2022 22:19:42 -0600 Subject: [PATCH 70/79] change link for sidecar security (#3011) Signed-off-by: Hannah Hunter Signed-off-by: Hannah Hunter --- .../service-invocation/service-invocation-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md index eebf72b7a5d..0c4d3bc41a3 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/service-invocation-overview.md @@ -134,4 +134,4 @@ For quick testing, try using the Dapr CLI for service invocation: - Read the [service invocation API specification]({{< ref service_invocation_api.md >}}). This reference guide for service invocation describes how to invoke methods on other services. - Understand the [service invocation performance numbers]({{< ref perf-service-invocation.md >}}). - Take a look at [observability]({{< ref monitoring.md >}}). Here you can dig into Dapr's monitoring tools like tracing, metrics and logging. -- Read up on our [security practices]({{< ref monitoring.md >}}) around mTLS encryption, token authentication, and endpoint authorization. +- Read up on our [security practices]({{< ref security-concept.md >}}) around mTLS encryption, token authentication, and endpoint authorization. From 5d33c619759b05fb2e167417e5801050ea83c2ab Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 15 Dec 2022 23:33:26 -0600 Subject: [PATCH 71/79] update port to match go code (#3014) Signed-off-by: Hannah Hunter Signed-off-by: Hannah Hunter Co-authored-by: Mark Fussell --- .../integrations/gRPC-integration.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/daprdocs/content/en/developing-applications/integrations/gRPC-integration.md b/daprdocs/content/en/developing-applications/integrations/gRPC-integration.md index b241ca3bf1a..40b53b07384 100644 --- a/daprdocs/content/en/developing-applications/integrations/gRPC-integration.md +++ b/daprdocs/content/en/developing-applications/integrations/gRPC-integration.md @@ -214,17 +214,17 @@ func main() { } ``` -This creates a gRPC server for your app on port 4000. +This creates a gRPC server for your app on port 50001. 4. Run your app To run locally, use the Dapr CLI: ``` -dapr run --app-id goapp --app-port 4000 --app-protocol grpc go run main.go +dapr run --app-id goapp --app-port 50001 --app-protocol grpc go run main.go ``` -On Kubernetes, set the required `dapr.io/app-protocol: "grpc"` and `dapr.io/app-port: "4000` annotations in your pod spec template as mentioned above. +On Kubernetes, set the required `dapr.io/app-protocol: "grpc"` and `dapr.io/app-port: "50001` annotations in your pod spec template as mentioned above. ## Other languages From 24417b1bcaf8701711c3230b551facbd35e38e95 Mon Sep 17 00:00:00 2001 From: salaboy Date: Wed, 14 Dec 2022 08:38:46 +0000 Subject: [PATCH 72/79] Small suggestion to save resources for local dev This is just a suggestion, feel free to disregard it, but I found myself using that flag all the time for dev purposes. Signed-off-by: salaboy Signed-off-by: Mauricio Salatino --- .../en/getting-started/tutorials/configure-state-pubsub.md | 1 + 1 file changed, 1 insertion(+) diff --git a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md index 7e394d70842..a262871011c 100644 --- a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md +++ b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md @@ -46,6 +46,7 @@ helm install redis bitnami/redis --set image.tag=6.2 ``` For Dapr's Pub/sub functionality, you'll need at least Redis version 5. For state store, you can use a lower version. +Notice that by adding `--set architecture=standalone` create a single replica redis setup which can save memory and resources if you are in working in a local environment. Run `kubectl get pods` to see the Redis containers now running in your cluster: From 6411364a1782251afe4d08be9eeedd94fd8cff88 Mon Sep 17 00:00:00 2001 From: Lenshood Date: Wed, 14 Dec 2022 11:40:15 +0800 Subject: [PATCH 73/79] fix broken ref in distributed_lock_api Signed-off-by: Lenshood Signed-off-by: Mauricio Salatino --- daprdocs/content/en/reference/api/distributed_lock_api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/api/distributed_lock_api.md b/daprdocs/content/en/reference/api/distributed_lock_api.md index ba250e3ae09..f7927021882 100644 --- a/daprdocs/content/en/reference/api/distributed_lock_api.md +++ b/daprdocs/content/en/reference/api/distributed_lock_api.md @@ -21,7 +21,7 @@ POST http://localhost:/v1.0-alpha1/lock/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component schema] ({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component schema]({{< ref component-schema.md >}}) #### Query Parameters @@ -95,7 +95,7 @@ POST http://localhost:/v1.0-alpha1/unlock/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component schema] ({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component schema]({{< ref component-schema.md >}}) #### Query Parameters From aefd25594d6b669cd7d861bce5c671514e955245 Mon Sep 17 00:00:00 2001 From: salaboy Date: Thu, 15 Dec 2022 08:10:44 +0000 Subject: [PATCH 74/79] Update daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: salaboy Signed-off-by: Mauricio Salatino --- .../en/getting-started/tutorials/configure-state-pubsub.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md index a262871011c..64cf08b469f 100644 --- a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md +++ b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md @@ -46,7 +46,7 @@ helm install redis bitnami/redis --set image.tag=6.2 ``` For Dapr's Pub/sub functionality, you'll need at least Redis version 5. For state store, you can use a lower version. -Notice that by adding `--set architecture=standalone` create a single replica redis setup which can save memory and resources if you are in working in a local environment. +Notice that adding `--set architecture=standalone` creates a single replica Redis setup, which can save memory and resources if you are working in a local environment. Run `kubectl get pods` to see the Redis containers now running in your cluster: From a21176e7b0a24564efacdcddcdecf505e93c5f24 Mon Sep 17 00:00:00 2001 From: salaboy Date: Fri, 16 Dec 2022 08:23:35 +0000 Subject: [PATCH 75/79] Update daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md Co-authored-by: Mark Fussell Signed-off-by: salaboy Signed-off-by: Mauricio Salatino --- .../en/getting-started/tutorials/configure-state-pubsub.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md index 64cf08b469f..49d2522c2f5 100644 --- a/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md +++ b/daprdocs/content/en/getting-started/tutorials/configure-state-pubsub.md @@ -46,7 +46,7 @@ helm install redis bitnami/redis --set image.tag=6.2 ``` For Dapr's Pub/sub functionality, you'll need at least Redis version 5. For state store, you can use a lower version. -Notice that adding `--set architecture=standalone` creates a single replica Redis setup, which can save memory and resources if you are working in a local environment. +Note that adding `--set architecture=standalone` to the `install` command creates a single replica Redis setup, which can save memory and resources if you are working in a local environment. Run `kubectl get pods` to see the Redis containers now running in your cluster: From 58902c637e8632851527859a8e22ad536f82fa4b Mon Sep 17 00:00:00 2001 From: "Renato L. de F. Cunha" Date: Fri, 16 Dec 2022 22:14:34 -0300 Subject: [PATCH 76/79] Remove mentions of backoff from rabbitmq docs (#2978) * Remove mentions of backoff from rabbitmq docs In a recent change, the rabbitmq component dropped support for backoff policies. This updates the documentation page by leaving those out as well. Signed-off-by: Renato L. de F. Cunha * Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: Mark Fussell * Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: Mark Fussell * Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: Mark Fussell * Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md Signed-off-by: Mark Fussell * Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md Signed-off-by: Mark Fussell * Update daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md Signed-off-by: Mark Fussell * Add @ItalyPaleAle's comments about differences in message delivery Signed-off-by: Renato L. de F. Cunha Signed-off-by: Renato L. de F. Cunha Signed-off-by: Mark Fussell Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Co-authored-by: Mark Fussell --- .../supported-pubsub/setup-rabbitmq.md | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md index d78e7fc85c4..aaf5143e7fa 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-rabbitmq.md @@ -40,12 +40,6 @@ spec: value: parallel - name: publisherConfirm value: false - - name: backOffPolicy - value: exponential - - name: backOffInitialInterval - value: 100 - - name: backOffMaxRetries - value: 16 - name: enableDeadLetter # Optional enable dead Letter or not value: true - name: maxLen # Optional max message count in a queue @@ -75,24 +69,22 @@ The above example uses secrets as plain strings. It is recommended to use a secr | publisherConfirm | N | If enabled, client waits for [publisher confirms](https://www.rabbitmq.com/confirms.html#publisher-confirms) after publishing a message. Defaults to `"false"` | `"true"`, `"false"` | reconnectWait | N | How long to wait (in seconds) before reconnecting if a connection failure occurs | `"0"` | concurrencyMode | N | `parallel` is the default, and allows processing multiple messages in parallel (limited by the `app-max-concurrency` annotation, if configured). Set to `single` to disable parallel processing. In most situations there's no reason to change this. | `parallel`, `single` -| backOffPolicy | N | Retry policy, `"constant"` is a backoff policy that always returns the same backoff delay. `"exponential"` is a backoff policy that increases the backoff period for each retry attempt using a randomization function that grows exponentially. Defaults to `"constant"`. | `constant`、`exponential` | -| backOffDuration | N | The fixed interval only takes effect when the policy is constant. There are two valid formats, one is the fraction with a unit suffix format, and the other is the pure digital format that will be processed as milliseconds. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". Defaults to `"5s"`. | `"5s"`、`"5000"` | -| backOffInitialInterval | N | The backoff initial interval on retry. Only takes effect when the policy is exponential. There are two valid formats, one is the fraction with a unit suffix format, and the other is the pure digital format that will be processed as milliseconds. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". Defaults to `"500"` | `"50"` | -| backOffMaxInterval | N | The backoff initial interval on retry. Only takes effect when the policy is exponential. There are two valid formats, one is the fraction with a unit suffix format, and the other is the pure digital format that will be processed as milliseconds. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". Defaults to `"60s"` | `"60000"` | -| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"` which means the component will not retry processing the message. `"-1"` will retry indefinitely until the message is processed or the application is shutdown. Any positive number is treated as the maximum retry count. | `"3"` | -| backOffRandomizationFactor | N | Randomization factor, between 1 and 0, including 0 but not 1. Randomized interval = RetryInterval * (1 ± backOffRandomizationFactor). Defaults to `"0.5"`. | `"0.5"` | -| backOffMultiplier | N | Backoff multiplier for the policy. Increments the interval by multiplying it with the multiplier. Defaults to `"1.5"` | `"1.5"` | -| backOffMaxElapsedTime | N | After MaxElapsedTime the ExponentialBackOff returns Stop. There are two valid formats, one is the fraction with a unit suffix format, and the other is the pure digital format that will be processed as milliseconds. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". Defaults to `"15m"` | `"15m"` | | enableDeadLetter | N | Enable forwarding Messages that cannot be handled to a dead-letter topic. Defaults to `"false"` | `"true"`, `"false"` | | maxLen | N | The maximum number of messages of a queue and its dead letter queue (if dead letter enabled). If both `maxLen` and `maxLenBytes` are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit. | `"1000"` | | maxLenBytes | N | Maximum length in bytes of a queue and its dead letter queue (if dead letter enabled). If both `maxLen` and `maxLenBytes` are set then both will apply; whichever limit is hit first will be enforced. Defaults to no limit. | `"1048576"` | | exchangeKind | N | Exchange kind of the rabbitmq exchange. Defaults to `"fanout"`. | `"fanout"`,`"topic"` | -### Backoff policy introduction +### Enabling message delivery retries -Backoff retry strategy can instruct the dapr sidecar how to resend the message. By default, the retry strategy is turned off, which means that the sidecar will send a message to the service once. When the service returns a result, the message will be marked as consumption regardless of whether it is correct or not. The above is based on the condition of `autoAck` and `requeueInFailure` is setting to false(if `requeueInFailure` is set to true, the message will get a second chance). +The RabbitMQ pub/sub component has no built-in support for retry strategies. This means that the sidecar sends a message to the service only once. When the service returns a result, the message will be marked as consumed regardless of whether it was processed correctly or not. Note that this is common among all Dapr PubSub components and not just RabbitMQ. +Dapr can try redelivering a message a second time, when `autoAck` is set to `false` and `requeueInFailure` is set to `true`. -But in some cases, you may want dapr to retry pushing message with an (exponential or constant) backoff strategy until the message is processed normally or the number of retries is exhausted. This maybe useful when your service breaks down abnormally but the sidecar is not stopped together. Adding backoff policy will retry the message pushing during the service downtime, instead of marking these message as consumed. +To make Dapr use more sophisticated retry policies, you can apply a [retry resiliency policy]({{< ref "policies.md#retries" >}}) to the RabbitMQ pub/sub component. + +There is a crucial difference between the two ways to retry messages: + +1. When using `autoAck = false` and `requeueInFailure = true`, RabbitMQ is the one responsible for re-delivering messages and _any_ subscriber can get the redelivered message. If you have more than one instance of your consumer, then it’s possible that another consumer will get it. This is usually the better approach because if there’s a transient failure, it’s more likely that a different worker will be in a better position to successfully process the message. +2. Using Resiliency makes the same Dapr sidecar retry redelivering the messages. So it will be the same Dapr sidecar and the same app receiving the same message. ## Create a RabbitMQ server From b73428716d0bbcbea7feff4d97c12638e470091c Mon Sep 17 00:00:00 2001 From: Syuparn Date: Thu, 22 Dec 2022 00:36:27 +0900 Subject: [PATCH 77/79] fix description of Redis maxRetryBackoff metadata (#3020) Signed-off-by: syuparn Signed-off-by: syuparn Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> --- .../supported-configuration-stores/redis-configuration-store.md | 2 +- .../components-reference/supported-locks/redis-lock.md | 2 +- .../components-reference/supported-state-stores/setup-redis.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md index 2b853a1a549..61bc8427302 100644 --- a/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md +++ b/daprdocs/content/en/reference/components-reference/supported-configuration-stores/redis-configuration-store.md @@ -49,7 +49,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | redisPassword | Y | Password for Redis host. No Default. Can be `secretKeyRef` to use a secret reference | `""`, `"KeFg23!"` | enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` | maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` -| maxRetryBackoff | N | Minimum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` +| maxRetryBackoff | N | Maximum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` | failover | N | Property to enabled failover configuration. Needs sentinalMasterName to be set. The redisHost should be the sentinel host address. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/). Defaults to `"false"` | `"true"`, `"false"` | sentinelMasterName | N | The sentinel master name. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/) | `""`, `"127.0.0.1:6379"` diff --git a/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md b/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md index 3299f6c8e51..ca6c2b54b99 100644 --- a/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md +++ b/daprdocs/content/en/reference/components-reference/supported-locks/redis-lock.md @@ -84,7 +84,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | redisUsername | N | Username for Redis host. Defaults to empty. Make sure your redis server version is 6 or above, and have created acl rule correctly. | `""`, `"default"` | enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` | maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` -| maxRetryBackoff | N | Minimum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` +| maxRetryBackoff | N | Maximum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` | failover | N | Property to enabled failover configuration. Needs sentinalMasterName to be set. The redisHost should be the sentinel host address. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/). Defaults to `"false"` | `"true"`, `"false"` | sentinelMasterName | N | The sentinel master name. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/) | `""`, `"127.0.0.1:6379"` | redeliverInterval | N | The interval between checking for pending messages to redelivery. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"` diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md index 3c323b0745f..12c4de8da0a 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md @@ -97,7 +97,7 @@ If you wish to use Redis as an actor store, append the following to the yaml. | redisUsername | N | Username for Redis host. Defaults to empty. Make sure your redis server version is 6 or above, and have created acl rule correctly. | `""`, `"default"` | enableTLS | N | If the Redis instance supports TLS with public certificates, can be configured to be enabled or disabled. Defaults to `"false"` | `"true"`, `"false"` | maxRetries | N | Maximum number of retries before giving up. Defaults to `3` | `5`, `10` -| maxRetryBackoff | N | Minimum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` +| maxRetryBackoff | N | Maximum backoff between each retry. Defaults to `2` seconds; `"-1"` disables backoff. | `3000000000` | failover | N | Property to enabled failover configuration. Needs sentinalMasterName to be set. The redisHost should be the sentinel host address. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/). Defaults to `"false"` | `"true"`, `"false"` | sentinelMasterName | N | The sentinel master name. See [Redis Sentinel Documentation](https://redis.io/docs/manual/sentinel/) | `""`, `"127.0.0.1:6379"` | redeliverInterval | N | The interval between checking for pending messages to redelivery. Defaults to `"60s"`. `"0"` disables redelivery. | `"30s"` From e17299616ffdecdd97a7eaf0392aeebbfb76fb63 Mon Sep 17 00:00:00 2001 From: Arjun Devarajan Date: Thu, 22 Dec 2022 16:14:54 -0500 Subject: [PATCH 78/79] Add lightweight analytics pixel to dapr website (#3025) This analytics pixel provides high-level web traffic insights for project maintainers so they can better understand how docs are being read and used. This pixel does not use cookies (or JavaScript at all) and is GDPR-compliant. It is a clear 1x1 pixel that won't affect page rendering or load times. Signed-off-by: Arjun Devarajan Signed-off-by: Arjun Devarajan --- daprdocs/layouts/partials/footer.html | 1 + 1 file changed, 1 insertion(+) diff --git a/daprdocs/layouts/partials/footer.html b/daprdocs/layouts/partials/footer.html index e159a171d8d..a29a0d6b762 100644 --- a/daprdocs/layouts/partials/footer.html +++ b/daprdocs/layouts/partials/footer.html @@ -24,6 +24,7 @@ + {{ define "footer-links-block" }}
    From 3ce9862a4b3d33fa5bc9ae111fae3e6b0bc51881 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Tue, 3 Jan 2023 10:24:06 -0600 Subject: [PATCH 79/79] fix link Signed-off-by: Hannah Hunter --- .../components-reference/supported-bindings/commercetools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md b/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md index 6ae767d2567..2f5daaed2ec 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/commercetools.md @@ -51,7 +51,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | clientSecret | Y | Output | The commercetools client secret for the project | `"client secret"` | | scopes | Y | Output | The commercetools scopes for the project | `"manage_project:project-key"` | -For more information see [commercetools - Creating an API Client](https://docs.commercetools.com/tutorials/getting-started#creating-an-api-client) and [commercetools - Regions](https://docs.commercetools.com/api/general-concepts#regions). +For more information see [commercetools - Creating an API Client](https://docs.commercetools.com/getting-started/create-api-client#create-an-api-client) and [commercetools - Regions](https://docs.commercetools.com/api/general-concepts#regions). ## Binding support

VrFUT?ecy@wXy4$mGu|!U)p+oOekGi zQjbZjG0@i3p znT3ZF)<~jIZ(V9E)+!-FSBN+)3rXHe`VycdRONRty5;5G1OGswCzWf&Rkx72BDEnVQ*6F{2W)`VAb*k1?Yh37`t88<@PHJ#r>g0^rmUtW+ubf3gc*& zq@6S6>ccOtmP!oI@W3K|p}^mAC(g4F$>faf&uzAT14&dS{$A?|QzXKkM8Vpw9q-D< zr1JFCTxt;VS&$Cg6>+Xy=skaI5u>I*kwMnD+HAZjCAqsCqW3Ml>OtlzW2N7T6SB-I z4;8d;2jn}noK&6FX!Ud6w+@7*?);Fcn+a*zXvx@D#_li-)_Q5Dh0EtduW-wVDDflI zZ+G4%8~s4X#1~dNrM0{n7mo4 z-cxC7%$C?J;(_Rx32Dy1ejFjb3zRuesFwYT8uHqZj$~ci#ehMk(+f%^pCryJ$H*(F z)Ge%+oLMA}RmI@@x%B0)Cs}J%?rDddps13U7r`s9Job8UWGMRXAof;}dJ_9K0Ih|0 zhIs0@qvx1}zxrnPx~)bds*a}Hfw9JxH0pcDB>M7b>+wxz6b7aQ>K(DxOsT^)JF>rNOyj)|NC*gFY_p4)H*`u%Dok8_fkHFNt<0NXR6+ z3@Wp!$Wjlu)zj(!Es=l`TpNou5MO)p={$s=zS~&$Muxho)5J%9SKkN&^7)YDuFfFh z<^7t4^fW8-q;%&WY&4yXkt;WySuyK)oEn0U@EwQq&0qhSvG#DOZ<;qfF~NDj-kP8?pzRvviY|-1Sst#{Z^)2&G2WRjTeQ?n$#BtIs)dH<&`Tj^Zbj1E zT4{2}L`=xjj6>!XI89je=8iOY9OWNJpR1us5kKT#;3-5?cP`R>6MO# zN-m)6SmR2~@$d*~#--#JpdL)3uJ~O~hi7tqrSU5`^U?iI_`TGXO1~FfCXHqp`R)_b z%;!T^2zyKcE*Tv$$xy6GsI z4|t(mDci))23@N2i3c~5%053#UX)!O$;-kI<;9GEZDnpvVlWS(68$^ZpQ(COG?JMF zI8rdG`*6{IuL|~Kzms=4PP$8GzoLQ9V$3|_wJN1SK`%x?BQOs|AEV8}eUF2&bNVC+ zZI2>TWRPD{0i^6%Ddb7BZnc+%VviD|C!-b^G~+@EZX^b|Kq9qiUmdKx+ue@E3Sm;K zRIT5yC?VjHvD?-A+?v2Wuk>*eTCx8%>rAJrrLH4u@^E^Mi)4c(k2xDrxP}9fm(}uG zmF$vnL;Po2eAkXMS5*3tiEMhgZmC~TjM~7oSFMHp?R1&El!Irqe&O1YK@J*^IA@NT zglj3DkF@Q~Y`+t>BxlI=4GsC^{KLSnI;M4BQASzCX4GywNYuW>nB4pA>FmSYJ$~zN zVzl7sl&E*m#60RJf&l@@k!liKQL5K4#x#WmKP=_xlxp8QixI(e1xQ8Dtle4Rr4jL* z^0?}}#}&lE@I;RZ9>AJK^{pd)u(lvM&lhUJRd#h5zEhY$qXrcoD3wI7(}!6jXarN1fJ-un zvsXu;28$w27^qd4SS2zGGsHnm);)i@Y9G%o<4amRIcz_cxjXe;EQ|PceT>sQBHKG{ zrGVk9w0;Og{Dxr@JcLz=uW&4AbAK>p^OkG;?t$C6caGyP`;RshBf4X%J6Qi99tI>T zyS~jIpA1QCtdhUF=Uq49@gVV&?lV66HJeJuRza}lu0JknZ}Y^J0mRF0Lu^Kw?%|s8 z{N!cvpZIZ>tsVZ|?{_9a(829*t*Y+Wn7Y{XS+p{HiGFj8*o{Ug22`MCWXQ^sd97!# zkZ-{9ODWfm&(SVUb>1vPFutl(nmn8YkyRHm@DkUzA8ydRbw=v2)=IDM$<&EMl?PQlO9x`zvlhauo3ga{Q+JA! zspuBvN^ym7<1dh+%v(v;%_Yt5rbihx8)k_wkQMwg z;z|i_E(mFOTf)&&sgR~SJ6<>-D11kFEAfL^@D32MVKfIsX{htwxG1C3_)fDJ<#Y6j z1pFSsDFc+>HO6Xj^`O;HqYkqoWA;qnw7*EaAEhmfLsW3gTwU$ur7zPr$C&)6I|;mJ z0u|(i^v_ao34(3uqUj~8rrx{7M;1dxIl~Fk9ArMh>^E3#nShRIH z(UmuT@F<04OmMe>dFWcnxWmz7huIOpI0mGRf2_2ul%mqdHx#SZXEvAO7vy>c!dY_z z=TfY*T8BPHOcANb_0ff6b{0od2RaXMTRGg`v9UQ5h`29gvr=q`Ce6?EE0<=^%EAXZ zpO4-iI-|W;x{AA}*&CxsD;j%b$JG=$RwTu7YfQ{idG~QTDs?jN^3BYnkK*0%u9$nQ zZWEjN`+J_wR33@VG`^d&aIA-%T$!1crhL%C###i4V2$??)jVqGUC}mGN^s;36RFbr zBS7vUpHETOT<}|)c4sB8(_-Fl;nLh%zW{z_N9a<54<7=jR=fQ$*@mHxp~{1j`p@$p zCgoDUGoil-?j;J>2xp`e~RVVF2kA7Zz$d}%eX(mFmGG2Owz7E2tv%!Nas0=BP&D|B60)?S6yj^ zjV}s(CWWrZfIgcsUHQE9^mUw70)t*-p8x0`cCeXdQ$WreygEN}PmMJNHkRYP>sRoW zU_++|Rj)8VJRgNZOWQE(09Qv{eODgY7y7d`wx>Wh!admnkf`m5f8*+#V{8y3GDnZ;q-UYTCD1QO`}4vNNP3%6AL1Nn9jcKBfcZIOj9?7&j;l<)@MWU`FAEKT38jm z>->_9Ga2R&<2(p^7ksX+B)=@3;#d&$)_WTOR^rpeopNS$592t}$`P%XdVw;v)M2bXS6LXj_b4T7K~9{|y+1K~yAu64T>2f;_MchNpA0goz) zWsMFY`$v^ow~ae?w#6pITapuayYyG+c9EkwFQKjT~WM#^I$6R5UHqU?f#`8jqKVg(y5q{8}fKYdxf6IgL|U&Cj5W!@qLU$^X8^W4_q?(Y2mZ~w$t1? zhGw-i$Tg-R&=l&X(>2Jdebhbdh_PY)Tt~(>w0_(YnH!0nK63w~O0;77EREfJ;RUYQpvTS(bgSxH|CJn#^2f0%6nY2dv58 z!SQY1(bjhi53>;8Cubk(N3YGe>b>$!xV<4+xz7Y5IvaqKpxE;gOD4k5#kA{(YcsM4 z)-D9MCqtfshY-_J9rac(#{4tfqmtTmXLa(Shl&JR`@Waht+vN|F5U_wjt_Hv)0T8G zgyc}GXz>PvW@{s|M)^LnZt zF?phRGZ&azIU#h^@Lcfhn#s#7p`Vjk1{{*s7<87jZt+)XGdUp*SY~F#wepHc?pU?; zwxAS;&P=x!LME)zfM7BE7N4`%4PHg-qwQtEY=hrj9k9{`c=YqLgllk|S2hV-W}4P_ zpNHUFfivqdBuX-iE4yu;BH3<^>tE^*%abmz6o)SR1P#9Zz!&-U${2?!^DA;!7RQ_+ zVw}s4wc2jwgI7-(oD!d!4#imTp_{f!0yUhZxh^?IS4(H7x+e#68xeM#fLVEuv78Jm z)g>kVmem&@Dx1tsLG{xKKFuJ_eW`5B3ow^C*Q&PL?t0q%a}LW6l`cClZ(2U)A)Kl0 zjyJh_3)1U_Ng~MPllGGrw_8V%Zc!cjQ`tebhbqwc{;;%J(uABM-j$=k7@Eod0MoS(Fu3uN~MrIBg0u=qOnBDV3;K$q84q$O7n2X(69A$ir+qBnc1Nl$A%pNni z>rpK<8CG#HLz&W{7_`VsmeyuS7{x6k=>1fp8Z`^sXAx>1+CqJt)$Th~UvI9Sr4F9iE-5tU;kn zcYD@yqx`numvoTOZ0#$)D;LNv^|+sc7L=ogdtF(p)+j&QSG`x*DsCnPBPTn|aW!!K z!0}5yXo?$6t8yuZur`+CpME~iv1LF>=<3O9NysA`BG z->XQVWTWi?xin@eY`nD8bza6|!?4hA_|@n_XZsPJ%xRsw@Knyg??KDHL@VZli1K8e z3`&eOI4sTUktuujmcp^wKtk{1y+^LnqEBgQvs+>c;^J$cP|f_p3J6iYXFp$ZiqkWt&^ zD#hp;Z4tqz>8O~*kiAT`>0IYM#`z+or@rf$n>iUQG-;Jp!9gXYr40|Vm1ORU0+J6XuuY_oWCqyTuTPkiG?5=chpp!)Mo z(X|R&i#V2~u_GSfeYFD83+P$!4z?zi@0=Ys;d)>(%Z?;;u8UDU!zv`<_Vd@KBE9RA zUw>AM4;d<|*9xn$**JBdD$w80bZZ;;kz+_n5@V#AY8vOhZ4Wo9E0}USUUB5eSjO(`I^^C2~!nb>%hp#EX@tz=+X4cOsudC@1E+*PnyMYd{0VFqO<_Io+T#N!mFd{8tO ztJwQG;@YYbOSFnbj^6nBg*f*5&0Gblh{gey3pz9$0@0pr{ZrSDW)fibHCKn9iSC#_ zyS;+zFbmaOr#XA|Kru1Q^TeT#C1PiHF-r7E-i%1DyW{ZiNy}ck;EE}dD6TqefoS$9 z(RZ`L1!=~9IINLRD1{!JF%asKbDW(nHmb(N>8>)JP8cz{L9qBbJvBBc7dy|WZuCRY zLyyW)tvonYZ21iz^UbP@It1aKM7{}fI;k$tscr^5)0nfnIzNfdTlr=tF}eN5&jozm zxB#R-sUVa>ba$REGhQcHEUkq)D%QhC#BPq&ilhA|TWww@zNF`Ete6-iqeNgwhhDcg z#|HXApTV5!bt-I?{tWrmC|Zz=YT(fjd(!!}pVH$Owvzkx*q-kW!cV1HM8F6qv1v;? zc3{uiu17D8nC)kl!BR7!mU8E#*UN)m^M6J>nY5rgl#yc z=$wPuy3_=d>ND$2No$Qy5c7(F0IzC+^foI2%M!<=z?!sechi=%cj8Bu+~8Q*)dp-E zYJ?b;e>gh1D{1A>ix+@&`4Vj0G}sC#QdNM+7aNcHpQ8_`nN+Dv!r?m(MI$?(;`P zYn@%j@~=e=b4W>?o_}8*dXI0js`SFD@5aS*#ZGO9ii08>3-a0chN%gsEL{Fan zi=Z8S-in08ca1NyYKw*4@OaxBQ61^TrON6iucF7}4pZ9#Z36=c_Rn`7lnx$@GjrDX z?~d|QC!6BF<2Jug(UyP~tq@#uf~yJ+pqbb^hbQkjH;R}@tz?c7F61iwY?4)f5K;wC z+?11h(#VxBP=vo#FE8f^3!4-$M+|aZ3X=LbFV${SX~AHr@r9i&C%^D4jjXFzp}&|V zLf`i?7)FyHWH0L)1d~>oh*%VN!}TY3@)*KIMG_q&9l;v@s^d&WxxPo1B|`DUaj&Hk zdSCnL>ZhdvV2CY0WS6^Sc-;gYDmxCg+b`C?HRae^H^#Vd_3fNk&wNmEe#T~EVvvE( zy$%|ztaA-MN^|b2(06f{0F|=Gyu0^LR2#4GU=!DU4Fd=t@m@F0w2JD84&^5ULPV#~ zFHI;G9xB`8rh3)P%qCaP?#mc-*{#4rV=K&hcSU6~vMe8tOuh#uSRD68eFG|z=L)`w z0>5!;K&q3yxr`02WZ?p9eUg}s%+249oUHAYI+X|iDfO)m+xgRjZA92^X&60z_ns1E z`+J(L40LMy*t4o^<9f5ThUN}_BiI8>>=Lp`zp?tOdU0|(Ypn;xKJ!4u#O^qFY#;@V z{qTwuIb~X1+H>k)h~{a4`%qY4a7+UI{n%Tho1ipwLjIzh)T?4??gnZD*Ws^90-EGI z@T${!8_HX$>S&+%vumuS1;o+hAG35E?4!?5+|uIzX)*ihehYzpDJ9f2u2F#h?DpN7 z%|4n9)6Yi}vsG#a7o_{}PC1*4XTGmCoZTI%%G>qxoJk&mbY>xv7dd~F8rk_@NR zqtR7!X5{L57tjm!_j}QD5R>kSc|3vXUAj^Y1Md%XT3U4x^TF3f>e!05Tyf+>uL8ag zl}=xF`mcknT;2B37^SS>40(_{&e)hXAdP2%FT;;D^TR3kPA3lh55Q zj(Om`m%X75jLZRT;iEgR(4*-g#|Bh^8m%bQ!YUl`;Ql_kL_w0lauu-w2*)0`~lHydWTWbOnn*4s`U3bd+WtO{akC6sRSuL z*6slLRwF792^ZR>mxF#pdCI(BIcG1#vK*Y;{~Y?T2)hvuCyK(px@jfN{)8K>%x6gH zf0kAXs$5ms_VeQ zcaKlc?TiAL5yCtqr_=WKB~W|kg}x9M7!R3|8lNZ1mzDFF%VSx767legzCyY4nzjbG zdwVO&*3FSx0KTD>0i_}VrQSMLDpyGx%`S4Ox#g0p5$`v^6mRwTTMB4*H!=O`z1qRS zvIQrP3kDPrS=O6XvO$EV7#(R;Vq*X*UH$u^2?+k9?U>Af75~eJv}+1Dmf-%Lcta%0aBSm*ftP zjba+v$DXmhOYU;!N@%A|PHsNp_*u16%(0)bY49KT%$QbB$}Pmj-pz z3)k&_nBVxm+r{VGA?*d+=oKdW8y7H`i<`R_e_RxsoyaQTqu8%Ls|uf`+Hz+9L!wo0 z0fl|kCUH6Y&XRkU=SE(`X~RXxNC%5gUF z@giAcr@k{??Am209y1DQdmq;(W)iN2Cs4yHxa@#a7Uh*PX{rh9-muPAn%ymB6s}~W zmv}WA-OA&}0uBTINgpM^a)cF=UlsJTJFx_P3yuZ~rYxiec-Of2{bfDEow{|IG&BJ; zk>_aXL(HDCket6Z{FTjY-zTs5CG~TG$w9L!md3Q^gfQ;d77C(=r?YQypm; z{Oemk5r^bA1|-3WXMWqr00mcA>Q+sJK0nc(bAqlN+PB3bVIR^AGUJagI%{{$?kTnu z*_tztJn`!OH8x{mU7wfTyr>g#JEK9WMA7>%3KCwh2%x1+2hR6p;Pz8T!)C7>ap6O6 z-|eReF3CQ_%$ob;sFub@s`gd1@SvFN>z<4V8ipfpDO^#IZv)hJMgA*zY4VPcLl_&D zLCXSipt|eKjkz{v`Z~O7+7v8|Im6~RlL{Jd@7V`Hble&|Y+MVL_EC{z(tr^U20iSe z`&>#I49j?-j#v9DPZp{sAd zc%|IjKd=VXn6Yd5?5d34_L^%Esi#GL5bobD|MOtBhjGpOUeOiOchh678k`@|^ZWFM z56$PH+ zAul@G+>+rtFSeI=tJ@;v=i}20el}_|ABK}@54hAxvw|Tv!kK2%xmhwuZ8cY7&2D;7 zQf+6fPj27kWT3p-wlU^C-nrSeP<1jU_Kp@aOV<^lg^u7LjegU;Df2)sgkKlodD143 zH%&3sf9L3~S$(pT{1TmBB6DZNbXdM%d*E6YL$L;|_k3NPUPI1KAGScx+9A#>FJ;aV zL3qd~w<1|voLT<$XE3to+tih~V%tjRcQ}wLUrnAXIUz4FS&wH$OkFMeR$?i12|4vp zq&&2$%QS!tqGOjhYS+ZX=n{*T%Z z)RO{@)mr@At71e!Pg5FTeq3*gORf*4tB@M_kvHZM&wQkxMWl=-07NDeW>Hacn5rP- z7%Mp~g=($|8EMDlOt4s)oGvA)jo9~1vdvKJCTGm=CzrQ6CYEZVtxC?aw)%1jbDHD zqN654k;wjDmmd_%kct;1ZI`fLh^0z$YqShqkAbuUgk4( zH7-I&{qljd>KvbxRa(Sy;AdY2Dj#(c0Xlp!v>KCUB%?>u?8RnM3pUzSMR9JWOH?CY zZIC)eUx_dM!BJ$2)tb5DGWlMu0@6GQJ~hUnUb9qt^L>Josab^=V%^A~vs&v&S`Q7U zIgPY9@^%j=8qS$TVtyT_ovH=yR=~x6mA-CX?|a}OgblPRC==sH4@r|`?<#ul?TShg z<9#-Q&t}>y#2P92Qr5g+iM+d>VnFS_ElqE62tO+NjyeBgSj@tmmSY+!+|4B%r~n%& zS?hmtqwD7iT$S>T_+|Ina-U6`Iu$>fartZwSa26Ma&fVt_*JEk+^|fuc1S{H=oDtE>FD5j0ECOIB-FjS(X;+vFS7jlS9C-~e48LBdd77SQUp z$-oCgdT0z0Pwq}ix!QlpRE~J;J%z}`WoY50ynCOzh6E!Lc{Oc89kPepZbU5Sxg{(I zp;BRHxyJDia>Tx^S&pwb6uNHe`fXK@H-D7F+;W4DxLEE%O2_&gd8@Seex^J=iOsa3 ze@JlGt=LUL9Mi0U8*VeQ&hzIvF1nWseYWJQNQX2!pyWu2VHYY(C*cwwi_R@ahv}d{ zOR+jYMd;HFEI-8iBxCoP84jibwF{n}UD4bUKjPR{(#7t?gOEV0K$K0Pb>0f2K;irQ(bIhYMll_s``UI(qrY4-O_uY z#WKFp5#>+65ASM>TDc(JxYIvg6a7NEIvVV`rd2TUC4w4glPh4LGqJYqdF#6LoPWgW zD_UuI=^nY8FkAs+udD(unu7?0jW1_iCJhF!l181#Ch!i`Q&1p(|>8|;KS@p&hPSi>hR3n)Q&TMvwejS~a zR+CWQMe~&-FM>>3cOOGfontJp@P`qzzTDl-q)^*3g;q%^Hi5jNT z!cy$M-O`&<(Ea_YDT+OG7n!CfCZlucYGJ+2foWTqUB7u?%RRSJRCNZ+p6|EuO0_tB ztYm@(erwXG!xF1Ebsk({T7j2(F^hJ>6h7nGPKg+QnM30~IUlMh{YR-1!G1?ZC;iZu zDIg#+|FArghe^yi^Afy*@QEAuPOND}c0~UYdeIhxU-H%aV&Y01YP2oZ`kD@Ez`gv_ z11@ZbRi}!zPOUhKg3O?|usxCKUpkhHi&|-yv6}y?@2CM8BJNj)_~7IU!_Ur9(0m*Y z7nV1cHCNsAm7EglvIMT)III5Fqw&zL>O>lKfJ=WS$yv#dSg&k#r63UZtSAxaLa{r_ zjz_X`B4)r-Q+eV?!s=D)31_SE7ssax9+yOOYc5?)7S#y(DA!Y@hH_iD>ims{A$5N8 znADbXqc{DkFhtxSz14fd2Q6f>0goav<$Py|>*Iu=NebFS_wSht&qBh_EjJZ2|ExSw zr1cngsRMbg_td;yb$W*QPs?2SqP(!Bk|pg4#FtgtpNh#-xv}CD0{xFU9X}Nc-bzC= zA5^wpCgIqjE>cfn)XF`hcbI)E<0xjH^r5tiH)V|{*EK30!_Em2xEk%!SM(#G3F&h~ zlZNlNe|m>8{1MoH#C%@}6jk8JrJGy%|Fw6WQB7rA7%)->K@DfRp(;0~#KOSb@Z%U*0yLj} z(qZx#a!8!|V&5eMAthIgIphd_YwoEdK7gS0-f00`1UvfU-Ge_UM%3U*O985ajbe;+ zzqCM*3_LhI-zn0wB7C8#x_MUtafuxk6i31p%$G9E&qA%e6;f_@;jLa$raGsVeq)tf z&)Qo1uyy7cj*y;p*Tca9eZf0xT04tQUiR;Q9*n`eJi#8Jh$qPwRRwlfhjyCWz+!kb zC~nD-7XlTy_u7JOMOxBCw#&ssN1v_;-o#f5ZHf(bl={uEK4jEZqQ@TEA~!9B+Vfm( z!M1ST9xo^=4t^XwNBk5VS?W1y%)S&rMvZBfy_^`7#J*ZqW#=#j>FF75xN>Y}Q}hE# z@12l{Uip-jkw5-qHGC2rwC^`>*+i%e>V-I2wWn#!Hb*_Um`w0GD6>T&*?Z1*^9maS z#2VCNjVrE8;u9Ld9zd*EoqE2)ktG^hz-dxHy()I^6SGY9<_+x*)|S9($#$GXXHYZwy)q3N&TE zO{{_YP9z;)@J2hwyBpn1w78#R@I;7)pIG{R(XqKoq(Xl++%PA|76g-eGkK<|lxRA0 zczA&cCHEK*wLSv7hv(!ui{Ax~6Twn5=pg+O%Cpq*z>EFVAmF_Rnq9Ck4?ZSj?BcWw zYw(mtV=m613>iNya=eo+sCusuOO;y;E4^5E*CzrtO(HW-nwA$9Y89T;G8##r@cv1O z(X((DEH+|~S>~mM_=tXdCNopPT^d2+^CO4*-Gfnt{#}}S?wj$}nk|ZEDE^lKh}u$Y zKcB3}E>%hbi=)TPi=*U$s2IZh3%!V9jO$aC{81pTezdpSF0|%$bv3~*00BecRP3YY zFmoim(Cd@}ehou*w>etrjRCBk9g%uO&8=4YC^^WGK2a8Oi}{#fu_#l1Ax$eZ`2Y|R zGF^%?p8S;}6xtaL@pg-!?kfptff!2{tJvPE9aE61RQE@ebn)e?e)NwIdzEBz>Er(J zxB6ngk<-Oj1SOCgRdu6sBrCnGt&rwaUkbduE(({CyHmvK$!_Y2X?@1?09MXD`X|&N z8(<2zvosK07Tibf(Rx$I6+gqKL_f9pepmWjH(9`s=p^8l4v1uY)UAN%= zK;0Cj-;ea+PLP;nTS-GcMZF?VJ@CqsnQXzCiOSG4+D`U}X}I&RN*hLO8q>pnp~0N{ z6^B||C*`tDf>>`bwzZ3=iut1zm6n@>YftPyKaaSQ?WbtRs#0q2sWPheHKWeGdK|zy zOc5EstPt1n;=~?FFPTF`G3+3T`YO(dMiAQun;zG?@;H}?bJxzM7w3kgPtgrF0}gwC zxG7P^$rM~OtWjCzNyrf~2q>oKF#_fZhxTLWI}NulO*sg*q@-RYuH=eZ(O@I;o{1~8 z4{%4hLp{LK8g|L}mcN%Rok5u|@lBd}INTsvKw4_mA3UUHA_R^&Y^3e_Q(2V{>9HA5Co-9ooMfa8^^V$j>O8IafjkBV;3$H_q7}cva$>)5k>{1 zg6E}qpB^6ce3#=s(O8kH9I)~TXVysvpYUd4?bCENjaXTXgdDf=gBL22^Oq@Uzd(`b zw-?@2hYy9kx9K{{2`Gjv5L5Fk;u^PsBc8zzN+D6$<$gtqS6siPoZY3qu?RwuM*=DG zo}~14{j=n8Gt)n3WP9cEwUi87w>)j@+1aN&Z{5*2y4vxfQxbcYQfKqgJ)_w?~cY-JhEs;!RK-Zg{jEs(zBsf1KZ{P7|;~gdcyFmL8Ij{mdDaI4nj5VflCBfb|ibp zKqR7+j=y=$y(>Y0C0;)3^Y@TTuvoG~5C+wy%9End;uIkw|`kkC^%82bf zL#}gmp0sXaraNT}o%IvdcDg}Awl()shjTHs;m4?6!FQA6DL^Fr0qPRl2#kJszOlOJ zp``|^VvI?Vg`pEY>^bv)G;PBi&sP;M#>tX4L#A`5`Lfdx8-%7kAB>uLqa(8ooZ5G1 zxngrt$d(XMMg@?N!U~v`1(-p#A$AD%!d%E$b93?bKAT8)UAN78J{tXvAHweuooG-urzF3Z1DgVYwSI~ccP?N*(KS=)j zT?MCs4DeH1xVse+`MU+;@PdtHCd<;O+jAUu3L1-E=Ivx$=NpLWmDf{0H>JPIQ_<@m zRjm>(MAlr@J*(H`6Q&sc#;{8z;v$}=l4d;9;UvR<#&iA!7(T* z^*~XqxY1C(Zr-rXWZ#=+H6n+mt|g{EekRuCrGucWtILzsz*8OoJwFz;yDFj_M34NJ z8ta>*sB94RaPqcYqTDFzHT93@=#k>Siqq-+6r7j_`~dDG=r4bJ_EFb6D77;$o3Lx)x6j_(CvQ||b( z*}haZ8?g9b6Y<&l*gNY2u({qpFZx;E`s!+ZU}M+xX52O28euK$TVep%+SE#<)>roT zt$@YT~U3VDU=_d}=-Va?y_!#$I^ zMPgnKd2}7=>#Y*=N8wIu7{e*hB`nN{EsLVh|kj^-^77{?=%ODV|nJl`Fv=Wfs z>I71F*Zl7j0?}7TY1h_~+6hFjG$D=FZUc}kzZSuF@$@> Date: Thu, 3 Nov 2022 13:54:51 -0500 Subject: [PATCH 31/79] update python to be declarative example Signed-off-by: Hannah Hunter --- .../building-blocks/pubsub/subscription-methods.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md index 82c2d75c1e7..a6d4c3cf9e8 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md @@ -136,9 +136,11 @@ public Mono getCheckout(@RequestBody(required = false) CloudEvent {{% codetab %}} ```python +from cloudevents.sdk.event import v1 + #Subscribe to a topic -@app.subscribe(pubsubname='pubsub', topic='orders', route='checkout') -def mytopic(event: v1.Event) -> None: +@app.route('/checkout', methods=['POST']) +def checkout(event: v1.Event) -> None: data = json.loads(event.Data()) logging.info('Subscriber received: ' + str(data)) ``` From 54d43c280baa97803a754530635c15d8babaea89 Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Thu, 3 Nov 2022 16:15:06 -0700 Subject: [PATCH 32/79] Start of resiliency quickstart Signed-off-by: Nick Greenfield --- .../en/getting-started/quickstarts/_index.md | 5 +- .../quickstarts/resiliency-quickstart.md | 158 ++++++++++++++++++ .../static/images/resiliency-quickstart.png | Bin 0 -> 67679 bytes 3 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md create mode 100644 daprdocs/static/images/resiliency-quickstart.png diff --git a/daprdocs/content/en/getting-started/quickstarts/_index.md b/daprdocs/content/en/getting-started/quickstarts/_index.md index efae344ff09..c0a189dc00c 100644 --- a/daprdocs/content/en/getting-started/quickstarts/_index.md +++ b/daprdocs/content/en/getting-started/quickstarts/_index.md @@ -27,7 +27,4 @@ Hit the ground running with our Dapr quickstarts, complete with code samples aim | [State Management]({{< ref statemanagement-quickstart.md >}}) | Store a service's data as key/value pairs in supported state stores. | | [Bindings]({{< ref bindings-quickstart.md >}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | | [Secrets Management]({{< ref secrets-quickstart.md >}}) | Securely fetch secrets. | -| Actors | Coming soon. | -| Observability | Coming soon. | -| Configuration | Coming soon. | -| Distributed Lock | Coming soon. | +| [Resiliency]({{< ref resiliency-quickstart.md >}}) | Define and apply fault-tolernce policies to your Dapr APIs requests. | diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md new file mode 100644 index 00000000000..84c7554eb67 --- /dev/null +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md @@ -0,0 +1,158 @@ +--- +type: docs +title: "Quickstart: Resiliency" +linkTitle: "Resiliency" +weight: 72 +description: "Get started with Dapr's resiliency capabilities" +--- +Diagram showing the resiliency applied to Dapr APIs + +{{% alert title="Note" color="primary" %}} + Resiliency is currently a preview feature. +{{% /alert %}} + +In this Quickstart, you will observe Dapr resiliency capabilities by introducing toxic behavior to a microservice that continuously perists and retrieves state via Dapr's state management API. + +The resiliency policies used in this example are defined and applied via the [resiliency spec]() located in the components directory. + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Latest Node.js installed](https://nodejs.org/download/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +In a terminal window, navigate to the `order-processor` directory. + +```bash +cd quickstart/resiliency/javascript/order-processor +``` + +Install dependencies + +```bash +npm install +``` + +### Step 2: Run the application with resiliency enabled + +Run the `order-processor` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +The resilency spec is located in the components directory and is automatically discovered by the Dapr sidecar when run in standalone mode. + +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../components/ -- npm start +``` + +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` redis instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). + +```bash +== APP == Saving Order: { orderId: '1' } +== APP == Getting Order: { orderId: '1' } +== APP == Saving Order: { orderId: '2' } +== APP == Getting Order: { orderId: '2' } +== APP == Saving Order: { orderId: '3' } +== APP == Getting Order: { orderId: '3' } +== APP == Saving Order: { orderId: '4' } +== APP == Getting Order: { orderId: '4' } +``` +While the application is running continue to the next section. + +### Step 3: Introduce a fault + +For example purposes, you will simulate a fault by stopping the Redis container that was initalized when executing `dapr init` on your development machine. + +The Redis instance is configured as the state store component for the order-processor microservice. Once the redis instance is stopped, write and read operations from the order-processor service will begin to fail. + +Since the `statestore` component is definied as a target in the resiliency spec applied to the order-processor service, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB +``` + +```bash +docker stop dapr_redis +``` + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0006] Error processing operation component[statestore] output. Retrying... +``` + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Retries will continue for each failed request indefinitely, while waiting 5 seconds in between trying again. Once 5 consecutive retries have failed, the circuit breaker policy `simpleCB` is tripped and the breaker opens haulting all requests: + +```bash +INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. This behavior will continue for as long as the Redis container is stopped. + +```bash +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed +``` + +### Step 3: Remove the fault +Restart the redis container on your machine and the application will recover seamlessly, picking up where it left off with writing and reading orders to the Redis state store component. + +```bash +docker start dapr_redis +``` + +```bash +INFO[0036] Recovered processing operation component[statestore] output. +== APP == Saving Order: { orderId: '5' } +== APP == Getting Order: { orderId: '5' } +== APP == Saving Order: { orderId: '6' } +== APP == Getting Order: { orderId: '6' } +== APP == Saving Order: { orderId: '7' } +== APP == Getting Order: { orderId: '7' } +== APP == Saving Order: { orderId: '8' } +== APP == Getting Order: { orderId: '8' } +== APP == Saving Order: { orderId: '9' } +== APP == Getting Order: { orderId: '9' } +``` + +## Tell us what you think! +We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? + +Join the discussion in our [discord channel](https://discord.com/channels/778680217417809931/953427615916638238). + +## Next steps +Visit [this](https://docs.dapr.io/operations/resiliency/resiliency-overview//) link for more information about Dapr resiliency. + +{{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/static/images/resiliency-quickstart.png b/daprdocs/static/images/resiliency-quickstart.png new file mode 100644 index 0000000000000000000000000000000000000000..5dea0e1edf79abcb279fca2a6e398d8f0c2329ee GIT binary patch literal 67679 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 IS8OBx4~!1NI{*Lx literal 0 HcmV?d00001 From 8bf29a5b90e9ad5e67f04bc50f49ec7c51e6413f Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Fri, 4 Nov 2022 11:33:11 -0700 Subject: [PATCH 33/79] Update daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../en/getting-started/quickstarts/resiliency-quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md index 84c7554eb67..0d276480372 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md @@ -11,7 +11,7 @@ description: "Get started with Dapr's resiliency capabilities" Resiliency is currently a preview feature. {{% /alert %}} -In this Quickstart, you will observe Dapr resiliency capabilities by introducing toxic behavior to a microservice that continuously perists and retrieves state via Dapr's state management API. +In this Quickstart, you will observe Dapr resiliency capabilities by simulating a system failure. You will execute a microservice application that continuously persists and retrieves state via Dapr's state management API. When operations to the state store begin to fail, Dapr resiliency policies are applied. The resiliency policies used in this example are defined and applied via the [resiliency spec]() located in the components directory. From 802aaf11ce1c5857de0e098320ff053b79529244 Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Mon, 7 Nov 2022 10:43:02 -0800 Subject: [PATCH 34/79] Update docs runtime version to 1.9.3 Signed-off-by: Nick Greenfield --- .../support/support-release-policy.md | 24 +++++++++---------- .../shortcodes/dapr-latest-version.html | 2 +- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 0a3fb49176f..093d413d2ea 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -34,6 +34,7 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| +| November 4th 2022 | 1.9.3
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | November 1st 2022 | 1.9.2
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | October 26th 2022 | 1.9.1
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | | October 13th 2022 | 1.9.0
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | @@ -74,21 +75,18 @@ General guidance on upgrading can be found for [self hosted mode]({{< ref self-h | Current Runtime version | Must upgrade through | Target Runtime version | |--------------------------|-----------------------|------------------------- | -| 1.4.0 to 1.4.2 | N/A | 1.4.4 | -| | 1.4.4 | 1.5.2 | -| | 1.5.2 | 1.6.0 | -| | 1.6.0 | 1.6.2 | -| | 1.6.0 | 1.7.4 | -| | 1.6.0 | 1.7.5 | | 1.5.0 to 1.5.2 | N/A | 1.6.0 | | | 1.6.0 | 1.6.2 | -| | 1.6.0 | 1.7.4 | -| | 1.6.0 | 1.7.5 | -| 1.6.0 | N/A | 1.6.2 | -| 1.6.0 | N/A | 1.7.5 | -| 1.7.0 to 1.7.5 | N/A | 1.8.0 | -| 1.8.0 | N/A | 1.8.6 | -| 1.9.0 | N/A | 1.9.2 | +| | 1.6.2 | 1.7.5 | +| | 1.7.5 | 1.8.6 | +| | 1.8.6 | 1.9.3 | +| 1.6.0 to 1.6.2 | N/A | 1.7.5 | +| | 1.7.5 | 1.8.6 | +| | 1.8.6 | 1.9.3 | +| 1.7.0 to 1.7.5 | N/A | 1.8.6 | +| | 1.8.6 | 1.9.3 | +| 1.8.0 to 1.8.6 | N/A | 1.9.3 | +| 1.9.0 | N/A | 1.9.3 | ## Breaking changes and deprecations diff --git a/daprdocs/layouts/shortcodes/dapr-latest-version.html b/daprdocs/layouts/shortcodes/dapr-latest-version.html index db415d450c5..05f5194a48b 100644 --- a/daprdocs/layouts/shortcodes/dapr-latest-version.html +++ b/daprdocs/layouts/shortcodes/dapr-latest-version.html @@ -1 +1 @@ -{{- if .Get "short" }}1.9{{ else if .Get "long" }}1.9.0{{ else if .Get "cli" }}1.9.0{{ else }}1.9.0{{ end -}} +{{- if .Get "short" }}1.9{{ else if .Get "long" }}1.9.3{{ else if .Get "cli" }}1.9.0{{ else }}1.9.3{{ end -}} From 53b1521690d1b5c31210a6bffceb8aea8218f226 Mon Sep 17 00:00:00 2001 From: Richard de Zwart Date: Tue, 8 Nov 2022 12:11:44 +0100 Subject: [PATCH 35/79] Update azure-api-management.md Removed one word Signed-off-by: Richard de Zwart --- .../integrations/Azure/azure-api-management.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-api-management.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-api-management.md index 793f5f834a7..5eb42a7cdad 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-api-management.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-api-management.md @@ -6,6 +6,6 @@ description: "Publish APIs for Dapr services and components through Azure API Ma weight: 2000 --- -Azure API Management (APIM) is a way to create consistent and modern API gateways for back-end services, including as those built with Dapr. Dapr support can be enabled in self-hosted API Management gateways to allow them to forward requests to Dapr services, send messages to Dapr Pub/Sub topics, or trigger Dapr output bindings. For more information, read the guide on [API Management Dapr Integration policies](https://docs.microsoft.com/azure/api-management/api-management-dapr-policies) and try out the [Dapr & Azure API Management Integration Demo](https://github.com/dapr/samples/tree/master/dapr-apim-integration). +Azure API Management (APIM) is a way to create consistent and modern API gateways for back-end services, including those built with Dapr. Dapr support can be enabled in self-hosted API Management gateways to allow them to forward requests to Dapr services, send messages to Dapr Pub/Sub topics, or trigger Dapr output bindings. For more information, read the guide on [API Management Dapr Integration policies](https://docs.microsoft.com/azure/api-management/api-management-dapr-policies) and try out the [Dapr & Azure API Management Integration Demo](https://github.com/dapr/samples/tree/master/dapr-apim-integration). {{< button text="Learn more" link="https://docs.microsoft.com/azure/api-management/api-management-dapr-policies" >}} From 04221174e6a27b5b0b3e0bb66081db1ef0f5e187 Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Tue, 8 Nov 2022 11:16:24 -0500 Subject: [PATCH 36/79] Use Google Analytics 4 ID (#2941) Signed-off-by: Patrice Chalin Signed-off-by: Patrice Chalin Co-authored-by: Mark Fussell --- daprdocs/config.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/config.toml b/daprdocs/config.toml index e738b6b15bb..b89160e3693 100644 --- a/daprdocs/config.toml +++ b/daprdocs/config.toml @@ -27,7 +27,7 @@ disableKinds = ["taxonomy", "term"] # Google Analytics [services.googleAnalytics] -id = "UA-149338238-3" +id = "G-60C6Q1ETC1" # Mounts [module] From 5783d9a4322fbdba124f8509be96f4277306c944 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Tue, 8 Nov 2022 09:01:22 -0800 Subject: [PATCH 37/79] Fix Python SDK version Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../content/en/operations/support/support-release-policy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 093d413d2ea..2da2fdd5040 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -34,7 +34,7 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| -| November 4th 2022 | 1.9.3
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | +| November 4th 2022 | 1.9.3
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | November 1st 2022 | 1.9.2
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | October 26th 2022 | 1.9.1
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | | October 13th 2022 | 1.9.0
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | From 3cf224f8ec2220a1b84af82376d4971317d6dca2 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Tue, 8 Nov 2022 13:27:03 -0600 Subject: [PATCH 38/79] update code snippets Signed-off-by: Hannah Hunter --- .../pubsub/subscription-methods.md | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md index a6d4c3cf9e8..c66088ea0e1 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/subscription-methods.md @@ -104,7 +104,6 @@ In your application code, subscribe to the topic specified in the Dapr pub/sub c ```csharp //Subscribe to a topic -[Topic("pubsub", "orders")] [HttpPost("checkout")] public void getCheckout([FromBody] int orderId) { @@ -117,16 +116,15 @@ public void getCheckout([FromBody] int orderId) {{% codetab %}} ```java +import io.dapr.client.domain.CloudEvent; + //Subscribe to a topic -@Topic(name = "orders", pubsubName = "pubsub") @PostMapping(path = "/checkout") public Mono getCheckout(@RequestBody(required = false) CloudEvent cloudEvent) { return Mono.fromRunnable(() -> { try { log.info("Subscriber received: " + cloudEvent.getData()); - } catch (Exception e) { - throw new RuntimeException(e); - } + } }); } ``` @@ -150,11 +148,16 @@ def checkout(event: v1.Event) -> None: {{% codetab %}} ```javascript -//Subscribe to a topic -await server.pubsub.subscribe("pubsub", "orders", "checkout", async (orderId) => { - console.log(`Subscriber received: ${JSON.stringify(orderId)}`) +const express = require('express') +const bodyParser = require('body-parser') +const app = express() +app.use(bodyParser.json({ type: 'application/*+json' })); + +// listen to the declarative route +app.post('/checkout', (req, res) => { + console.log(req.body); + res.sendStatus(200); }); -await server.startServer(); ``` {{% /codetab %}} From ddc252ef822eb2d57462644800420cb33990d861 Mon Sep 17 00:00:00 2001 From: ThumNet Date: Wed, 9 Nov 2022 16:44:08 +0100 Subject: [PATCH 39/79] Azurite queue default port is 10001 fix: Update azurite port to 10001 instead of 10000 See [docs](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=visual-studio#queue-listening-port-configuration) Signed-off-by: ThumNet --- .../components-reference/supported-bindings/storagequeues.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md b/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md index 94d7ea96b28..b9d2113c1fa 100644 --- a/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md +++ b/daprdocs/content/en/reference/components-reference/supported-bindings/storagequeues.md @@ -32,7 +32,7 @@ spec: # - name: decodeBase64 # value: "false" # - name: endpoint -# value: "http://127.0.0.1:10000" +# value: "http://127.0.0.1:10001" ``` {{% alert title="Warning" color="warning" %}} @@ -48,7 +48,7 @@ The above example uses secrets as plain strings. It is recommended to use a secr | `queueName` | Y | Input/Output | The name of the Azure Storage queue | `"myqueue"` | | `ttlInSeconds` | N | Output | Parameter to set the default message time to live. If this parameter is omitted, messages will expire after 10 minutes. See [also](#specifying-a-ttl-per-message) | `"60"` | | `decodeBase64` | N | Output | Configuration to decode base64 file content before saving to Blob Storage. (In case of saving a file with binary content). `true` is the only allowed positive value. Other positive variations like `"True", "1"` are not acceptable. Defaults to `false` | `true`, `false` | -| `endpoint` | N | Input/Output | Optional custom endpoint URL. This is useful when using the [Azurite emulator](https://github.com/Azure/azurite) or when using custom domains for Azure Storage (although this is not officially supported). The endpoint must be the full base URL, including the protocol (`http://` or `https://`), the IP or FQDN, and optional port. | `"http://127.0.0.1:10000"` or `"https://accountName.queue.example.com"` | +| `endpoint` | N | Input/Output | Optional custom endpoint URL. This is useful when using the [Azurite emulator](https://github.com/Azure/azurite) or when using custom domains for Azure Storage (although this is not officially supported). The endpoint must be the full base URL, including the protocol (`http://` or `https://`), the IP or FQDN, and optional port. | `"http://127.0.0.1:10001"` or `"https://accountName.queue.example.com"` | ### Azure Active Directory (Azure AD) authentication From 37844bcd0cec42b972d9ab231c0a5bf7ff86772b Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Fri, 11 Nov 2022 19:00:20 -0600 Subject: [PATCH 40/79] updates per resiliency example Signed-off-by: Hannah Hunter --- .../en/getting-started/quickstarts/_index.md | 2 +- .../quickstarts/resiliency-quickstart.md | 158 --- .../quickstarts/resiliency/_index.md | 7 + .../resiliency-serviceinvo-quickstart.md | 1204 +++++++++++++++++ .../resiliency/resiliency-state-quickstart.md | 900 ++++++++++++ 5 files changed, 2112 insertions(+), 159 deletions(-) delete mode 100644 daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md create mode 100644 daprdocs/content/en/getting-started/quickstarts/resiliency/_index.md create mode 100644 daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md create mode 100644 daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md diff --git a/daprdocs/content/en/getting-started/quickstarts/_index.md b/daprdocs/content/en/getting-started/quickstarts/_index.md index c0a189dc00c..67380fa8763 100644 --- a/daprdocs/content/en/getting-started/quickstarts/_index.md +++ b/daprdocs/content/en/getting-started/quickstarts/_index.md @@ -27,4 +27,4 @@ Hit the ground running with our Dapr quickstarts, complete with code samples aim | [State Management]({{< ref statemanagement-quickstart.md >}}) | Store a service's data as key/value pairs in supported state stores. | | [Bindings]({{< ref bindings-quickstart.md >}}) | Work with external systems using input bindings to respond to events and output bindings to call operations. | | [Secrets Management]({{< ref secrets-quickstart.md >}}) | Securely fetch secrets. | -| [Resiliency]({{< ref resiliency-quickstart.md >}}) | Define and apply fault-tolernce policies to your Dapr APIs requests. | +| [Resiliency]({{< ref resiliency >}}) | Define and apply fault-tolerance policies to your Dapr API requests. | diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md deleted file mode 100644 index 0d276480372..00000000000 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency-quickstart.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -type: docs -title: "Quickstart: Resiliency" -linkTitle: "Resiliency" -weight: 72 -description: "Get started with Dapr's resiliency capabilities" ---- -Diagram showing the resiliency applied to Dapr APIs - -{{% alert title="Note" color="primary" %}} - Resiliency is currently a preview feature. -{{% /alert %}} - -In this Quickstart, you will observe Dapr resiliency capabilities by simulating a system failure. You will execute a microservice application that continuously persists and retrieves state via Dapr's state management API. When operations to the state store begin to fail, Dapr resiliency policies are applied. - -The resiliency policies used in this example are defined and applied via the [resiliency spec]() located in the components directory. - -### Pre-requisites - -For this example, you will need: - -- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). -- [Latest Node.js installed](https://nodejs.org/download/). - -- [Docker Desktop](https://www.docker.com/products/docker-desktop) - - -### Step 1: Set up the environment - -Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). - -```bash -git clone https://github.com/dapr/quickstarts.git -``` - -In a terminal window, navigate to the `order-processor` directory. - -```bash -cd quickstart/resiliency/javascript/order-processor -``` - -Install dependencies - -```bash -npm install -``` - -### Step 2: Run the application with resiliency enabled - -Run the `order-processor` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. - -The resilency spec is located in the components directory and is automatically discovered by the Dapr sidecar when run in standalone mode. - -```bash -dapr run --app-id order-processor --config ../config.yaml --components-path ../components/ -- npm start -``` - -Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` redis instance [defined in the `statestore.yaml` component]({{< ref "#statestoreyaml-component-file" >}}). - -```bash -== APP == Saving Order: { orderId: '1' } -== APP == Getting Order: { orderId: '1' } -== APP == Saving Order: { orderId: '2' } -== APP == Getting Order: { orderId: '2' } -== APP == Saving Order: { orderId: '3' } -== APP == Getting Order: { orderId: '3' } -== APP == Saving Order: { orderId: '4' } -== APP == Getting Order: { orderId: '4' } -``` -While the application is running continue to the next section. - -### Step 3: Introduce a fault - -For example purposes, you will simulate a fault by stopping the Redis container that was initalized when executing `dapr init` on your development machine. - -The Redis instance is configured as the state store component for the order-processor microservice. Once the redis instance is stopped, write and read operations from the order-processor service will begin to fail. - -Since the `statestore` component is definied as a target in the resiliency spec applied to the order-processor service, all failed requests will apply retry and circuit breaker policies: - -```yaml - targets: - components: - statestore: - outbound: - retry: retryForever - circuitBreaker: simpleCB -``` - -```bash -docker stop dapr_redis -``` - -Once the first request fails, the retry policy titled `retryForever` is applied: - -```bash -INFO[0006] Error processing operation component[statestore] output. Retrying... -``` - -```yaml -retryForever: - policy: constant - maxInterval: 5s - maxRetries: -1 -``` - -Retries will continue for each failed request indefinitely, while waiting 5 seconds in between trying again. Once 5 consecutive retries have failed, the circuit breaker policy `simpleCB` is tripped and the breaker opens haulting all requests: - -```bash -INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open -``` - -```yaml -circuitBreakers: - simpleCB: - maxRequests: 1 - timeout: 5s - trip: consecutiveFailures >= 5 -``` - -After 5 seconds has surpassed, the circuit breaker will switch to a half-open state allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. This behavior will continue for as long as the Redis container is stopped. - -```bash -INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open -INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open -INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open -INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed -``` - -### Step 3: Remove the fault -Restart the redis container on your machine and the application will recover seamlessly, picking up where it left off with writing and reading orders to the Redis state store component. - -```bash -docker start dapr_redis -``` - -```bash -INFO[0036] Recovered processing operation component[statestore] output. -== APP == Saving Order: { orderId: '5' } -== APP == Getting Order: { orderId: '5' } -== APP == Saving Order: { orderId: '6' } -== APP == Getting Order: { orderId: '6' } -== APP == Saving Order: { orderId: '7' } -== APP == Getting Order: { orderId: '7' } -== APP == Saving Order: { orderId: '8' } -== APP == Getting Order: { orderId: '8' } -== APP == Saving Order: { orderId: '9' } -== APP == Getting Order: { orderId: '9' } -``` - -## Tell us what you think! -We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? - -Join the discussion in our [discord channel](https://discord.com/channels/778680217417809931/953427615916638238). - -## Next steps -Visit [this](https://docs.dapr.io/operations/resiliency/resiliency-overview//) link for more information about Dapr resiliency. - -{{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/_index.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/_index.md new file mode 100644 index 00000000000..3156dfa9d28 --- /dev/null +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/_index.md @@ -0,0 +1,7 @@ +--- +type: docs +title: "Resiliency Quickstarts" +linkTitle: "Resiliency" +weight: 100 +description: "Get started with Dapr's resiliency component" +--- \ No newline at end of file diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md new file mode 100644 index 00000000000..1954befa1b9 --- /dev/null +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md @@ -0,0 +1,1204 @@ +--- +type: docs +title: "Quickstart: Service-to-service resiliency" +linkTitle: "Resiliency: Service Invocation" +weight: 120 +description: "Get started with Dapr's resiliency capabilities via the service invocation API" +--- + +{{% alert title="Note" color="primary" %}} + Resiliency is currently a preview feature. +{{% /alert %}} + +Observe Dapr resiliency capabilities by simulating a system failure. In this Quickstart, you will: + +- Run two microservice applications, `checkout` and `order-processor`. `checkout` will continuously make Dapr service invocation requests to `order-processor`. +- Trigger the resiliency spec by simulating a system failure. +- Remove the failure to allow the microservice application to resume. + +Diagram showing the resiliency applied to Dapr APIs + +Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. + +{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Python 3.7+ installed](https://www.python.org/downloads/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/service_invocation). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +### Step 2: Run `order-processor` service + +In a terminal window, from the root of the Quickstart clone directory +navigate to `order-processor` directory. + +```bash +cd ../service_invocation/python/http/order-processor +``` + +Install the dependencies: + +```bash +pip3 install -r requirements.txt +``` + +Run the `order-processor` service alongside a Dapr sidecar. + +```bash +dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- python3 app.py +``` + +### Step 3: Run the `checkout` service application with resiliency enabled + +In a new terminal window, from the root of the Quickstart clone directory +navigate to the `checkout` directory. + +```bash +cd ../service_invocation/python/http/checkout +``` + +Install the dependencies: + +```bash +pip3 install -r requirements.txt +``` + +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- python3 app.py +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +### Step 4: View the Service Invocation outputs + +Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 1} +== APP == Order passed: {"orderId": 2} +== APP == Order passed: {"orderId": 3} +== APP == Order passed: {"orderId": 4} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 1} +== APP == Order received: {"orderId": 2} +== APP == Order received: {"orderId": 3} +== APP == Order received: {"orderId": 4} +``` + +### Step 5: Introduce a fault + +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB +``` + +In the `order-processor` window, stop the service: + +{{< tabs "MacOs" "Windows" >}} + + + +{{% codetab %}} + +```script +CMD + C +``` + +{{% /codetab %}} + + + +{{% codetab %}} + +```script +CTRL + C +``` + +{{% /codetab %}} + +{{< /tabs >}} + + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0005] Error processing operation endpoint[order-processor, order-processor:orders]. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0025] Circuit breaker "order-processor:orders" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 6: Remove the fault + +Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off. + +In the `order-processor` service terminal, restart the application: + +```bash +dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- python3 app.py +``` + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 5} +== APP == Order passed: {"orderId": 6} +== APP == Order passed: {"orderId": 7} +== APP == Order passed: {"orderId": 8} +== APP == Order passed: {"orderId": 9} +== APP == Order passed: {"orderId": 10} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 5} +== APP == Order received: {"orderId": 6} +== APP == Order received: {"orderId": 7} +== APP == Order received: {"orderId": 8} +== APP == Order received: {"orderId": 9} +== APP == Order received: {"orderId": 10} +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Latest Node.js installed](https://nodejs.org/download/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/service_invocation). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +### Step 2: Run the `order-processor` service + +In a terminal window, from the root of the Quickstart clone directory +navigate to `order-processor` directory. + +```bash +cd ../service_invocation/javascript/http/order-processor +``` + +Install the dependencies: + +```bash +npm install +``` + +Run the `order-processor` service alongside a Dapr sidecar. + +```bash +dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start +``` + +### Step 3: Run the `checkout` service application with resiliency enabled + +In a new terminal window, from the root of the Quickstart clone directory +navigate to the `checkout` directory. + +```bash +cd service_invocation/javascript/http/checkout +``` + +Install the dependencies: + +```bash +npm install +``` + +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +### Step 4: View the Service Invocation outputs + +Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 1} +== APP == Order passed: {"orderId": 2} +== APP == Order passed: {"orderId": 3} +== APP == Order passed: {"orderId": 4} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 1} +== APP == Order received: {"orderId": 2} +== APP == Order received: {"orderId": 3} +== APP == Order received: {"orderId": 4} +``` + +### Step 5: Introduce a fault + +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB +``` + +In the `order-processor` window, stop the service: + +{{< tabs "MacOs" "Windows" >}} + + + +{{% codetab %}} + +```script +CMD + C +``` + +{{% /codetab %}} + + + +{{% codetab %}} + +```script +CTRL + C +``` + +{{% /codetab %}} + +{{< /tabs >}} + + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0005] Error processing operation endpoint[order-processor, order-processor:orders]. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0025] Circuit breaker "order-processor:orders" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 6: Remove the fault + +Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off. + +In the `order-processor` service terminal, restart the application: + +```bash +dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start +``` + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 5} +== APP == Order passed: {"orderId": 6} +== APP == Order passed: {"orderId": 7} +== APP == Order passed: {"orderId": 8} +== APP == Order passed: {"orderId": 9} +== APP == Order passed: {"orderId": 10} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 5} +== APP == Order received: {"orderId": 6} +== APP == Order received: {"orderId": 7} +== APP == Order received: {"orderId": 8} +== APP == Order received: {"orderId": 9} +== APP == Order received: {"orderId": 10} +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [.NET SDK or .NET 6 SDK installed](https://dotnet.microsoft.com/download). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/service_invocation). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +### Step 2: Run the `order-processor` service + +In a terminal window, from the root of the Quickstart clone directory +navigate to `order-processor` directory. + +```bash +cd ../service_invocation/csharp/http/order-processor +``` + +Install the dependencies: + +```bash +dotnet restore +dotnet build +``` + +Run the `order-processor` service alongside a Dapr sidecar. + +```bash +dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- dotnet run +``` + +### Step 3: Run the `checkout` service application with resiliency enabled + +In a new terminal window, from the root of the Quickstart clone directory +navigate to the `checkout` directory. + +```bash +cd ../service_invocation/csharp/http/checkout +``` + +Install the dependencies: + +```bash +dotnet restore +dotnet build +``` + +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- dotnet run +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +### Step 4: View the Service Invocation outputs + +Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 1} +== APP == Order passed: {"orderId": 2} +== APP == Order passed: {"orderId": 3} +== APP == Order passed: {"orderId": 4} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 1} +== APP == Order received: {"orderId": 2} +== APP == Order received: {"orderId": 3} +== APP == Order received: {"orderId": 4} +``` + +### Step 5: Introduce a fault + +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB +``` + +In the `order-processor` window, stop the service: + +{{< tabs "MacOs" "Windows" >}} + + + +{{% codetab %}} + +```script +CMD + C +``` + +{{% /codetab %}} + + + +{{% codetab %}} + +```script +CTRL + C +``` + +{{% /codetab %}} + +{{< /tabs >}} + + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0005] Error processing operation endpoint[order-processor, order-processor:orders]. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0025] Circuit breaker "order-processor:orders" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 6: Remove the fault + +Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off. + +In the `order-processor` service terminal, restart the application: + +```bash +dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- dotnet run +``` + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 5} +== APP == Order passed: {"orderId": 6} +== APP == Order passed: {"orderId": 7} +== APP == Order passed: {"orderId": 8} +== APP == Order passed: {"orderId": 9} +== APP == Order passed: {"orderId": 10} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 5} +== APP == Order received: {"orderId": 6} +== APP == Order received: {"orderId": 7} +== APP == Order received: {"orderId": 8} +== APP == Order received: {"orderId": 9} +== APP == Order received: {"orderId": 10} +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- Java JDK 11 (or greater): + - [Oracle JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html#JDK11), or + - OpenJDK +- [Apache Maven](https://maven.apache.org/install.html), version 3.x. + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/service_invocation). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +### Step 2: Run the `order-processor` service + +In a terminal window, from the root of the Quickstart clone directory +navigate to `order-processor` directory. + +```bash +cd ../service_invocation/java/http/order-processor +``` + +Install the dependencies: + +```bash +mvn clean install +``` + +Run the `order-processor` service alongside a Dapr sidecar. + +```bash +dapr run --app-id order-processor --app-port 9001 --app-protocol http --dapr-http-port 3501 -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar +``` + +### Step 3: Run the `checkout` service application with resiliency enabled + +In a new terminal window, from the root of the Quickstart clone directory +navigate to the `checkout` directory. + +```bash +cd ../service_invocation/java/http/checkout +``` + +Install the dependencies: + +```bash +mvn clean install +``` + +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- java -jar target/CheckoutService-0.0.1-SNAPSHOT.jar +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +### Step 4: View the Service Invocation outputs + +Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 1} +== APP == Order passed: {"orderId": 2} +== APP == Order passed: {"orderId": 3} +== APP == Order passed: {"orderId": 4} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 1} +== APP == Order received: {"orderId": 2} +== APP == Order received: {"orderId": 3} +== APP == Order received: {"orderId": 4} +``` + +### Step 5: Introduce a fault + +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB +``` + +In the `order-processor` window, stop the service: + +{{< tabs "MacOs" "Windows" >}} + + + +{{% codetab %}} + +```script +CMD + C +``` + +{{% /codetab %}} + + + +{{% codetab %}} + +```script +CTRL + C +``` + +{{% /codetab %}} + +{{< /tabs >}} + + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0005] Error processing operation endpoint[order-processor, order-processor:orders]. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0025] Circuit breaker "order-processor:orders" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 6: Remove the fault + +Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off. + +In the `order-processor` service terminal, restart the application: + +```bash +dapr run --app-id order-processor --app-port 9001 --app-protocol http --dapr-http-port 3501 -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar +``` + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 5} +== APP == Order passed: {"orderId": 6} +== APP == Order passed: {"orderId": 7} +== APP == Order passed: {"orderId": 8} +== APP == Order passed: {"orderId": 9} +== APP == Order passed: {"orderId": 10} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 5} +== APP == Order received: {"orderId": 6} +== APP == Order received: {"orderId": 7} +== APP == Order received: {"orderId": 8} +== APP == Order received: {"orderId": 9} +== APP == Order received: {"orderId": 10} +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Latest version of Go](https://go.dev/dl/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/service_invocation). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +### Step 2: Run the `order-processor` service + +In a terminal window, from the root of the Quickstart clone directory +navigate to `order-processor` directory. + +```bash +cd ../service_invocation/go/http/order-processor +``` + +Install the dependencies: + +```bash +go build . +``` + +Run the `order-processor` service alongside a Dapr sidecar. + +```bash +dapr run --app-port 6001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- go run . +``` + +### Step 3: Run the `checkout` service application with resiliency enabled + +In a new terminal window, from the root of the Quickstart clone directory +navigate to the `checkout` directory. + +```bash +cd ../service_invocation/go/http/checkout +``` + +Install the dependencies: + +```bash +go build . +``` + +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- go run . +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +### Step 4: View the Service Invocation outputs + +Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 1} +== APP == Order passed: {"orderId": 2} +== APP == Order passed: {"orderId": 3} +== APP == Order passed: {"orderId": 4} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 1} +== APP == Order received: {"orderId": 2} +== APP == Order received: {"orderId": 3} +== APP == Order received: {"orderId": 4} +``` + +### Step 5: Introduce a fault + +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB +``` + +In the `order-processor` window, stop the service: + +{{< tabs "MacOs" "Windows" >}} + + + +{{% codetab %}} + +```script +CMD + C +``` + +{{% /codetab %}} + + + +{{% codetab %}} + +```script +CTRL + C +``` + +{{% /codetab %}} + +{{< /tabs >}} + + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0005] Error processing operation endpoint[order-processor, order-processor:orders]. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0025] Circuit breaker "order-processor:orders" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +INFO[0030] Circuit breaker "order-processor:orders" changed state from open to half-open +INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 6: Remove the fault + +Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off. + +In the `order-processor` service terminal, restart the application: + +```bash +dapr run --app-port 6001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- go run . +``` + +`checkout` service output: + +``` +== APP == Order passed: {"orderId": 5} +== APP == Order passed: {"orderId": 6} +== APP == Order passed: {"orderId": 7} +== APP == Order passed: {"orderId": 8} +== APP == Order passed: {"orderId": 9} +== APP == Order passed: {"orderId": 10} +``` + +`order-processor` service output: + +``` +== APP == Order received: {"orderId": 5} +== APP == Order received: {"orderId": 6} +== APP == Order received: {"orderId": 7} +== APP == Order received: {"orderId": 8} +== APP == Order received: {"orderId": 9} +== APP == Order received: {"orderId": 10} +``` + +{{% /codetab %}} + +{{< /tabs >}} + +## Tell us what you think! +We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? + +Join the discussion in our [discord channel](https://discord.com/channels/778680217417809931/953427615916638238). + +## Next steps +Visit [this](https://docs.dapr.io/operations/resiliency/resiliency-overview//) link for more information about Dapr resiliency. + +{{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md new file mode 100644 index 00000000000..c4df0497386 --- /dev/null +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -0,0 +1,900 @@ +--- +type: docs +title: "Quickstart: Service-to-component resiliency" +linkTitle: "Resiliency: State Management" +weight: 110 +description: "Get started with Dapr's resiliency capabilities via the state management API" +--- + +{{% alert title="Note" color="primary" %}} + Resiliency is currently a preview feature. +{{% /alert %}} + +Observe Dapr resiliency capabilities by simulating a system failure. In this Quickstart, you will: + +- Execute a microservice application with resiliency enabled that continuously persists and retrieves state via Dapr's state management API. +- Trigger the resiliency spec by simulating a system failure. +- Remove the failure to allow the microservice application to resume. + +Diagram showing the resiliency applied to Dapr APIs + +Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. + +{{< tabs "Python" "JavaScript" ".NET" "Java" "Go" >}} + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Python 3.7+ installed](https://www.python.org/downloads/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +In a terminal window, navigate to the `order-processor` directory. + +```bash +cd ../state_management/python/sdk/order-processor +``` + +Install dependencies + +```bash +pip3 install -r requirements.txt +``` + +### Step 2: Run the application with resiliency enabled + +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- python3 +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). + +```bash +== APP == Saving Order: { orderId: '1' } +== APP == Getting Order: { orderId: '1' } +== APP == Saving Order: { orderId: '2' } +== APP == Getting Order: { orderId: '2' } +== APP == Saving Order: { orderId: '3' } +== APP == Getting Order: { orderId: '3' } +== APP == Saving Order: { orderId: '4' } +== APP == Getting Order: { orderId: '4' } +``` + +### Step 3: Introduce a fault + +Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB +``` + +In a new terminal window, run the following command: + +```bash +docker stop dapr_redis +``` + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0006] Error processing operation component[statestore] output. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 3: Remove the fault + +Once you restart the Redis container on your machine, the application will recover seamlessly, picking up where it left off. + +```bash +docker start dapr_redis +``` + +```bash +INFO[0036] Recovered processing operation component[statestore] output. +== APP == Saving Order: { orderId: '5' } +== APP == Getting Order: { orderId: '5' } +== APP == Saving Order: { orderId: '6' } +== APP == Getting Order: { orderId: '6' } +== APP == Saving Order: { orderId: '7' } +== APP == Getting Order: { orderId: '7' } +== APP == Saving Order: { orderId: '8' } +== APP == Getting Order: { orderId: '8' } +== APP == Saving Order: { orderId: '9' } +== APP == Getting Order: { orderId: '9' } +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Latest Node.js installed](https://nodejs.org/download/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +In a terminal window, navigate to the `order-processor` directory. + +```bash +cd ../state_management/javascript/sdk/order-processor +``` + +Install dependencies + +```bash +npm install +``` + +### Step 2: Run the application with resiliency enabled + +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- npm start +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). + +```bash +== APP == Saving Order: { orderId: '1' } +== APP == Getting Order: { orderId: '1' } +== APP == Saving Order: { orderId: '2' } +== APP == Getting Order: { orderId: '2' } +== APP == Saving Order: { orderId: '3' } +== APP == Getting Order: { orderId: '3' } +== APP == Saving Order: { orderId: '4' } +== APP == Getting Order: { orderId: '4' } +``` + +### Step 3: Introduce a fault + +Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB +``` + +In a new terminal window, run the following command: + +```bash +docker stop dapr_redis +``` + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0006] Error processing operation component[statestore] output. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 3: Remove the fault + +Once you restart the Redis container on your machine, the application will recover seamlessly, picking up where it left off. + +```bash +docker start dapr_redis +``` + +```bash +INFO[0036] Recovered processing operation component[statestore] output. +== APP == Saving Order: { orderId: '5' } +== APP == Getting Order: { orderId: '5' } +== APP == Saving Order: { orderId: '6' } +== APP == Getting Order: { orderId: '6' } +== APP == Saving Order: { orderId: '7' } +== APP == Getting Order: { orderId: '7' } +== APP == Saving Order: { orderId: '8' } +== APP == Getting Order: { orderId: '8' } +== APP == Saving Order: { orderId: '9' } +== APP == Getting Order: { orderId: '9' } +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [.NET SDK or .NET 6 SDK installed](https://dotnet.microsoft.com/download). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +In a terminal window, navigate to the `order-processor` directory. + +```bash +cd ../state_management/csharp/sdk/order-processor +``` + +Install dependencies + +```bash +dotnet restore +dotnet build +``` + +### Step 2: Run the application with resiliency enabled + +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- dotnet run +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). + +```bash +== APP == Saving Order: { orderId: '1' } +== APP == Getting Order: { orderId: '1' } +== APP == Saving Order: { orderId: '2' } +== APP == Getting Order: { orderId: '2' } +== APP == Saving Order: { orderId: '3' } +== APP == Getting Order: { orderId: '3' } +== APP == Saving Order: { orderId: '4' } +== APP == Getting Order: { orderId: '4' } +``` + +### Step 3: Introduce a fault + +Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB +``` + +In a new terminal window, run the following command: + +```bash +docker stop dapr_redis +``` + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0006] Error processing operation component[statestore] output. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 3: Remove the fault + +Once you restart the Redis container on your machine, the application will recover seamlessly, picking up where it left off. + +```bash +docker start dapr_redis +``` + +```bash +INFO[0036] Recovered processing operation component[statestore] output. +== APP == Saving Order: { orderId: '5' } +== APP == Getting Order: { orderId: '5' } +== APP == Saving Order: { orderId: '6' } +== APP == Getting Order: { orderId: '6' } +== APP == Saving Order: { orderId: '7' } +== APP == Getting Order: { orderId: '7' } +== APP == Saving Order: { orderId: '8' } +== APP == Getting Order: { orderId: '8' } +== APP == Saving Order: { orderId: '9' } +== APP == Getting Order: { orderId: '9' } +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- Java JDK 11 (or greater): + - [Oracle JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html#JDK11), or + - OpenJDK +- [Apache Maven](https://maven.apache.org/install.html), version 3.x. + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +In a terminal window, navigate to the `order-processor` directory. + +```bash +cd ../state_management/java/sdk/order-processor +``` + +Install dependencies + +```bash +mvn clean install +``` + +### Step 2: Run the application with resiliency enabled + +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - checkout + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB + ``` + +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). + +```bash +== APP == Saving Order: { orderId: '1' } +== APP == Getting Order: { orderId: '1' } +== APP == Saving Order: { orderId: '2' } +== APP == Getting Order: { orderId: '2' } +== APP == Saving Order: { orderId: '3' } +== APP == Getting Order: { orderId: '3' } +== APP == Saving Order: { orderId: '4' } +== APP == Getting Order: { orderId: '4' } +``` + +### Step 3: Introduce a fault + +Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB +``` + +In a new terminal window, run the following command: + +```bash +docker stop dapr_redis +``` + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0006] Error processing operation component[statestore] output. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 3: Remove the fault + +Once you restart the Redis container on your machine, the application will recover seamlessly, picking up where it left off. + +```bash +docker start dapr_redis +``` + +```bash +INFO[0036] Recovered processing operation component[statestore] output. +== APP == Saving Order: { orderId: '5' } +== APP == Getting Order: { orderId: '5' } +== APP == Saving Order: { orderId: '6' } +== APP == Getting Order: { orderId: '6' } +== APP == Saving Order: { orderId: '7' } +== APP == Getting Order: { orderId: '7' } +== APP == Saving Order: { orderId: '8' } +== APP == Getting Order: { orderId: '8' } +== APP == Saving Order: { orderId: '9' } +== APP == Getting Order: { orderId: '9' } +``` + +{{% /codetab %}} + + +{{% codetab %}} + +### Pre-requisites + +For this example, you will need: + +- [Dapr CLI and initialized environment](https://docs.dapr.io/getting-started). +- [Latest version of Go](https://go.dev/dl/). + +- [Docker Desktop](https://www.docker.com/products/docker-desktop) + + +### Step 1: Set up the environment + +Clone the [sample provided in the Quickstarts repo](https://github.com/dapr/quickstarts/tree/master/resiliency). + +```bash +git clone https://github.com/dapr/quickstarts.git +``` + +In a terminal window, navigate to the `order-processor` directory. + +```bash +cd ../state_management/go/sdk/order-processor +``` + +Install dependencies + +```bash +go build . +``` + +### Step 2: Run the application with resiliency enabled + +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. + +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components -- go run . +``` + +The resilency spec is: +- Located in the `components` directory. +- Automatically discovered by the Dapr sidecar when run in standalone mode. + + ```yaml + apiVersion: dapr.io/v1alpha1 + kind: Resiliency + metadata: + name: myresiliency + scopes: + - order-processor + + spec: + policies: + retries: + retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 + + circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 + + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB + ``` + +Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). + +```bash +== APP == Saving Order: { orderId: '1' } +== APP == Getting Order: { orderId: '1' } +== APP == Saving Order: { orderId: '2' } +== APP == Getting Order: { orderId: '2' } +== APP == Saving Order: { orderId: '3' } +== APP == Getting Order: { orderId: '3' } +== APP == Saving Order: { orderId: '4' } +== APP == Getting Order: { orderId: '4' } +``` + +### Step 3: Introduce a fault + +Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. + +Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: + +```yaml + targets: + components: + statestore: + outbound: + retry: retryForever + circuitBreaker: simpleCB +``` + +In a new terminal window, run the following command: + +```bash +docker stop dapr_redis +``` + +Once the first request fails, the retry policy titled `retryForever` is applied: + +```bash +INFO[0006] Error processing operation component[statestore] output. Retrying... +``` + +Retries will continue for each failed request indefinitely, in 5 second intervals. + +```yaml +retryForever: + policy: constant + maxInterval: 5s + maxRetries: -1 +``` + +Once 5 consecutive retries have failed, the circuit breaker policy, `simpleCB`, is tripped and the breaker opens, halting all requests: + +```bash +INFO[0026] Circuit breaker "simpleCB-statestore" changed state from closed to open +``` + +```yaml +circuitBreakers: + simpleCB: + maxRequests: 1 + timeout: 5s + trip: consecutiveFailures >= 5 +``` + +After 5 seconds has surpassed, the circuit breaker will switch to a half-open state, allowing one request through to verify if the fault has been resolved. If the request continues to fail, the circuit will trip back to the open state. + +```bash +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0031] Circuit breaker "simpleCB-statestore" changed state from half-open to open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from open to half-open +INFO[0036] Circuit breaker "simpleCB-statestore" changed state from half-open to closed +``` + +This half-open/open behavior will continue for as long as the Redis container is stopped. + +### Step 3: Remove the fault + +Once you restart the Redis container on your machine, the application will recover seamlessly, picking up where it left off. + +```bash +docker start dapr_redis +``` + +```bash +INFO[0036] Recovered processing operation component[statestore] output. +== APP == Saving Order: { orderId: '5' } +== APP == Getting Order: { orderId: '5' } +== APP == Saving Order: { orderId: '6' } +== APP == Getting Order: { orderId: '6' } +== APP == Saving Order: { orderId: '7' } +== APP == Getting Order: { orderId: '7' } +== APP == Saving Order: { orderId: '8' } +== APP == Getting Order: { orderId: '8' } +== APP == Saving Order: { orderId: '9' } +== APP == Getting Order: { orderId: '9' } +``` + +{{% /codetab %}} + +{{< /tabs >}} + +## Tell us what you think! +We're continuously working to improve our Quickstart examples and value your feedback. Did you find this quickstart helpful? Do you have suggestions for improvement? + +Join the discussion in our [discord channel](https://discord.com/channels/778680217417809931/953427615916638238). + +## Next steps + +Learn more about [the resiliency feature]({{< ref resiliency-overview.md >}}) and how it works with Dapr's building block APIs. + +{{< button text="Explore Dapr tutorials >>" page="getting-started/tutorials/_index.md" >}} From 5b7b832bc4bc56ba9819d414ded98d6413e4954f Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Tue, 15 Nov 2022 09:54:19 -0800 Subject: [PATCH 41/79] Add resiliency images for quickstarts Signed-off-by: Nick Greenfield --- .../resiliency-serviceinvo-quickstart.md | 2 +- .../resiliency/resiliency-state-quickstart.md | 2 +- ... => resiliency-quickstart-svc-component.png} | Bin .../images/resiliency-quickstart-svc-invoke.png | Bin 0 -> 68472 bytes 4 files changed, 2 insertions(+), 2 deletions(-) rename daprdocs/static/images/{resiliency-quickstart.png => resiliency-quickstart-svc-component.png} (100%) create mode 100644 daprdocs/static/images/resiliency-quickstart-svc-invoke.png diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md index 1954befa1b9..773c328f76a 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md @@ -16,7 +16,7 @@ Observe Dapr resiliency capabilities by simulating a system failure. In this Qui - Trigger the resiliency spec by simulating a system failure. - Remove the failure to allow the microservice application to resume. -Diagram showing the resiliency applied to Dapr APIs +Diagram showing the resiliency applied to Dapr APIs Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index c4df0497386..f7e8523e0c3 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -16,7 +16,7 @@ Observe Dapr resiliency capabilities by simulating a system failure. In this Qui - Trigger the resiliency spec by simulating a system failure. - Remove the failure to allow the microservice application to resume. -Diagram showing the resiliency applied to Dapr APIs +Diagram showing the resiliency applied to Dapr APIs Select your preferred language-specific Dapr SDK before proceeding with the Quickstart. diff --git a/daprdocs/static/images/resiliency-quickstart.png b/daprdocs/static/images/resiliency-quickstart-svc-component.png similarity index 100% rename from daprdocs/static/images/resiliency-quickstart.png rename to daprdocs/static/images/resiliency-quickstart-svc-component.png diff --git a/daprdocs/static/images/resiliency-quickstart-svc-invoke.png b/daprdocs/static/images/resiliency-quickstart-svc-invoke.png new file mode 100644 index 0000000000000000000000000000000000000000..baff0ccfea126f7a71df771b35cf4a20067f957b GIT binary patch literal 68472 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 m|1tkRHos%X|I@tri41ZSY%4*h4( Date: Wed, 16 Nov 2022 13:27:34 -0800 Subject: [PATCH 42/79] Updates to resiliency svc invoke quickstart --- .../resiliency-serviceinvo-quickstart.md | 131 ++++++++---------- .../resiliency/resiliency-state-quickstart.md | 4 +- 2 files changed, 57 insertions(+), 78 deletions(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md index 773c328f76a..f37a240b162 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md @@ -1,7 +1,7 @@ --- type: docs -title: "Quickstart: Service-to-service resiliency" -linkTitle: "Resiliency: Service Invocation" +title: "Quickstart: service-to-service resiliency" +linkTitle: "Resiliency: service-to-service" weight: 120 description: "Get started with Dapr's resiliency capabilities via the service invocation API" --- @@ -14,7 +14,7 @@ Observe Dapr resiliency capabilities by simulating a system failure. In this Qui - Run two microservice applications, `checkout` and `order-processor`. `checkout` will continuously make Dapr service invocation requests to `order-processor`. - Trigger the resiliency spec by simulating a system failure. -- Remove the failure to allow the microservice application to resume. +- Remove the failure to allow the microservice application to recover. Diagram showing the resiliency applied to Dapr APIs @@ -44,14 +44,13 @@ git clone https://github.com/dapr/quickstarts.git ### Step 2: Run `order-processor` service -In a terminal window, from the root of the Quickstart clone directory -navigate to `order-processor` directory. +In a terminal window, from the root of the Quickstart directory, navigate to `order-processor` directory. ```bash cd ../service_invocation/python/http/order-processor ``` -Install the dependencies: +Install dependencies: ```bash pip3 install -r requirements.txt @@ -60,19 +59,18 @@ pip3 install -r requirements.txt Run the `order-processor` service alongside a Dapr sidecar. ```bash -dapr run --app-port 8001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- python3 app.py +dapr run --app-port 8001 --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3501 -- python3 app.py ``` ### Step 3: Run the `checkout` service application with resiliency enabled -In a new terminal window, from the root of the Quickstart clone directory -navigate to the `checkout` directory. +In a new terminal window, from the root of the Quickstart directory, navigate to the `checkout` directory. ```bash cd ../service_invocation/python/http/checkout ``` -Install the dependencies: +Install dependencies: ```bash pip3 install -r requirements.txt @@ -84,9 +82,7 @@ Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter ap dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- python3 app.py ``` -The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -118,8 +114,7 @@ The resilency spec is: ``` ### Step 4: View the Service Invocation outputs - -Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. +When both services and sidecars are running, notice how orders are passed from the `checkout` service to the `order-processor` service using Dapr service invoke. `checkout` service output: @@ -140,10 +135,9 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr ``` ### Step 5: Introduce a fault +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, service invoke operations from the `checkout` service begin to fail. -Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. - -Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `order-processor` service as a resiliency target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -218,11 +212,11 @@ INFO[0030] Circuit breaker "order-processor:orders" changed state from open to h INFO[0030] Circuit breaker "order-processor:orders" changed state from half-open to open ``` -This half-open/open behavior will continue for as long as the Redis container is stopped. +This half-open/open behavior will continue for as long as the `order-processor` service is stopped. ### Step 6: Remove the fault -Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off. +Once you restart the `order-processor` service, the application will recover seamlessly, picking up where it left off with accepting order requests. In the `order-processor` service terminal, restart the application: @@ -277,14 +271,14 @@ git clone https://github.com/dapr/quickstarts.git ### Step 2: Run the `order-processor` service -In a terminal window, from the root of the Quickstart clone directory +In a terminal window, from the root of the Quickstart directory, navigate to `order-processor` directory. ```bash cd ../service_invocation/javascript/http/order-processor ``` -Install the dependencies: +Install dependencies: ```bash npm install @@ -293,19 +287,19 @@ npm install Run the `order-processor` service alongside a Dapr sidecar. ```bash -dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start +dapr run --app-port 5001 --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3501 -- npm start ``` ### Step 3: Run the `checkout` service application with resiliency enabled -In a new terminal window, from the root of the Quickstart clone directory +In a new terminal window, from the root of the Quickstart directory, navigate to the `checkout` directory. ```bash cd service_invocation/javascript/http/checkout ``` -Install the dependencies: +Install dependencies: ```bash npm install @@ -314,12 +308,10 @@ npm install Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. ```bash -dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start +dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- npm start ``` -The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -351,8 +343,7 @@ The resilency spec is: ``` ### Step 4: View the Service Invocation outputs - -Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. +When both services and sidecars are running, notice how orders are passed from the `checkout` service to the `order-processor` service using Dapr service invoke. `checkout` service output: @@ -373,10 +364,9 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr ``` ### Step 5: Introduce a fault +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, service invoke operations from the `checkout` service begin to fail. -Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. - -Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `order-processor` service as a resiliency target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -460,7 +450,7 @@ Once you restart the `order-processor` service, the application will recover sea In the `order-processor` service terminal, restart the application: ```bash -dapr run --app-port 5001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- npm start +dapr run --app-port 5001 --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3501 -- npm start ``` `checkout` service output: @@ -510,14 +500,15 @@ git clone https://github.com/dapr/quickstarts.git ### Step 2: Run the `order-processor` service -In a terminal window, from the root of the Quickstart clone directory +In a terminal window, from the root of the Quickstart directory, navigate to `order-processor` directory. + ```bash cd ../service_invocation/csharp/http/order-processor ``` -Install the dependencies: +Install dependencies: ```bash dotnet restore @@ -527,19 +518,19 @@ dotnet build Run the `order-processor` service alongside a Dapr sidecar. ```bash -dapr run --app-port 7001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- dotnet run +dapr run --app-port 7001 --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3501 -- dotnet run ``` ### Step 3: Run the `checkout` service application with resiliency enabled -In a new terminal window, from the root of the Quickstart clone directory +In a new terminal window, from the root of the Quickstart directory, navigate to the `checkout` directory. ```bash cd ../service_invocation/csharp/http/checkout ``` -Install the dependencies: +Install dependencies: ```bash dotnet restore @@ -552,9 +543,7 @@ Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter ap dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- dotnet run ``` -The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -586,8 +575,7 @@ The resilency spec is: ``` ### Step 4: View the Service Invocation outputs - -Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. +When both services and sidecars are running, notice how orders are passed from the `checkout` service to the `order-processor` service using Dapr service invoke. `checkout` service output: @@ -608,10 +596,9 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr ``` ### Step 5: Introduce a fault +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, service invoke operations from the `checkout` service begin to fail. -Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. - -Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `order-processor` service as a resiliency target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -748,14 +735,14 @@ git clone https://github.com/dapr/quickstarts.git ### Step 2: Run the `order-processor` service -In a terminal window, from the root of the Quickstart clone directory +In a terminal window, from the root of the Quickstart directory, navigate to `order-processor` directory. ```bash cd ../service_invocation/java/http/order-processor ``` -Install the dependencies: +Install dependencies: ```bash mvn clean install @@ -764,19 +751,19 @@ mvn clean install Run the `order-processor` service alongside a Dapr sidecar. ```bash -dapr run --app-id order-processor --app-port 9001 --app-protocol http --dapr-http-port 3501 -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-port 9001 --app-protocol http --dapr-http-port 3501 -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar ``` ### Step 3: Run the `checkout` service application with resiliency enabled -In a new terminal window, from the root of the Quickstart clone directory +In a new terminal window, from the root of the Quickstart directory, navigate to the `checkout` directory. ```bash cd ../service_invocation/java/http/checkout ``` -Install the dependencies: +Install dependencies: ```bash mvn clean install @@ -788,9 +775,7 @@ Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter ap dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- java -jar target/CheckoutService-0.0.1-SNAPSHOT.jar ``` -The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -822,8 +807,7 @@ The resilency spec is: ``` ### Step 4: View the Service Invocation outputs - -Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. +When both services and sidecars are running, notice how orders are passed from the `checkout` service to the `order-processor` service using Dapr service invoke. `checkout` service output: @@ -844,10 +828,9 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr ``` ### Step 5: Introduce a fault +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, service invoke operations from the `checkout` service begin to fail. -Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. - -Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `order-processor` service as a resiliency target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -931,7 +914,7 @@ Once you restart the `order-processor` service, the application will recover sea In the `order-processor` service terminal, restart the application: ```bash -dapr run --app-id order-processor --app-port 9001 --app-protocol http --dapr-http-port 3501 -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-port 9001 --app-protocol http --dapr-http-port 3501 -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar ``` `checkout` service output: @@ -981,14 +964,14 @@ git clone https://github.com/dapr/quickstarts.git ### Step 2: Run the `order-processor` service -In a terminal window, from the root of the Quickstart clone directory +In a terminal window, from the root of the Quickstart directory, navigate to `order-processor` directory. ```bash cd ../service_invocation/go/http/order-processor ``` -Install the dependencies: +Install dependencies: ```bash go build . @@ -997,19 +980,19 @@ go build . Run the `order-processor` service alongside a Dapr sidecar. ```bash -dapr run --app-port 6001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- go run . +dapr run --app-port 6001 --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3501 -- go run . ``` ### Step 3: Run the `checkout` service application with resiliency enabled -In a new terminal window, from the root of the Quickstart clone directory +In a new terminal window, from the root of the Quickstart directory, navigate to the `checkout` directory. ```bash cd ../service_invocation/go/http/checkout ``` -Install the dependencies: +Install dependencies: ```bash go build . @@ -1021,9 +1004,7 @@ Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter ap dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- go run . ``` -The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -1055,8 +1036,7 @@ The resilency spec is: ``` ### Step 4: View the Service Invocation outputs - -Dapr invokes an application on any Dapr instance. In the code, the sidecar programming model encourages each application to talk to its own instance of Dapr. The Dapr instances then discover and communicate with one another. +When both services and sidecars are running, notice how orders are passed from the `checkout` service to the `order-processor` service using Dapr service invoke. `checkout` service output: @@ -1077,10 +1057,9 @@ Dapr invokes an application on any Dapr instance. In the code, the sidecar progr ``` ### Step 5: Introduce a fault +Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, service invoke operations from the `checkout` service begin to fail. -Simulate a fault by stopping the `order-processor` service. Once the instance is stopped, write and read operations from the order-processor service begin to fail. - -Since the `resiliency.yaml` spec defines the `order-processor` service as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `order-processor` service as a resiliency target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -1164,7 +1143,7 @@ Once you restart the `order-processor` service, the application will recover sea In the `order-processor` service terminal, restart the application: ```bash -dapr run --app-port 6001 --app-id order-processor --app-protocol http --dapr-http-port 3501 -- go run . +dapr run --app-port 6001 --app-id order-processor --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3501 -- go run . ``` `checkout` service output: diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index f7e8523e0c3..8e505a15469 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -1,7 +1,7 @@ --- type: docs -title: "Quickstart: Service-to-component resiliency" -linkTitle: "Resiliency: State Management" +title: "Quickstart: service-to-component resiliency" +linkTitle: "Resiliency: service-to-component" weight: 110 description: "Get started with Dapr's resiliency capabilities via the state management API" --- From 68f8951f746e1383e71bcb3d3c53bd9a5c7b5931 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Wed, 16 Nov 2022 15:49:55 -0600 Subject: [PATCH 43/79] updates per Nick review Signed-off-by: Hannah Hunter --- .../resiliency/resiliency-state-quickstart.md | 123 +++++++++--------- 1 file changed, 59 insertions(+), 64 deletions(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index f7e8523e0c3..34b49bb47df 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -1,7 +1,7 @@ --- type: docs title: "Quickstart: Service-to-component resiliency" -linkTitle: "Resiliency: State Management" +linkTitle: "Resiliency: App-to-service" weight: 110 description: "Get started with Dapr's resiliency capabilities via the state management API" --- @@ -13,8 +13,8 @@ description: "Get started with Dapr's resiliency capabilities via the state mana Observe Dapr resiliency capabilities by simulating a system failure. In this Quickstart, you will: - Execute a microservice application with resiliency enabled that continuously persists and retrieves state via Dapr's state management API. -- Trigger the resiliency spec by simulating a system failure. -- Remove the failure to allow the microservice application to resume. +- Trigger resiliency policies by simulating a system failure. +- Resolve the failure and the microservice application will resume. Diagram showing the resiliency applied to Dapr APIs @@ -56,13 +56,8 @@ pip3 install -r requirements.txt ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -```bash -dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- python3 -``` - -The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. @@ -95,6 +90,11 @@ The resilency spec is: circuitBreaker: simpleCB ``` + +```bash +dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- python3 +``` + Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). ```bash @@ -110,9 +110,9 @@ Once the application has started, the `order-processor`service writes and reads ### Step 3: Introduce a fault -Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. +Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -123,19 +123,19 @@ Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a ta circuitBreaker: simpleCB ``` -In a new terminal window, run the following command: +In a new terminal window, run the following command to stop Redis: ```bash docker stop dapr_redis ``` -Once the first request fails, the retry policy titled `retryForever` is applied: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... ``` -Retries will continue for each failed request indefinitely, in 5 second intervals. +As per the `retryFroever` policy, retries will continue for each failed request indefinitely, in 5 second intervals. ```yaml retryForever: @@ -228,13 +228,8 @@ npm install ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -```bash -dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- npm start -``` - -The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. @@ -267,6 +262,10 @@ The resilency spec is: circuitBreaker: simpleCB ``` +```bash +dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- npm start +``` + Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). ```bash @@ -282,9 +281,9 @@ Once the application has started, the `order-processor`service writes and reads ### Step 3: Introduce a fault -Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. +Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -295,19 +294,19 @@ Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a ta circuitBreaker: simpleCB ``` -In a new terminal window, run the following command: +In a new terminal window, run the following command to stop Redis: ```bash docker stop dapr_redis ``` -Once the first request fails, the retry policy titled `retryForever` is applied: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... ``` -Retries will continue for each failed request indefinitely, in 5 second intervals. +As per the `retryFroever` policy, retries will continue for each failed request indefinitely, in 5 second intervals. ```yaml retryForever: @@ -401,13 +400,8 @@ dotnet build ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -```bash -dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- dotnet run -``` - -The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. @@ -440,6 +434,10 @@ The resilency spec is: circuitBreaker: simpleCB ``` +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- dotnet run +``` + Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). ```bash @@ -455,9 +453,9 @@ Once the application has started, the `order-processor`service writes and reads ### Step 3: Introduce a fault -Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. +Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -468,19 +466,19 @@ Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a ta circuitBreaker: simpleCB ``` -In a new terminal window, run the following command: +In a new terminal window, run the following command to stop Redis: ```bash docker stop dapr_redis ``` -Once the first request fails, the retry policy titled `retryForever` is applied: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... ``` -Retries will continue for each failed request indefinitely, in 5 second intervals. +As per the `retryFroever` policy, retries will continue for each failed request indefinitely, in 5 second intervals. ```yaml retryForever: @@ -576,13 +574,8 @@ mvn clean install ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. - -```bash -dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar -``` +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. @@ -615,6 +608,10 @@ The resilency spec is: circuitBreaker: simpleCB ``` +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- java -jar target/OrderProcessingService-0.0.1-SNAPSHOT.jar +``` + Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). ```bash @@ -630,9 +627,9 @@ Once the application has started, the `order-processor`service writes and reads ### Step 3: Introduce a fault -Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. +Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -643,19 +640,19 @@ Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a ta circuitBreaker: simpleCB ``` -In a new terminal window, run the following command: +In a new terminal window, run the following command to stop Redis: ```bash docker stop dapr_redis ``` -Once the first request fails, the retry policy titled `retryForever` is applied: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... ``` -Retries will continue for each failed request indefinitely, in 5 second intervals. +As per the `retryFroever` policy, retries will continue for each failed request indefinitely, in 5 second intervals. ```yaml retryForever: @@ -748,13 +745,8 @@ go build . ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -```bash -dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components -- go run . -``` - -The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. @@ -764,7 +756,7 @@ The resilency spec is: metadata: name: myresiliency scopes: - - order-processor + - checkout spec: policies: @@ -781,13 +773,16 @@ The resilency spec is: trip: consecutiveFailures >= 5 targets: - components: - statestore: - outbound: - retry: retryForever - circuitBreaker: simpleCB + apps: + order-processor: + retry: retryForever + circuitBreaker: simpleCB ``` +```bash +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components -- go run . +``` + Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). ```bash @@ -803,9 +798,9 @@ Once the application has started, the `order-processor`service writes and reads ### Step 3: Introduce a fault -Simulate a fault by stopping the Redis `statestore.yaml` instance that was initalized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the order-processor service begin to fail. +Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -816,19 +811,19 @@ Since the `resiliency.yaml` spec defines the `statestore.yaml` component as a ta circuitBreaker: simpleCB ``` -In a new terminal window, run the following command: +In a new terminal window, run the following command to stop Redis: ```bash docker stop dapr_redis ``` -Once the first request fails, the retry policy titled `retryForever` is applied: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... ``` -Retries will continue for each failed request indefinitely, in 5 second intervals. +As per the `retryFroever` policy, retries will continue for each failed request indefinitely, in 5 second intervals. ```yaml retryForever: From 1769f15faca5654d87a73891e099700a034e1cfd Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Wed, 16 Nov 2022 14:48:13 -0800 Subject: [PATCH 44/79] Update daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../integrations/Azure/azure-kubernetes-service-extension.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md b/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md index a972b5792a4..a8dab479e66 100644 --- a/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md +++ b/daprdocs/content/en/developing-applications/integrations/Azure/azure-kubernetes-service-extension.md @@ -106,4 +106,4 @@ dapr-sidecar-injector-9555889bc-rpjwl 1/1 Running 0 1h dapr-sidecar-injector-9555889bc-rqjgt 1/1 Running 0 1h ``` -For further information such as configuration options and targeting specific versions of Dapr, see the official [AKS Dapr Extension Docs](https://docs.microsoft.com/azure/aks/dapr). +For more information about configuration options and targeting specific Dapr versions, see the official [AKS Dapr Extension Docs](https://docs.microsoft.com/azure/aks/dapr). From 2d7f4cd1e426ce01380172f8183f2e6528c1213c Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Thu, 17 Nov 2022 12:10:41 -0600 Subject: [PATCH 45/79] capitalize Dapr Signed-off-by: Hannah Hunter --- .../resiliency-serviceinvo-quickstart.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md index f37a240b162..f338bde8ac1 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-serviceinvo-quickstart.md @@ -1,7 +1,7 @@ --- type: docs -title: "Quickstart: service-to-service resiliency" -linkTitle: "Resiliency: service-to-service" +title: "Quickstart: Service-to-service resiliency" +linkTitle: "Resiliency: Service-to-service" weight: 120 description: "Get started with Dapr's resiliency capabilities via the service invocation API" --- @@ -12,7 +12,7 @@ description: "Get started with Dapr's resiliency capabilities via the service in Observe Dapr resiliency capabilities by simulating a system failure. In this Quickstart, you will: -- Run two microservice applications, `checkout` and `order-processor`. `checkout` will continuously make Dapr service invocation requests to `order-processor`. +- Run two microservice applications: `checkout` and `order-processor`. `checkout` will continuously make Dapr service invocation requests to `order-processor`. - Trigger the resiliency spec by simulating a system failure. - Remove the failure to allow the microservice application to recover. @@ -82,7 +82,7 @@ Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter ap dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- python3 app.py ``` -By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the Dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -305,13 +305,13 @@ Install dependencies: npm install ``` -Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. ```bash dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- npm start ``` -By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the Dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -537,13 +537,13 @@ dotnet restore dotnet build ``` -Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. ```bash dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- dotnet run ``` -By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the Dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -769,13 +769,13 @@ Install dependencies: mvn clean install ``` -Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. +Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter applies a Dapr configuration that enables the resiliency feature. ```bash dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- java -jar target/CheckoutService-0.0.1-SNAPSHOT.jar ``` -By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the Dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 @@ -1004,7 +1004,7 @@ Run the `checkout` service alongside a Dapr sidecar. The `--config` parameter ap dapr run --app-id checkout --config ../config.yaml --components-path ../../../components/ --app-protocol http --dapr-http-port 3500 -- go run . ``` -By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the dapr sidecar: +By enabling resiliency, the resiliency spec located in the components directory is detected and loaded by the Dapr sidecar: ```yaml apiVersion: dapr.io/v1alpha1 From 302f3dc8a2f8a9030ae41dc34892d21836284aa8 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:35:31 -0800 Subject: [PATCH 46/79] Update daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../quickstarts/resiliency/resiliency-state-quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index 6f5f37224e1..44a44f58ed3 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -745,7 +745,7 @@ go build . ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. From 21a7611c2b78ccb379fe8c69a03f23e5ca1b8c27 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:35:39 -0800 Subject: [PATCH 47/79] Update daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../quickstarts/resiliency/resiliency-state-quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index 44a44f58ed3..335874d91b4 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -228,7 +228,7 @@ npm install ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. From c8bac817e7b8a4131c4b23566ed6ce0b90330d05 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:35:46 -0800 Subject: [PATCH 48/79] Update daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../quickstarts/resiliency/resiliency-state-quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index 335874d91b4..441e6f5cdef 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -56,7 +56,7 @@ pip3 install -r requirements.txt ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. From ea5ae8dc0d61eeb2dac31aacf154193276d2c03c Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:35:52 -0800 Subject: [PATCH 49/79] Update daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../quickstarts/resiliency/resiliency-state-quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index 441e6f5cdef..5c522dea08f 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -574,7 +574,7 @@ mvn clean install ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. From 081f0bf277cbb17af2feb676606fff8bf57bcd17 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Thu, 17 Nov 2022 10:35:59 -0800 Subject: [PATCH 50/79] Update daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md Signed-off-by: greenie-msft <56556602+greenie-msft@users.noreply.github.com> --- .../quickstarts/resiliency/resiliency-state-quickstart.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index 5c522dea08f..fef5c94f736 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -400,7 +400,7 @@ dotnet build ### Step 2: Run the application with resiliency enabled -Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: +Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: - Located in the `components` directory. - Automatically discovered by the Dapr sidecar when run in standalone mode. From 1154bc7c3480e1bdf6d60d220bfe9fa1088ace1d Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Thu, 17 Nov 2022 10:49:36 -0800 Subject: [PATCH 51/79] Fix resiliency component quickstart Signed-off-by: Nick Greenfield --- .../resiliency/resiliency-state-quickstart.md | 35 ++++++------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index fef5c94f736..d7ccf1b87b5 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -58,9 +58,6 @@ pip3 install -r requirements.txt Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. - ```yaml apiVersion: dapr.io/v1alpha1 kind: Resiliency @@ -112,7 +109,7 @@ Once the application has started, the `order-processor`service writes and reads Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines `statestore` as a component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -129,7 +126,7 @@ In a new terminal window, run the following command to stop Redis: docker stop dapr_redis ``` -Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output below shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... @@ -230,9 +227,6 @@ npm install Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. - ```yaml apiVersion: dapr.io/v1alpha1 kind: Resiliency @@ -283,7 +277,7 @@ Once the application has started, the `order-processor`service writes and reads Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines `statestore` as a component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -300,7 +294,7 @@ In a new terminal window, run the following command to stop Redis: docker stop dapr_redis ``` -Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output below shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... @@ -402,9 +396,6 @@ dotnet build Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. - ```yaml apiVersion: dapr.io/v1alpha1 kind: Resiliency @@ -455,7 +446,7 @@ Once the application has started, the `order-processor`service writes and reads Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines `statestore` as a component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -472,7 +463,7 @@ In a new terminal window, run the following command to stop Redis: docker stop dapr_redis ``` -Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output below shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... @@ -576,9 +567,6 @@ mvn clean install Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. - ```yaml apiVersion: dapr.io/v1alpha1 kind: Resiliency @@ -629,7 +617,7 @@ Once the application has started, the `order-processor`service writes and reads Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines `statestore` as a component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -646,7 +634,7 @@ In a new terminal window, run the following command to stop Redis: docker stop dapr_redis ``` -Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output below shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... @@ -747,9 +735,6 @@ go build . Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` command below, the `--config` parameter applies a Dapr configuration that enables the resiliency feature. By enabling resiliency, the resiliency spec located in the components directory is loaded by the `order-processor` sidecar. The resilency spec is: -- Located in the `components` directory. -- Automatically discovered by the Dapr sidecar when run in standalone mode. - ```yaml apiVersion: dapr.io/v1alpha1 kind: Resiliency @@ -800,7 +785,7 @@ Once the application has started, the `order-processor`service writes and reads Simulate a fault by stopping the Redis container instance that was initialized when executing `dapr init` on your development machine. Once the instance is stopped, write and read operations from the `order-processor` service begin to fail. -Since the `resiliency.yaml` spec defines the `statestore` as component target, all failed requests will apply retry and circuit breaker policies: +Since the `resiliency.yaml` spec defines `statestore` as a component target, all failed requests will apply retry and circuit breaker policies: ```yaml targets: @@ -817,7 +802,7 @@ In a new terminal window, run the following command to stop Redis: docker stop dapr_redis ``` -Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output shows the logs from the `order-processor` service: +Once Redis is stopped, the requests begin to fail and the retry policy titled `retryForever` is applied. The output belows shows the logs from the `order-processor` service: ```bash INFO[0006] Error processing operation component[statestore] output. Retrying... From 320ed537ff69fe515ec53e769bd9fc54f7236aee Mon Sep 17 00:00:00 2001 From: Nick Greenfield Date: Thu, 17 Nov 2022 15:40:38 -0800 Subject: [PATCH 52/79] Update runtime version to 1.9.4 Signed-off-by: Nick Greenfield --- .../en/operations/support/support-release-policy.md | 11 ++++++----- daprdocs/layouts/shortcodes/dapr-latest-version.html | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 2da2fdd5040..4983d8e80e4 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -34,6 +34,7 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| +| November 17th 2022 | 1.94
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | November 4th 2022 | 1.9.3
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | November 1st 2022 | 1.9.2
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | | October 26th 2022 | 1.9.1
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | @@ -79,14 +80,14 @@ General guidance on upgrading can be found for [self hosted mode]({{< ref self-h | | 1.6.0 | 1.6.2 | | | 1.6.2 | 1.7.5 | | | 1.7.5 | 1.8.6 | -| | 1.8.6 | 1.9.3 | +| | 1.8.6 | 1.9.4 | | 1.6.0 to 1.6.2 | N/A | 1.7.5 | | | 1.7.5 | 1.8.6 | -| | 1.8.6 | 1.9.3 | +| | 1.8.6 | 1.9.4 | | 1.7.0 to 1.7.5 | N/A | 1.8.6 | -| | 1.8.6 | 1.9.3 | -| 1.8.0 to 1.8.6 | N/A | 1.9.3 | -| 1.9.0 | N/A | 1.9.3 | +| | 1.8.6 | 1.9.4 | +| 1.8.0 to 1.8.6 | N/A | 1.9.4 | +| 1.9.0 | N/A | 1.9.4 | ## Breaking changes and deprecations diff --git a/daprdocs/layouts/shortcodes/dapr-latest-version.html b/daprdocs/layouts/shortcodes/dapr-latest-version.html index 05f5194a48b..49eb9f02436 100644 --- a/daprdocs/layouts/shortcodes/dapr-latest-version.html +++ b/daprdocs/layouts/shortcodes/dapr-latest-version.html @@ -1 +1 @@ -{{- if .Get "short" }}1.9{{ else if .Get "long" }}1.9.3{{ else if .Get "cli" }}1.9.0{{ else }}1.9.3{{ end -}} +{{- if .Get "short" }}1.9{{ else if .Get "long" }}1.9.4{{ else if .Get "cli" }}1.9.0{{ else }}1.9.4{{ end -}} From e2fa30d3c205f9e9170c748092f1e3b3761ca284 Mon Sep 17 00:00:00 2001 From: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Date: Thu, 17 Nov 2022 22:34:21 -0600 Subject: [PATCH 53/79] Update subscription examples (#2957) * dotnet submodule Signed-off-by: Hannah Hunter * update to v2alpha Signed-off-by: Hannah Hunter * revert some changes Signed-off-by: Hannah Hunter * update routes Signed-off-by: Hannah Hunter Signed-off-by: Hannah Hunter --- .../building-blocks/pubsub/howto-publish-subscribe.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md index ff530a04703..138dcc5d6a7 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md +++ b/daprdocs/content/en/developing-applications/building-blocks/pubsub/howto-publish-subscribe.md @@ -155,13 +155,14 @@ Learn more in the [declarative and programmatic subscriptions doc]({{< ref subsc Create a file named `subscription.yaml` and paste the following: ```yaml -apiVersion: dapr.io/v1alpha1 +apiVersion: dapr.io/v2alpha1 kind: Subscription metadata: name: order-pub-sub spec: topic: orders - route: /checkout + routes: + default: /checkout pubsubname: order-pub-sub scopes: - orderprocessing From b540fa308cef58efb7e3738c303f235773d1419f Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 19 Nov 2022 19:04:57 -0700 Subject: [PATCH 54/79] Kafka SASL SCRAM Authentication (#2939) * Adds settings for SASL SCRAM SHA-256 and SHA-512 Signed-off-by: Andrew * Update setup-apache-kafka.md Signed-off-by: Andrew Signed-off-by: Andrew Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Co-authored-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com> Co-authored-by: Yaron Schneider --- .../supported-pubsub/setup-apache-kafka.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md index 0817524ef63..86d4a350c58 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-apache-kafka.md @@ -34,6 +34,8 @@ spec: secretKeyRef: name: kafka-secrets key: saslPasswordSecret + - name: saslMechanism + value: "SHA-512" - name: maxMessageBytes # Optional. value: 1024 - name: consumeRetryInterval # Optional. @@ -55,6 +57,7 @@ spec: | authType | Y | Configure or disable authentication. Supported values: `none`, `password`, `mtls`, or `oidc` | `"password"`, `"none"` | saslUsername | N | The SASL username used for authentication. Only required if `authType` is set to `"password"`. | `"adminuser"` | saslPassword | N | The SASL password used for authentication. Can be `secretKeyRef` to use a [secret reference]({{< ref component-secrets.md >}}). Only required if `authType is set to `"password"`. | `""`, `"KeFg23!"` +| saslMechanism | N | The SASL Authentication Mechanism you wish to use. Only required if `authType` is set to `"password"`. Defaults to `PLAINTEXT` | `"SHA-512", "SHA-256", "PLAINTEXT"` | initialOffset | N | The initial offset to use if no offset was previously committed. Should be "newest" or "oldest". Defaults to "newest". | `"oldest"` | maxMessageBytes | N | The maximum size in bytes allowed for a single Kafka message. Defaults to 1024. | `2048` | consumeRetryInterval | N | The interval between retries when attempting to consume topics. Treats numbers without suffix as milliseconds. Defaults to 100ms. | `200ms` | @@ -111,8 +114,7 @@ spec: #### SASL Password -Setting `authType` to `password` enables [SASL](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) authentication using the **PLAIN** mechanism. This requires setting -the `saslUsername` and `saslPassword` fields. +Setting `authType` to `password` enables [SASL](https://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer) authentication. This requires setting the `saslUsername` and `saslPassword` fields. ```yaml apiVersion: dapr.io/v1alpha1 @@ -137,6 +139,8 @@ spec: secretKeyRef: name: kafka-secrets key: saslPasswordSecret + - name: saslMechanism + value: "SHA-512" - name: maxMessageBytes # Optional. value: 1024 - name: consumeRetryInterval # Optional. From 18f5e6669021eee9de038b44be7b907ccddaf173 Mon Sep 17 00:00:00 2001 From: vikram-thiru <113989405+vikram-thiru@users.noreply.github.com> Date: Wed, 23 Nov 2022 23:08:31 +0530 Subject: [PATCH 55/79] Update fluentd.md (#2967) Elastic search installed by helm will version 8 series which does not let dapr connect with kibana(Because it enables authentication), After using version 7 series works as expected Signed-off-by: vikram-thiru <113989405+vikram-thiru@users.noreply.github.com> Signed-off-by: vikram-thiru <113989405+vikram-thiru@users.noreply.github.com> --- .../content/en/operations/monitoring/logging/fluentd.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/daprdocs/content/en/operations/monitoring/logging/fluentd.md b/daprdocs/content/en/operations/monitoring/logging/fluentd.md index 4dbd1d171e8..b456b8d953e 100644 --- a/daprdocs/content/en/operations/monitoring/logging/fluentd.md +++ b/daprdocs/content/en/operations/monitoring/logging/fluentd.md @@ -32,25 +32,25 @@ description: "How to install Fluentd, Elastic Search, and Kibana to search logs By default, the chart creates 3 replicas which must be on different nodes. If your cluster has fewer than 3 nodes, specify a smaller number of replicas. For example, this sets the number of replicas to 1: ```bash - helm install elasticsearch elastic/elasticsearch -n dapr-monitoring --set replicas=1 + helm install elasticsearch elastic/elasticsearch --version 7.17.3 -n dapr-monitoring --set replicas=1 ``` Otherwise: ```bash - helm install elasticsearch elastic/elasticsearch -n dapr-monitoring + helm install elasticsearch elastic/elasticsearch --version 7.17.3 -n dapr-monitoring ``` If you are using minikube or simply want to disable persistent volumes for development purposes, you can do so by using the following command: ```bash - helm install elasticsearch elastic/elasticsearch -n dapr-monitoring --set persistence.enabled=false,replicas=1 + helm install elasticsearch elastic/elasticsearch --version 7.17.3 -n dapr-monitoring --set persistence.enabled=false,replicas=1 ``` 4. Install Kibana ```bash - helm install kibana elastic/kibana -n dapr-monitoring + helm install kibana elastic/kibana --version 7.17.3 -n dapr-monitoring ``` 5. Ensure that Elastic Search and Kibana are running in your Kubernetes cluster From 976dcab9ce725c1ed9ce7b5e77d8d56de3e89777 Mon Sep 17 00:00:00 2001 From: Chris Kingdon Date: Wed, 23 Nov 2022 12:54:39 -0500 Subject: [PATCH 56/79] Adding missing brace for json document example (#2968) There is a missing brace in the example json Signed-off-by: Chris Kingdon Signed-off-by: Chris Kingdon Co-authored-by: Yaron Schneider --- .../components-reference/supported-state-stores/setup-redis.md | 1 + 1 file changed, 1 insertion(+) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md index 4a1eb18ce4b..3c323b0745f 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-redis.md @@ -230,6 +230,7 @@ Consider an example where you store documents like that: }, "city": "Seattle", "state": "WA" + } } ``` From 9ee2e27b40514c35885cb1e40a9da18265b1e894 Mon Sep 17 00:00:00 2001 From: "Renato L. de F. Cunha" Date: Fri, 25 Nov 2022 19:37:19 -0300 Subject: [PATCH 57/79] Update Kubernetes job page (#2973) Adds a paragraph mentioning `restartPolicy` needs to be set to `Never` for successful job completion. Signed-off-by: Renato L. de F. Cunha Signed-off-by: Renato L. de F. Cunha --- .../en/operations/hosting/kubernetes/kubernetes-job.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md index 6691c742cdd..0b2139fddc7 100644 --- a/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md +++ b/daprdocs/content/en/operations/hosting/kubernetes/kubernetes-job.md @@ -14,9 +14,12 @@ To address this issue the Dapr sidecar has an endpoint to `Shutdown` the sidecar When running a basic [Kubernetes Job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) you will need to call the `/shutdown` endpoint for the sidecar to gracefully stop and the job will be considered `Completed`. -When a job is finish without calling `Shutdown` your job will be in a `NotReady` state with only the `daprd` container running endlessly. +When a job is finished without calling `Shutdown`, your job will be in a `NotReady` state with only the `daprd` container running endlessly. -Be sure and use the *POST* HTTP verb when calling the shutdown API. +Stopping the dapr sidecar will cause its readiness and liveness probes to fail in your container because the dapr sidecar was shutdown. +To prevent Kubernetes from trying to restart your job, set your job's `restartPolicy` to `Never`. + +Be sure to use the *POST* HTTP verb when calling the shutdown HTTP API. ```yaml apiVersion: batch/v1 @@ -37,7 +40,7 @@ spec: restartPolicy: Never ``` -You can also call the `Shutdown` from any of the Dapr SDK +You can also call the `Shutdown` from any of the Dapr SDKs ```go package main From 661a8ff5c846f8cd4548a465d1c92f4c455563f1 Mon Sep 17 00:00:00 2001 From: shivam Date: Mon, 28 Nov 2022 22:41:02 +0530 Subject: [PATCH 58/79] Remove backoffmaxretries from pubsub.mqtt metadata spec Signed-off-by: shivam --- .../components-reference/supported-pubsub/setup-mqtt.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md index 250e681a86b..1fbfa6105d1 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-mqtt.md @@ -49,8 +49,6 @@ The above example uses secrets as plain strings. It is recommended to use a secr | caCert | Required for using TLS | Certificate Authority (CA) certificate in PEM format for verifying server TLS certificates. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` | clientCert | Required for using TLS | TLS client certificate in PEM format. Must be used with `clientKey`. | `"-----BEGIN CERTIFICATE-----\n\n-----END CERTIFICATE-----"` | clientKey | Required for using TLS | TLS client key in PEM format. Must be used with `clientCert`. Can be `secretKeyRef` to use a secret reference. | `"-----BEGIN RSA PRIVATE KEY-----\n\n-----END RSA PRIVATE KEY-----"` -| backOffMaxRetries | N | The maximum number of retries to process the message before returning an error. Defaults to `"0"`, which means that no retries will be attempted. `"-1"` can be specified to indicate that messages should be retried indefinitely until they are successfully processed or the application is shutdown. The component will wait 5 seconds between retries. | `"3"` - ### Communication using TLS To configure communication using TLS, ensure that the MQTT broker (e.g. mosquitto) is configured to support certificates and provide the `caCert`, `clientCert`, `clientKey` metadata in the component configuration. For example: From 1da9cb47f671f1b0717d8fd06ca81d80b66fc91b Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Wed, 30 Nov 2022 15:45:08 -0800 Subject: [PATCH 59/79] Fix resiliency run command in quickstart (#2983) Signed-off-by: Nick Greenfield Signed-off-by: Nick Greenfield --- .../quickstarts/resiliency/resiliency-state-quickstart.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md index d7ccf1b87b5..ef34f4a69ae 100644 --- a/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md +++ b/daprdocs/content/en/getting-started/quickstarts/resiliency/resiliency-state-quickstart.md @@ -89,7 +89,7 @@ Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` co ```bash -dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- python3 +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- python3 ``` Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). @@ -257,7 +257,7 @@ Run the `order-processor` service alongside a Dapr sidecar. In the `dapr run` co ``` ```bash -dapr run --app-id order-processor ../config.yaml --components-path ../../../components/ -- npm start +dapr run --app-id order-processor --config ../config.yaml --components-path ../../../components/ -- npm start ``` Once the application has started, the `order-processor`service writes and reads `orderId` key/value pairs to the `statestore` Redis instance [defined in the `statestore.yaml` component]({{< ref "statemanagement-quickstart.md#statestoreyaml-component-file" >}}). From f5bccb74f037ae451f4371abe713e028036f6079 Mon Sep 17 00:00:00 2001 From: greenie-msft <56556602+greenie-msft@users.noreply.github.com> Date: Fri, 2 Dec 2022 10:19:52 -0800 Subject: [PATCH 60/79] Update version to 1.9.5 (#2987) --- .../support/support-release-policy.md | 17 +++++++++-------- .../layouts/shortcodes/dapr-latest-version.html | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/daprdocs/content/en/operations/support/support-release-policy.md b/daprdocs/content/en/operations/support/support-release-policy.md index 4983d8e80e4..d83034d584b 100644 --- a/daprdocs/content/en/operations/support/support-release-policy.md +++ b/daprdocs/content/en/operations/support/support-release-policy.md @@ -34,9 +34,10 @@ The table below shows the versions of Dapr releases that have been tested togeth | Release date | Runtime | CLI | SDKs | Dashboard | Status | |--------------------|:--------:|:--------|---------|---------|---------| -| November 17th 2022 | 1.94
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | -| November 4th 2022 | 1.9.3
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | -| November 1st 2022 | 1.9.2
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | +| December 2nd 2022 | 1.9.5
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported (current) | +| November 17th 2022 | 1.9.4
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | +| November 4th 2022 | 1.9.3
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | +| November 1st 2022 | 1.9.2
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | | October 26th 2022 | 1.9.1
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.1
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | | October 13th 2022 | 1.9.0
| 1.9.1 | Java 1.7.0
Go 1.6.0
PHP 1.1.0
Python 1.8.3
.NET 1.9.0
JS 2.4.2 | 0.11.0 | Supported | | October 26th 2022 | 1.8.6
| 1.8.1 | Java 1.6.0
Go 1.5.0
PHP 1.1.0
Python 1.7.0
.NET 1.8.0
JS 2.3.0 | 0.11.0 | Supported | @@ -80,14 +81,14 @@ General guidance on upgrading can be found for [self hosted mode]({{< ref self-h | | 1.6.0 | 1.6.2 | | | 1.6.2 | 1.7.5 | | | 1.7.5 | 1.8.6 | -| | 1.8.6 | 1.9.4 | +| | 1.8.6 | 1.9.5 | | 1.6.0 to 1.6.2 | N/A | 1.7.5 | | | 1.7.5 | 1.8.6 | -| | 1.8.6 | 1.9.4 | +| | 1.8.6 | 1.9.5 | | 1.7.0 to 1.7.5 | N/A | 1.8.6 | -| | 1.8.6 | 1.9.4 | -| 1.8.0 to 1.8.6 | N/A | 1.9.4 | -| 1.9.0 | N/A | 1.9.4 | +| | 1.8.6 | 1.9.5 | +| 1.8.0 to 1.8.6 | N/A | 1.9.5 | +| 1.9.0 | N/A | 1.9.5 | ## Breaking changes and deprecations diff --git a/daprdocs/layouts/shortcodes/dapr-latest-version.html b/daprdocs/layouts/shortcodes/dapr-latest-version.html index 49eb9f02436..df0cb50bef1 100644 --- a/daprdocs/layouts/shortcodes/dapr-latest-version.html +++ b/daprdocs/layouts/shortcodes/dapr-latest-version.html @@ -1 +1 @@ -{{- if .Get "short" }}1.9{{ else if .Get "long" }}1.9.4{{ else if .Get "cli" }}1.9.0{{ else }}1.9.4{{ end -}} +{{- if .Get "short" }}1.9{{ else if .Get "long" }}1.9.5{{ else if .Get "cli" }}1.9.0{{ else }}1.9.5{{ end -}} From 28f05d286bea940b7b03e1276f908cf5bfd31a69 Mon Sep 17 00:00:00 2001 From: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Date: Mon, 5 Dec 2022 18:30:48 +0000 Subject: [PATCH 61/79] Updated per feedback Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --- .../components-reference/supported-pubsub/setup-hazelcast.md | 4 +++- daprdocs/data/components/pubsub/generic.yaml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md index 581d5a87492..b26bd27c912 100644 --- a/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md +++ b/daprdocs/content/en/reference/components-reference/supported-pubsub/setup-hazelcast.md @@ -7,7 +7,9 @@ aliases: - "/operations/components/setup-pubsub/supported-pubsub/setup-hazelcast/" --- -> **Deprecation notice**: The Hazelcast PubSub component has been deprecated due to inherent lack of support for "at least once" delivery guarantee, and will be removed in a future Dapr release. +{{% alert title="Deprecation notice" color="warning" %}} +The Hazelcast PubSub component has been deprecated due to inherent lack of support for "at least once" delivery guarantee, and will be removed in a future Dapr release. +{{% /alert %}} ## Component format To setup hazelcast pubsub create a component of type `pubsub.hazelcast`. See [this guide]({{< ref "howto-publish-subscribe.md#step-1-setup-the-pubsub-component" >}}) on how to create and apply a pubsub configuration. diff --git a/daprdocs/data/components/pubsub/generic.yaml b/daprdocs/data/components/pubsub/generic.yaml index 0d8873b7ff5..58fde998f72 100644 --- a/daprdocs/data/components/pubsub/generic.yaml +++ b/daprdocs/data/components/pubsub/generic.yaml @@ -2,7 +2,7 @@ link: setup-hazelcast state: Deprecated version: v1 - since: "1.7" + since: "1.9" - component: In Memory link: setup-inmemory state: Beta From d6d51bab8bca2a4ab8b29b80c62e80fe516fbd21 Mon Sep 17 00:00:00 2001 From: Hannah Hunter Date: Mon, 12 Dec 2022 17:13:49 -0600 Subject: [PATCH 62/79] clarify app namespace Signed-off-by: Hannah Hunter --- .../service-invocation/howto-invoke-discover-services.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md index f302bc1b9ab..e73456d4bfb 100644 --- a/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md +++ b/daprdocs/content/en/developing-applications/building-blocks/service-invocation/howto-invoke-discover-services.md @@ -405,9 +405,9 @@ dapr invoke --app-id checkout --method checkout/100 ### Namespaces -When running on [namespace supported platforms]({{< ref "service_invocation_api.md#namespace-supported-platforms" >}}), you include the namespace of the target app in the app ID: `checkout.production` +When running on [namespace supported platforms]({{< ref "service_invocation_api.md#namespace-supported-platforms" >}}), you include the namespace of the target app in the app ID. For example, following the `.` format, use `checkout.production`. -For example, invoking the example service with a namespace would look like: +Using this example, invoking the service with a namespace would look like: ```bash curl http://localhost:3602/v1.0/invoke/checkout.production/method/checkout/100 -X POST From 05850e7f5b380aa60ce962fd881fe534d501e169 Mon Sep 17 00:00:00 2001 From: Tiago Alves Macambira Date: Tue, 13 Dec 2022 17:35:40 -0800 Subject: [PATCH 63/79] Improve Hashicorp Vault documentation on CA certificates. (#2988) * Improve Hashicorp Vault documentation on CA certificates. Hashicorp Vault component documentation for CA related fields (`caPem`, `caCert` and `caPath`) does not describe the precedence among those flags and a big ambiguous on what those flags mean. This PR tries to alliviate that. Closes #2989 Signed-off-by: Tiago Alves Macambira * Apply suggestions from code review Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: Tiago Alves Macambira Signed-off-by: Tiago Alves Macambira Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Co-authored-by: Mark Fussell --- .../hashicorp-vault.md | 38 ++++++++++++++++--- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md b/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md index 76a33c54c32..19eaebdbdaf 100644 --- a/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md +++ b/daprdocs/content/en/reference/components-reference/supported-secret-stores/hashicorp-vault.md @@ -54,11 +54,11 @@ The above example uses secrets as plain strings. It is recommended to use a loca | Field | Required | Details | Example | |--------------------|:--------:|--------------------------------|---------------------| | vaultAddr | N | The address of the Vault server. Defaults to `"https://127.0.0.1:8200"` | `"https://127.0.0.1:8200"` | -| caCert | N | Certificate Authority use only one of the options. The encoded cacerts to use | `"cacerts"` | -| caPath | N | Certificate Authority use only one of the options. The path to a CA cert file | `"path/to/cacert/file"` | -| caPem | N | Certificate Authority use only one of the options. The encoded cacert pem to use | `"encodedpem"` | +| caPem | N | The inlined contents of the CA certificate to use, in PEM format. If defined, takes precedence over `caPath` and `caCert`. | See below | +| caPath | N | The path to a folder holding the CA certificate file to use, in PEM format. If the folder contains multiple files, only the first file found will be used. If defined, takes precedence over `caCert`. | `"path/to/cacert/holding/folder"` | +| caCert | N | The path to the CA certificate to use, in PEM format. | `""path/to/cacert.pem"` | | skipVerify | N | Skip TLS verification. Defaults to `"false"` | `"true"`, `"false"` | -| tlsServerName | N | TLS config server name | `"tls-server"` | +| tlsServerName | N | The name of the server requested during TLS handshake in order to support virtual hosting. This value is also used to verify the TLS certificate presented by Vault server. | `"tls-server"` | | vaultTokenMountPath | Y | Path to file containing token | `"path/to/file"` | | vaultToken | Y | [Token](https://learn.hashicorp.com/tutorials/vault/tokens) for authentication within Vault. | `"tokenValue"` | | vaultKVPrefix | N | The prefix in vault. Defaults to `"dapr"` | `"dapr"`, `"myprefix"` | @@ -109,9 +109,37 @@ $ curl http://localhost:3501/v1.0/secrets/my-hashicorp-vault/mysecret } ``` -Notice that the name of the secret (`mysecret`) is not repeated in the result. +Notice that the name of the secret (`mysecret`) is not repeated in the result. +## TLS Server verification + +The fields `skipVerify`, `tlsServerName`, `caCert`, `caPath`, and `caPem` control if and how Dapr verifies the vault server's certificate while connecting using TLS/HTTPS. + +### Inline CA PEM caPem + +The `caPem` field value should be the contents of the PEM CA certificate you want to use. Given PEM certificates are made of multiple lines, defining that value might seem challenging at first. YAML allows for a few ways of [defining a multiline values](https://yaml-multiline.info/). + +Below is one way to define a `caPem` field. + +```yaml +apiVersion: dapr.io/v1alpha1 +kind: Component +metadata: + name: vault +spec: + type: secretstores.hashicorp.vault + version: v1 + metadata: + - name: vaultAddr + value: https://127.0.0.1:8200 + - name: caPem + value: |- + -----BEGIN CERTIFICATE----- + << the rest of your PEM file content's here, indented appropriately. >> + -----END CERTIFICATE----- +``` + ## Related links - [Secrets building block]({{< ref secrets >}}) - [How-To: Retrieve a secret]({{< ref "howto-secrets.md" >}}) From eac8e9ffbf5f23b2c4db058126bbe307f8c48bcc Mon Sep 17 00:00:00 2001 From: Ryan Lettieri <67934986+RyanLettieri@users.noreply.github.com> Date: Tue, 13 Dec 2022 18:47:32 -0700 Subject: [PATCH 64/79] Removing stored procedure references from cosmosDB docs (#3000) Signed-off-by: Ryan Lettieri Signed-off-by: Ryan Lettieri Co-authored-by: Ryan Lettieri Co-authored-by: Mark Fussell --- .../setup-azure-cosmosdb.md | 56 ------------------- 1 file changed, 56 deletions(-) diff --git a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md index caf8fb0ee33..2c7a4651c48 100644 --- a/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md +++ b/daprdocs/content/en/reference/components-reference/supported-state-stores/setup-azure-cosmosdb.md @@ -168,62 +168,6 @@ az cosmosdb sql role assignment create \ --role-definition-id "$ROLE_ID" ``` -### Creating the stored procedures for Dapr - -When using Cosmos DB as a state store for Dapr, we need to create two stored procedures in your collection. When you configure the state store using a "master key", Dapr creates those for you, automatically. However, when your state store authenticates with Cosmos DB using Azure AD, because of limitations in the platform we are not able to do it automatically. - -If you are using Azure AD to authenticate your Cosmos DB state store and have not created the stored procedures (or if you are using an outdated version of them), your Dapr sidecar will fail to start and you will see an error similar to this in your logs: - -```text -Dapr requires stored procedures created in Cosmos DB before it can be used as state store. Those stored procedures are currently not existing or are using a different version than expected. When you authenticate using Azure AD we cannot automatically create them for you: please start this state store with a Cosmos DB master key just once so we can create the stored procedures for you; otherwise, you can check our docs to learn how to create them yourself: https://aka.ms/dapr/cosmosdb-aad -``` - -To fix this issue, you have two options: - -1. Configure your component to authenticate with the "master key" just once, to have Dapr automatically initialize the stored procedures for you. While you need to use a "master key" the first time you launch your application, you should be able to remove that and use Azure AD credentials (including Managed Identities) after. -2. Alternatively, you can follow the steps below to create the stored procedures manually. These steps must be performed before you can start your application the first time. - -To create the stored procedures manually, you can use the commands below. - -First, download the code of the stored procedures for the version of Dapr that you're using. This will create two `.js` files in your working directory: - -```sh -# Set this to the version of Dapr that you're using -DAPR_VERSION="release-{{% dapr-latest-version short="true" %}}" -curl -LfO "https://raw.githubusercontent.com/dapr/components-contrib/${DAPR_VERSION}/state/azure/cosmosdb/storedprocedures/__daprver__.js" -curl -LfO "https://raw.githubusercontent.com/dapr/components-contrib/${DAPR_VERSION}/state/azure/cosmosdb/storedprocedures/__dapr_v2__.js" -``` - -> You won't need to update the code for the stored procedures every time you update Dapr. Although the code for the stored procedures doesn't change often, sometimes we may make updates to that: when that happens, if you're using Azure AD authentication your Dapr sidecar will fail to launch until you update the stored procedures, re-running the commands above. - -Then, using the Azure CLI create the stored procedures in Cosmos DB, for your account, database, and collection (or container): - -```sh -# Name of the Resource Group that contains your Cosmos DB -RESOURCE_GROUP="..." -# Name of your Cosmos DB account -ACCOUNT_NAME="..." -# Name of your database in the Cosmos DB account -DATABASE_NAME="..." -# Name of the container (collection) in your database -CONTAINER_NAME="..." - -az cosmosdb sql stored-procedure create \ - --resource-group "$RESOURCE_GROUP" \ - --account-name "$ACCOUNT_NAME" \ - --database-name "$DATABASE_NAME" \ - --container-name "$CONTAINER_NAME" \ - --name "__daprver__" \ - --body @__daprver__.js -az cosmosdb sql stored-procedure create \ - --resource-group "$RESOURCE_GROUP" \ - --account-name "$ACCOUNT_NAME" \ - --database-name "$DATABASE_NAME" \ - --container-name "$CONTAINER_NAME" \ - --name "__dapr_v2__" \ - --body @__dapr_v2__.js -``` - ## Related links - [Basic schema for a Dapr component]({{< ref component-schema >}}) From 7d07eb9aeeab2dd9528703f40aa1ceb72f599eeb Mon Sep 17 00:00:00 2001 From: Lenshood Date: Wed, 14 Dec 2022 11:40:15 +0800 Subject: [PATCH 65/79] fix broken ref in distributed_lock_api Signed-off-by: Lenshood --- daprdocs/content/en/reference/api/distributed_lock_api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/daprdocs/content/en/reference/api/distributed_lock_api.md b/daprdocs/content/en/reference/api/distributed_lock_api.md index ba250e3ae09..f7927021882 100644 --- a/daprdocs/content/en/reference/api/distributed_lock_api.md +++ b/daprdocs/content/en/reference/api/distributed_lock_api.md @@ -21,7 +21,7 @@ POST http://localhost:/v1.0-alpha1/lock/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component schema] ({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component schema]({{< ref component-schema.md >}}) #### Query Parameters @@ -95,7 +95,7 @@ POST http://localhost:/v1.0-alpha1/unlock/ Parameter | Description --------- | ----------- `daprPort` | The Dapr port -`storename` | The `metadata.name` field component file. Refer to the [component schema] ({{< ref component-schema.md>}}) +`storename` | The `metadata.name` field component file. Refer to the [component schema]({{< ref component-schema.md >}}) #### Query Parameters From 6d3f537f2f8ccf31b3dd9a28f17622a105e27cbb Mon Sep 17 00:00:00 2001 From: salaboy Date: Thu, 15 Dec 2022 20:52:43 +0000 Subject: [PATCH 66/79] Adding `helm repo update` (#3010) Signed-off-by: salaboy Signed-off-by: salaboy --- daprdocs/content/en/operations/monitoring/metrics/grafana.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/daprdocs/content/en/operations/monitoring/metrics/grafana.md b/daprdocs/content/en/operations/monitoring/metrics/grafana.md index 7bdc29eade8..edbd807bdc4 100644 --- a/daprdocs/content/en/operations/monitoring/metrics/grafana.md +++ b/daprdocs/content/en/operations/monitoring/metrics/grafana.md @@ -42,6 +42,7 @@ The `grafana-actor-dashboard.json` template shows Dapr Sidecar status, actor inv ```bash helm repo add grafana https://grafana.github.io/helm-charts + helm repo update ``` 1. Install the chart: @@ -176,4 +177,4 @@ First you need to connect Prometheus as a data source to Grafana.