Lock scanner processing to a single runner (#1170)

This commit is contained in:
Zoe Roux 2025-11-20 12:13:34 +01:00 committed by GitHub
commit 2cbbb450c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 18 additions and 11 deletions

View File

@ -5,7 +5,7 @@
"": {
"name": "api",
"dependencies": {
"@elysiajs/opentelemetry": "^1.4.6",
"@elysiajs/opentelemetry": "^1.4.7",
"@elysiajs/swagger": "zoriya/elysia-swagger#build",
"@kubiks/otel-drizzle": "zoriya/drizzle-otel#build",
"@types/bun": "^1.3.1",
@ -49,7 +49,7 @@
"@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="],
"@elysiajs/opentelemetry": ["@elysiajs/opentelemetry@1.4.6", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/sdk-node": "^0.200.0" }, "peerDependencies": { "elysia": ">= 1.4.0" } }, "sha512-jR7t4M6ZvMnBqzzHsNTL6y3sNq9jbGi2vKxbkizi/OO5tlvlKl/rnBGyFjZUjQ1Hte7rCz+2kfmgOQMhkjk+Og=="],
"@elysiajs/opentelemetry": ["@elysiajs/opentelemetry@1.4.7", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/instrumentation": "^0.200.0", "@opentelemetry/sdk-node": "^0.200.0" }, "peerDependencies": { "elysia": ">= 1.4.0" } }, "sha512-biJfj3bCHf7aYPB8EygvN90sEKR/qgPn8Cziq2ebJSGyY8cpmskTTP6zbUMkMk6R6rfpoP7ECZbXlTZz+7BfJA=="],
"@elysiajs/swagger": ["@elysiajs/swagger@github:zoriya/elysia-swagger#f88fbc7", { "dependencies": { "@scalar/themes": "^0.9.81", "@scalar/types": "^0.1.3", "openapi-types": "^12.1.3", "pathe": "^1.1.2" }, "peerDependencies": { "elysia": ">= 1.3.0" } }, "zoriya-elysia-swagger-f88fbc7"],

View File

@ -9,7 +9,7 @@
"format": "biome check --write ."
},
"dependencies": {
"@elysiajs/opentelemetry": "^1.4.6",
"@elysiajs/opentelemetry": "^1.4.7",
"@elysiajs/swagger": "zoriya/elysia-swagger#build",
"@kubiks/otel-drizzle": "zoriya/drizzle-otel#build",
"@types/bun": "^1.3.1",

View File

@ -55,6 +55,7 @@ class RequestProcessor:
self._database: Connection = None # type: ignore
self._client = client
self._providers = providers
self._processing = False
@tracer.start_as_current_span("listen_requests")
async def listen(self, tg: TaskGroup):
@ -85,14 +86,20 @@ class RequestProcessor:
raise
async def process_all(self):
found = True
while found:
try:
found = await self.process_request()
except Exception as e:
logger.error(
"Failed to process one of the metadata request", exc_info=e
)
if self._processing:
return
self._processing = True
try:
found = True
while found:
try:
found = await self.process_request()
except Exception as e:
logger.error(
"Failed to process one of the metadata request", exc_info=e
)
finally:
self._processing = False
async def process_request(self):
cur = await self._database.fetchrow(