restSessionInfo* _pmdController::newSessionInfo( const string & userName, UINT32 localIP ) { restSessionInfo *newSession = SDB_OSS_NEW restSessionInfo ; if( !newSession ) { PD_LOG( PDERROR, "Alloc rest session info failed" ) ; goto error ; } _ctrlLatch.get() ; newSession->_attr._sessionID = ossPack32To64( localIP, _sequence++ ) ; ossStrncpy( newSession->_attr._userName, userName.c_str(), SESSION_USER_NAME_LEN ) ; _mapSessions[ _makeID( newSession ) ] = newSession ; _add2UserMap( userName, newSession ) ; newSession->_inNum.inc() ; _ctrlLatch.release() ; newSession->lock() ; done: return newSession ; error: goto done ; }
// PD_TRACE_DECLARE_FUNCTION ( SDB__DMSSU, "_dmsStorageUnit::_dmsStorageUnit" ) _dmsStorageUnit::_dmsStorageUnit ( const CHAR *pSUName, UINT32 sequence, INT32 pageSize, INT32 lobPageSize ) :_apm(this), _pDataSu( NULL ), _pIndexSu( NULL ), _pLobSu( NULL ) { PD_TRACE_ENTRY ( SDB__DMSSU ) ; SDB_ASSERT ( pSUName, "name can't be null" ) ; if ( 0 == pageSize ) { pageSize = DMS_PAGE_SIZE_DFT ; } if ( 0 == lobPageSize ) { lobPageSize = DMS_DEFAULT_LOB_PAGE_SZ ; } CHAR dataFileName[DMS_SU_FILENAME_SZ + 1] = {0} ; CHAR idxFileName[DMS_SU_FILENAME_SZ + 1] = {0} ; _storageInfo._pageSize = pageSize ; _storageInfo._lobdPageSize = lobPageSize ; ossStrncpy( _storageInfo._suName, pSUName, DMS_SU_NAME_SZ ) ; _storageInfo._suName[DMS_SU_NAME_SZ] = 0 ; _storageInfo._sequence = sequence ; _storageInfo._secretValue = ossPack32To64( (UINT32)time(NULL), (UINT32)(ossRand()*239641) ) ; ossSnprintf( dataFileName, DMS_SU_FILENAME_SZ, "%s.%d.%s", _storageInfo._suName, sequence, DMS_DATA_SU_EXT_NAME ) ; ossSnprintf( idxFileName, DMS_SU_FILENAME_SZ, "%s.%d.%s", _storageInfo._suName, sequence, DMS_INDEX_SU_EXT_NAME ) ; _pDataSu = SDB_OSS_NEW dmsStorageData( dataFileName, &_storageInfo ) ; if ( _pDataSu ) { _pIndexSu = SDB_OSS_NEW dmsStorageIndex( idxFileName, &_storageInfo, _pDataSu ) ; } if ( NULL != _pDataSu && NULL != _pIndexSu ) { ossMemset( dataFileName, 0, sizeof( dataFileName ) ) ; ossMemset( idxFileName, 0 , sizeof( idxFileName ) ) ; ossSnprintf( dataFileName, DMS_SU_FILENAME_SZ, "%s.%d.%s", _storageInfo._suName, _storageInfo._sequence, DMS_LOB_META_SU_EXT_NAME ) ; ossSnprintf( idxFileName, DMS_SU_FILENAME_SZ, "%s.%d.%s", _storageInfo._suName, _storageInfo._sequence, DMS_LOB_DATA_SU_EXT_NAME ) ; _pLobSu = SDB_OSS_NEW dmsStorageLob( dataFileName, idxFileName, &_storageInfo, _pDataSu ) ; } PD_TRACE_EXIT ( SDB__DMSSU ) ; }
// The caller is responsible to free memory restSessionInfo* _pmdController::newSessionInfo( const string & userName, UINT32 localIP ) { // memory will be freed in releaseSessionInfo ( manual release )and // _checkSession ( timeout release ) restSessionInfo *newSession = SDB_OSS_NEW restSessionInfo ; if( !newSession ) { PD_LOG( PDERROR, "Alloc rest session info failed" ) ; goto error ; } // get lock _ctrlLatch.get() ; newSession->_attr._sessionID = ossPack32To64( localIP, _sequence++ ) ; ossStrncpy( newSession->_attr._userName, userName.c_str(), SESSION_USER_NAME_LEN ) ; // add to session map _mapSessions[ _makeID( newSession ) ] = newSession ; // add to user session map _add2UserMap( userName, newSession ) ; // attach session newSession->_inNum.inc() ; // release lock _ctrlLatch.release() ; // The session will be locked once it's created, and the caller will // start working on the session. Once the work is done, the session will // be unlocked ( detached or destroyed ) newSession->lock() ; done: return newSession ; error: goto done ; }
UINT64 _mongoSession::identifyID() { return ossPack32To64( _socket.getLocalIP(), _socket.getLocalPort() ) ; }