Data Grid Operator provides a Batch
CR that lets you create Data Grid resources in bulk. Batch
CR uses the Data Grid command line interface (CLI) in batch mode to carry out sequences of operations.
Modifying a Batch
CR instance has no effect. Batch operations are "one-time" events that modify Data Grid resources. To update .spec
fields for the CR, or when a batch operation fails, you must create a new instance of the Batch
CR.
Running inline batch operations
Include your batch operations directly in a Batch
CR if they do not require separate configuration artifacts.
-
Create a
Batch
CR.-
Specify the name of the Data Grid cluster where you want the batch operations to run as the value of the
spec.cluster
field. -
Add each CLI command to run on a line in the
spec.config
field.apiVersion: infinispan.org/v2alpha1 kind: Batch metadata: name: mybatch spec: cluster: infinispan config: | create cache --template=org.infinispan.DIST_SYNC mycache put --cache=mycache hello world put --cache=mycache hola mundo
-
-
Apply your
Batch
CR.$ oc apply -f mybatch.yaml
-
Check the
status.Phase
field in theBatch
CR to verify the operations completed successfully.
Creating ConfigMaps for batch operations
Create a ConfigMap
so that additional files, such as Data Grid cache configuration, are available for batch operations.
For demonstration purposes, you should add some configuration artifacts to your host filesystem before you start the procedure:
-
Create a
/tmp/mybatch
directory where you can add some files.$ mkdir -p /tmp/mybatch
-
Create a Data Grid cache configuration.
$ cat > /tmp/mybatch/mycache.xml<<EOF <distributed-cache name="mycache" mode="SYNC"> <encoding media-type="application/x-protostream"/> <memory max-count="1000000" when-full="REMOVE"/> </distributed-cache> EOF
-
Create a
batch
file that contains all commands you want to run.For example, the following
batch
file creates a cache named "mycache" and adds two entries to it:create cache mycache --file=/etc/batch/mycache.xml put --cache=mycache hello world put --cache=mycache hola mundo
The
ConfigMap
is mounted in Data Grid pods at/etc/batch
. You must prepend all--file=
directives in your batch operations with that path. -
Ensure all configuration artifacts that your batch operations require are in the same directory as the
batch
file.$ ls /tmp/mybatch batch mycache.xml
-
Create a
ConfigMap
from the directory.$ oc create configmap mybatch-config-map --from-file=/tmp/mybatch
Running batch operations with ConfigMaps
Run batch operations that include configuration artifacts.
-
Create a
ConfigMap
that contains any files your batch operations require.
-
Create a
Batch
CR that specifies the name of a Data Grid cluster as the value of thespec.cluster
field. -
Set the name of the
ConfigMap
that contains yourbatch
file and configuration artifacts with thespec.configMap
field.$ cat > mybatch.yaml<<EOF apiVersion: infinispan.org/v2alpha1 kind: Batch metadata: name: mybatch spec: cluster: infinispan configMap: mybatch-config-map EOF
-
Apply your
Batch
CR.$ oc apply -f mybatch.yaml
-
Check the
status.Phase
field in theBatch
CR to verify the operations completed successfully.
Batch status messages
Verify and troubleshoot batch operations with the status.Phase
field in the Batch
CR.
Phase | Description |
---|---|
|
All batch operations have completed successfully. |
|
Batch operations are queued and resources are initializing. |
|
Batch operations are ready to start. |
|
Batch operations are in progress. |
|
One or more batch operations were not successful. |
Batch operations are not atomic. If a command in a batch script fails, it does not affect the other operations or cause them to rollback.
If your batch operations have any server or syntax errors, you can view log messages in the Batch
CR in the status.Reason
field.
Example batch operations
Use these example batch operations as starting points for creating and modifying Data Grid resources with the Batch
CR.
You can pass configuration files to Data Grid Operator only via a ConfigMap
.
The ConfigMap
is mounted in Data Grid pods at /etc/batch
so you must prepend all --file=
directives with that path.
Caches
-
Create multiple caches from configuration files.
echo "creating caches..."
create cache sessions --file=/etc/batch/infinispan-prod-sessions.xml
create cache tokens --file=/etc/batch/infinispan-prod-tokens.xml
create cache people --file=/etc/batch/infinispan-prod-people.xml
create cache books --file=/etc/batch/infinispan-prod-books.xml
create cache authors --file=/etc/batch/infinispan-prod-authors.xml
echo "list caches in the cluster"
ls caches
-
Create a template from a file and then create caches from the template.
echo "creating caches..."
create cache mytemplate --file=/etc/batch/mycache.xml
create cache sessions --template=mytemplate
create cache tokens --template=mytemplate
echo "list caches in the cluster"
ls caches
Counters
Use the Batch
CR to create multiple counters that can increment and decrement to record the count of objects.
You can use counters to generate identifiers, act as rate limiters, or track the number of times a resource is accessed.
echo "creating counters..."
create counter --concurrency-level=1 --initial-value=5 --storage=PERSISTENT --type=weak mycounter1
create counter --initial-value=3 --storage=PERSISTENT --type=strong mycounter2
create counter --initial-value=13 --storage=PERSISTENT --type=strong --upper-bound=10 mycounter3
echo "list counters in the cluster"
ls counters
Protobuf schema
Register Protobuf schema to query values in caches. Protobuf schema (.proto
files) provide metadata about custom entities and controls field indexing.
echo "creating schema..."
schema --upload=person.proto person.proto
schema --upload=book.proto book.proto
schema --upload=author.proto book.proto
echo "list Protobuf schema"
ls schemas
Tasks
Upload tasks that implement org.infinispan.tasks.ServerTask
or scripts that are compatible with the javax.script
scripting API.
echo "creating tasks..."
task upload --file=/etc/batch/myfirstscript.js myfirstscript
task upload --file=/etc/batch/mysecondscript.js mysecondscript
task upload --file=/etc/batch/mythirdscript.js mythirdscript
echo "list tasks"
ls tasks