Skip to main content

Configuration Analyzers

Configuration Analyzers

Configuration analyzers detect issues with pipeline configuration that can lead to performance problems, resource leaks, or silent failures. These analyzers focus on ensuring that your pipeline configuration is optimal for your workload and doesn't introduce hidden problems.

NP9501: Unbounded Materialization Configuration

ID: NP9501
Severity: Error
Category: Configuration

This analyzer detects when PipelineRetryOptions.MaxMaterializedItems is null or missing, which causes unbounded memory growth in ResilientExecutionStrategy and silently disables restart functionality. This is a critical configuration error that must be treated as a build-time error to prevent production failures.

Why This Matters

Unbounded materialization configuration causes:

  1. Memory Leaks: Unlimited memory growth as items are materialized for retry scenarios
  2. Silent Failures: Restart functionality is disabled without any indication
  3. Production Crashes: OutOfMemoryException in high-throughput scenarios
  4. Resource Exhaustion: System becomes unstable under load

Solution: Set MaxMaterializedItems

// CORRECT: Set reasonable MaxMaterializedItems
var retryOptions = new PipelineRetryOptions(
maxRetryCount: 3,
baseDelay: TimeSpan.FromSeconds(1),
maxDelay: TimeSpan.FromMinutes(1),
maxMaterializedItems: 1000); // Bounded memory usage

Choosing the Right MaxMaterializedItems Value

ScenarioRecommended ValueReason
Small items (< 1KB)1000-10000Low memory per item
Medium items (1KB-10KB)100-1000Balance memory and performance
Large items (> 10KB)10-100Prevent memory pressure
Memory-constrained environments10-50Conservative approach
High-throughput scenarios100-1000Depends on item size

Enforcement Requirement

This analyzer is configured as an Error by default because unbounded materialization is fundamentally incompatible with resilient pipeline operation. It should not be downgraded to a warning, as doing so would allow silently broken resilience configurations to pass build time.

NP9502: Inappropriate Parallelism Configuration

ID: NP9502
Severity: Warning
Category: Performance

This analyzer detects inappropriate parallelism configurations that can cause resource contention, thread pool starvation, or suboptimal resource utilization in NPipeline pipelines.

Why This Matters

Inappropriate parallelism configuration causes:

  1. Resource Contention: Too much parallelism competes for limited resources
  2. Thread Pool Starvation: Excessive parallelism exhausts available threads
  3. Poor Performance: Suboptimal resource utilization reduces throughput
  4. System Instability: Overloaded system becomes unpredictable

Parallelism Guidelines

Workload TypeRecommended ParallelismPreserveOrdering
CPU-boundProcessor countOnly if required
I/O-boundProcessor count × 2Only if required
MixedProcessor count × 1.5Only if required
Memory-intensiveProcessor count ÷ 2Only if required

NP9503: Batching Configuration Mismatch

ID: NP9503
Severity: Warning
Category: Performance

This analyzer detects batching configurations where batch sizes and timeouts are misaligned, causing either excessive latency from large batches or inefficient processing from small batches.

Batching Configuration Guidelines

Batch SizeRecommended TimeoutUse Case
1-1050-500msLow-latency scenarios
10-100500ms-2sGeneral purpose
100-10001-10sHigh-throughput scenarios
1000+5-30sBatch processing systems

NP9504: Timeout Configuration Issues

ID: NP9504
Severity: Warning
Category: Configuration

This analyzer detects inappropriate timeout configurations that can cause resource leaks, hanging operations, or inefficient resource utilization in NPipeline pipelines.

Timeout Guidelines

Operation TypeRecommended TimeoutMaximum Timeout
Database I/O5-60 seconds5 minutes
Network I/O1-30 seconds2 minutes
File I/O10-120 seconds10 minutes
CPU-bound30 seconds-5 minutes30 minutes
Retry operations1-10 minutes30 minutes

Configuration Best Practices

  1. Profile Before Optimizing: Measure actual performance when changing configuration
  2. Start Conservative: Begin with conservative values and adjust based on metrics
  3. Monitor Resource Usage: Watch memory, CPU, and thread pool metrics
  4. Test Under Load: Validate configuration with realistic workloads

Configuration

Adjust analyzer severity in .editorconfig:

# Treat unbounded materialization as errors
dotnet_diagnostic.NP9501.severity = error

# Treat inappropriate parallelism as warnings
dotnet_diagnostic.NP9502.severity = warning

# Treat batching mismatches as warnings
dotnet_diagnostic.NP9503.severity = warning

# Treat timeout issues as warnings
dotnet_diagnostic.NP9504.severity = warning

See Also