I have been told it is bad practice to use Linux killcommand to stop a StreamBase server instance. Is this correct? What should we do instead?
Note that MS Windows, "Task Manager", End Task function is analogous to Linux kill.
Issue/Introduction
Platform administration guidance
Resolution
StreamBase runs in a Java VM and should be stopped by using the commands: StreamBase 7: sbadmin shutdown StreamBase 10: epadmin servicename=node.cluster stop node
This allows all files to be flushed and closed and all connections to external systems to be ended with a good state. Adapters respond to the shutdown and stop commands by running their shutdown() callback method which allows them to clean up any state managed by the 3rd-party adapter API.
Any other means of stopping a StreamBase server risks data loss from missed writes to disk files and interrupted adapter connections.
For StreamBase 7, a sudden stop can damage disk-based query tables when using transaction mode 0, and can lose data when using transaction mode 1 (the default).
For StreamBase 10, a sudden stop will damage the transactional shared memory for this node, and the node will need to be reinstalled before it is restarted. However this does not result in data-loss for the cluster as long as any other node in the cluster is using the same partition for replication, and remains running or is shut down normally.