Ejemplo n.º 1
0
BOOL CUserFileObject::ReadFile(  LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead )
{
	BOOL bRes = FALSE;

	if (lpNumberOfBytesRead)
	{
		*lpNumberOfBytesRead = 0;
	}

	if( 1 == m_bValid )
	{
		DWORD dwReadLen = 0;

		m_rwLock.wlock();

		bRes =  m_pMemFileObject->ReadFileData(lpBuffer, nNumberOfBytesToRead, &dwReadLen,m_ulFilePointer);

		if (lpNumberOfBytesRead)
		{
			*lpNumberOfBytesRead = dwReadLen;
		}
		
		m_ulFilePointer+=dwReadLen;

		m_rwLock.unlock();
	}
	return bRes;
}
Ejemplo n.º 2
0
DWORD CUserFileObject::SetFilePointer( LONG lDistanceToMove, PLONG lpDistanceToMoveHigh,DWORD dwMoveMethod )
{
	ULONGLONG ulNewFilePointer = 0;

	if( 1 == m_bValid )
	{
		m_rwLock.wlock();
		if( FILE_BEGIN == dwMoveMethod )
		{
			m_ulFilePointer = lDistanceToMove;
		}

		if( FILE_CURRENT == dwMoveMethod )
		{
			m_ulFilePointer += lDistanceToMove;
		}

		if( FILE_END == dwMoveMethod )
		{
			m_ulFilePointer = m_pMemFileObject->GetFileLength();
			m_ulFilePointer += lDistanceToMove;
		}

		ulNewFilePointer = m_ulFilePointer;
		m_rwLock.unlock();
	}

	return ulNewFilePointer;
}
Ejemplo n.º 3
0
BOOL CUserFileObject::WriteFile( LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten )
{
	BOOL bRes = FALSE;

	if (lpNumberOfBytesWritten)
	{
		*lpNumberOfBytesWritten = 0;
	}

	if( 1 == m_bValid )
	{
		DWORD dwWriteLen = 0;

		m_rwLock.wlock();

		bRes = m_pMemFileObject->WriteFileData(lpBuffer, nNumberOfBytesToWrite,&dwWriteLen,m_ulFilePointer);

		if (lpNumberOfBytesWritten)
		{
			*lpNumberOfBytesWritten = dwWriteLen;
		}

		m_ulFilePointer+=dwWriteLen;

		m_rwLock.unlock();
	}

	return bRes;
}
Ejemplo n.º 4
0
	ULONGLONG GetFileLength()
	{
		if(FALSE==CheckSafe()) return FALSE;
		ULONGLONG ulFileLen = 0;
		m_rwLock.rlock();
		ulFileLen = m_ulFileLen;
		m_rwLock.unlock();
		return ulFileLen;
	}
Ejemplo n.º 5
0
	BOOL ReadFileData( LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,CONST ULONGLONG ulFilePointer )
	{
		if(FALSE==CheckSafe()) return FALSE;

		m_rwLock.rlock();

		ULONGLONG ulMaxReadLen = min(nNumberOfBytesToRead,(m_ulFileLen - ulFilePointer));
		if ( ulMaxReadLen > 0 )
		{
			memcpy_s(lpBuffer,ulMaxReadLen,m_pMemBuf+ulFilePointer,ulMaxReadLen);
		}

		if(lpNumberOfBytesRead)
		{
			*lpNumberOfBytesRead = ulMaxReadLen;
		}

		m_rwLock.unlock();

		return TRUE;
	}
