Bring fix from v2.x branch for exception retry handling NameError exception
This commit is contained in:
parent
542003e4e5
commit
7d699e400c
|
@ -185,7 +185,7 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
||||||
begin
|
begin
|
||||||
connection = @pool.getConnection
|
connection = @pool.getConnection
|
||||||
rescue => e
|
rescue => e
|
||||||
log_jdbc_exception(e)
|
log_jdbc_exception(e, true)
|
||||||
# If a connection is not available, then the server has gone away
|
# If a connection is not available, then the server has gone away
|
||||||
# We're not counting that towards our retry count.
|
# We're not counting that towards our retry count.
|
||||||
return events, false
|
return events, false
|
||||||
|
@ -200,10 +200,7 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
||||||
statement.execute
|
statement.execute
|
||||||
rescue => e
|
rescue => e
|
||||||
if retry_exception?(e)
|
if retry_exception?(e)
|
||||||
log_jdbc_exception(e)
|
|
||||||
events_to_retry.push(event)
|
events_to_retry.push(event)
|
||||||
else
|
|
||||||
@logger.error('JDBC - Non-retryable exception. Dropping event. If you think this is in error please log an issue with the details from this exception.', exception: e, event: event)
|
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
statement.close unless statement.nil?
|
statement.close unless statement.nil?
|
||||||
|
@ -283,16 +280,20 @@ class LogStash::Outputs::Jdbc < LogStash::Outputs::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def retry_exception?(exception)
|
def retry_exception?(exception)
|
||||||
return (exception.class != java.sql.SQLException or (
|
retrying = (exception.respond_to? 'getSQLState' and (RETRYABLE_SQLSTATE_CLASSES.include?(exception.getSQLState[0,2]) or @retry_sql_states.include?(exception.getSQLState)))
|
||||||
RETRYABLE_SQLSTATE_CLASSES.include?(e.getSQLState[0,2]) or
|
log_jdbc_exception(exception, retrying)
|
||||||
@retry_sql_states.include?(e.getSQLState)
|
|
||||||
))
|
retrying
|
||||||
end
|
end
|
||||||
|
|
||||||
def log_jdbc_exception(exception)
|
def log_jdbc_exception(exception, retrying)
|
||||||
current_exception = exception
|
current_exception = exception
|
||||||
loop do
|
loop do
|
||||||
@logger.warn('JDBC Exception encountered: Will automatically retry.', exception: current_exception)
|
if retrying
|
||||||
|
@logger.warn('JDBC Exception. Retrying.', exception: current_exception)
|
||||||
|
else
|
||||||
|
@logger.warn('JDBC Exception. Not retrying. Dropping event.', exception: current_exception)
|
||||||
|
end
|
||||||
current_exception = current_exception.getNextException
|
current_exception = current_exception.getNextException
|
||||||
break if current_exception.nil?
|
break if current_exception.nil?
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user