import ipaddress
import logging
import os
+import pydoc
import random
import re
import signal
import sys
import time
import threading
+import math
import six
from flask import jsonify
return output
+def setup_hugepages(ssh_client, size_kb):
+ """Setup needed number of hugepages for the size specified"""
+
+ NR_HUGEPAGES_PATH = '/proc/sys/vm/nr_hugepages'
+ meminfo = read_meminfo(ssh_client)
+ hp_size_kb = int(meminfo['Hugepagesize'])
+ hp_number = int(math.ceil(size_kb / float(hp_size_kb)))
+ ssh_client.execute(
+ 'echo %s | sudo tee %s' % (hp_number, NR_HUGEPAGES_PATH))
+ hp = six.BytesIO()
+ ssh_client.get_file_obj(NR_HUGEPAGES_PATH, hp)
+ hp_number_set = int(hp.getvalue().decode('utf-8').splitlines()[0])
+ logger.info('Hugepages size (kB): %s, number claimed: %s, number set: %s',
+ hp_size_kb, hp_number, hp_number_set)
+ return hp_size_kb, hp_number, hp_number_set
+
+
def find_relative_file(path, task_path):
"""
Find file in one of places: in abs of path or relative to a directory path,
finally:
sock.close()
return ret
+
+
+def safe_cast(value, type_to_convert, default_value):
+ """Convert value to type, in case of error return default_value
+
+ :param value: value to convert
+ :param type_to_convert: type to convert, could be "type" or "string"
+ :param default_value: default value to return
+ :return: converted value or default_value
+ """
+ if isinstance(type_to_convert, type):
+ _type = type_to_convert
+ else:
+ _type = pydoc.locate(type_to_convert)
+ if not _type:
+ raise exceptions.InvalidType(type_to_convert=type_to_convert)
+
+ try:
+ return _type(value)
+ except ValueError:
+ return default_value