Bug #42830 Falcon Exception: ResultSet has been closed after recovery
Submitted: 13 Feb 14:04 Modified: 15 May 17:58
Reporter: Philip Stoev
Status: Closed
Category:Server: Falcon Severity:S1 (Critical)
Version:6.0-falcon-team OS:Any
Assigned to: Christopher Powers Target Version:6.0-beta
Tags: Tablespace, system transaction, F_ERROR HANDLING
Triage: Triaged: D1 (Critical)

[13 Feb 14:04] Philip Stoev
Description:
Shortly after recovery, Falcon crashed as follows:

 16:24:09 Update cardinalities
# 16:24:09 1: CommitNoUpdates transaction 2
# 16:24:09 Exception: ResultSet has been closed
# 16:24:09 2: Rollback transaction 3
# 16:24:10 Exception: can't continue after fatal error
# 16:24:10 Thread::thread: thread -1510691952: can't continue after fatal error
# 16:24:10 terminate called after throwing an instance of 'SQLError'
# 16:24:10 090212 16:24:10 - mysqld got signal 6 ;

 16:24:10 stack_bottom = (nil) thread_stack 0x30c00
# 16:24:10
/export/home/pb2/test/sb_1-317944-1234451012.72/mysql-6.0.10-alpha-linux-i686-test/libexec/mysqld(my_print_stacktrace+0x32)
[0x88194c9]
# 16:24:10
/export/home/pb2/test/sb_1-317944-1234451012.72/mysql-6.0.10-alpha-linux-i686-test/libexec/mysqld(handle_segfault+0x2cd)
[0x82bafc9]
# 16:24:10 [0x193420]
# 16:24:10 /lib/libc.so.6(abort+0x101) [0x74b621]
# 16:24:10 /usr/lib/libstdc++.so.6(__gnu_cxx::__verbose_terminate_handler()+0x150)
[0xa99c60]
# 16:24:10 /usr/lib/libstdc++.so.6 [0xa976c5]
# 16:24:10 /usr/lib/libstdc++.so.6 [0xa97702]
# 16:24:10 /usr/lib/libstdc++.so.6(__cxa_rethrow+0x5b) [0xa977bb]
# 16:24:10
/export/home/pb2/test/sb_1-317944-1234451012.72/mysql-6.0.10-alpha-linux-i686-test/libexec/mysqld(Thread::thread()+0x1a2)
[0x857b536]
# 16:24:10
/export/home/pb2/test/sb_1-317944-1234451012.72/mysql-6.0.10-alpha-linux-i686-test/libexec/mysqld(Thread::thread(void*)+0x17)
[0x857b5f9]
# 16:24:10 /lib/libpthread.so.0 [0x89a45b]
# 16:24:10 /lib/libc.so.6(clone+0x5e) [0x7f1c4e]

How to repeat:
This is happening only rarely and a new recovery attempt on the original tablespace does
not produce the failure.
[19 Feb 18:16] Kevin Lewis
Chris, Vlad suggests that this may be similar to Bug#42725.  These bugs may be seen now
because the scavenger is running more often.  Please investigate whether the scavenger
needs to coordinate access to ResultSets before clearing them.
[23 Feb 21:17] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/67254

3032 Christopher Powers	2009-02-23
      Bug#42725 "Exception when filling I_S.TABLESPACES by Falcon"
      Bug#42830 "Falcon Exception: ResultSet has been closed after recovery"
      
      The exception occurs because the system transaction is committed
      while the result set is being accessed. The commit closes the
      statement and clears the associated result sets.
      
      To prevent this, the tablespace getinfo methods now get a
      shared lock on syncSysDDL before executing queries.
      
      Database::openDatabase also gets a shared lock on syncSysDDL
      prior to executing query and processing the result set. Note that
      this issue was indirectly addressed by disabling scavenging during
      recovery: http://lists.mysql.com/commits/66823.
[23 Feb 23:47] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/67268

3034 Christopher Powers	2009-02-23
      Bug#42725 "Exception when filling I_S.TABLESPACES by Falcon"
      Bug#42830 "Falcon Exception: ResultSet has been closed after recovery"
      
      Missed a spot: SequenceManager::initialize()
[2 Mar 15:12] Bugs System
Pushed into 6.0.11-alpha (revid:alik@sun.com-20090302140208-lfdejjbcyezlhhjt) (version
source revid:olav@sun.com-20090224081308-fcszc3gg5r9gykao) (merge vers: 6.0.11-alpha)
(pib:6)
[15 May 17:58] MC Brown
An entry has been added to the 6.0.11 changelog: 

When Falcon is populating the INFORMATION_SCHEMA.TABLESPACES table, an exception can be
raised because required result set has been closed before the resultset has been
completed. This can happen during a BACKUP operation.