def full_info(): # FIXME: optimization point. # temporary size storage, recalculate every hour/day etc used = 0L size = 0L count = 0L for storage in storages.keys(): size += int(storages[storage].allow_space) * 1024 * 1024L used_p, count_p = used_size_on_storage(storage) used += used_p count += count_p fs_items = len(files_rs.keys()) return size, used, count, fs_items
def find_server(hash): """ Returns server to place new chunk """ old = chunk_places(hash) if not old or (old[0] not in storages.keys()): # FIXME: need to check free space on storage s_list, full_info = scan_stats() # >5*chunk MB free space min_size = 5 * settings.chunk_size # s_list = filter(lambda serv: (float(serv['size']) - float(serv['used'])) > min_size, s_list) if not s_list: raise ChunkError("All storages FULL!") return sorted(s_list, key=lambda x: x["chunks_count"])[0]["name"] # return random.choice(storages.keys()) else: return old[0]