Open hekaisheng opened 3 years ago
This proposal aims to improve the stability of storage service and clarify the responsibilities of each actors created by storage service.
async def upload_storage_info(self):
async def upload_disk_info(self):
plasma
async def ref_object(session_id: str, data_key: str, level: StorageLevel, object_id: ObjectID):
async def release_object(session_id: str, data_key: str, level: StorageLevel):
def request_quota(self, size: int) -> bool:
def release_quota(self, size: int):
def update_quota(self, size: int):
def get_quota_info(self) -> Tuple[float, float]:
def get_spill_keys(request_size: int, level: StorageLevel, band_name: str, multiplier=1.1)
def get_fetch_infos(session_id: str, data_keys: List[str])
get
put
StorageHandlerActor
def spill(self, session_id: str, data_keys: List[int], level: StorageLevel, block_size=None):
SenderActor
DataManagerActor
MetaAPI
Key part I think is dividing entire module into submodules including spill, transfer etc.
We also need APIs to fetch data into a priority list of storage levels to avoid redundant RPC calls.
This proposal aims to improve the stability of storage service and clarify the responsibilities of each actors created by storage service.
Actors on main pool
async def upload_storage_info(self):
async def upload_disk_info(self):
plasma
.async def ref_object(session_id: str, data_key: str, level: StorageLevel, object_id: ObjectID):
async def release_object(session_id: str, data_key: str, level: StorageLevel):
def request_quota(self, size: int) -> bool:
def release_quota(self, size: int):
def update_quota(self, size: int):
def get_quota_info(self) -> Tuple[float, float]:
def get_spill_keys(request_size: int, level: StorageLevel, band_name: str, multiplier=1.1)
def get_fetch_infos(session_id: str, data_keys: List[str])
Actors on subpools
get
,put
, etc.StorageHandlerActor
when spilling is triggered, normally created on IO processes, also necessary for GPU band processes.def spill(self, session_id: str, data_keys: List[int], level: StorageLevel, block_size=None):
StorageHandlerActor
, normally created on IO processes, also necessary for GPU band processes.SenderActor
, normally created on IO processes, also necessary for GPU band processes.Other changes
DataManagerActor
, all storage meta will be stored in meta service on each worker, useMetaAPI
to delete and update storage meta.