Skip to content

Commit

Permalink
Refactor ydb_slice (#3746)
Browse files Browse the repository at this point in the history
  • Loading branch information
maximyurchuk authored Apr 15, 2024
1 parent 70347d0 commit 15e1a81
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 32 deletions.
21 changes: 16 additions & 5 deletions ydb/tools/ydbd_slice/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -555,7 +555,17 @@ def dispatch_run(func, args, walle_provider):
)

v = vars(args)
slice = handlers.Slice(components, nodes, cluster_details, configurator, v.get('clear_logs'), args, walle_provider)
clear_logs = v.get('clear_logs')
yav_version = v.get('yav_version')
slice = handlers.Slice(
components,
nodes,
cluster_details,
configurator,
clear_logs,
yav_version,
walle_provider
)
func(slice)

if clear_tmp:
Expand Down Expand Up @@ -594,12 +604,13 @@ def _run(args):

def add_update_raw_configs(modes, walle_provider):
def _run(args):
dispatch_run(handlers.Slice.slice_update_raw_configs, args, walle_provider)

dispatch_run(lambda self: handlers.Slice.slice_update_raw_configs(self, args.raw_cfg), args, walle_provider)

mode = modes.add_parser(
"update-raw-cfg",
conflict_handler='resolve',
parents=[direct_nodes_args(), cluster_description_args(), component_args()],
parents=[direct_nodes_args(), cluster_description_args(), binaries_args(), component_args()],
description=""
)
mode.add_argument(
Expand Down Expand Up @@ -646,7 +657,7 @@ def _run(args):

mode = modes.add_parser(
"clear",
parents=[direct_nodes_args(), cluster_description_args(), component_args()],
parents=[direct_nodes_args(), cluster_description_args(), binaries_args(), component_args()],
description="Stop all kikimr instances at the nodes, format all kikimr drivers, shutdown dynamic slots. "
"And don't start nodes afrer it. "
"Use --hosts to specify particular hosts."
Expand All @@ -660,7 +671,7 @@ def _run(args):

mode = modes.add_parser(
"format",
parents=[direct_nodes_args(), cluster_description_args(), component_args()],
parents=[direct_nodes_args(), cluster_description_args(), binaries_args(), component_args()],
description="Stop all kikimr instances at the nodes, format all kikimr drivers at the nodes, start the instances. "
"If you call format for all cluster, you will spoil it. "
"Additional dynamic configuration will required after it. "
Expand Down
54 changes: 27 additions & 27 deletions ydb/tools/ydbd_slice/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def __str__(self):


class Slice:
def __init__(self, components, nodes, cluster_details, configurator, do_clear_logs, args, walle_provider):
def __init__(self, components, nodes, cluster_details, configurator, do_clear_logs, yav_version, walle_provider):
self.slice_kikimr_path = '/Berkanavt/kikimr/bin/kikimr'
self.slice_cfg_path = '/Berkanavt/kikimr/cfg'
self.slice_secrets_path = '/Berkanavt/kikimr/token'
Expand All @@ -30,7 +30,7 @@ def __init__(self, components, nodes, cluster_details, configurator, do_clear_lo
self.cluster_details = cluster_details
self.configurator = configurator
self.do_clear_logs = do_clear_logs
self.args = args
self.yav_version = yav_version
self.walle_provider = walle_provider

def _ensure_berkanavt_exists(self):
Expand Down Expand Up @@ -136,12 +136,12 @@ def slice_install(self):
self._format_drives()

if 'bin' in self.components.get('kikimr', []):
self._update_kikimr(self.nodes, self.configurator.kikimr_bin, self.configurator.kikimr_compressed_bin)
self._update_kikimr()

if 'cfg' in self.components.get('kikimr', []):
static_cfg_path = self.configurator.create_static_cfg()
self._update_cfg(self.nodes, static_cfg_path)
self._deploy_secrets(self.nodes, self.args.yav_version)
self._update_cfg(static_cfg_path)
self._deploy_secrets()

self._start_static()
self._dynamic_configure()
Expand Down Expand Up @@ -344,8 +344,8 @@ def _stop_slot(self, slot):
tasks = self._stop_slot_ret(slot)
self.nodes._check_async_execution(tasks, False)

def _stop_static(self, nodes):
nodes.execute_async("sudo service kikimr stop", check_retcode=False)
def _stop_static(self):
self.nodes.execute_async("sudo service kikimr stop", check_retcode=False)

def _stop_dynamic(self):
if 'dynamic_slots' in self.components:
Expand All @@ -360,44 +360,44 @@ def slice_stop(self):
self._stop_dynamic()

if 'kikimr' in self.components:
self._stop_static(self.nodes)
self._stop_static()

def _update_kikimr(self, nodes, bin_path, compressed_path):
bin_directory = os.path.dirname(bin_path)
nodes.copy(bin_path, self.slice_kikimr_path, compressed_path=compressed_path)
def _update_kikimr(self):
bin_directory = os.path.dirname(self.configurator.kikimr_bin)
self.nodes.copy(self.configurator.kikimr_bin, self.slice_kikimr_path, compressed_path=self.configurator.kikimr_compressed_bin)
for lib in ['libiconv.so', 'liblibaio-dynamic.so', 'liblibidn-dynamic.so']:
lib_path = os.path.join(bin_directory, lib)
if os.path.exists(lib_path):
remote_lib_path = os.path.join('/lib', lib)
nodes.copy(lib_path, remote_lib_path)
self.nodes.copy(lib_path, remote_lib_path)

def _update_cfg(self, nodes, cfg_path):
nodes.copy(cfg_path, self.slice_cfg_path, directory=True)
def _update_cfg(self, cfg_path):
self.nodes.copy(cfg_path, self.slice_cfg_path, directory=True)

def _deploy_secrets(self, nodes, yav_version):
if not yav_version:
def _deploy_secrets(self):
if not self.yav_version:
return

nodes.execute_async(
self.nodes.execute_async(
"sudo bash -c 'set -o pipefail && sudo mkdir -p {secrets} && "
"yav get version {yav_version} -o auth_file | sudo tee {auth}'".format(
yav_version=yav_version,
yav_version=self.yav_version,
secrets=self.slice_secrets_path,
auth=os.path.join(self.slice_secrets_path, 'kikimr.token')
)
)

# creating symlinks, to attach auth.txt to node
nodes.execute_async(
self.nodes.execute_async(
"sudo ln -f {secrets_auth} {cfg_auth}".format(
secrets_auth=os.path.join(self.slice_secrets_path, 'kikimr.token'),
cfg_auth=os.path.join(self.slice_cfg_path, 'auth.txt')
)
)

nodes.execute_async(
self.nodes.execute_async(
"sudo bash -c 'set -o pipefail && yav get version {yav_version} -o tvm_secret | sudo tee {tvm_secret}'".format(
yav_version=yav_version,
yav_version=self.yav_version,
tvm_secret=os.path.join(self.slice_secrets_path, 'tvm_secret')
)
)
Expand All @@ -408,23 +408,23 @@ def slice_update(self):

if 'kikimr' in self.components:
if 'bin' in self.components.get('kikimr', []):
self._update_kikimr(self.nodes, self.configurator.kikimr_bin, self.configurator.kikimr_compressed_bin)
self._update_kikimr()

self.slice_stop()
if 'kikimr' in self.components:
if 'cfg' in self.components.get('kikimr', []):
static = self.configurator.create_static_cfg()
self._update_cfg(self.nodes, static)
self._deploy_secrets(self.nodes, self.args.yav_version)
self._update_cfg(static)
self._deploy_secrets()

self._deploy_slot_configs()
self.slice_start()

def slice_update_raw_configs(self):
def slice_update_raw_configs(self, raw_config_path):
self.slice_stop()
if 'kikimr' in self.components:
if 'cfg' in self.components.get('kikimr', []):
kikimr_cfg = os.path.join(self.args.raw_cfg.config_path, 'kikimr-static')
self._update_cfg(self.nodes, kikimr_cfg)
kikimr_cfg = os.path.join(raw_config_path, 'kikimr-static')
self._update_cfg(kikimr_cfg)

self.slice_start()

0 comments on commit 15e1a81

Please sign in to comment.