Skip to content

Commit

Permalink
All ES access now happens via the Store, including for unique keys,
Browse files Browse the repository at this point in the history
meaning ElasticSearchX::UniqueKey is no longer a dependency
  • Loading branch information
clintongormley committed May 30, 2014
1 parent f438ad8 commit 758e640
Show file tree
Hide file tree
Showing 10 changed files with 248 additions and 105 deletions.
2 changes: 1 addition & 1 deletion lib/Elastic/Manual/Intro.pod
Expand Up @@ -13,7 +13,7 @@ You need a recent version of Java installed, then download the current
stable release of Elasticsearch from L<http://www.Elasticsearch.org/download/>.
For instance:

curl -L -O https://github.com/downloads/Elasticsearch/Elasticsearch/elasticsearch-0.20.5.tar.gz
curl -L -O https://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.20.5.tar.gz
tar -xzf elasticsearch-0.20.5.tar.gz

B<Note: The minimum required version of Elasticsearch is 0.19.11.>
Expand Down
27 changes: 12 additions & 15 deletions lib/Elastic/Model/Alias.pm
Expand Up @@ -14,17 +14,15 @@ sub to {
my $self = shift;

my $name = $self->name;
my $es = $self->es;
my $store = $self->model->store;
my %indices = (
( map { $_ => { remove => { index => $_, alias => $name } } }
keys %{
$es->get_aliases( index => $name, ignore_missing => 1 ) || {}
}
keys %{ $store->get_aliases( index => $name ) }
),
$self->_add_aliases(@_)
);

$es->aliases( actions => [ values %indices ] );
$store->put_aliases( actions => [ values %indices ] );
$self->model->domain($name)->clear_default_routing;
$self->model->clear_domain_namespace;
return $self;
Expand All @@ -35,7 +33,7 @@ sub add {
#===================================
my $self = shift;
my %indices = $self->_add_aliases(@_);
$self->es->aliases( actions => [ values %indices ] );
$self->model->store->put_aliases( actions => [ values %indices ] );
$self->model->domain( $self->name )->clear_default_routing;
return $self;
}
Expand All @@ -46,7 +44,7 @@ sub remove {
my $self = shift;
my $name = $self->name;
my @actions = map { { remove => { index => $_, alias => $name } } } @_;
$self->es->aliases( actions => \@actions );
$self->model->store->put_aliases( actions => \@actions );
$self->model->clear_domain_namespace;
return $self;
}
Expand All @@ -57,10 +55,7 @@ sub aliased_to {
my $self = shift;
my $name = $self->name;

my $indices = $self->es->get_aliases(
index => $name,
ignore_missing => 1
) || {};
my $indices = $self->model->store->get_aliases( index => $name );
croak "($name) is an index, not an alias"
if $indices->{$name};

Expand All @@ -70,11 +65,12 @@ sub aliased_to {
#===================================
sub _add_aliases {
#===================================
my $self = shift;
my $name = $self->name;
my $es = $self->es;
my $self = shift;
my $name = $self->name;
my $store = $self->model->store;
my %indices;

my $builder;
while (@_) {
my $index = shift @_;
my %params = (
Expand All @@ -83,7 +79,8 @@ sub _add_aliases {
alias => $name
);
if ( my $filter = delete $params{filterb} ) {
$params{filter} = $es->builder->filter($filter)->{filter};
$builder ||= $self->model->view->search_builder;
$params{filter} = $builder->filter($filter)->{filter};
}
$indices{$index} = { add => \%params };
}
Expand Down
4 changes: 1 addition & 3 deletions lib/Elastic/Model/Domain.pm
Expand Up @@ -39,9 +39,7 @@ sub _get_default_routing {
#===================================
my $self = shift;
my $name = $self->name;
my $aliases
= $self->model->es->get_aliases( index => $name, ignore_missing => 1 )
|| {};
my $aliases = $self->model->store->get_aliases( index => $name);

croak "Domain ($name) doesn't exist either as an index or an alias"
unless %$aliases;
Expand Down
9 changes: 4 additions & 5 deletions lib/Elastic/Model/Index.pm
Expand Up @@ -13,8 +13,7 @@ sub create {
#===================================
my $self = shift;
my $params = $self->index_config(@_);

$self->es->create_index($params);
$self->model->store->create_index(%$params);
return $self;
}

Expand Down Expand Up @@ -70,7 +69,7 @@ sub reindex {
my $updater = $self->doc_updater( $doc_updater, $uid_updater );

my $source = $model->view->domain($domain)->size($size)->scan($scan);
$model->es->reindex(
$model->store->reindex(
source => $source,
_method_name => 'shift_element',
quiet => !$verbose,
Expand Down Expand Up @@ -162,7 +161,7 @@ sub repoint_uids {
[ splice @ids, 0, $size ] );

my $source = $view->filter( or => $clauses )->scan($scan);
$model->es->reindex(
$model->store->reindex(
source => $source,
_method_name => 'shift_element',
bulk_size => $bulk_size,
Expand All @@ -185,7 +184,7 @@ sub _uid_attrs_for_indices {
#===================================
my $self = shift;
my @indices = @_;
my $mapping = $self->model->es->mapping( index => \@indices );
my $mapping = $self->model->store->get_mapping( index => \@indices );
my %attrs = map { $_ => 1 }
map { _find_uid_attrs( $_->{properties} ) }
map { values %$_ } values %$mapping;
Expand Down
10 changes: 2 additions & 8 deletions lib/Elastic/Model/Namespace.pm
Expand Up @@ -43,10 +43,7 @@ sub all_domains {
#===================================
my $self = shift;
my @domains = ( $self->name, @{ $self->fixed_domains } );
my $aliases = $self->model->es->get_aliases(
index => \@domains,
ignore_missing => 1
) || {};
my $aliases = $self->model->store->get_aliases( index => \@domains );
for ( keys %$aliases ) {
push @domains, ( $_, keys %{ $aliases->{$_}{aliases} } );
}
Expand All @@ -58,10 +55,7 @@ sub all_live_indices {
#===================================
my $self = shift;
my @domains = ( $self->name, @{ $self->fixed_domains } );
my $aliases = $self->model->es->get_aliases(
index => \@domains,
ignore_missing => 1
) || {};
my $aliases = $self->model->store->get_aliases( index => \@domains );
return keys %$aliases;
}

Expand Down
51 changes: 18 additions & 33 deletions lib/Elastic/Model/Role/Index.pm
Expand Up @@ -22,21 +22,8 @@ has 'namespace' => (
handles => [ 'model', 'mappings' ]
);

#===================================
has 'es' => (
#===================================
is => 'ro',
isa => 'Search::Elasticsearch::Client::Compat',
lazy => 1,
builder => '_build_es'
);

no Moose::Role;

#===================================
sub _build_es { shift->model->es }
#===================================

#===================================
sub index_config {
#===================================
Expand All @@ -62,7 +49,7 @@ sub delete { shift->_index_action( 'delete_index', @_ ) }
sub refresh { shift->_index_action( 'refresh_index', @_ ) }
sub open { shift->_index_action( 'open_index', @_ ) }
sub close { shift->_index_action( 'close_index', @_ ) }
sub exists { !!$_[0]->es->index_exists( index => $_[0]->name ) }
sub exists { !!$_[0]->model->store->index_exists( index => $_[0]->name ) }
#===================================

#===================================
Expand All @@ -71,15 +58,15 @@ sub _index_action {
my $self = shift;
my $action = shift;
my %args = @_;
$self->es->$action( %args, index => $self->name );
$self->model->store->$action( %args, index => $self->name );
return $self;
}

#===================================
sub update_settings {
#===================================
my $self = shift;
$self->es->update_index_settings(
$self->model->store->update_index_settings(
index => $self->name,
settings => {@_}
);
Expand All @@ -92,28 +79,26 @@ sub update_analyzers {
my $self = shift;
my $params = $self->index_config(@_);
delete $params->{mappings};
$self->es->update_index_settings($params);
$self->model->store->update_index_settings(%$params);
return $self;
}

#===================================
sub is_alias {
#===================================
my $self = shift;
my $name = $self->name;
my $indices
= $self->es->get_aliases( index => $name, ignore_missing => 1 ) || {};
my $self = shift;
my $name = $self->name;
my $indices = $self->model->store->get_aliases( index => $name );
return !!( %$indices && !$indices->{$name} );
}

#===================================
sub is_index {
#===================================
my $self = shift;
my $name = $self->name;
my $aliases
= $self->es->get_aliases( index => $name, ignore_missing => 1 ) || {};
return !!$aliases->{$name};
my $self = shift;
my $name = $self->name;
my $indices = $self->model->store->get_aliases( index => $name );
return !!$indices->{$name};
}

#===================================
Expand All @@ -122,10 +107,10 @@ sub update_mapping {
my $self = shift;
my %args = ref $_[-1] eq 'HASH' ? %{ pop() } : ();
my $mappings = $self->mappings(@_);
my $es = $self->es;
my $store = $self->model->store;
my $name = $self->name;
for my $type ( keys %$mappings ) {
$es->put_mapping(
$store->put_mapping(
index => $name,
type => $type,
mapping => $mappings->{$type},
Expand All @@ -138,11 +123,11 @@ sub update_mapping {
#===================================
sub delete_mapping {
#===================================
my $self = shift;
my %args = ref $_[-1] eq 'HASH' ? %{ pop() } : ();
my $es = $self->es;
my $name = $self->name;
$es->delete_mapping( index => $name, type => $_, %args ) for @_;
my $self = shift;
my %args = ref $_[-1] eq 'HASH' ? %{ pop() } : ();
my $store = $self->model->store;
my $name = $self->name;
$store->delete_mapping( index => $name, type => $_, %args ) for @_;
return $self;
}

Expand Down
41 changes: 23 additions & 18 deletions lib/Elastic/Model/Role/Model.pm
Expand Up @@ -2,10 +2,9 @@ package Elastic::Model::Role::Model;

use Moose::Role;
use Carp;
use Elastic::Model::Types qw(ES ES_UniqueKey);
use Elastic::Model::Types qw(ES);
use Search::Elasticsearch 1.10 ();
use Search::Elasticsearch::Compat 0.10 ();
use ElasticSearchX::UniqueKey 0.05 ();
use Class::Load qw(load_class);
use Moose::Util qw(does_role);
use MooseX::Types::Moose qw(:all);
Expand Down Expand Up @@ -69,12 +68,12 @@ has 'es' => (
);

#===================================
has 'es_unique' => (
has '_unique_index' => (
#===================================
isa => ES_UniqueKey,
isa => Str,
is => 'ro',
lazy => 1,
builder => '_build_es_unique',
builder => '_build_unique_index',
);

#===================================
Expand Down Expand Up @@ -145,16 +144,12 @@ sub _build_es { Search::Elasticsearch::Compat->new }
#===================================

#===================================
sub _build_es_unique {
sub _build_unique_index {
#===================================
my $self = shift;
my $index = Class::MOP::class_of($self)->unique_index;
my $uniq = ElasticSearchX::UniqueKey->new(
es => $self->es,
index => $index
);
$uniq->bootstrap;
return $uniq;
$self->store->bootstrap_uniques( index => $index );
return $index;
}

#===================================
Expand Down Expand Up @@ -456,9 +451,12 @@ sub _update_unique_keys {
$new{$unique_key} = $new if length $new;
}

my $uniq = $self->es_unique;
my $uniq = $self->_unique_index;
my $store = $self->store;

if ( my %failed = $uniq->multi_create(%new) ) {
if ( my %failed
= $store->create_unique_keys( index => $uniq, keys => \%new ) )
{
if ($on_unique) {
$on_unique->( $doc, \%failed );
return;
Expand All @@ -468,8 +466,12 @@ sub _update_unique_keys {

}
return {
commit => sub { $uniq->multi_delete(%old); },
rollback => sub { $uniq->multi_delete(%new); }
commit => sub {
$store->delete_unique_keys( index => $uniq, keys => \%old );
},
rollback => sub {
$store->delete_unique_keys( index => $uniq, keys => \%new );
},
};
}

Expand Down Expand Up @@ -540,9 +542,12 @@ sub _delete_unique_keys {
my $old = $doc->_source->{$key};
$old{ $uniques->{$key} } = $old if length $old;
}
my $uniq = $self->es_unique;
my $uniq = $self->_unique_index;
my $store = $self->store;
return {
commit => sub { $uniq->multi_delete(%old) }
commit => sub {
$store->delete_unique_keys( index => $uniq, keys => \%old );
}
};
}

Expand Down

0 comments on commit 758e640

Please sign in to comment.