Bug 38416: Failover to MARCXML if cannot roundtrip USMARC during indexing
This change failsover to MARCXML from USMARC if there are any
warnings generated by MARC::File::USMARC::decode when trying to
roundtrip the record.
Test plan:
0. Apply the patch
1. Setup your koha-testing-docker to use Elasticsearch
2. Create a new record with 15,000 characters in the 500$a field
3. Index that record
(e.g. perl misc/search_tools/rebuild_elasticsearch.pl --biblios -v -v)
4. Note that a warning saying the following appears:
"Warnings encountered while roundtripping a MARC record to/from USMARC.
Failing over to MARCXML"
5. View the "Elasticsearch record" on the detail page and note that the
marc_format is MARCXML
6. Perform a search for the record (the keyword should be something that
brings up other results too)
7. Note that the record appears correctly in the search results
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 0d862343dd)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
parent
20c59c0171
commit
714775e370
|
|
@ -790,7 +790,19 @@ sub marc_records_to_documents {
|
|||
local $SIG{__WARN__} = sub {
|
||||
push @warnings, $_[0];
|
||||
};
|
||||
$record_document->{'marc_data'} = encode_base64(encode('UTF-8', $record->as_usmarc()));
|
||||
my $usmarc_record = $record->as_usmarc();
|
||||
|
||||
#NOTE: Try to round-trip the record to prove it will work for retrieval after searching
|
||||
my $decoded_usmarc_record = MARC::Record->new_from_usmarc($usmarc_record);
|
||||
if ($decoded_usmarc_record->warnings()){
|
||||
#NOTE: We override the warnings since they're many and misleading
|
||||
@warnings = (
|
||||
"Warnings encountered while roundtripping a MARC record to/from USMARC. Failing over to MARCXML.",
|
||||
);
|
||||
}
|
||||
|
||||
my $marc_data = encode_base64(encode('UTF-8', $usmarc_record));
|
||||
$record_document->{'marc_data'} = $marc_data;
|
||||
}
|
||||
if (@warnings) {
|
||||
# Suppress warnings if record length exceeded
|
||||
|
|
|
|||
Loading…
Reference in New Issue