Thursday, 28 May 2020
CLI enhancements
One of the key aspects of our new server architecture is the management API exposed through the single port.
While I’m sure there will be those of you who like to write scripts with plenty of curl/wget
magic, and those who prefer the comfort of our new web console, the Infinispan CLI offers a powerful tool which combines the power of the former with the usability of the latter.
During the Infinispan 11 development cycle, the CLI has received numerous enhancements. Let’s look at some of them !
User management
When using the built-in properties-based security realm, you had to use the user-tool
script to manage users, passwords and groups. That functionality has now been built into the CLI:
[disconnected]> user create --password=secret --groups=admin john
[disconnected]> connect --username=joe --password=secret
[infinispan-29934@cluster//containers/default]>
Remote logging configuration
You can now modify the server logging configuration from the CLI. For example, to enable TRACE logging for the org.jgroups
category, use the following:
[infinispan-29934@cluster//containers/default]> logging set --level=TRACE org.jgroups
Note | logging configuration changes are volatile, i.e. they will be lost when restarting a node. |
Server report
To help with debugging issues, the server now implements an aggregate log which includes information such as a thread dump, memory configuration, open sockets/files, etc.
[bespin-29934@cluster//containers/default]> server report
Downloaded report 'infinispan-bespin-29934-20200522114559-report.tar.gz'
Note | this feature currently only works on Linux/Unix systems. |
Real CLI mode
It is now possible to invoke all CLI commands directly from the command-line, without having to resort to interactive mode or a batch. For example:
cli.sh user create --password=secret --groups=admin john
Native CLI
The CLI can now be built as a native executable, courtesy of GraalVM's native-image
tool. We will soon be shipping binaries/images of this, so look out for an announcement.
Tags: cli server management administration logging
Friday, 28 October 2016
Infinispan Docker image: custom configuration
In the previous post we introduced the improved Docker image for Infinispan and showed how to run it with different parameters in order to create standalone, clustered and domain mode servers.
This post will show how to address more advanced configuration changes than swapping the JGroups stack, covering cases like creating extra caches or using a pre-existent configuration file.
Runtime configuration changes
Since the Infinispan server is based on Wildfly, it also supports the Command Line Interface (CLI) to change configurations at runtime.
Let’s consider an example of a custom indexed cache with Infinispan storage. In order to configure it, we need 4 caches, one cache to hold our data, called testCache and other three caches to hold the indexes: LuceneIndexesMetadata, LuceneIndexesData and LuceneIndexesLocking.
This is normally achieved by adding this piece of configuration to the server xml:
This is equivalent to the following script:
To apply it to the server, save the script to a file, and run:
where CONTAINER is the id of the running container.
Everything that is applied using the CLI is automatically persisted in the server, and to check what the script produced, use the command to dump the config to a local file called config.xml.
Check the file config.xml: it should contain all four caches created via the CLI.
Using an existent configuration file
Most of the time changing configuration at runtime is sufficient, but it may be desirable to run the server with an existent xml, or change configurations that cannot be applied without a restart. For those cases, the easier option is to mount a volume in the Docker container and start the container with the provided configuration.
This can be achieved with Docker’s volume support. Consider an xml file called customConfig.xml located on a local folder /home/user/config. The following command:
will create a volume inside the container at the /opt/jboss/infinispan-server/standalone/configuration/extra/ directory, with the contents of the local folder /home/user/config.
The container is then launched with the entrypoint extra/customConfig, which means it will use a configuration named customConfig located under the extra folder relative to where the configurations are usually located at /opt/jboss/infinispan-server/standalone/configuration.
Tags: docker server configuration cli
Friday, 22 June 2012
Infinispan 5.2 alpha out now with Command Line Inteface!
Infinispan 5.2.0.ALPHA1 has just been released and it comes with a load of new goodies, here’s a summary:
-
Command Line Interface! See Tristan’s blog post for more information.
-
Infinispan based Lucene directory has been upgraded to Apache Lucene 3.6.
-
Make @ProvidedId annotation on @Indexed objects optional.
-
Upgrade to JGroups 3.1.x.
-
Upgrade to Berkeley DB 5.x
-
HBase cache store plugin
Full details of all the rest enhancements can be found here. If you have feedback, please visit our forums. Finally, as always, you can download the release from here.
Cheers,
Galder
Tags: release hbase alpha lucene jgroups berkeleydb cli
Friday, 22 June 2012
Infinispan CLI
When using Infinispan, both embedded as a library in an application or as a standalone server, I always longed for a simple standalone tool for interacting with the caches and the data within them. As all itches go, I had to scratch it, and so I present you with Infinispan’s own CLI !
The CLI allows you to inspect and modify the data within an Infinispan cache and also provides access to some of the more advanced features (such as transactions).
The CLI is built out of two elements: a server-side module and the client command tool. The server-side module is optional, and provides the actual interpreter for the commands. Currently the server (and the client) use the JMX protocol to communicate, but in a future release we plan to support other communication protocols (in particular our own HotRod).
To get started, you need at least Infinispan 5.2.0.ALPHA1. Unzip the distribution and start a server:
The startServer.sh script automatically enables remote JMX connections and you can discover the port by running the jps command (part of the JDK/JRE) as follows:
jps -v
which should display something like
26532 Jps -Dapplication.home=/usr/lib/jvm/jdk1.7.0_04 -Xms8m 20508 Main -Djava.net.preferIPv4Stack=true -Dcom.sun.management.jmxremote.port=50434 -Dsun.nio.ch.bugLevel="" -Dlog4j.configuration=file:////home/tst/Downloads/infinispan-5.2.0-SNAPSHOT/etc/log4j.xml
Now we can connect to the Infinispan instance using the CLI as follows:
You will be presented with a prompt:
[jmx://localhost:50434]MyCacheManager>
The above prompt shows which host we’re currently connected to and which CacheManager is being used (in this case: MyCacheManager).
Let’s try putting some data in the cache
put a a
Now let’s check that the cache actually contains the entry we’ve just put
get a
Which will display a glorious
a
The CLI understands several commands. Just type
help
to get a list of them and then
help [commandname]
to get help on a specific command’s syntax.
The CLI uses the wonderful JReadline, so it supports all sorts of fancy buffer editing, history navigation and tab-completion as if you were in your comfortable OS shell (sorry Windows, cmd is not exactly a modern shell).
An important aspect of an Infinispan cache is that you can store whatever data you want in it. The CLI tries to interpret the data from the input you give it. It understands most of the Java native types (int, long, float, double, boolean, String), some additional fancy types (such as UUIDs) and a JSON syntax for mapping any type of Java class, so that you can write:
put user1 \{ "package.MyClass": \{"i": 5, "x": null, "b": true } };
Conversely, when performing a get, the interpreter will output a JSON representation of your classes.
The CLI is still work in progress and will evolve and mature during Infinispan’s 5.2 development cycle. You are all welcome to try it out and provide feedback on the forums, on IRC on channel #infinispan and using our issue tracker to report bugs and ask for enhancements.
I will soon be blogging again, hopefully with a video which will illustrate some of the more fanciful features of the CLI. Enjoy.
Tags: command line interface monitoring data entry shell cli