Ejemplo n.º 6
0
VOID CommonSetCookie(LPCSTR pchUrl,LPCSTR pchCookieData,BOOL bFromJs = FALSE)
{
	CCookieParser cookieParser;
	cookieParser.ParserCookieString(pchUrl,pchCookieData);
	
	if (g_pDB)
	{
		char *pcherrmsg = NULL;
		CStringA strSqlCmd;

		strSqlCmd.Format("replace into cookiedata (domain,path,cookiename,cookievalue,secure,httponly,session) values('%s','%s','%s','%s',%d,%d,%d)"
			,cookieParser.m_strDomain
			,cookieParser.m_strPath
			,cookieParser.m_strCookieName
			,cookieParser.m_strCookieValue
			,cookieParser.m_bSecure
			,cookieParser.m_bHttpOnly
			,cookieParser.m_bSessionCookie);

		DWORD dwTickStart = GetTickCount();


		Locker.wlock();

		/*ASSERT(*/sqlite3_exec(g_pDB,strSqlCmd,NULL,NULL,&pcherrmsg)/* == 0)*/;

		Locker.unlock();

		DWORD dwUseTime = GetTickCount() - dwTickStart;

		CStringA strMsgout;
		strMsgout.Format("插入Cookie 用时:%d\r\n",dwUseTime);
		OutputDebugStringA(strMsgout);



	}


}
Ejemplo n.º 7
0
VOID CommonGetCookie(LPCSTR pchUrl,CHAR *pchCookieData,int nCookieDataLen,BOOL bFromJs = FALSE)
{

	CUrlParser urlParser;
	urlParser.ParseUrl(pchUrl);

	CStringA strCheckDomain;
	strCheckDomain = urlParser.GetDomain();
	strCheckDomain = "."+strCheckDomain;

 	CStringA strSqlCmd;


	strSqlCmd.Format("select cookiename,cookievalue from cookiedata where \"%s\" like \"%%\"||domain and \"%s\" like path||\"%%\" %s %s "
		,strCheckDomain
		,urlParser.GetPath()
		,bFromJs?"and httponly=0":""
		,urlParser.GetProtocol().CompareNoCase("https") == 0?"and secure=1":"and secure=0"
		);

	CStringA strCookieResult;
	char *pcherrmsg = NULL;

	DWORD dwTickStart = GetTickCount();

	Locker.rlock();
 	ASSERT(sqlite3_exec(g_pDB,strSqlCmd,query_cookie_callback,&strCookieResult,&pcherrmsg) == 0);
	Locker.unlock();

	DWORD dwUseTime = GetTickCount() - dwTickStart;

	CStringA strMsgout;
	strMsgout.Format("查询Cookie 用时:%d\r\n",dwUseTime);
	OutputDebugStringA(strMsgout);

	strcpy_s(pchCookieData,nCookieDataLen,strCookieResult.GetBuffer());
	

}
Ejemplo n.º 8
0
	BOOL WriteFileData( LPCVOID lpBuffer, CONST DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten,CONST ULONGLONG ulFilePointer  )
	{
		if(FALSE==CheckSafe()) return FALSE;
		m_rwLock.wlock();

		ULONGLONG ulPreMemLen = m_ulMemLen;

		ULONGLONG dwNeedExLen = 0;
		if ( m_ulMemLen < ulFilePointer+nNumberOfBytesToWrite )
		{
			dwNeedExLen = ulFilePointer+nNumberOfBytesToWrite - m_ulMemLen;
		}

		if ( dwNeedExLen > 0 )
		{
			if ( NULL == m_pMemBuf )
			{
				ULONGLONG ulAllocLen = ( dwNeedExLen/4096+1)*4096;
				m_pMemBuf = (BYTE *)malloc(ulAllocLen);
				m_ulMemLen = ulAllocLen;
			}
			else
			{
				ULONGLONG ulAllocLen = ( dwNeedExLen/4096+1)*4096+m_ulMemLen;
				m_pMemBuf = (BYTE *)realloc(m_pMemBuf,ulAllocLen);
				m_ulMemLen = ulAllocLen;
			}	
		}


		g_DebugLock.Lock();

		nCurMemUse+=(m_ulMemLen-ulPreMemLen);
		if (nCurMemUse > nMaxMemUse)
		{
			nMaxMemUse = nCurMemUse;
		}

#ifdef DEBUG
		CString strMsgOut;
		strMsgOut.Format(L"当前内存占用 %u 最大内存占用 %u\r\n",nCurMemUse,nMaxMemUse);
		OutputDebugStringW(strMsgOut);
		
		strMsgOut.Format(L"%d",GetCurrentProcessId());
		CString strTemp;
		strTemp.Format(L"%ul",nMaxMemUse);
		WritePrivateProfileStringW(L"MaxMemUse",strMsgOut,strTemp,L"C:\\MatrixDebug.log");
#endif
		g_DebugLock.UnLock();

		memcpy_s(m_pMemBuf+ulFilePointer,nNumberOfBytesToWrite,lpBuffer,nNumberOfBytesToWrite);

		m_ulFileLen = ulFilePointer+nNumberOfBytesToWrite;

		if(lpNumberOfBytesWritten)
		{
			*lpNumberOfBytesWritten = nNumberOfBytesToWrite;
		}

		m_rwLock.unlock();


		return TRUE;
	}
