Skip to content

Instantly share code, notes, and snippets.

@smiklosovic
Last active June 3, 2020 14:05
Show Gist options
  • Save smiklosovic/8ff922f30bd5f3a1163e3b3d6495f9f6 to your computer and use it in GitHub Desktop.
Save smiklosovic/8ff922f30bd5f3a1163e3b3d6495f9f6 to your computer and use it in GitHub Desktop.
Instaclustr Cassandra Sidecar spec
openapi: "3.0.3"
info:
description: "REST API for Cassandra Sidecar from Instaclustr"
version: "1.1.0"
title: "Instaclustr Cassandra Sidecar"
termsOfService: "https://github.com/instaclustr/cassandra-sidecar"
contact:
email: "[email protected]"
license:
name: "Apache 2.0"
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
servers:
- url: "localhost:4567"
description: "Default URL a Sidecar is bound to when run alongside with Cassandra node"
externalDocs:
description: "Find out more about Cassandra Sidecar"
url: "https://github.com/instaclustr/cassandra-sidecar"
tags:
- name: "operations"
description: "Operations against Cassandra node"
- name: "config"
description: "Configuration of Cassandra as in cassandra.yaml"
- name: "status"
description: "Status of Cassandra node"
- name: "version"
description: "Endpoints for various versions"
paths:
/operations:
get:
tags:
- "operations"
summary: "All operations of Sidecar"
parameters:
- name: "type"
in: "query"
description: "type of operations to filter on"
required: false
schema:
type: array
items:
type: string
enum:
- "cleanup"
- "decommission"
- "drain"
- "flush"
- "rebuild"
- "refresh"
- "scrub"
- "upgradesstables"
- "import"
- "truncate"
- "backup"
- "restore"
- name: status
in: "query"
description: "status of operations to filter on"
required: false
schema:
type: array
items:
type: string
enum:
- "PENDING"
- "RUNNING"
- "COMPLETED"
- "CANCELLED"
- "FAILED"
responses:
"200":
description: "Gets all operations submitted to this Sidecar, irrelevant of their state"
post:
tags:
- "operations"
summary: "Submits an operation to this Sidecar"
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CleanupOperationRequest'
- $ref: '#/components/schemas/DecommissionOperationRequest'
- $ref: '#/components/schemas/DrainOperationRequest'
- $ref: '#/components/schemas/FlushOperationRequest'
- $ref: '#/components/schemas/RebuildOperationRequest'
- $ref: '#/components/schemas/RefreshOperationRequest'
- $ref: '#/components/schemas/RestartOperationRequest'
- $ref: '#/components/schemas/ScrubOperationRequest'
- $ref: '#/components/schemas/UpgradeSSTablesOperationRequest'
- $ref: '#/components/schemas/ImportOperationRequest'
- $ref: '#/components/schemas/TruncateOperationRequest'
- $ref: '#/components/schemas/BackupOperationRequest'
- $ref: '#/components/schemas/RestoreOperationRequest'
discriminator:
propertyName: type
mapping:
cleanup: '#/components/schemas/CleanupOperationRequest'
decommission: '#/components/schemas/DecommissionOperationRequest'
drain: '#/components/schemas/DrainOperationRequest'
flush: '#/components/schemas/FlushOperationRequest'
rebuild: '#/components/schemas/RebuildOperationRequest'
refresh: '#/components/schemas/RefreshOperationRequest'
restart: '#/components/schemas/RestartOperationRequest'
scrub: '#/components/schemas/ScrubOperationRequest'
upgradesstables: '#/components/schemas/UpgradeSSTablesOperationRequest'
import: '#/components/schemas/ImportOperationRequest'
truncate: '#/components/schemas/TruncateOperationRequest'
backup: '#/components/schemas/BackupOperationRequest'
restore: '#/components/schemas/RestoreOperationRequest'
responses:
"200":
description: "By calling this endpoint an operation is submitted for its execution"
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CleanupOperationResponse'
- $ref: '#/components/schemas/DecommissionOperationResponse'
- $ref: '#/components/schemas/DrainOperationResponse'
- $ref: '#/components/schemas/FlushOperationResponse'
- $ref: '#/components/schemas/RebuildOperationResponse'
- $ref: '#/components/schemas/RefreshOperationResponse'
- $ref: '#/components/schemas/RestartOperationResponse'
- $ref: '#/components/schemas/ScrubOperationResponse'
- $ref: '#/components/schemas/UpgradeSSTablesOperationResponse'
- $ref: '#/components/schemas/ImportOperationResponse'
- $ref: '#/components/schemas/TruncateOperationResponse'
- $ref: '#/components/schemas/BackupOperationResponse'
- $ref: '#/components/schemas/RestoreOperationResponse'
/operations/{operationId}:
get:
tags:
- "operations"
summary: "abc"
parameters:
- name: "operationId"
in: "path"
description: "ID of operation to return"
required: true
schema:
type: "string"
format: "uuid"
responses:
"200":
description: "Returns a submitted operation"
"404":
description: "Return code in case there is not any operation under such operationId"
/version:
get:
tags:
- "version"
summary: "returns version of Cassandra Sidecar itself"
responses:
"200":
description: "Cassandra Sidecar version response object"
content:
application/json:
schema:
$ref: "#/components/schemas/SidecarVersion"
/version/sidecar:
get:
tags:
- "version"
summary: "alias for /version endpoint, returns version of Cassandra Sidecar itself"
responses:
"200":
description: "Cassandra Sidecar version response object"
content:
application/json:
schema:
$ref: "#/components/schemas/SidecarVersion"
/version/cassandra:
get:
tags:
- "version"
summary: "returns version of Cassandra node"
responses:
"200":
description: "Cassandra version response object"
content:
application/json:
schema:
$ref: '#/components/schemas/CassandraVersion'
/version/schema:
get:
tags:
- "version"
summary: "returns schema version this Cassandra node is on, same as calling StorageServiceMBean#getSchemaVersion"
responses:
"200":
description: "Version of Cassandra schema"
content:
application/json:
schema:
$ref: "#/components/schemas/CassandraSchemaVersion"
"500":
description: "response with exception causing this server error"
content:
application/json:
schema:
$ref: '#/components/schemas/CassandraSchemaVersionException'
/config:
get:
tags:
- "config"
summary: "returns configuration of a Cassandra node as in its cassandra.yaml file"
responses:
"200":
description: "Configuration of Cassandra node as in /var/lib/cassandra"
"404":
description: "cassandra.yaml file was not found in /var/lib/cassandra"
"500":
description: "Unable to read cassandra.yaml file"
/status:
get:
tags:
- "status"
summary: "returns a state of a Cassandra node"
responses:
"200":
description: "returns a state of a Cassandra node"
content:
application/json:
schema:
$ref: '#/components/schemas/CassandraStatus'
"500":
description: "returns exception causing this server error"
content:
application/json:
schema:
$ref: '#/components/schemas/CassandraStatusException'
components:
schemas:
CleanupOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/CleanupOperationRequest'
DecommissionOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/DecommissionOperationRequest'
DrainOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/DrainOperationRequest'
FlushOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/FlushOperationRequest'
RebuildOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/RebuildOperationRequest'
RefreshOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/RefreshOperationRequest'
RestartOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/RestartOperationRequest'
ScrubOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/ScrubOperationRequest'
UpgradeSSTablesOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/UpgradeSSTablesOperationRequest'
ImportOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/ImportOperationRequest'
TruncateOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/TruncateOperationRequest'
BackupOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/BackupOperationRequest'
RestoreOperationResponse:
type: "object"
allOf:
- $ref: '#/components/schemas/BaseOperation'
- $ref: '#/components/schemas/RestoreOperationRequest'
BaseOperation:
type: object
readOnly: true
required:
- type
- id
- state
- progress
- creationTime
properties:
type:
type: string
description: >
type of operation, each operation has to have its type - based on this type,
type of operation reflects type of request submitted, these types are always same.
id:
type: string
description: >
unique identifier of an operation, a random id is assigned to each operation after
a request is submitted, from caller's perspective, an id is sent back as a response
to his request so he can further query state of that operation, referencing id,
by operations/{id} endpoint
state:
type: string
description: >
state of an operation, operation might be in various states, PENDING - this
operation is pending for being submitted. RUNNING - this operation is actively
doing its job, COMPLETED - this operation has finished successfully, CANCELLED -
this operation was interrupted while being run, FAILED - this operation has
finished errorneously
enum:
- "PENDING"
- "RUNNING"
- "COMPLETED"
- "CANCELLED"
- "FAILED"
progress:
type: string
format: float
description: >
float from 0.0 to 1.0, 1.0 telling that operation is completed,
either successfully or with errors.
creationTime:
type: string
format: date-time
description: >
timestamp telling when this operation was created on Sidecar's side
startTime:
type: string
format: date-time
description: >
timestamp telling when this operation was started by Sidecar, if an operation
is created, it does not necessarily mean that it will be started right away,
in most cases it is the case but if e.g. ExecutorService is full on its working thread,
an execution of an operation is postponed and start time is updated only after that
completionTime:
type: string
format: date-time
description: >
timestamp telling when an operation has finished, irrelevant of its result, an
operation can be failed and it would still have this field populated.
failureCause:
type: object
description: >
This field contains serialized java.lang.Throwable in case this operation has failed
BackupOperationRequest:
type: "object"
required:
- type
- storageLocation
example: >
{
"type": "backup",
"storageLocation": gcp://bucket/cluster/dc/node,
"snapshotTag": "hello",
"entities": "abc.def"
}
properties:
type:
type: string
description: >
type of operation, one has to set it to 'backup' in case he wants this
request to be considered as a backup one
storageLocation:
type: string
description: >
location where SSTables will be uploaded. A value of the storageLocation property
has to have exact format which is 'protocol://bucket/clusterName/dcName/nodeName'.
protocol is either 'gcp', 's3', 'azure' or 'file:/'. For global requests, dcName and
nodeName are changed automatically as these values are read from Cassandra and
storageLocation is updated automatically for every node a specific backup request
will be submitted to so the value of dcName and nodeName is irrelevant for global requests
as they will be modified every time, a bucket does not need to exist, it will be created
automatically if it does not, clusterName has to be specified. There might be automatic
resolution of clusterName in the future however for now, one has to supply this
property on his own.
example: >
gcp://myBucket/dev-cluster/dc1/node1
cassandraDirectory:
type: string
description: >
directory of Cassandra, by default it is /var/lib/cassandra,
in this path, one expects there is 'data' directory
example: /var/lib/cassandra
duration:
type: string
description: >
Based on this field, there will be throughtput per second computed based on what size
data we want to upload we have. The formula is "size / duration". The lower the duration is,
the higher throughput per second we will need and vice versa. This will influence e.g. responsiveness
of a node to its business requests so one can control how much bandwidth is used for backup
purposes in case a cluster is fully operational. The format of this field is "amount unit".
'unit' is just a (case-insensitive) java.util.concurrent.TimeUnit enum value. If not used,
there will not be any restrictions as how fast an upload can be.
example: >
1 hour
bandwidth:
$ref: '#/components/schemas/DataRate'
concurrentConnections:
type: integer
description: >
number of threads used for upload, there might be at most so many uploading threads at any given time,
when not set, it defaults to 10
lockFile:
type: string
description: >
path to file which will be used for locking the critical logic dealing with backups, this locking is done
by locking a file on a file system so other execution will not proceed until the former one has finished. By
default, this path is System.getProperty("java.io.tmpdir") + "/global-transfer-lock".
snapshotTag:
type: string
description: >
name of snapshot to make so this snapshot will be uploaded to storage location. If not specified, the
name of snapshot will be automatically generated and it will have name 'autosnap-milliseconds-since-epoch'
example: "mySnapshot"
dc:
type: string
description: >
name of datacenter to backup, nodes in the other datacenter(s) will not be involved
example:
dc1
entities:
type: string
description:
database entities to backup, it might be either only keyspaces or only tables (from different keyspaces if needed),
e.g. 'k1,k2' if one wants to backup whole keyspaces and 'ks1.t1,ks2,t2' if one wants to backup tables. These formats
can not be used together so 'k1,k2.t2' is invalid. If this field is empty, all keyspaces are backed up.
example:
ks1,ks2
k8sNamespace:
type: string
description: >
name of Kubernetes namespace to fetch Kubernetes secret for backups from, when not specified, it defaults to 'default'
k8sBackupSecretName:
type: string
description: >
name of Kubernetes secret from which credentials used for the communication to cloud
storage providers are read, if not specified, secret name to be read will be automatically
derived in form 'cassandra-backup-restore-secret-cluster-{name-of-cluster}'. These secrets are used only in case
protocol in storageLocation is gcp, azure or s3.
globalRequest:
type: boolean
description: >
flag saying if this request is meant to be global or not, once a global backup request is submitted to Sidecar,
it will coordinate backup for all other nodes in a cluster (including itself) so from a point of view of a caller,
one might just backup whole cluster by one request and repeatedly query its status based on returned operation id.
RestoreOperationRequest:
type: "object"
required:
- type
- snapshotTag
- storageLocation
example:
{
"type": "restore",
"cassandraDirectory": "/var/lib/cassandra",
"cassandraConfigDirectory": "/var/lib/cassandra",
"storageLocation": "gcp://bucket/cluster/dc/node",
"snapshotTag": "hello",
"entities": "abc.def",
"restorationStrategyType": "hardlinks",
"restorationPhase": "download",
"import": {
"type": "import",
"sourceDir": "/var/lib/cassandra/data/downloadedsstables"
},
"globalRequest": "true"
}
properties:
type:
type: string
description: >
type of operation, one has to set it to 'restore' in case he wants this request to be considered as a backup one
storageLocation:
type: string
description: >
similar to field in backup request but used for telling from where files should be downloaded, not uploaded,
in case globalRequest field is set to true, it does not matter what dc and node id is used, these components
in storageLocation path will be automatically changed.
concurrentConnections:
type: integer
description: >
similar to field in backup request but used for downloading files, not uploading them
lockFile:
type: string
description: >
similar to field in backup request
cassandraDirectory:
type: string
description: >
similar to field in backup request
cassandraConfigDirectory:
type: string
description: >
directory where one expects to find 'conf/cassandra.yaml' file in case we need to update it with initial tokens
in case restoration strategy is IN_PLACE.
restoreSystemKeyspace:
type: boolean
description: >
a flag saying if we should restore system keyspaces as well, relevant only for IN_PLACE restoration
snapshotTag:
type: string
description: >
name of snapshot to restore
entities:
type: string
description: >
similar to field in backup request, when empty, all entities in given snapshot will be restored
updateCassandraYaml:
type: boolean
description: >
flag telling if cassandra.yaml should be updated with initial_tokens, relevant only in case of IN_PLACE strategy
restorationStrategyType:
type: string
description: >
strategy telling how we should go about restoration, please refer to details in backup and sidecar documentation
enum:
- IN_PLACE
- HARDLINKS
- IMPORT
restorationPhase:
description: >
phase telling what should we do, this field has to be set just once as DOWNLOAD if globalRequest if true and
coordinator of that request will take care of all other phases automatically on its own
type: string
enum:
- DOWNLOAD
- TRUNCATE
- IMPORT
- CLEANUP
noDeleteTruncates:
type: boolean
description: >
flag saying if we should not delete truncated SSTables after they are imported, as part of CLEANUP phase, defaults to false
noDeleteDownloads:
type: boolean
description: >
flag saying if we should not delete downloaded SSTables from remote location, as part of CLEANUP phase, defaults to false
noDownloadData:
type: boolean
description: >
flag saying if we should not download data from remote location as we expect them to be there already, defaults to false,
setting this to true has sense only in case noDeleteDownloads was set to true in previous restoration requests
schemaVersion:
type: string
description: >
version of schema we want to restore from, upon backup, a schema version is automatically appended to snapshot name and
its manifest is uploaded under that name. In case we have two snapshots having same name, we might distinguish between them
by this schema version. If schema version is not specified, we expect that there will be one and only one backup taken with
respective snapshot name. This schema version has to match the version of a Cassandra node we are doing restore for (hence,
by proxy, when global request mode is used, all nodes have to be on exact same schema version).
exactSchemaVersion:
type: boolean
description: >
flag saying if we indeed want a schema version of a running node match with schema version a snapshot is taken on.
there might be cases when we want to restore a table for which its CQL schema has not changed but it has changed for
other table / keyspace but a schema for that node has changed by doing that.
import:
allOf:
- $ref: '#/components/schemas/ImportOperationRequest'
globalRequest:
type: boolean
description: >
flag saying that this request is a global one, meaning that a Sidecar this request is sent to will act as a restoration
coordinator sending all other requests to each node in a cluster, for each phase.
ImportOperationRequest:
type: "object"
description: >
object used upon restoration, keyspace and table fields do not need to be set when restoration strategy type is
IMPORT or HARDLINKS as this object will be initialised for each entities entry with right keyspace and table.
'sourceDir' property is used for pointing to a directory where we expect to find downloaded SSTables. This in turn means that
all SSTables and other meta files will be downloaded into this directory (from which they will be fed to CFSMB).
All other fields are taken from ColumnFamilyStoreMBean#importNewSSTables.
required:
- type
- sourceDir
properties:
type:
type: string
description: >
has to be set to 'import'
keyspace:
type: string
table:
type: string
sourceDir:
type: string
keepLevel:
type: boolean
keepRepaired:
type: boolean
noVerify:
type: boolean
noVerifyTokens:
type: boolean
noInvalidateCaches:
type: boolean
quick:
type: boolean
description: >
defaults to false, if true, noVerifyTokens, noInvalidateCaches and noVerify will be set to true automatically
extendedVerify:
type: boolean
CleanupOperationRequest:
type: "object"
required:
- type
- keyspace
description: >
triggers the immediate cleanup of keys no longer belonging to a node. By default, clean all keyspaces.
properties:
type:
type: string
keyspace:
type: string
description: >
keyspace to cleanup
tables:
type: array
items:
type: string
description: >
tables to cleanup, when not specified, all tables in a keyspace will be cleaned up
jobs:
type: integer
description: >
number of jobs to use, never uses more that concurrent_compactor threads
DecommissionOperationRequest:
type: "object"
required:
- type
description: >
decommissions a Cassandra node
properties:
type:
type: string
force:
type: boolean
description: >
forcibly decommission a node, even if by doing so there will not be
enough replicas for responding to requests, this option is relevant only for Cassandra 4.x
and it is not in use for lower versions, defaults to false.
DrainOperationRequest:
type: "object"
required:
- type
description: >
drain a node, this operation will be successful only in case a node is in state NORMAL,
when a node was already drained or it is in the middle of draining, this operation returns immediately.
properties:
type:
type: string
FlushOperationRequest:
type: "object"
required:
- type
- keyspace
description: >
flushes tables of a keyspace or all tables of a keyspace when tables are not specified
properties:
type:
type: string
keyspace:
type: string
description: >
keyspace to flush
tables:
type: array
items:
type: string
description: >
tables to flush, if not provided or empty, flush all tables in a keyspace
RebuildOperationRequest:
type: "object"
required:
- type
description: >
rebuilds data by streaming from other nodes,
properties:
type:
type: string
keyspace:
type: string
description: >
specific keyspace to rebuild, if not specified, all keyspaces are rebuilt
sourceDC:
type: string
description: >
name of DC from which to select sources for streaming, by default, pick any DC
specificTokens:
type: array
items:
$ref: '#/components/schemas/TokenRange'
description: >
rebuild specific token ranges
specificSources:
type: array
items:
type: string
description: >
specify hosts that this node should stream from when specificTokens are used
DataRate:
type: object
required:
- unit
description: >
bandwidth used during uploads
properties:
value:
type: integer
description: >
quantified value of bandwidth, an integer
unit:
type: string
description: >
unit of 'data bandwidth'
enum:
- "BPS"
- "KBPS"
- "MBPS"
- "GBPS"
TokenRange:
type: object
required:
- start
- end
properties:
start:
type: string
description: >
starting token of a range
end:
type: string
description: >
ending token of a range
RefreshOperationRequest:
type: "object"
required:
- type
- keyspace
- table
description: >
refreshes a table, this is done by calling StorageServiceMBean#loadNewSSTables
properties:
type:
type: string
keyspace:
type: string
description: >
keyspace to refresh
table:
type: string
description: >
table to refresh
RestartOperationRequest:
type: "object"
required:
- type
description: >
restarts a Cassandra node this Sidecar talks to. This operation will be successfully
carried out only in case both Cassandra node as well as this Sidecar are running in Kubernetes.
There is an assumption that Cassandra node and Sidecar are running in separate Docker containers as part
of the same Kubernetes Pod. The restart is done by executing "/bin/kill 1" of Cassandra container where
pid 1 stands for Cassandra process. The logic behind restart is that Kubernetes detects that container has
finished and it will start it again on its own. Before Cassandra node is stopped, it is drained first so
there are not any requests comming to this node whatsover hence restart is safe.
properties:
type:
type: string
ScrubOperationRequest:
type: "object"
required:
- type
- keyspace
properties:
type:
type: string
keyspace:
type: string
description: >
keyspace to scrub
tables:
type: array
items:
type: string
description: >
tables to scrub, empty or not provided will scrub all tables in respective keyspace
jobs:
type: integer
description: >
number of sstables to scrub simultanously, set to 0 to use all available compaction threads
disableSnapshot:
type: boolean
description: >
scrubbed CFs will be snapshotted first, defaults to false
skipCorrupted:
type: boolean
description: >
skip corrupted partitions even when scrubbing counter tables, defaults to false
noValidate:
type: boolean
description: >
do not validate columns using column validator, defaults to false
reinsertOverflowedTTL:
type: boolean
description: >
Rewrites rows with overflowed expiration date affected by
CASSANDRA-14092 with the maximum supported expiration date of
2038-01-19T03:14:06+00:00. The rows are rewritten with the original
timestamp incremented by one millisecond to override/supersede any
potential tombstone that may have been generated during compaction
of the affected rows.
UpgradeSSTablesOperationRequest:
type: object
required:
- type
- keyspace
properties:
type:
type: string
keyspace:
type: string
description: >
keyspace to upgrade SSTables of
tables:
type: array
items:
type: string
description: >
an array of tables to upgrade SSTables of, empty or not provided array will default to upgrading of
SSTables of all tables in respective keyspace
jobs:
type: integer
description: >
the number of threads to use - 0 means use all available,
it never uses more than concurrent_compactor threads
includeAllSStables:
type: boolean
description: "include all sstables, even those already on the current version, defaults to false"
TruncateOperationRequest:
type: object
required:
- type
- keyspace
- table
properties:
type:
type: string
keyspace:
type: string
description: "keyspace to truncate"
table:
type: string
description: "table to truncate"
CassandraVersion:
type: "object"
properties:
major:
type: integer
example: 3
minor:
type: integer
example: 11
patch:
type: integer
example: 7
dsePatch:
type: integer
example: -1
preReleaseLabels:
type: array
description: "Labels for Cassandra version, e.g. SNAPSHOT"
example: ["SNAPSHOT"]
items:
type: string
SidecarVersion:
type: "object"
properties:
version:
type: "string"
description: "textual representation of Sidecar version"
example: "cassandra-sidecar 1.1.0"
buildTime:
type: "string"
format: "date-time"
description: "timestamp this Sidecar was built"
example: "2020-05-28T22:26:50+0200"
gitCommit:
type: "string"
description: "git commit hash this Sidecar was built from"
example: "8e59dd8d9032429c4f8defd4024ee791d9e06de8"
CassandraSchemaVersion:
type: "object"
properties:
schemaVersion:
type: "string"
description: "UUID representing a version of Cassandra node as reported by its StorageServiceMBean#getSchemaVersion"
example: "329319a5-cc1b-3db3-8001-c179b4063d04"
CassandraSchemaVersionException:
type: "object"
properties:
exception:
type: object
CassandraStatus:
type: "object"
properties:
nodeState:
type: string
description: "State of a Cassandra node as reported from StorageServiceMBean#getOperationMode"
enum:
- "STARTING"
- "NORMAL"
- "JOINING"
- "LEAVING"
- "DECOMMISSIONED"
- "MOVING"
- "DRAINING"
- "DRAINED"
CassandraStatusException:
type: "object"
properties:
exception:
type: object
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment