#At file:///home/cpowers/work/dev/dev-09/mysql/
2879 Christopher Powers 2008-10-23 [merge]
(no message)
modified:
storage/falcon/Bitmap.cpp
storage/falcon/Cache.cpp
storage/falcon/Database.cpp
storage/falcon/StorageConnection.cpp
storage/falcon/StorageConnection.h
storage/falcon/ha_falcon.cpp
=== modified file 'storage/falcon/Bitmap.cpp'
--- a/storage/falcon/Bitmap.cpp 2008-10-18 03:46:34 +0000
+++ b/storage/falcon/Bitmap.cpp 2008-10-23 20:10:01 +0000
@@ -722,7 +722,7 @@ void Bitmap::unitTest(void)
tester->set(bitNumber);
}
- for (int bitNumber = 0; (bitNumber = tester->nextSet(0)) >= 0;)
+ for (bitNumber = 0; (bitNumber = tester->nextSet(0)) >= 0;)
{
if (!tester->isSet(bitNumber))
Log::log("** Error - %d should be set\n", bitNumber);
@@ -750,7 +750,7 @@ void Bitmap::unitTest(void)
tester->set(bitNumber);
}
- for (int bitNumber = 0; (bitNumber = tester->nextSet(bitNumber)) >= 0;)
+ for (bitNumber = 0; (bitNumber = tester->nextSet(bitNumber)) >= 0;)
{
Log::log("Clearing bit %d\n", bitNumber);
tester->clear(bitNumber);
@@ -773,13 +773,13 @@ void Bitmap::unitTest(void)
tester->set(bitNumber);
}
- for (int bitNumber = 0; (bitNumber = tester->nextSet( pseudoRand(bitNumber, 1800000))) >= 0;)
+ for (bitNumber = 0; (bitNumber = tester->nextSet( pseudoRand(bitNumber, 1800000))) >= 0;)
{
Log::log("Clearing bit %d\n", bitNumber);
tester->clear(bitNumber);
}
- for (int bitNumber = 0; (bitNumber = tester->nextSet(0)) >= 0;)
+ for (bitNumber = 0; (bitNumber = tester->nextSet(0)) >= 0;)
{
Log::log("Clearing bit %d\n", bitNumber);
tester->clear(bitNumber);
=== modified file 'storage/falcon/Cache.cpp'
--- a/storage/falcon/Cache.cpp 2008-10-02 23:06:04 +0000
+++ b/storage/falcon/Cache.cpp 2008-10-23 07:58:38 +0000
@@ -934,7 +934,15 @@ void Cache::ioThread(void)
Log::log(LogInfo, "%d: Cache flush: %d pages, %d writes in %d seconds (%d pps)\n",
database->deltaTime, pages, writes, delta, pages / MAX(delta, 1));
- database->pageCacheFlushed(flushArg);
+ try
+ {
+ database->pageCacheFlushed(flushArg);
+ }
+ catch (...)
+ {
+ // Ignores any errors from writing the checkpoint
+ // log record (ie. if we have issues with the serial log)
+ }
}
else
flushLock.unlock();
=== modified file 'storage/falcon/Database.cpp'
--- a/storage/falcon/Database.cpp 2008-10-16 02:40:08 +0000
+++ b/storage/falcon/Database.cpp 2008-10-23 07:58:38 +0000
@@ -2434,7 +2434,16 @@ void Database::updateCardinalities(void)
syncTbl.unlock();
syncDDL.unlock();
- commitSystemTransaction();
+ try
+ {
+ commitSystemTransaction();
+ }
+ catch (...)
+ {
+ // Ignores any errors from committing the updates of the cardinalities
+ // Situations where this might happen can be due to problems with
+ // writing to the serial log
+ }
}
void Database::sync()
=== modified file 'storage/falcon/StorageConnection.cpp'
--- a/storage/falcon/StorageConnection.cpp 2008-03-11 16:15:47 +0000
+++ b/storage/falcon/StorageConnection.cpp 2008-10-23 07:58:38 +0000
@@ -133,6 +133,8 @@ void StorageConnection::close(void)
int StorageConnection::commit(void)
{
+ int errorCode = 0;
+
if (connection)
{
if (traceStream)
@@ -142,15 +144,22 @@ int StorageConnection::commit(void)
traceStream->clear();
}
-
- connection->commit();
+
+ try
+ {
+ connection->commit();
+ }
+ catch (SQLException& exception)
+ {
+ errorCode = translateError(exception, StorageErrorIOErrorSerialLog);
+ }
}
transactionActive = false;
implicitTransactionCount = 0;
verbMark = 0;
- return 0;
+ return errorCode;
}
int StorageConnection::prepare(int xidLength, const UCHAR *xid)
@@ -165,6 +174,8 @@ int StorageConnection::prepare(int xidLe
int StorageConnection::rollback(void)
{
+ int errorCode = 0;
+
if (connection)
{
if (traceStream)
@@ -174,14 +185,22 @@ int StorageConnection::rollback(void)
traceStream->clear();
}
- connection->rollback();
+
+ try
+ {
+ connection->rollback();
+ }
+ catch (SQLException& exception)
+ {
+ errorCode = translateError(exception, StorageErrorIOErrorSerialLog);
+ }
}
transactionActive = false;
implicitTransactionCount = 0;
verbMark = 0;
- return 0;
+ return errorCode;
}
int StorageConnection::startTransaction(int isolationLevel)
@@ -321,10 +340,16 @@ int StorageConnection::startImplicitTran
return false;
}
-void StorageConnection::endImplicitTransaction(void)
+int StorageConnection::endImplicitTransaction(void)
{
+ int errorCode = 0;
+
if (implicitTransactionCount > 0 && --implicitTransactionCount == 0)
- commit();
+ {
+ errorCode = commit();
+ }
+
+ return errorCode;
}
int StorageConnection::markVerb(void)
@@ -339,13 +364,22 @@ int StorageConnection::markVerb(void)
return false;
}
-void StorageConnection::rollbackVerb(void)
+int StorageConnection::rollbackVerb(void)
{
if (verbMark)
{
- savepointRollback(verbMark);
- verbMark = 0;
+ try
+ {
+ savepointRollback(verbMark);
+ verbMark = 0;
+ }
+ catch (SQLException& exception)
+ {
+ return translateError(exception, StorageErrorIOErrorSerialLog);
+ }
}
+
+ return 0;
}
void StorageConnection::releaseVerb(void)
@@ -416,3 +450,26 @@ void StorageConnection::validate(int opt
connection->validate(flags);
}
+
+int StorageConnection::translateError(SQLException& exception, int defaultStorageError)
+{
+ // This method is inspired by the corresponding method in
+ // StorageTable::translateError.
+
+ int errorCode;
+ int sqlCode = exception.getSqlcode();
+
+ switch (sqlCode)
+ {
+ case IO_ERROR_SERIALLOG:
+ errorCode = StorageErrorIOErrorSerialLog;
+ break;
+
+ default:
+ errorCode = defaultStorageError;
+ }
+
+ setErrorText(&exception);
+
+ return errorCode;
+}
=== modified file 'storage/falcon/StorageConnection.h'
--- a/storage/falcon/StorageConnection.h 2008-03-11 16:15:47 +0000
+++ b/storage/falcon/StorageConnection.h 2008-10-23 07:58:38 +0000
@@ -54,12 +54,12 @@ public:
virtual int rollback(void);
virtual int startTransaction(int isolationLevel);
virtual int startImplicitTransaction(int isolationLevel);
- virtual void endImplicitTransaction(void);
+ virtual int endImplicitTransaction(void);
virtual int savepointSet();
virtual int savepointRelease(int savePoint);
virtual int savepointRollback(int savePoint);
virtual int markVerb();
- virtual void rollbackVerb();
+ virtual int rollbackVerb();
virtual void releaseVerb();
virtual void addRef(void);
virtual void release(void);
@@ -81,6 +81,7 @@ public:
void setMySqlThread(THD* thd);
void setCurrentStatement(const char* text);
Transaction* getTransaction(void);
+ int translateError(SQLException& exception, int defaultStorageError);
Connection *connection;
Database *database;
=== modified file 'storage/falcon/ha_falcon.cpp'
--- a/storage/falcon/ha_falcon.cpp 2008-10-23 01:21:55 +0000
+++ b/storage/falcon/ha_falcon.cpp 2008-10-24 00:12:20 +0000
@@ -1203,20 +1203,26 @@ int StorageInterface::commit(handlerton
{
DBUG_ENTER("StorageInterface::commit");
StorageConnection *storageConnection = getStorageConnection(thd);
+ int ret = 0;
if (all || !thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
{
if (storageConnection)
- storageConnection->commit();
+ ret = storageConnection->commit();
else
- storageHandler->commit(thd);
+ ret = storageHandler->commit(thd);
}
else
{
if (storageConnection)
storageConnection->releaseVerb();
else
- storageHandler->releaseVerb(thd);
+ ret = storageHandler->releaseVerb(thd);
+ }
+
+ if (ret != 0)
+ {
+ DBUG_RETURN(getMySqlError(ret));
}
DBUG_RETURN(0);
@@ -1245,20 +1251,26 @@ int StorageInterface::rollback(handlerto
{
DBUG_ENTER("StorageInterface::rollback");
StorageConnection *storageConnection = getStorageConnection(thd);
+ int ret = 0;
if (all || !thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
{
if (storageConnection)
- storageConnection->rollback();
+ ret = storageConnection->rollback();
else
- storageHandler->rollback(thd);
+ ret = storageHandler->rollback(thd);
}
else
{
if (storageConnection)
- storageConnection->rollbackVerb();
+ ret = storageConnection->rollbackVerb();
else
- storageHandler->rollbackVerb(thd);
+ ret = storageHandler->rollbackVerb(thd);
+ }
+
+ if (ret != 0)
+ {
+ DBUG_RETURN(getMySqlError(ret));
}
DBUG_RETURN(0);
@@ -1929,10 +1941,12 @@ int StorageInterface::external_lock(THD
if (lock_type == F_UNLCK)
{
+ int ret = 0;
+
storageConnection->setCurrentStatement(NULL);
if (!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))
- storageConnection->endImplicitTransaction();
+ ret = storageConnection->endImplicitTransaction();
else
storageConnection->releaseVerb();
@@ -1941,6 +1955,9 @@ int StorageInterface::external_lock(THD
storageTable->clearStatement();
storageTable->clearCurrentIndex();
}
+
+ if (ret)
+ DBUG_RETURN(error(ret));
}
else
{
| Thread |
|---|
| • bzr commit into mysql-6.0-falcon-team branch (cpowers:2879) | Christopher Powers | 24 Oct |