Skip to content

QueueMode is from deadpool crate, not deadpool-redis, causing import confusion #472

@ruoru

Description

@ruoru

When configuring a Redis connection pool with deadpool-redis, users need to set the queue_mode field in PoolConfig. However, the QueueMode type is actually defined in the deadpool::managed module, not re-exported by deadpool-redis. This causes confusion and compilation errors.

Current situation:

Users might try to import QueueMode from deadpool-redis:

use deadpool_redis::{Config, PoolConfig, QueueMode};  // ❌ Error: QueueMode not found

But the correct import should be:

use deadpool::managed::QueueMode;  // ✅ Works, but requires adding `deadpool` dependency

Example code that fails:

use deadpool_redis::{Config, Pool, Runtime, PoolConfig, Timeouts};
use std::env;
use std::time::Duration;

pub async fn create_pool() -> Result<(), Box<dyn std::error::Error>> {
    let url = env::var("REDIS_URL")?;
    let mut cfg = Config::from_url(url);
    
    cfg.pool = Some(PoolConfig {
        max_size: 16,
        timeouts: Timeouts {
            wait: Some(Duration::from_millis(200)),
            create: Some(Duration::from_millis(500)),
            recycle: Some(Duration::from_millis(100)),
        },
        queue_mode: ???, // What should go here? QueueMode is not in scope
    });
    
    let pool = cfg.create_pool(Some(Runtime::Tokio1))?;
    Ok(())
}

Possible solutions:

  1. Re-export QueueMode in deadpool-redis so users don't need to depend on deadpool directly:

    // In deadpool-redis lib.rs
    pub use deadpool::managed::QueueMode;
  2. Add clearer documentation showing the correct import path and an example of configuring queue_mode.

  3. Make queue_mode optional with a sensible default (e.g., QueueMode::Fifo) so users don't need to specify it unless they want to change it.

Current workaround:

Users must add deadpool as a direct dependency and import from there:

[dependencies]
deadpool-redis = "0.12"
deadpool = "0.10"  # Required for QueueMode
use deadpool::managed::QueueMode;
use deadpool_redis::{Config, PoolConfig, Timeouts};

// Now can use QueueMode::Fifo or QueueMode::Lifo

Expected behavior:

Either QueueMode should be re-exported by deadpool-redis, or PoolConfig should provide a way to set the queue mode without requiring users to import types from the base deadpool crate.

Environment:

  • deadpool-redis version: 0.12.x
  • deadpool version: 0.10.x
  • Rust version: 1.70+

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-coreArea: Core / deadpoolbugCategory: This is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions