[Rt-commit] rt branch, 4.2/fts-indexer-errors, created. rt-4.2.10-194-g277ef05
Alex Vandiver
alexmv at bestpractical.com
Mon Mar 16 13:50:52 EDT 2015
The branch, 4.2/fts-indexer-errors has been created
at 277ef05aea9b9e5796a23224bd8c9054a2adde33 (commit)
- Log -----------------------------------------------------------------
commit 5eb8b53936c7e0b5b4f1ed68d94817a61b5379ce
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Fri Mar 13 14:32:29 2015 -0400
Refactor shared error handler for postgres error conditions
diff --git a/sbin/rt-fulltext-indexer.in b/sbin/rt-fulltext-indexer.in
index bd55adb..72e1faf 100644
--- a/sbin/rt-fulltext-indexer.in
+++ b/sbin/rt-fulltext-indexer.in
@@ -259,14 +259,29 @@ sub process_mysql {
sub process_pg {
+ my $error_handling = sub {
+ my ($id) = @_;
+ my $dbh = $RT::Handle->dbh;
+ if ( $dbh->err == 7 && $dbh->state eq '54000' ) {
+ warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ".
+ "Error: ". $dbh->errstr;
+ } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) {
+ warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
+ "Error: ". $dbh->errstr;
+ } else {
+ die "Attachment $id cannot be indexed: " . $dbh->errstr;
+ }
+ };
+
if ( $fts_config->{'Table'} ne 'Attachments' ) {
- process_pg_insert();
+ process_pg_insert( $error_handling );
} else {
- process_pg_update();
+ process_pg_update( $error_handling );
}
}
sub process_pg_insert {
+ my ($error_handling) = @_;
my $dbh = $RT::Handle->dbh;
my $table = $fts_config->{'Table'};
my $column = $fts_config->{'Column'};
@@ -278,22 +293,12 @@ sub process_pg_insert {
return "INSERT INTO $table($column, id) VALUES "
. join(", ", ("(TO_TSVECTOR(?),?)") x $n);
},
- sub {
- my ($id) = @_;
- if ( $dbh->err == 7 && $dbh->state eq '54000' ) {
- warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ".
- "Error: ". $dbh->errstr;
- } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) {
- warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
- "Error: ". $dbh->errstr;
- } else {
- die "Attachment $id cannot be indexed: " . $dbh->errstr;
- }
- }
+ $error_handling,
);
}
sub process_pg_update {
+ my ($error_handling) = @_;
my $dbh = $RT::Handle->dbh;
my $column = $fts_config->{'Column'};
@@ -332,15 +337,8 @@ sub process_pg_update {
for (@insert) {
my ($content, $id) = ($_->[0], $_->[1]);
next if eval { $sth->execute( $content, $id ) };
- if ( $dbh->err == 7 && $dbh->state eq '54000' ) {
- warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ".
- "Error: ". $dbh->errstr;
- } elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) {
- warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
- "Error: ". $dbh->errstr;
- } else {
- die "Attachment $id cannot be indexed: " . $dbh->errstr;
- }
+
+ $error_handling->($id);
# If this was a semi-expected error, insert an empty
# tsvector, so we count this row as "indexed" for
commit 859d5c4987018209eb036bda0a1f4e09a17ed248
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Fri Mar 13 18:19:47 2015 -0400
Catch "invalid memory alloc request size ..." errors
diff --git a/sbin/rt-fulltext-indexer.in b/sbin/rt-fulltext-indexer.in
index 72e1faf..b4dbf20 100644
--- a/sbin/rt-fulltext-indexer.in
+++ b/sbin/rt-fulltext-indexer.in
@@ -268,6 +268,9 @@ sub process_pg {
} elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) {
warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
"Error: ". $dbh->errstr;
+ } elsif ( $dbh->err == 7 && $dbh->state eq 'XX000' ) {
+ warn "Attachment $id cannot be indexed; it is too large. ".
+ "Error: ". $dbh->errstr;
} else {
die "Attachment $id cannot be indexed: " . $dbh->errstr;
}
commit ecb344294941fc0ba5ecf38d3b776083daa33468
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Mon Mar 16 13:14:02 2015 -0400
Hide errors from the DBH that will get their own via the indexer
diff --git a/sbin/rt-fulltext-indexer.in b/sbin/rt-fulltext-indexer.in
index b4dbf20..a326de7 100644
--- a/sbin/rt-fulltext-indexer.in
+++ b/sbin/rt-fulltext-indexer.in
@@ -275,6 +275,11 @@ sub process_pg {
die "Attachment $id cannot be indexed: " . $dbh->errstr;
}
};
+ my $dbh = $RT::Handle->dbh; Scalar::Util::weaken($dbh);
+ $dbh->{HandleError} = sub {
+ return 1 if $dbh->err == 7 and $dbh->state =~ /^(54000|22021|XX000)$/;
+ return;
+ };
if ( $fts_config->{'Table'} ne 'Attachments' ) {
process_pg_insert( $error_handling );
commit 277ef05aea9b9e5796a23224bd8c9054a2adde33
Author: Alex Vandiver <alexmv at bestpractical.com>
Date: Mon Mar 16 13:16:21 2015 -0400
Drop the severity of known indexing failures to "info"
These failures are known failure mores that cannot easily be addressed.
While the failure merits logging, as they are not unexpected in most
installs, there is no direct solution and they can, in most cases, be
ignored. As such, "info" is a fine log level for a not-unexpected and
unhandle-able error.
diff --git a/sbin/rt-fulltext-indexer.in b/sbin/rt-fulltext-indexer.in
index a326de7..eca1a32 100644
--- a/sbin/rt-fulltext-indexer.in
+++ b/sbin/rt-fulltext-indexer.in
@@ -248,8 +248,8 @@ sub process_mysql {
sub {
my ($id) = @_;
if ($dbh->err == 1366 and $dbh->state eq "HY000") {
- warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
- "Error: ". $dbh->errstr;
+ $RT::Logger->info("Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
+ "Error: ". $dbh->errstr);
} else {
die "Attachment $id cannot be indexed: " . $dbh->errstr;
}
@@ -263,14 +263,14 @@ sub process_pg {
my ($id) = @_;
my $dbh = $RT::Handle->dbh;
if ( $dbh->err == 7 && $dbh->state eq '54000' ) {
- warn "Attachment $id cannot be indexed. Most probably it contains too many unique words. ".
- "Error: ". $dbh->errstr;
+ $RT::Logger->info("Attachment $id cannot be indexed. Most probably it contains too many unique words. ".
+ $dbh->errstr);
} elsif ( $dbh->err == 7 && $dbh->state eq '22021' ) {
- warn "Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
- "Error: ". $dbh->errstr;
+ $RT::Logger->info("Attachment $id cannot be indexed. Most probably it contains invalid UTF8 bytes. ".
+ $dbh->errstr);
} elsif ( $dbh->err == 7 && $dbh->state eq 'XX000' ) {
- warn "Attachment $id cannot be indexed; it is too large. ".
- "Error: ". $dbh->errstr;
+ $RT::Logger->info("Attachment $id cannot be indexed; it is too large. ".
+ $dbh->errstr);
} else {
die "Attachment $id cannot be indexed: " . $dbh->errstr;
}
-----------------------------------------------------------------------
More information about the rt-commit
mailing list