Date: Tuesday, February 21, 2006 @ 17:51:43
Author: gilles
Path: /cvsroot/carob/carob/src
Modified: Connection.cpp (1.68 -> 1.69)
controller retrieval transfered from initConnection to constructor so we can
call initConnection from reconnect()
moved isClosed=true at beginning of close() function to have it set even if an
exception is thrown
fixed statementExecuteXXX logging
fixed statementExecute() & statementExecuteUpdateWithKeys() sanity checks so
they are not done at each reconnection anymore
fixed problem in reconnect(): don't delete connection policy anymore in here
----------------+
Connection.cpp | 92 ++++++++++++++++++++++++-------------------------------
1 files changed, 41 insertions(+), 51 deletions(-)
Index: carob/src/Connection.cpp
diff -u carob/src/Connection.cpp:1.68 carob/src/Connection.cpp:1.69
--- carob/src/Connection.cpp:1.68 Fri Feb 17 17:15:45 2006
+++ carob/src/Connection.cpp Tue Feb 21 17:51:43 2006
@@ -87,6 +87,10 @@
persistent_connection = parameters.getPersistentConnection();
try
{
+ if (connect_policy_ptr == NULL)
+ throw DriverException(L"Connection policy error. Aborting.");
+ connected_controller = connect_policy_ptr->getController();
+
//Do the authentication stuff, then receive ack and other params
if (initConnection() && finalizeConnect())
{
@@ -132,17 +136,10 @@
dbNameSend = false,
userNameSend = false,
userPassSend = false;
- if (connect_policy_ptr == NULL)
- throw DriverException(L"Connection policy error. Aborting.");
- connected_controller = connect_policy_ptr->getController();
if (isInfoEnabled())
- {
- wstring msg = L"Authenticating with controller "
+ logInfo(fctName, L"Authenticating with controller "
+ connected_controller.getHostName() + L":"
- +
toWString(static_cast<int>(connected_controller.getHostPort()));
- if (isInfoEnabled())
- logInfo(fctName, msg);
- }
+ +
toWString(static_cast<int>(connected_controller.getHostPort())));
try
{
//Here is the connection protocol...
@@ -312,6 +309,7 @@
//Wait until other methods/Commands are done
LockScope ls(&connectionCS);
+ isClosed = true;
//delete all statement created by this connection
for (std::list<Statement*>::iterator iter = created_statements.begin();
iter != created_statements.end(); iter++)
@@ -324,35 +322,34 @@
{
return false;
}
-
+ bool closeOK = false;
+ if (isDebugEnabled())
+ logDebug(fctName, L"Closing connection");
try
{
- if (driverSocketPtr != NULL)
- {
- if (isDebugEnabled())
- logDebug(fctName, L"Closing connection");
-
- sendCommand(*driverSocketPtr, Close);
-
- isClosed = true;
- bool closeOK;
- closeOK = receiveBoolOrException();
-
- //now close the socket itself
- closeOK &= driverSocketPtr->closeSocket();
-
- return closeOK;
- }
+ // Try to cleanly close the connection (also on controller side)
+ sendCommand(*driverSocketPtr, Close);
+ closeOK = receiveBoolOrException();
+ }
+ catch (...)
+ {
+ if (isWarnEnabled())
+ logWarn(fctName, L"Could not warn controller we are closing connection");
+ }
+ try
+ {
+ //now close the socket itself
+ closeOK &= driverSocketPtr->closeSocket();
+ return closeOK;
}
//catch any exception, log an error and return false (no exception forward)
catch (...)
{
- if (isErrorEnabled())
+ if (isWarnEnabled())
{
- logError(fctName, L"Exception while closing connection");
+ logWarn(fctName, L"Caught exception while closing connection");
}
//Don't re-throw = transparent closing
- return false;
}
return false;
}
@@ -604,17 +601,13 @@
DriverResultSet* retVal = NULL;
FO_TRY_NTIMES(RECONNECT_RETRIES)
-
setConnectionParametersOnRequest(request);
+ if (isDebugEnabled())
+ logDebug(fctName, L"Sending read request " +
static_cast<wstring>(request));
sendCommand(*driverSocketPtr, StatementExecuteQuery);
request.sendToStream(*driverSocketPtr);
-
- if (isDebugEnabled())
- logDebug(fctName, L"Executing read request "
- + static_cast<wstring>(request));
retVal = receiveResultSet();
-
FO_CATCH_NTIMES
return retVal;
}
@@ -634,6 +627,8 @@
FO_TRY_NTIMES(RECONNECT_RETRIES)
setConnectionParametersOnRequest(request);
+ if (isDebugEnabled())
+ logDebug(fctName, L"Sending write request " +
static_cast<wstring>(request));
sendCommand(*driverSocketPtr, StatementExecuteUpdate);
writeRequestOnStream(request);
request.setId(receiveLongOrException());
@@ -662,20 +657,19 @@
wstring fctName(L"Connection::statementExecute");
LockScope ls(&connectionCS);
+ checkIfConnected();
+ beginTransactionIfNeeded();
std::list<ResultSetOrUpdateCount> results;
FO_TRY_NTIMES(RECONNECT_RETRIES)
- checkIfConnected();
- beginTransactionIfNeeded();
+ if (isDebugEnabled())
+ logDebug(fctName, L"Sending request " + static_cast<wstring>(request));
setConnectionParametersOnRequest(request);
if (!autoCommit)
writeExecutedInTransaction = true;
sendCommand(*driverSocketPtr, StatementExecute);
request.sendToStream(*driverSocketPtr);
- if (isDebugEnabled())
- logDebug(fctName, L"Executing Statement.execute("
- + static_cast<wstring>(request) + L")");
request.setId(receiveLongOrException());
FO_CATCH_NTIMES
try
@@ -713,19 +707,20 @@
LockScope ls(&connectionCS);
+ checkIfConnected();
+ beginTransactionIfNeeded();
+
std::list<ResultSetOrUpdateCount> result;
for (int failuresCnt=0; failuresCnt<RECONNECT_RETRIES; failuresCnt++)
{ // this for is in the case we were disconnected and the controller did not
// get the update request
FO_TRY_NTIMES(RECONNECT_RETRIES)
- checkIfConnected();
- beginTransactionIfNeeded();
setConnectionParametersOnRequest(request);
- sendCommand(*driverSocketPtr, StatementExecuteUpdateWithKeys);
- request.sendToStream(*driverSocketPtr);
if (isDebugEnabled())
logDebug(fctName, L"Executing write request with keys: "
+ static_cast<wstring>(request));
+ sendCommand(*driverSocketPtr, StatementExecuteUpdateWithKeys);
+ request.sendToStream(*driverSocketPtr);
request.setId(receiveLongOrException());
FO_CATCH_NTIMES
try
@@ -792,10 +787,8 @@
*driverSocketPtr<<cursorName;
*driverSocketPtr<<fetchSize;
if (isDebugEnabled())
- {
logDebug(fctName, L"Fetching next " + toWString(fetchSize) + L" from "
+ cursorName);
- }
TypeTag tag(*driverSocketPtr);
if (tag == TT_EXCEPTION)
@@ -1066,16 +1059,13 @@
if (initConnection() && finalizeConnect())
{
if (isInfoEnabled())
- logInfo(fctName, L"Connection succeded");
+ logInfo(fctName, L"Reconnection to the same controller succeded");
isClosed = false;
}
}
catch (...)
- {
- //Do some clean up: we are in constructor so if we throw an exception,
the
- //destructor will never be called...
+ { //ignore but detroy socket if created
delete driverSocketPtr; driverSocketPtr = NULL;
- delete connect_policy_ptr; connect_policy_ptr = NULL;
}
}
if (isClosed)
_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits