Skip to content

Index name is being set on repository class not instance #811

@fatbeard2

Description

@fatbeard2

Hey, I've found out some weird behaviour, want to clarify I'm using the gem correctly. Here is the repository I have -

class UserRepository
  include Elasticsearch::Persistence::Repository

  klass User

  def initialize index_name: nil;
    type TYPE
    client Elasticsearch::Client.new url: Figaro.env.elasticsearch_url!, log: configatron.elasticsearch.log
    index index_name || DEFAULT_INDEX_NAME

    create_index! unless index_exists?
  end
end

Now I want to write to a specific index using this repository. So I create a repository and provide an index name in arguments

> default_index_repo = UserRepository.new
> default_index_repo.index
=> "development_users"
> custom_index_repo = UserRepository.new(index_name: 'custom_index_name')
> custom_index_repo.index
=> "custom_index_name"

Everything seems fine so far. But then I try following code

> default_index_repo.index
=> "custom_index_name"
> UserRepository.index
=> "custom_index_name"

Now all repositories that I created before are pointing to a different index. This is something I didn't expect. Is this behaviour designed?

The problem is that I run such code in multithreaded environment(puma) and I need to create repositories that work with different indices. But when I create two repositories with different indices in different threads I have no idea what index they will actually use. Can someone advice?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions