fix: requester been cancel unexpected & add logs
This commit is contained in:
parent
d53cc83e3f
commit
50af6974da
@ -42,8 +42,8 @@ class ChunkInfo(object):
|
||||
@functools.total_ordering
|
||||
class MediaChunkHolder(object):
|
||||
waiters: collections.deque[asyncio.Future]
|
||||
requesters: list[Request] = []
|
||||
unique_id: str = ""
|
||||
requesters: list[Request]
|
||||
unique_id: str
|
||||
info: ChunkInfo
|
||||
|
||||
@staticmethod
|
||||
@ -56,9 +56,11 @@ class MediaChunkHolder(object):
|
||||
self.mem = bytes()
|
||||
self.length = len(self.mem)
|
||||
self.waiters = collections.deque()
|
||||
self.requesters = []
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"MediaChunk,unique_id:{self.unique_id},{self.info},mlen:{self.length}"
|
||||
pl = [f"{id(req)}" for req in self.requesters]
|
||||
return f"MediaChunk,unique_id:{self.unique_id},{self.info},mlen:{self.length},req:{pl}"
|
||||
|
||||
def __eq__(self, other: Union["MediaChunkHolder", ChunkInfo, int]):
|
||||
if isinstance(other, int):
|
||||
@ -110,11 +112,12 @@ class MediaChunkHolder(object):
|
||||
|
||||
async def is_disconneted(self) -> bool:
|
||||
while self.requesters:
|
||||
req = self.requesters[0]
|
||||
if not await req.is_disconnected():
|
||||
return False
|
||||
try:
|
||||
req = self.requesters[0]
|
||||
if not await req.is_disconnected():
|
||||
return False
|
||||
self.requesters.remove(req)
|
||||
logger.info(f"remove req:{id(req)=},{self}")
|
||||
except Exception as err:
|
||||
logger.warning(f"{err=}, trace:{traceback.format_exc()}")
|
||||
return False
|
||||
@ -127,9 +130,9 @@ class MediaChunkHolder(object):
|
||||
self.waiters.append(waiter)
|
||||
try:
|
||||
await waiter
|
||||
except:
|
||||
except Exception as err:
|
||||
waiter.cancel()
|
||||
logger.warning("waiter cancel")
|
||||
logger.warning(f"waiter cancel:{err=},{traceback.format_exc()}")
|
||||
try:
|
||||
self.waiters.remove(waiter)
|
||||
except ValueError:
|
||||
|
@ -356,6 +356,7 @@ class TgFileSystemClient(object):
|
||||
align_pos = pos
|
||||
align_size = min(self.SINGLE_MEDIA_SIZE, file_size - align_pos)
|
||||
holder = self.media_chunk_manager.create_media_chunk_holder(msg.chat_id, msg.id, align_pos, align_size)
|
||||
logger.info(f"new holder create:{holder}")
|
||||
holder.add_chunk_requester(req)
|
||||
self.media_chunk_manager.set_media_chunk(holder)
|
||||
self.task_queue.put_nowait((cur_task_id, self._download_media_chunk(msg, holder)))
|
||||
|
@ -177,7 +177,6 @@ async def get_tg_file_media_stream(token: str, cid: int, mid: int, request: Requ
|
||||
@app.get("/tg/api/v1/file/get/{chat_id}/{msg_id}/{file_name}")
|
||||
@apiutils.atimeit
|
||||
async def get_tg_file_media(chat_id: int|str, msg_id: int, file_name: str, sign: str, req: Request):
|
||||
logger.info(f"request: {chat_id=},{msg_id=},{file_name=},{req=},{id(req)=}")
|
||||
try:
|
||||
if isinstance(chat_id, str):
|
||||
chat_id = int(chat_id)
|
||||
|
@ -9,7 +9,7 @@ st.set_page_config(page_title="TgToolbox", page_icon="🕹️", layout="wide", i
|
||||
backend_status = api.get_backend_client_status()
|
||||
need_login = False
|
||||
|
||||
if not backend_status["init"]:
|
||||
if backend_status is None or not backend_status["init"]:
|
||||
st.status("Server not ready")
|
||||
time.sleep(0.5)
|
||||
st.rerun()
|
||||
|
Loading…
x
Reference in New Issue
Block a user