Alternator supports four ways in which write operations can use quorum writes or LWT or both, which we called "write isolation policies". Until this patch, Alternator defaulted to the most generally safe policy, "always_use_lwt". This default could have been overriden for each table separately, but there was no way to change this default for all tables. This patch adds a "--alternator-write-isolation" configuration option which allows changing the default. Moreover, @dorlaor asked that users must *explicitly* choose this default mode, and not get "always_use_lwt" without noticing. The previous default, "always_use_lwt" supports any workload correctly but because it uses LWT for all writes it may be disappointingly slow for users who run write-only workloads (including most benchmarks) - such users might find the slow writes so disappointing that they will drop Scylla. Conversely, a default of "forbid_rmw" will be faster and still correct, but will fail on workloads which need read-modify-write operations - and suprise users that need these operations. So Dor asked that that *none* of the write modes be made the default, and users must make an informed choice between the different write modes, rather than being disappointed by a default choice they weren't aware of. So after this patch, Scylla refuses to boot if Alternator is enabled but a "--alternator-write-isolation" option is missing. The patch also modifies the relevant documentation, adds the same option to our docker image, and the modifies the test-running script test/alternator/run to run Scylla with the old default mode (always_use_lwt), which we need because we want to test RMW operations as well. Fixes #6452 Signed-off-by: Nadav Har'El <nyh@scylladb.com> Message-Id: <20200524160338.108417-1-nyh@scylladb.com>
30 lines
2.5 KiB
Python
30 lines
2.5 KiB
Python
import argparse
|
|
|
|
|
|
def parse():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--developer-mode', default='1', choices=['0', '1'], dest='developerMode')
|
|
parser.add_argument('--experimental', default=0, choices=['0', '1'])
|
|
parser.add_argument('--seeds', default=None, help="specify seeds - if left empty will use container's own IP")
|
|
parser.add_argument('--cpuset', default=None, help="e.g. --cpuset 0-3 for the first four CPUs")
|
|
parser.add_argument('--smp', default=None, help="e.g --smp 2 to use two CPUs")
|
|
parser.add_argument('--memory', default=None, help="e.g. --memory 1G to use 1 GB of RAM")
|
|
parser.add_argument('--reserve-memory', default=None, dest='reserveMemory', help="e.g. --reserve-memory 1G to reserve 1 GB of RAM")
|
|
parser.add_argument('--overprovisioned', default=None, choices=['0', '1'],
|
|
help="run in overprovisioned environment. By default it will run in overprovisioned mode unless --cpuset is specified")
|
|
parser.add_argument('--listen-address', default=None, dest='listenAddress')
|
|
parser.add_argument('--rpc-address', default=None, dest='rpcAddress')
|
|
parser.add_argument('--broadcast-address', default=None, dest='broadcastAddress')
|
|
parser.add_argument('--broadcast-rpc-address', default=None, dest='broadcastRpcAddress')
|
|
parser.add_argument('--api-address', default=None, dest='apiAddress')
|
|
parser.add_argument('--alternator-address', default=None, dest='alternatorAddress', help="Alternator API address to listen to. Defaults to listen address.")
|
|
parser.add_argument('--alternator-port', default=None, dest='alternatorPort', help="Alternator API port to listen to. Disabled by default.")
|
|
parser.add_argument('--alternator-write-isolation', default=None, dest='alternatorWriteIsolation', help="Alternator default write isolation policy.")
|
|
parser.add_argument('--disable-version-check', default=False, action='store_true', dest='disable_housekeeping', help="Disable version check")
|
|
parser.add_argument('--authenticator', default=None, dest='authenticator', help="Set authenticator class")
|
|
parser.add_argument('--authorizer', default=None, dest='authorizer', help="Set authorizer class")
|
|
parser.add_argument('--cluster-name', default=None, dest='clusterName', help="Set cluster name")
|
|
parser.add_argument('--endpoint-snitch', default=None, dest='endpointSnitch', help="Set endpoint snitch")
|
|
parser.add_argument('--replace-address-first-boot', default=None, dest='replaceAddressFirstBoot', help="IP address of a dead node to replace.")
|
|
return parser.parse_args()
|