Skip to main content

Overview

Category

Creational Design Pattern

Purpose

Ensure single instance of expensive resources

Problem Statement

The Challenge

Creating database connections for every request is:
We use Double-Check Locking pattern:
  1. First check (no lock) - Fast path for already-initialized case
  2. Acquire lock - Slow path for initialization
  3. Second check (with lock) - Prevent race conditions

Solution: Lazy Singleton

Async Fix: The OllamaClient.generate() uses run_in_executor to run blocking SDK calls in a thread pool, preventing Event Loop blocking.

Benefits

Connection Pooling

Motor client manages pool of connections

Resource Efficiency

One initialization, reused across requests

Thread Safety

Double-check locking prevents race conditions

Fail-Fast

Errors at startup, not during requests