citusdata / citusdata/activerecord-multi-tenant
Tenant is not preserved in threads
- 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.