#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright 2017-present ScyllaDB
#

#
# SPDX-License-Identifier: AGPL-3.0-or-later

import os
import sys
import yaml
import argparse
import subprocess

from scylla_util import parse_scylla_dirs_with_default


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()
    cfg = parse_scylla_dirs_with_default(conf=args.config)
    mountpoints = set()
    for d in cfg['data_file_directories']:
        mountpoints.add(find_mount_point(d))

    mountpoints.add(find_mount_point(cfg['commitlog_directory']))
    mountpoints.add(find_mount_point(cfg['schema_commitlog_directory']))
    # workaround of #2649
    subprocess.call(["/opt/scylladb/scripts/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(["/opt/scylladb/scripts/scylla-blocktune", "--set-nomerges", "2"])

if __name__ == "__main__":
    main()
