def schedule_2(spec): scheduled_containers = [] info = '' container_id_list_all = itf_database.get_container_id_list() # filter out some containers container_id_list = [] for cid in container_id_list_all: status = itf_database.get_status(cid) if qos_checker.check_space(spec, [status]) and \ qos_checker.check_dataintegrity(spec,[status]) and \ status.StorageReliability > 0 and \ status.ContainerAvailability > 0: container_id_list.append(cid) # check if k containers together can satisfy the spec for k in range(min(5, len(container_id_list))): cid_comb = list(itertools.combinations(container_id_list, k)) for comb in cid_comb: cid_list = list(comb) status_list = [itf_database.get_status(x) for x in cid_list] if qos_checker.check_availability(spec, status_list) and \ qos_checker.check_reliability(spec, status_list) and \ qos_checker.check_bandwidth(spec, status_list) and \ qos_checker.check_latency(spec, status_list): scheduled_containers = cid_list costs = [x.CostPerGBMonth for x in status_list] cost = sum(costs) / 1024.0 * spec.ReservedSize info = '$%.2f/month' % cost return scheduled_containers, info return scheduled_containers, info
def schedule_0(spec): scheduled_containers = [] info = '' container_id_list = itf_database.get_container_id_list() container_id_list = [x for x in container_id_list if \ qos_checker.check_space(spec, [itf_database.get_status(x)])] if len(container_id_list) > 0: container_id = container_id_list[0] status = itf_database.get_status(container_id) scheduled_containers.append(container_id) cost = status.CostPerGBMonth / 1024.0 * spec.ReservedSize info = '$%.2f/month' % cost return scheduled_containers, info