citusdata / citusdata/activerecord-multi-tenant

Tenant is not preserved in threads

Open
#255 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Ruby
Stars
759
Forks
113
PR merge metrics
No merged PRs in 30d

Description

When using threads, the tenant is not preserved:

```
irb(main):009:0> MultiTenant.current_tenant = 1
=> 1
irb(main):010:0> puts "tenant_id: #{MultiTenant.current_tenant_id}"
irb(main):011:0> thr = Thread.new { puts "tenant_id: #{MultiTenant.current_tenant_id}" }
tenant_id: 1
=> #
tenant_id:
```

Hence queries don't have the tenant clasue and may leak data

```
irb(main):001:0> MultiTenant.current_tenant = 1
=> 1
irb(main):002:0> puts Page.where(id: 999).to_sql
irb(main):003:0> thr = Thread.new { puts Page.where(id: 999).to_sql }
SELECT "pages".* FROM "pages" WHERE "pages"."customer_id" = 1 AND "pages"."id" = 999
=> #
irb(main):004:0> SELECT "pages".* FROM "pages" WHERE "pages"."id" = 999
```

In case this add extra info, we are using concurrent-ruby and we have the same issue

```
irb(main):002:0> MultiTenant.current_tenant = 1
=> 1
irb(main):003:0> thread_pool = Concurrent::FixedThreadPool.new(2)
=>
# end
=> true
tenant_id:
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.