From 5cbdfa2bdc60223315f34841d22c01631377010d Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Thu, 18 Jul 2019 15:20:13 -0400 Subject: [PATCH] support es proxied path; indexes one at a time Signed-off-by: Bill Erickson --- Open-ILS/examples/fm_IDL.xml | 1 + Open-ILS/src/perlmods/lib/OpenILS/Elastic.pm | 4 +-- .../src/perlmods/lib/OpenILS/Elastic/BibSearch.pm | 39 ++++++++++++++++++---- .../sql/Pg/upgrade/XXXX.schema.elastic-search.sql | 1 + 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index 6c0a6de060..16a8422801 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -12841,6 +12841,7 @@ SELECT usr, + diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Elastic.pm b/Open-ILS/src/perlmods/lib/OpenILS/Elastic.pm index 424b1217b9..8f6c4ae229 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Elastic.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Elastic.pm @@ -126,8 +126,8 @@ sub connect { my @nodes; for my $server (@{$self->nodes}) { - push(@nodes, sprintf("%s://%s:%d", - $server->proto, $server->host, $server->port)); + push(@nodes, sprintf("%s://%s:%d%s", + $server->proto, $server->host, $server->port, $server->path)); } $logger->debug("ES connecting to nodes @nodes"); diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm b/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm index 8f8cabe3e1..f891a55952 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Elastic/BibSearch.pm @@ -133,7 +133,7 @@ sub create_index { # Apply field boost. $def->{boost} = $field->weight if ($field->weight || 1) > 1; - $logger->info("ES adding field $field_name: ". + $logger->debug("ES adding field $field_name: ". OpenSRF::Utils::JSON->perl2JSON($def)); $mappings->{$field_name} = $def; @@ -145,22 +145,47 @@ sub create_index { my $conf = { index => $INDEX_NAME, - body => { - settings => $settings, - mappings => {record => {properties => $mappings}} - } + body => {settings => $settings} }; - # Send the index definition to Elastic + + $logger->info("ES creating index '$INDEX_NAME'"); + + # Create the base index with settings eval { $self->es->indices->create($conf) }; if ($@) { $logger->error("ES failed to create index cluster=". $self->cluster. "index=$INDEX_NAME error=$@"); - print "$@\n\n"; + warn "$@\n\n"; return 0; } + # Create each mapping one at a time instead of en masse so we + # can more easily report when mapping creation fails. + + for my $field (keys %$mappings) { + $logger->info("ES Creating index mapping for field $field"); + + eval { + $self->es->indices->put_mapping({ + index => $INDEX_NAME, + type => 'record', + body => {properties => {$field => $mappings->{$field}}} + }); + }; + + if ($@) { + my $mapjson = OpenSRF::Utils::JSON->perl2JSON($mappings->{$field}); + + $logger->error("ES failed to create index mapping: " . + "index=$INDEX_NAME field=$field error=$@ mapping=$mapjson"); + + warn "$@\n\n"; + return 0; + } + } + return 1; } diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.elastic-search.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.elastic-search.sql index c26c487d2b..7dbc25cffb 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.elastic-search.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.elastic-search.sql @@ -16,6 +16,7 @@ CREATE TABLE elastic.node ( host TEXT NOT NULL, proto TEXT NOT NULL, port INTEGER NOT NULL, + path TEXT NOT NULL DEFAULT '/', active BOOLEAN NOT NULL DEFAULT FALSE, cluster TEXT NOT NULL REFERENCES elastic.cluster (code) ON DELETE CASCADE, -- 2.11.0