Ejemplo n.º 9
0
int CThreadBeatHeart::run()
{
#define do_err()	if(pconnector != NULL) \
					{ \
						delete pconnector; \
						pconnector = NULL; \
					} \
					if(preport_stream != NULL) \
					{ \
						delete preport_stream; \
						preport_stream = NULL; \
					} \
					if(preport_resp_body != NULL) \
					{ \
						delete [] preport_resp_body; \
						preport_resp_body = NULL; \
					}

    int ret;
    int i, vnode_count;
    int vnode_id;
    int64_t body_len;
    byte vnode_status;
    time_t nlast_beat_time;
    char proxy_ip[KL_COMMON_IP_ADDR_LEN];
    CConnector *pconnector = NULL;
    CTimedStream *preport_stream = NULL;
    pkg_header report_resp_header;
    pkg_message *pstorage_sync_msg;
    byte *preport_resp_body = NULL;
    vnode_resp_info *pvnode_resp_unit;
    storage_sync_event *pstorage_sync_event;

    try
    {
        pconnector = new CConnector(m_proxy_addr);
    }
    catch(std::bad_alloc)
    {
        pconnector = NULL;
        KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                        "no more memory to create beat-hearting connector", \
                        __LINE__);
        return ENOMEM;
    }
    catch(int errcode)
    {
        KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                        "call CConnector constructor failed, err: %s", \
                        __LINE__, strerror(errcode));
        return errcode;
    }

    try
    {
        preport_stream = new CTimedStream();
    }
    catch(std::bad_alloc)
    {
        preport_stream = NULL;
        KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                        "no more memory to create beat-hearting sock stream", \
                        __LINE__);
        do_err();
        return ENOMEM;
    }
    catch(int errcode)
    {
        preport_stream = NULL;
        KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                        "call CTimedStream constructor failed, err: %s", \
                        __LINE__, strerror(errcode));
        return errcode;
    }

    if(pconnector->stream_connect(preport_stream) != 0)
    {
        m_proxy_addr.getipaddress(proxy_ip, sizeof(proxy_ip));
        KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                        "connect to proxy node(ip: %s, port: %d) failed, err: %s", \
                        __LINE__, proxy_ip, m_proxy_addr.getport(), strerror(errno));
        do_err();
        return errno;
    }

    if(join_and_report(preport_stream) != 0)
    {
        m_proxy_addr.getipaddress(proxy_ip, sizeof(proxy_ip));
        KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                        "send join request to proxy node(ip: %s, port: %d) failed", \
                        __LINE__, proxy_ip, m_proxy_addr.getport());
        do_err();
        return -1;
    }

    nlast_beat_time = time(NULL);
    while(m_bstop_flag != true)
    {
        //KL_SYS_INFOLOG("beat-hearting thread report loop");
        if(time(NULL) - nlast_beat_time < KL_STORAGE_BEAT_INTERVAL)
        {
            sleep(1);
            continue;
        }

        //KL_SYS_INFOLOG("beat-hearting thread true report loop");
        nlast_beat_time = time(NULL);
        if((ret = report_vnode_info(preport_stream)) != 0)
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "report storage vnode information failed, err: %s", \
                            __LINE__, strerror(ret));
            do_err();
            return ret;
        }
        //KL_SYS_INFOLOG("beat-hearting thread report success");
        //to receive the reponse from proxy node
        if((ret = preport_stream->stream_recv(&report_resp_header, \
                                              sizeof(report_resp_header), g_ntimeout)) != 0)
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "report thread recv report response header failed, err: %s", \
                            __LINE__, strerror(ret));
            do_err();
            return ret;
        }

        //KL_SYS_INFOLOG("recv header ret: %d, pkg_header len: %d", ret, sizeof(pkg_header));
        //check the response status
        if(report_resp_header.status != 0)
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "storage node beat-hearting msg's response is occured with error", \
                            __LINE__);
            do_err();
            return -1;
        }
        //check whether response message is legal
        body_len = CSERIALIZER::buff2int64(report_resp_header.pkg_len);
        if(body_len == 0)
        {
            //proxy resp msg, have no body to merge
            continue;
        }
        else if(report_resp_header.cmd == KL_PROXY_CMD_SLAVER_RESP)
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "report thread recv slaver resp msg is illegal", \
                            __LINE__);
            return -1;
        }
        if((body_len % sizeof(vnode_resp_info) != 0))
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "report thread recv master resp body len(body_len: %d) is illegal", \
                            __LINE__, body_len);
            do_err();
            return -1;
        }

        try
        {
            preport_resp_body = new byte[body_len];
        }
        catch(std::bad_alloc)
        {
            preport_resp_body = NULL;
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "no more memory to create report response body buffer(pkg_len: %ld)", \
                            __LINE__, body_len);
            do_err();
            return ENOMEM;
        }
        //to receive response body
        if((ret = preport_stream->stream_recv(preport_resp_body, body_len, g_ntimeout)) != 0)
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "report thread recv report response body failed, err: %s", \
                            __LINE__, strerror(ret));
            do_err();
            return ret;
        }
        //KL_SYS_INFOLOG("recv body ret: %d, body len: %d", ret, body_len);
        //parse response body
        vnode_count = body_len / sizeof(vnode_resp_info);
        for(i = 0; i < vnode_count; i++)
        {
            pvnode_resp_unit = (vnode_resp_info *)(preport_resp_body + \
                                                   i * sizeof(vnode_resp_info));
            vnode_id = CSERIALIZER::buff2int32(pvnode_resp_unit->vnode_id);
            vnode_status = pvnode_resp_unit->vnode_status;

            //KL_SYS_INFOLOG("vnode_id: %d, vnode_status: %d", vnode_id, vnode_status);
            if((ret = merge_vnode_status(vnode_id, vnode_status)) != 0)
            {
                KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                                "report thread merge vnode status failed, vnode_id: %d, vnode_status: %d, " \
                                "errcode: %d", \
                                __LINE__, vnode_id, vnode_status, ret);
                do_err();
                return ret;
            }
            //KL_SYS_INFOLOG("beat-hearting merge vnode status success");
            if(vnode_status != KL_REPLICA_STATUS_COPY_SRC && \
                    vnode_status != KL_REPLICA_STATUS_MOVE_SRC)
                continue;

            try
            {
                pstorage_sync_event = (storage_sync_event *)(new byte[sizeof(storage_sync_event)]);
            }
            catch(std::bad_alloc)
            {
                pstorage_sync_event = NULL;
                KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                                "no more memory to create storage sync event obj", \
                                __LINE__);
                do_err();
                return ENOMEM;
            }
            try
            {
                pstorage_sync_msg = new pkg_message();
            }
            catch(std::bad_alloc)
            {
                pstorage_sync_msg = NULL;
                KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                                "no more memory to create storage sync msg obj", \
                                __LINE__);
                delete pstorage_sync_event;
                do_err();
                return ENOMEM;
            }

            pstorage_sync_event->vnode_id = vnode_id;
            pstorage_sync_event->sync_dest_port = \
                                                  CSERIALIZER::buff2int32(pvnode_resp_unit->sync_dest_port);
            memcpy(pstorage_sync_event->sync_dest_ip, pvnode_resp_unit->sync_dest_ip, \
                   KL_COMMON_IP_ADDR_LEN);
            pstorage_sync_msg->pkg_len = sizeof(storage_sync_event);
            pstorage_sync_msg->pkg_ptr = (byte*)pstorage_sync_event;
            m_psync_msg_queue->push_msg(pstorage_sync_msg);
            //KL_SYS_INFOLOG("push sync event(vnode_id: %d) success", vnode_id);
        }
        delete [] preport_resp_body;
        preport_resp_body = NULL;

        g_sync_down_rwlock.wrlock();
        if(m_nthread_index == 0 && !g_sync_down_queue.empty())
        {
            ret = report_sync_down_info(preport_stream);
        }
        g_sync_down_rwlock.unlock();
        if(ret != 0)
        {
            KL_SYS_ERRORLOG("file: "__FILE__", line: %d, " \
                            "report storage node sync down info failed, err: %s", \
                            __LINE__, strerror(ret));
            do_err();
            return ret;
        }
    }
    do_err();
    return 0;
}