in optimizer.py [0:0]
def __init__(self, job_data_access_df,
workload_print_info,
db_table_size_file_name,
rep_threshold=None,
rep_strategy="",
yugong=False,
ownership=None,
rep_list=None,
k=1.0,
log_dir='.',
):
self.df = None
self.previous_placement_path = None
self.prev_z = None
self.prev_w = None
self.db_table_num = None
self.abFP_num = None
self.total_storage_gb = None
self.dataset_num = None
self.job_data_access_df = job_data_access_df
self.workload_print_info = workload_print_info
print("workload info", workload_print_info)
self.db_table_size_path = db_table_size_file_name
print("db_table_size path", db_table_size_file_name)
self.rep_threshold = rep_threshold
self.rep_strategy = rep_strategy
self.rep_constr = []
self.rep_list = []
self.yugong = yugong
self.ownership = None
if yugong:
print("** Yugong mode **")
assert ownership is not None, "Ownership must be provided in Yugong mode"
assert rep_list is not None, "Replication list must be provided in Yugong mode (to align with Moirai)"
self.ownership = ownership
self.rep_list = rep_list
self.s = None
self.adj_list_input = defaultdict(dict) # Maps table id -> {job id: input_size}
self.adj_list_output = defaultdict(dict) # Maps table id -> {job id: output_size}
self.c = None
self.k = k
self.X_scale = 0
self.load_workload()
assert self.X_scale > 0
self.df_table_size = None
self.prepare_db_table_size(db_table_size_file_name)
assert self.df_table_size is not None
self.unique_abFP = {}
self.unique_db_tables = self.prepare_replication()
self.prepare_workload()
self.model = None # gurobi model
self.prepare_basic_model()
self.y, self.z, self.w, self.u, self.v = (None, None, None, None, None)
self.log_dir = log_dir
self.add_y_z_w_u_v(self.abFP_num, self.dataset_num, True, log_dir=log_dir)
self.workload_constrs = self.add_workload_constr()