mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-01 04:26:48 +00:00
We have problem to run fstrim with nomerges=2, so we need to change the parameter to 1 during fstrim execution. To do this, this fix changes follow things: - revert dropping scylla_fstrim on Ubuntu 16.04/CentOS - disable distribution provided fstrim script - enable scylla_fstrim on all distributions - introduce --set-nomerges on scylla-blocktune - scylla_fstrim call scylla-blocktune by following order: - 'scylla-blocktune --set-nomerges 1' - 'fstrim' for each devices - 'scylla-blocktune --set-nomerges 2' Fixes #2649 Signed-off-by: Takuya ASADA <syuu@scylladb.com> Message-Id: <1501531393-21109-1-git-send-email-syuu@scylladb.com>
58 lines
1.9 KiB
Python
Executable File
58 lines
1.9 KiB
Python
Executable File
#!/usr/bin/python3
|
|
#
|
|
# Copyright 2017 ScyllaDB
|
|
#
|
|
|
|
#
|
|
# This file is part of Scylla.
|
|
#
|
|
# Scylla is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Scylla is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with Scylla. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import os
|
|
import sys
|
|
import yaml
|
|
import argparse
|
|
import subprocess
|
|
|
|
def find_mount_point(path):
|
|
path = os.path.abspath(path)
|
|
while not os.path.ismount(path):
|
|
path = os.path.dirname(path)
|
|
return path
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Run fstrim on Scylla data partitions.')
|
|
parser.add_argument('-c', '--config', dest='config', action='store',
|
|
default='/etc/scylla/scylla.yaml',
|
|
help='path to scylla.yaml')
|
|
args = parser.parse_args()
|
|
s = open(args.config).read()
|
|
cfg = yaml.load(s)
|
|
mountpoints = set()
|
|
for d in cfg['data_file_directories']:
|
|
mountpoints.add(find_mount_point(d))
|
|
|
|
mountpoints.add(find_mount_point(cfg['commitlog_directory']))
|
|
# workaround of #2649
|
|
subprocess.call(["/usr/lib/scylla/scylla-blocktune", "--set-nomerges", "1"])
|
|
for d in mountpoints:
|
|
print("Running fstrim on {} ...".format(d))
|
|
res = subprocess.call(["fstrim", d])
|
|
if res != 0:
|
|
print("{} doesn't support TRIM.".format(d))
|
|
subprocess.call(["/usr/lib/scylla/scylla-blocktune", "--set-nomerges", "2"])
|
|
|
|
if __name__ == "__main__":
|
|
main()
|