This is an automated email from the ASF dual-hosted git repository.

ricardozanini pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-docs.git


The following commit(s) were added to refs/heads/main by this push:
     new 0bdddb920 [KOGITO-9982] Add persistence to SonataFlow CRD (#529)
0bdddb920 is described below

commit 0bdddb92009cdce3a02178b4cc108ec43214d693
Author: Jordi Gil <[email protected]>
AuthorDate: Mon Mar 11 10:17:38 2024 -0400

    [KOGITO-9982] Add persistence to SonataFlow CRD (#529)
---
 .../modules/ROOT/pages/cloud/index.adoc            |   8 ++
 .../pages/cloud/operator/using-persistence.adoc    | 110 +++++++++++++++++++++
 2 files changed, 118 insertions(+)

diff --git a/serverlessworkflow/modules/ROOT/pages/cloud/index.adoc 
b/serverlessworkflow/modules/ROOT/pages/cloud/index.adoc
index f9502a1c9..59b944cbe 100644
--- a/serverlessworkflow/modules/ROOT/pages/cloud/index.adoc
+++ b/serverlessworkflow/modules/ROOT/pages/cloud/index.adoc
@@ -109,6 +109,14 @@ xref:cloud/operator/service-discovery.adoc[]
 Learn how to configure and use the {operator_name} Kubernetes service discovery
 --
 
+[.card]
+--
+[.card-title]
+xref:cloud/operator/using-persistence.adoc[]
+[.card-description]
+Learn how to define the workflow `Persistence` field to allow the workflow to 
store its context
+--
+
 [.card]
 --
 [.card-title]
diff --git 
a/serverlessworkflow/modules/ROOT/pages/cloud/operator/using-persistence.adoc 
b/serverlessworkflow/modules/ROOT/pages/cloud/operator/using-persistence.adoc
new file mode 100644
index 000000000..1c5323f65
--- /dev/null
+++ 
b/serverlessworkflow/modules/ROOT/pages/cloud/operator/using-persistence.adoc
@@ -0,0 +1,110 @@
+= Using persistence in the SonataFlow Workflow CR
+:compat-mode!:
+// Metadata:
+:description: Using persistence in the workflow instance to store its context
+:keywords: sonataflow, workflow, serverless, operator, kubernetes, persistence
+
+
+This document describes how to configure a SonataFlow instance to use 
persistence to store the flow's context in a relational database.
+
+== Configuring the SonataFlow CR to use persistence
+
+Kubernetes's pods are stateless by definition. In some scenarios, this can be 
a challenge for workloads that require maintaining the status of 
+the application regardless of the pod's lifecycle. In the case of 
{product_name}, the context of the workflow is lost when the pod restarts.
+If your workflow requires recovery from such scenarios, you must to make these 
additions to your workflow CR:
+Use the `persistence` field in the `SonataFlow` workflow spec to define the 
database service located in the same cluster.
+There are 2 ways to accomplish this:
+
+* Using the Platform CR's defined persistence
+When the Platform CR is deployed with its persistence spec populated it 
enables workflows to leverage its configuration to populate the persistence
+properties in the workflows. 
+
+[source,yaml,subs="attributes+"]
+---
+apiVersion: sonataflow.org/v1alpha08
+kind: SonataFlowPlatform
+metadata:
+  name: sonataflow-platform
+spec:
+  persistence:
+    postgresql:
+      secretRef:
+        name: postgres-secrets
+        userKey: POSTGRES_USER
+        passwordKey: POSTGRES_PASSWORD
+      serviceRef:
+        name: postgres
+        port: 5432
+        databaseName: sonataflow
+        databaseSchema: shared
+  build:
+    config:
+      strategyOptions:
+        KanikoBuildCacheEnabled: "true"
+---
+
+The values of `POSTGRES_USER` and `POSTGRES_PASSWORD` are the keys in the 
[Kubernetes secret](https://kubernetes.io/docs/concepts/configuration/secret/) 
that contains the credentials to connect to the postgreSQL instance. 
+The SonataFlow Workflow CR 
+is defined with its `Persistence` field defined as empty.
+
+[source,yaml,subs="attributes+"]
+apiVersion: sonataflow.org/v1alpha08
+kind: SonataFlow
+metadata:
+  name: callbackstatetimeouts
+  annotations:
+    sonataflow.org/description: Callback State Timeouts Example k8s
+    sonataflow.org/version: 0.0.1
+spec:
+  persistence: {}
+  ...
+---
+
+This configuration signals the operator that the workflow requires persistence 
and that it expects its configuration to be populated accordingly. 
+The operator will add the relevant JDBC properties in the 
`application.properties`
+generated and as part of the pod´s environment so that it can connect to the 
persistence service defined in the `Platform` CR.
+
+[NOTE]
+====
+Currently, PostgreSQL is the only persistence supported.
+====
+
+* Using the custom defined persistence in the `SonataFlow` CR
+
+Alternatively, you can define a dedicated configuration in the `SonataFlow` CR 
instance using the same schema format found in the Platform CRD:
+
+[source,yaml,subs="attributes+"]
+apiVersion: sonataflow.org/v1alpha08
+kind: SonataFlow
+metadata:
+  name: callbackstatetimeouts
+  annotations:
+    sonataflow.org/description: Callback State Timeouts
+    sonataflow.org/version: 0.0.1
+spec:
+  persistence:
+    postgresql:
+      secretRef:
+        name: postgres-secrets
+        userKey: POSTGRES_USER
+        passwordKey: POSTGRES_PASSWORD
+      serviceRef:
+        name: postgres
+        port: 5432
+        databaseName: sonataflow
+        databaseSchema: callbackstatetimeouts
+  ...
+---
+
+Like in the Platform CR case, the values of the `POSTGRES_USER` and 
`POSTGRES_PASSWORD` are the secret keys in the secret that contain the 
credentials to connect to
+the PostgreSQL instace.
+
+== Conclusion
+You can enable SQL persistence in your workflows by configuring each 
`SonataFlow` CR instance. And when the `SonataFlowPlatform` CR contains the 
persistence field configured,
+the operator uses this information to configure those `SonataFlow` CRs that 
request persistence. When both the `Platform CR` and the `SonataFlow CR` 
contain persistence 
+configuration, the operator will use the `Persistence` values from the 
`SonataFlow` CR. 
+
+== Additional resources
+* xref:cloud/operator/developing-workflows.adoc[]
+
+include::../../../pages/_common-content/report-issue.adoc[]
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to