Previous Topic

Next Topic

Session logon and logout

In order to perform any database operations, it is necessary to logon to a c-tree session. A session is terminated with a session logout.

To log on to a session a session handle must be allocated with ctdbAllocSession() and then ctdbLogon() is called to perform the session logon.

CTHANDLE hSession = ctdbAllocSession(CTSESSION_CTDB);

if (!hSession)
   FatalError(“Session handle allocation failed\n”);
if (ctdbLogon(hSession, "FAIRCOMS", "ADMIN", "ADMIN") != CTDBRET_OK)
   FatalError(“Session logon failed\n”);

The parameters for the ctdbLogon() function are the same as for the ctdbCreateSession(). If the session dictionary doesn't exist and the session type is CTSESSION_CTDB or CTSESSION_SQL, ctdbLogon() function will fail returning error FNOP_ERR (12), indicating that c-treeDB could not locate the session dictionary file.

Tip: A useful sequence in code is to try to log on to the session, and if it fails with error FNOP_ERR (12), create the session dictionary and then log on again.

CTSESSION hSession;
hSession = ctdbAllocSession(CTSESSION_CTDB);
if (!hSession)
   FatalError(“Session handle allocation failed\n”);
if (ctdbLogon(hSession, “FAIRCOMS”, “ADMIN”, “ADMIN”) == FNOP_ERR)
{
   if (ctdbCreateSession(hSession, “FAIRCOMS”, “ADMIN”, “ADMIN”)!= CTDBRET_OK)
      FatalError(“Error creating session dictionary file\n”);
   if (ctdbLogon(hSession, “FAIRCOMS”, “ADMIN”, “ADMIN”) != CTDBRET_OK)
      FatalError(“Session logon failed\n”);
}

When operations with the session are no longer needed, it is necessary to logout from the session by calling ctdbLogout().

CTHANDLE hSession;
hSession = ctdbAllocSession(CTSESSION_CTDB);
if (!hSession)
   FatalError(“Session handle allocation failed\n”);
if (ctdbLogon(hSession, "FAIRCOMS", "ADMIN", "ADMIN") != CTDBRET_OK)
   FatalError(“Session logon failed\n”);
/* perform some other operations on databases and tables */
if (ctdbLogout(hSession) != CTDBRET_OK)
   FatalError(“Session logout failed\n”);
ctdbFreeSession(hSession);