diff options
author | Dylan William Hardison <dylan@hardison.net> | 2016-11-20 00:12:39 +0100 |
---|---|---|
committer | Dylan William Hardison <dylan@hardison.net> | 2017-01-04 23:30:47 +0100 |
commit | 419f3ae9fd57fc4e03146a830f7ed780ace83937 (patch) | |
tree | f368b61dab21eb036e4b91e1ec947a4b9eeabae9 /Bugzilla/Elastic/Role | |
parent | 840bbad83e4672fc84083437e384f0d332020f53 (diff) | |
download | bugzilla-419f3ae9fd57fc4e03146a830f7ed780ace83937.tar.gz bugzilla-419f3ae9fd57fc4e03146a830f7ed780ace83937.tar.xz |
Bug 1307478 - Elasticsearch Indexer / Bulk Indexer
Diffstat (limited to 'Bugzilla/Elastic/Role')
-rw-r--r-- | Bugzilla/Elastic/Role/ChildObject.pm | 16 | ||||
-rw-r--r-- | Bugzilla/Elastic/Role/HasClient.pm | 25 | ||||
-rw-r--r-- | Bugzilla/Elastic/Role/HasIndexName.pm | 16 | ||||
-rw-r--r-- | Bugzilla/Elastic/Role/Object.pm | 48 |
4 files changed, 105 insertions, 0 deletions
diff --git a/Bugzilla/Elastic/Role/ChildObject.pm b/Bugzilla/Elastic/Role/ChildObject.pm new file mode 100644 index 000000000..1f7a7483a --- /dev/null +++ b/Bugzilla/Elastic/Role/ChildObject.pm @@ -0,0 +1,16 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::ChildObject; + +use 5.10.1; +use Role::Tiny; + +with 'Bugzilla::Elastic::Role::Object'; + +requires qw(ES_PARENT_TYPE es_parent_id); + +1; diff --git a/Bugzilla/Elastic/Role/HasClient.pm b/Bugzilla/Elastic/Role/HasClient.pm new file mode 100644 index 000000000..3d52d513a --- /dev/null +++ b/Bugzilla/Elastic/Role/HasClient.pm @@ -0,0 +1,25 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::HasClient; + +use 5.10.1; +use Moo::Role; +use Search::Elasticsearch; + + +has 'client' => (is => 'lazy'); + +sub _build_client { + my ($self) = @_; + + return Search::Elasticsearch->new( + nodes => Bugzilla->params->{elasticsearch_nodes}, + cxn_pool => 'Sniff', + ); +} + +1; diff --git a/Bugzilla/Elastic/Role/HasIndexName.pm b/Bugzilla/Elastic/Role/HasIndexName.pm new file mode 100644 index 000000000..eaff339cd --- /dev/null +++ b/Bugzilla/Elastic/Role/HasIndexName.pm @@ -0,0 +1,16 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::HasIndexName; + +use 5.10.1; +use Moo::Role; +use Search::Elasticsearch; + +has 'index_name' => ( is => 'ro', default => sub { Bugzilla->params->{elasticsearch_index} } ); + + +1; diff --git a/Bugzilla/Elastic/Role/Object.pm b/Bugzilla/Elastic/Role/Object.pm new file mode 100644 index 000000000..ad5ab002b --- /dev/null +++ b/Bugzilla/Elastic/Role/Object.pm @@ -0,0 +1,48 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. +package Bugzilla::Elastic::Role::Object; + +use 5.10.1; +use Role::Tiny; + +requires qw(ES_TYPE ES_PROPERTIES es_document); +requires qw(ID_FIELD DB_TABLE); + +sub ES_OBJECTS_AT_ONCE { 100 } + +sub ES_SELECT_ALL_SQL { + my ($class, $last_id) = @_; + + my $id = $class->ID_FIELD; + my $table = $class->DB_TABLE; + + return ("SELECT $id FROM $table WHERE $id > ? ORDER BY $id", [$last_id // 0]); +} + +requires qw(ES_SELECT_UPDATED_SQL); + +around 'ES_PROPERTIES' => sub { + my $orig = shift; + my $self = shift; + my $properties = $orig->($self, @_); + $properties->{es_mtime} = { type => 'long' }; + $properties->{$self->ID_FIELD} = { type => 'long', analyzer => 'keyword' }; + + return $properties; +}; + +around 'es_document' => sub { + my ($orig, $self, $mtime) = @_; + my $doc = $orig->($self); + + $doc->{es_mtime} = $mtime; + $doc->{$self->ID_FIELD} = $self->id; + + return $doc; +}; + +1; |