Skip to content

Bug: Redis control plane keys not deployment-scoped #680

Description

@alexluong

Problem

When multiple Outpost deployments share the same Redis instance (using different DEPLOYMENT_ID values), control plane keys collide because they lack a deployment prefix.

Data keys are correctly scoped, but control plane keys are not:

Redis keyspace
├── tm_001:tenant:{ten_abc}:tenant          ✅ scoped to tm_001
├── tm_001:tenant:{ten_abc}:destinations    ✅ scoped to tm_001
├── tm_002:tenant:{ten_xyz}:tenant          ✅ scoped to tm_002
├── tm_002:tenant:{ten_xyz}:destinations    ✅ scoped to tm_002
│
├── outpostrc                               ❌ shared
├── .outpost:migration:lock                 ❌ shared
├── outpost:migration:001_hash_tags         ❌ shared
├── outpost:migration:002_timestamps        ❌ shared
└── outpost:migration:003_entity            ❌ shared

Example

  • tm_001 runs outpost migrate redis apply → sets outpost:migration:002_timestamps status to applied
  • tm_002 runs outpost migrate redis plan → sees 002 as already applied, skips it

Proposed Solution

Prefix control plane keys with deploymentID: when set, and rename for consistency:

  • outpostrc (hash with installation field) → outpost:installation_id
  • .outpost:migration:lockoutpost:migration_lock
Redis keyspace
├── tm_001:tenant:{ten_abc}:tenant                  ✅
├── tm_001:tenant:{ten_abc}:destinations            ✅
├── tm_001:outpost:installation_id                  ✅
├── tm_001:outpost:migration_lock                   ✅
├── tm_001:outpost:migration:001_hash_tags          ✅
│
├── tm_002:tenant:{ten_xyz}:tenant                  ✅
├── tm_002:tenant:{ten_xyz}:destinations            ✅
├── tm_002:outpost:installation_id                  ✅
├── tm_002:outpost:migration_lock                   ✅
└── tm_002:outpost:migration:001_hash_tags          ✅

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions