You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Paulo Motta (Jira)" <ji...@apache.org> on 2025/11/07 22:10:00 UTC

[jira] [Comment Edited] (CASSSIDECAR-340) Add default process-based lifecycle provider to support the lifecycle API

    [ https://issues.apache.org/jira/browse/CASSSIDECAR-340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18036416#comment-18036416 ] 

Paulo Motta edited comment on CASSSIDECAR-340 at 11/7/25 10:09 PM:
-------------------------------------------------------------------

This [PR|https://github.com/apache/cassandra-sidecar/pull/277] adds an implementation of the {{LifecycleProvider}} interface that runs Cassandra as a local unix process, allowing sidecar to start and stop managed instances via the lifecycle APIs as native processes.

CircleCI tests: [link|https://app.circleci.com/pipelines/circleci/KaZH6B8gKQFCZv6WTtM3yk/7N9zyX9UjY83jRQygcQ3Mf/15/workflows/9e3776a1-afba-4dba-9acc-54d968e7ca3a]

*Usage and Configuration*

The ProcessLifecycleProvider requires a Cassandra tarball distribution to be previously installed and configured in the host for each instance it manages. The provider has two sets of configurations: global settings and instance-level settings, defined in {{{}sidecar.yaml{}}}.

Global settings apply to every hosted instance and are defined in the {{lifecycle.provider.parameters}} section of {{{}sidecar.yaml{}}}. The following table describe the possible settings:
 * {*}state_dir{*}: The directory where sidecar keeps the state of its managed instances, like PID file and startup/shutdown logs.
 * {*}cassandra_home{*}: The default Cassandra install location used by instances managed by this sidecar. This setting can be overridable by specific instances in the instance-level settings.
 * {*}env.$VARIABLE{*}: Optional runtime environment variable supplied to instances managed by this sidecar during startup. Example: {{env.MAX_HEAP_SIZE: 8G}}
 * {*}{{cassandra.$OPTION}}{*}: Optional JVM option supplied to instances managed by this sidecar during startup. Example: {{cassandra.ring_delay_ms: 30000}}

Instance-level settings are defined in the {{cassandra_instances[].lifecycle_options}} section of {{sidecar.yaml}} and apply only to a specific instance. The available instance-level settings are:
 * {*}cassandra_conf_dir{*}: The $CASSANDRA_CONF directory where cassandra configuration files for this instance are stored. This directory is not managed by sidecar, so it has to be previously configured for that particular instance.
 * {*}cassandra_home{*}: Optionally override the global Cassandra install location for this instance.
 * {*}cassandra_log_dir{*}: Optionally override the Cassandra log directory to this location.

This provider is disabled by default and can be enabled via {{lifecycle.enabled}} option set to true and {{lifecycle.provider.class_name}} set to {{{}org.apache.cassandra.sidecar.lifecycle.ProcessLifecycleProvider{}}}. A disabled example is provided the default {{{}cassandra.yaml{}}}.

*Example Configuration*
{code:yaml}
cassandra_instances:   - id: 1
    host: localhost1
    port: 9042
    [...]
    lifecycle_options:       cassandra_conf_dir: /etc/cassandra
      cassandra_log_dir: /var/log/cassandra
[...]
lifecycle:   enabled: true
  provider:     class_name: org.apache.cassandra.sidecar.lifecycle.ProcessLifecycleProvider
    parameters:       state_dir: /var/lib/cassandra-sidecar/lifecycle
      cassandra_home: /opt/cassandra
      cassandra.ring_delay_ms: 30000
      env.MAX_HEAP_SIZE: 8G
      env.HEAP_NEWSIZE: 8G
{code}
*How it works?*

The provider start method invokes the Cassandra executable ({{{}$CASSANDRA_HOME/bin/cassandra{}}}) with the environment configured from {{sidecar.yaml}} settings and writes the process ID to a PID file in the lifecycle state directory (ie. {{{}$state_dir/cassandra-$hostname.pid{}}}). Startup logs are logged to {{$state_dir/cassandra-$hostname.out}} and startup errors logged to {{{}$state_dir/cassandra-$hostname.err{}}}. The start method is synchronous and will wait until the process is running, but not necessarily until the Cassandra process is ready (ie. CQL is up and running).

An instance is considered to be running while a PID file exists for that instance in the lifecycle state directory and a process with that PID is currently running.

The stop method stops the process via SIGKILL which will trigger an orderly shutdown of Cassandra. This method is synchronous, blocking until the Cassandra process for the instance is no longer running.

Any unexpected startup or shutdown errors are propagated to the upstream {{LifecycleManager}} as runtime exceptions.


was (Author: paulo):
This [PR|https://github.com/apache/cassandra-sidecar/pull/277] adds an implementation of the {{LifecycleProvider}} interface that runs Cassandra as a local unix process, allowing sidecar to start and stop managed instances via the lifecycle APIs as native processes.

CircleCI tests: [link|https://app.circleci.com/pipelines/circleci/KaZH6B8gKQFCZv6WTtM3yk/7N9zyX9UjY83jRQygcQ3Mf/15/workflows/9e3776a1-afba-4dba-9acc-54d968e7ca3a]

*Usage and Configuration*

The ProcessLifecycleProvider requires a Cassandra tarball distribution to be previously installed and configured in the host for each instance it manages. The provider has two sets of configurations: global settings and instance-level settings, defined in {{{}sidecar.yaml{}}}.

Global settings apply to every hosted instance and are defined in the {{lifecycle.provider.parameters}} section of {{{}sidecar.yaml{}}}. The following table describe the possible settings:
 * {*}state_dir{*}: The directory where sidecar keeps the state of its managed instances, like PID file and startup/shutdown logs.
 * {*}cassandra_home{*}: The default Cassandra install location used by instances managed by this sidecar. This setting can be overridable by specific instances in the instance-level settings.
 * {*}env.$VARIABLE{*}: Optional runtime environment variable supplied to instances managed by this sidecar during startup. Example: {{env.MAX_HEAP_SIZE: 8G}}
 * {*}{{cassandra.$OPTION}}{*}: Optional JVM option supplied to instances managed by this sidecar during startup. Example: {{cassandra.ring_delay_ms: 30000}}

Instance-level settings are defined in the {{cassandra_instances[].lifecycle_options}} section of {{sidecar.yaml}} and apply only to a specific instance. The available instance-level settings are:
 * {*}cassandra_conf_dir{*}: The $CASSANDRA_CONF directory where cassandra configuration files for this instance are stored. This directory is not managed by sidecar, so it has to be previously configured for that particular instance.
 * {*}cassandra_home{*}: Optionally override the global Cassandra install location for this instance.
 * {*}cassandra_log_dir{*}: Optionally override the Cassandra log directory to this location.

This provider is disabled by default and can be enabled via {{lifecycle.enabled}} option set to true and {{lifecycle.provider.class_name}} set to {{{}org.apache.cassandra.sidecar.lifecycle.ProcessLifecycleProvider{}}}. A disabled example is provided the default {{{}cassandra.yaml{}}}.

*Example Configuration*
{code:yaml}
cassandra_instances:   - id: 1
    host: localhost1
    port: 9042
    [...]
    lifecycle_options:       cassandra_conf_dir: /etc/cassandra
      cassandra_log_dir: /var/log/cassandra
[...]
lifecycle:enabled: true
  provider:     class_name: org.apache.cassandra.sidecar.lifecycle.ProcessLifecycleProvider
    parameters:       state_dir: /var/lib/cassandra-sidecar/lifecycle
      cassandra_home: /opt/cassandra
      cassandra.ring_delay_ms: 30000
      env.MAX_HEAP_SIZE: 8G
      env.HEAP_NEWSIZE: 8G
{code}
*How it works?*

The provider start method invokes the Cassandra executable ({{{}$CASSANDRA_HOME/bin/cassandra{}}}) with the environment configured from {{sidecar.yaml}} settings and writes the process ID to a PID file in the lifecycle state directory (ie. {{{}$state_dir/cassandra-$hostname.pid{}}}). Startup logs are logged to {{$state_dir/cassandra-$hostname.out}} and startup errors logged to {{{}$state_dir/cassandra-$hostname.err{}}}. The start method is synchronous and will wait until the process is running, but not necessarily until the Cassandra process is ready (ie. CQL is up and running).

An instance is considered to be running while a PID file exists for that instance in the lifecycle state directory and a process with that PID is currently running.

The stop method stops the process via SIGKILL which will trigger an orderly shutdown of Cassandra. This method is synchronous, blocking until the Cassandra process for the instance is no longer running.

Any unexpected startup or shutdown errors are propagated to the upstream {{LifecycleManager}} as runtime exceptions.

> Add default process-based lifecycle provider to support the lifecycle API
> -------------------------------------------------------------------------
>
>                 Key: CASSSIDECAR-340
>                 URL: https://issues.apache.org/jira/browse/CASSSIDECAR-340
>             Project: Sidecar for Apache Cassandra
>          Issue Type: Sub-task
>          Components: Rest API
>            Reporter: Paulo Motta
>            Assignee: Paulo Motta
>            Priority: Normal
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> CASSSIDECAR-266 added APIs to control the lifecycle of locally managed Cassandra instances. That API supports pluggable lifecycle provider to start and stop Cassandra processes, allowing to potentially support different runtimes.
> This ticket will add a default Unix process-based lifecycle provider implementation to ship by default with sidecar. This provider will use Cassandra scripts provided in the tarball distribution to start and stop the Cassandra process.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org