Awesome-claude-code create-bulkhead
Generates Bulkhead pattern for PHP 8.4. Creates resource isolation with semaphore-based concurrency limiting and thread pool isolation. Includes unit tests.
install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/create-bulkhead" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-bulkhead && rm -rf "$T"
manifest:
skills/create-bulkhead/SKILL.mdsource content
Bulkhead Pattern Generator
Creates Bulkhead pattern infrastructure for resource isolation and fault containment.
When to Use
| Scenario | Example |
|---|---|
| External API calls | Limit concurrent requests to payment gateway |
| Database connections | Pool size limiting |
| CPU-intensive work | Limit by CPU cores |
| Multi-instance | Redis-based coordination |
Component Characteristics
BulkheadInterface
- Common interface for all isolation strategies
- Acquire and release semantics
- Capacity monitoring
Strategies
- Semaphore Bulkhead: Limits concurrent executions
- Thread Pool Bulkhead: Isolates execution with dedicated pool
- Queue-based Bulkhead: Limits with waiting queue
BulkheadFullException
- Thrown when bulkhead capacity exhausted
- Contains bulkhead name and capacity info
Generation Process
Step 1: Generate Core Components
Path:
src/Infrastructure/Resilience/Bulkhead/
— Common interfaceBulkheadInterface.php
— Configuration value objectBulkheadConfig.php
— Exception with capacity infoBulkheadFullException.php
Step 2: Generate Bulkhead Implementation
Choose based on use case:
— Local semaphore-based limitingSemaphoreBulkhead.php
— Redis-based for multi-instanceDistributedSemaphoreBulkhead.php
Step 3: Generate Registry (Optional)
— Manages multiple bulkheadsBulkheadRegistry.php
Step 4: Generate Tests
— Bulkhead behavior testsSemaphoreBulkheadTest.php
— Configuration testsBulkheadConfigTest.php
File Placement
| Component | Path |
|---|---|
| All Classes | |
| Unit Tests | |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Interface | | |
| Semaphore | | |
| Distributed | | |
| Config | | |
| Registry | | |
| Exception | | |
| Test | | |
Quick Template Reference
BulkheadInterface
interface BulkheadInterface { public function execute(callable $operation): mixed; public function tryAcquire(): bool; public function release(): void; public function getAvailablePermits(): int; public function getActiveCount(): int; public function getName(): string; }
BulkheadConfig
final readonly class BulkheadConfig { public function __construct( public int $maxConcurrentCalls = 10, public int $maxWaitDuration = 0, public bool $fairness = true ) {} public static function default(): self; public static function forCpuBound(int $cpuCores): self; public static function forIoBound(int $cpuCores): self; public static function forExternalService(int $maxConnections): self; }
Usage Example
// Create limiter $bulkhead = new SemaphoreBulkhead( name: 'payment-gateway', config: BulkheadConfig::forExternalService(maxConnections: 20), logger: $logger ); // Execute with isolation try { $result = $bulkhead->execute(fn() => $client->charge($request)); } catch (BulkheadFullException $e) { return Result::serviceOverloaded(); }
Use Case Selection
| Use Case | Bulkhead Type | Config |
|---|---|---|
| External API calls | Semaphore | Limited by API rate limits |
| Database connections | Semaphore | Limited by pool size |
| CPU-intensive work | Semaphore | Limited by CPU cores |
| Multi-instance | Distributed | Redis-based coordination |
| Mixed workloads | Registry | Per-service configuration |
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| Global Bulkhead | Single point of contention | Per-service bulkheads |
| No Release | Permit leak | Always release in finally |
| Wrong Size | Too small = rejected, too large = no protection | Right-size per service |
| No Metrics | Can't monitor usage | Track acquired/rejected |
| Infinite Wait | Thread starvation | Set maxWaitDuration |
| No Fallback | Hard failure on full | Provide degraded response |
References
For complete PHP templates and examples, see:
— BulkheadInterface, Config, SemaphoreBulkhead, DistributedSemaphoreBulkhead, Registryreferences/templates.md
— PaymentGatewayAdapter, ConnectionPool, OrderService examples and testsreferences/examples.md