in baselines.py [0:0]
def rep_x_month_placement(self):
on_prem_capacity_left = self.on_prem_capacity - self.on_prem_data_size
cloud_capacity_left = self.total_data_size - self.on_prem_capacity - self.on_prem_data_size
print(f"on-prem capacity left: {human_readable_size(on_prem_capacity_left)}, "
f"cloud capacity left: {human_readable_size(cloud_capacity_left)}")
prob_on_prem = on_prem_capacity_left / (on_prem_capacity_left + cloud_capacity_left)
placed_tables = self.placement.keys()
for table, size in self.table_size_lookup.items():
effective_size = size * (1-self.rep_rate)
if table in placed_tables:
continue
if on_prem_capacity_left > effective_size and cloud_capacity_left > effective_size:
if random() < prob_on_prem:
self.placement[table] = Status.ONPREM
on_prem_capacity_left -= effective_size
else:
self.placement[table] = Status.CLOUD
cloud_capacity_left -= effective_size
elif on_prem_capacity_left > effective_size:
self.placement[table] = Status.ONPREM
on_prem_capacity_left -= effective_size
elif cloud_capacity_left > effective_size:
self.placement[table] = Status.CLOUD
cloud_capacity_left -= effective_size
else:
# print(f"Table {table} ({human_readable_size(size)}) is larger than remaining capacity "
# f"on-prem ({human_readable_size(on_prem_capacity_left)}) "
# f"and cloud ({human_readable_size(cloud_capacity_left)})")
self.placement[table] = Status.CLOUD
cloud_capacity_left -= effective_size
self.on_prem_data_size = self.on_prem_capacity - on_prem_capacity_left
print(f"on-prem data size: {human_readable_size(self.on_prem_data_size)}")