Files
puter/tools/typecheck-baseline.json
T
Daniel Salazar 7ad963bacf fix(cache): broadcast fs entry and team invalidations to peer regions (#4169)
* fix(cache): broadcast fs entry and team invalidations to peer regions

FSEntryStore's invalidations called publishCacheKeys without broadcast,
so a delete, move, rename or overwrite only cleared the writer's
cluster; other regions served the old row until the 60 s TTL. They now
broadcast. Batch paths (deleteEntries per chunk, the batch overwrite)
send one event for the whole batch. Read-path backfills stay local.

TeamStore's busts were a local redis.del, so a removed member kept
passing getMembership in other regions until the TTL. They now go
through publishCacheKeys with broadcast, and softDelete busts every key
in one call.

Remove FSEntryCacheInvalidationEventHandler. It re-derived the same
invalidations from outer.gui.item.* with a replica SELECT per holder,
and its fs.remove.node branch never ran (FSEntry has no get()). The
store's own broadcast covers what it did.

* fix(fs): cap how many entry invalidations a node broadcasts per window

FSEntryStore now broadcasts at most 10,000 entries' cache invalidations
per broadcast flush window (outbound_flush_ms, 2 s by default). Past
that, keys are dropped locally only and peers fall back to the 60 s
entry-cache TTL; the store logs once per window when this happens.

Each flush goes to a peer as one POST that is re-sent whole on failure,
so a large recursive delete could otherwise build a batch the peer
rejects on every retry. The budget is per store instance, not per call,
so a delete issued page by page is bounded too, and single-entry writes
count against the same budget.
2026-10-11 17:53:26 -07:00

58 lines
4.0 KiB
JSON

{
"extensions/whoami.ts | TS2353": 1,
"src/backend/clients/database/MySQLDatabaseClient.ts | TS2769": 1,
"src/backend/clients/database/PostgresDatabaseClient.ts | TS2322": 1,
"src/backend/clients/s3/S3Client.ts | TS2307": 2,
"src/backend/controllers/auth/AuthController.ts | TS2345": 1,
"src/backend/controllers/auth/AuthController.ts | TS7018": 2,
"src/backend/controllers/fs/FSController.ts | TS7011": 3,
"src/backend/controllers/homepage/HomepageController.ts | TS2352": 1,
"src/backend/controllers/wisp/WispController.ts | TS2345": 1,
"src/backend/core/http/__typecheck__.ts | TS2578": 1,
"src/backend/core/http/middleware/errorHandler.ts | TS2345": 1,
"src/backend/drivers/ai-chat/ChatCompletionDriver.ts | TS2322": 10,
"src/backend/drivers/ai-chat/ChatCompletionDriver.ts | TS2345": 1,
"src/backend/drivers/ai-chat/providers/ChatProvider.ts | TS2420": 1,
"src/backend/drivers/ai-chat/providers/FakeChatProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/FakeChatProvider.ts | TS7018": 1,
"src/backend/drivers/ai-chat/providers/alibaba/AlibabaProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/azure/AzureChatProvider.ts | TS2352": 1,
"src/backend/drivers/ai-chat/providers/azure/AzureResponsesProvider.ts | TS2322": 1,
"src/backend/drivers/ai-chat/providers/azure/AzureResponsesProvider.ts | TS2352": 1,
"src/backend/drivers/ai-chat/providers/azure/AzureResponsesProvider.ts | TS2353": 1,
"src/backend/drivers/ai-chat/providers/azure/AzureResponsesProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/azure/AzureResponsesProvider.ts | TS7006": 1,
"src/backend/drivers/ai-chat/providers/claude/ClaudeProvider.ts | TS7011": 1,
"src/backend/drivers/ai-chat/providers/deepseek/DeepSeekProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/groq/GroqAIProvider.ts | TS7006": 1,
"src/backend/drivers/ai-chat/providers/mistral/MistralAiProvider.ts | TS7006": 3,
"src/backend/drivers/ai-chat/providers/mistral/MistralAiProvider.ts | TS7053": 1,
"src/backend/drivers/ai-chat/providers/ollama/OllamaProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatCompletionsProvider.ts | TS2352": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatCompletionsProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatResponsesProvider.ts | TS2322": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatResponsesProvider.ts | TS2352": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatResponsesProvider.ts | TS2353": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatResponsesProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/openai/OpenAiChatResponsesProvider.ts | TS7006": 2,
"src/backend/drivers/ai-chat/providers/openrouter/OpenRouterProvider.ts | TS7031": 6,
"src/backend/drivers/ai-chat/providers/openrouter/OpenRouterProvider.ts | TS7053": 1,
"src/backend/drivers/ai-chat/providers/together/TogetherAIProvider.ts | TS2416": 1,
"src/backend/drivers/ai-chat/providers/together/TogetherAIProvider.ts | TS7053": 1,
"src/backend/drivers/ai-speech2txt/providers/openai/OpenAISpeechToTextProvider.ts | TS2352": 2,
"src/backend/drivers/ai-speech2txt/providers/xai/XAISpeechToTextProvider.ts | TS2322": 1,
"src/backend/drivers/integrationTestUtil.ts | TS7011": 1,
"src/backend/services/apps/AppPermissionService.ts | TS2345": 2,
"src/backend/services/auth/OIDCService.ts | TS2322": 2,
"src/backend/services/broadcast/BroadcastService.ts | TS2345": 2,
"src/backend/services/fs/FSService.ts | TS2345": 1,
"src/backend/services/homepage/PuterHomepageService.ts | TS2345": 1,
"src/backend/services/localworker/LocalWorkerService.ts | TS7018": 3,
"src/backend/services/notification/NotificationService.ts | TS2322": 1,
"src/backend/stores/fs/S3ObjectStore.ts | TS7011": 1,
"src/backend/testUtil.ts | TS1470": 1,
"src/backend/testUtil.ts | TS2345": 1,
"src/backend/util/privateLaunchAccess.ts | TS2345": 1,
"src/backend/vitest.config.ts | TS7018": 1
}