Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions ydb/tools/cfg/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ def __init__(self, template, host_info_provider, validator=None, database=None,
self.table_profiles_config = self.__cluster_description.get("table_profiles_config")
self.http_proxy_config = self.__cluster_description.get("http_proxy_config")
self.blob_storage_config = self.__cluster_description.get("blob_storage_config")
self.infer_pdisk_slot_count = self._extract_infer_pdisk_slot_count(self.blob_storage_config)
self.bootstrap_config = self.__cluster_description.get("bootstrap_config")
self.memory_controller_config = self.__cluster_description.get("memory_controller_config")
self.kafka_proxy_config = self.__cluster_description.get("kafka_proxy_config")
Expand Down Expand Up @@ -359,6 +360,15 @@ def get_subjective_description(objective_description, tenant, validator):
subjective_description.validate()
return subjective_description

def _extract_infer_pdisk_slot_count(self, blob_storage_config):
if blob_storage_config is None:
return None
if 'infer_pdisk_slot_count' not in blob_storage_config:
return None
infer_pdisk_slot_count = blob_storage_config['infer_pdisk_slot_count']
del blob_storage_config['infer_pdisk_slot_count']
return infer_pdisk_slot_count

@property
def storage_config_generation(self):
return self.__cluster_description.get("storage_config_generation", 0)
Expand Down
6 changes: 6 additions & 0 deletions ydb/tools/cfg/dynamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,12 @@ def add_drive(array, drive):
if drive.expected_slot_count is not None:
pc = pdisk_config.TPDiskConfig(ExpectedSlotCount=drive.expected_slot_count)
kwargs.update(PDiskConfig=pc)

if self._cluster_details.infer_pdisk_slot_count is not None:
infer_settings = self._cluster_details.infer_pdisk_slot_count.get(str(drive.type).lower())
if infer_settings is not None:
kwargs.update(InferPDiskSlotCountFromUnitSize=infer_settings['unit_size'])
kwargs.update(InferPDiskSlotCountMax=infer_settings['max_slots'])
array.add(**kwargs)

for host_config in self._cluster_details.host_configs:
Expand Down
25 changes: 25 additions & 0 deletions ydb/tools/cfg/static.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,29 @@ def normalize_dictionary(self, yaml_config):
return yaml_config
return result

def _apply_infer_pdisk_slot_count_to_host_config(self, host_config):
infer_settings = self.__cluster_details.infer_pdisk_slot_count
if infer_settings is None:
return

target_cfg = {
'infer_pdisk_slot_count_from_unit_size': {},
'infer_pdisk_slot_count_max': {},
}

ssd_settings = infer_settings.get('ssd')
if ssd_settings:
target_cfg['infer_pdisk_slot_count_from_unit_size']['ssd'] = ssd_settings['unit_size']
target_cfg['infer_pdisk_slot_count_max']['ssd'] = ssd_settings['max_slots']

rot_settings = infer_settings.get('rot')
if rot_settings:
target_cfg['infer_pdisk_slot_count_from_unit_size']['rot'] = rot_settings['unit_size']
target_cfg['infer_pdisk_slot_count_max']['rot'] = rot_settings['max_slots']

if target_cfg["infer_pdisk_slot_count_from_unit_size"]:
host_config.update(target_cfg)

def get_normalized_config(self):
app_config = self.get_app_config()
dictionary = json_format.MessageToDict(app_config, preserving_proto_field_name=True)
Expand Down Expand Up @@ -496,6 +519,8 @@ def get_normalized_config(self):

drive['pdisk_config'] = self.normalize_dictionary(json_format.MessageToDict(pd))

self._apply_infer_pdisk_slot_count_to_host_config(host_config)

if self.table_service_config:
normalized_config["table_service_config"] = self.table_service_config

Expand Down
Loading