#include #include #include #include #include "Logger.h" #include "FtsdSocketControl.h" #define LOG_PATH "/user/service/logs" // Log ÆÄÀÏÀº /user/service/logs/sample/sample_³¯Â¥.log ·Î »ý¼ºµÊ. #define TRANSFER_LISTEN_PORT 14001 // ftsd ÀÇ Listen Port int main( int argc, char * argv[] ) { std::string szSourceHostName; std::string szFileName; if( argc != 3 ) { ///////////// 1. ±âº» Á¤º¸ ¼³Á¤ /////////////////// // Source Àåºñ Host Name //szSourceHostName = "bd-16-fhs001.ktsh.co.kr"; szSourceHostName = "bd-16-fhs003.ktsh.co.kr"; // Source ÆÄÀϸí ( Mount À§Ä¡±îÁö Æ÷ÇÔÇÔ Àüü °æ·Î ) //szFileName = "/stg/node0/348/4075fac10de1ae95667310cf7e2c9b9a"; //szFileName = "/stg/node0/size0"; //szFileName = "/stg/node0/size256K"; //szFileName = "/stg/node0/size1M"; //szFileName = "/stg/node0/size1M2"; //szFileName = "/stg/node0/size1M3"; //szFileName = "/stg/node0/size4M"; szFileName = "/stg/node0/size10M"; //szFileName = "/stg/node0/size1G"; } else { szSourceHostName = argv[1]; szFileName = argv[2]; } ////////////// °á°ú°ªÀ» ÀúÀåÇÒ º¯¼ö ////////////////// // File Size unsigned long long nFileSize = 0; // File ÃßÃâ°ª ÀúÀå º¯¼ö std::string szTotoMd5; std::string szChecksum; std::string szDnaCheckKey; // ¿À·ù ¸Þ½ÃÁö std::string szErrorMessage; ////////////// Sample ÄÚµå ////////////// // Log ó¸®¿ë °´Ã¼ »ý¼º ¹× ÃʱâÈ­. if( CLogger::Init( PROG_NAME, LOG_PATH, LDBG ) == false ) { std::cout << "[error] Logger object created failed.." << std::endl; return 0; } // Start logging _LOG( LINF, "ftsd check sample Start: Source[%s]", szFileName.c_str()); // ftsd ¿Í Åë½ÅÀ» ó¸®ÇÒ Socket Control °´Ã¼ »ý¼º ¹× Á¢¼Ó CFtsdSocketControl ftsdSocket; if( ftsdSocket.ConnectTarget( szSourceHostName, TRANSFER_LISTEN_PORT ) == false ) { // Source ftsd À¸·Î Á¢¼Ó ½ÇÆÐ½Ã _LOG( LERR, "Source FHS connect fail. [%s][%d]", szSourceHostName.c_str(), TRANSFER_LISTEN_PORT ); return EXIT_FAILURE; } // ftsd ·Î TOTO ÆÄÀÏ¿¡ ´ëÇÑ Check ¿äû Àü´Þ // SendFileCheckTOTORequest() ÇÔ¼ö´Â FtsdSocketControl.h ÆÄÀÏ ÂüÁ¶. if( ftsdSocket.SendFileCheckTOTORequest( szFileName ) == false ) { // Source ftsd ·Î Àü¼Û ½ÇÆÐ½Ã _LOG( LERR, "Check Request send fail.[%s][%s]", szSourceHostName.c_str(), szFileName.c_str()); return EXIT_FAILURE; } // ¿äû¿¡ ´ëÇÑ ÀÀ´ä ´ë±â int nTimeout = 5; // ÀÀ´ä ´ë±â ½Ã°£ ( sec ) int nResult = 0; bool bResultSuccess; // ó¸® °á°úÀÇ ¼º°ø/½ÇÆÐ ¿©ºÎ¸¦ ÀúÀåÇϱâ À§ÇÑ º¯¼ö. // ·çÇÁ¸¦ µ¹¸é¼­ ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ» ´ë±â while(1) { // nTimeout ¿¡ ÁöÁ¤µÈ ½Ã°£µ¿¾È ÀÀ´ä´ë±â ½Ãµµ // GetFileCheckTOTOResult() ÇÔ¼ö´Â SocketControl.h ÆÄÀÏ Âü°í. nResult = ftsdSocket.GetFileCheckTOTOResult( nTimeout, bResultSuccess, szErrorMessage, nFileSize, szTotoMd5, szChecksum, szDnaCheckKey ); if( nResult == -1 ) { // Socket Åë½Å °ü·Ã ¿À·ù ¶Ç´Â Á¢¼Ó Á¾·á°¡ ¹ß»ýÇÑ °æ¿ì. // ÇØ´ç ³»¿ª ·Î±ë ¹× ·çÇÁ Á¾·á _LOG( LERR, "ftsd Response wait fail by socket [%s][%s]", szSourceHostName.c_str(), szFileName.c_str() ); break; } else if( nResult == 0 ) { // ÁöÁ¤µÈ ½Ã°£ µ¿¾È ÀÀ´ä´ë±â Áß Ã³¸® °á°ú Á¤º¸°¡ ¾ÆÁ÷ ¼ö½ÅµÇÁö ¾ÊÀº °æ¿ì => Allive Check ÆÐŶ Çѹø ½î°í ´Ù½Ã Loop ·Î if( ftsdSocket.SendAliveCheck() == false ) { // Alive Àü¼Û ½ÇÆÐ½Ã => Socket Á¾·á ¹× ¿À·ù°¡ ¹ß»ýÇÑ °æ¿ìÀÓ. _LOG( LERR, "ftsd Response wait fail by socket2 [%s][%s]", szSourceHostName.c_str(), szFileName.c_str() ); break; } // Á¤»óÀûÀÎ °æ¿ì ´Ù½Ã ÀÀ´ä´ë±â. continue; } else if( nResult == 1 ) { // ¿äû¿¡ ´ëÇÑ Ã³¸®°á°ú Á¤º¸°¡ ¼ö½ÅµÈ °æ¿ì. // ÇØ´ç Á¤º¸ ·Î±ëó¸®. if( bResultSuccess == true ) { // ¿äû¿¡ ´ëÇÑ Ã³¸®°¡ Á¤»óÀûÀ¸·Î ó¸®µÈ °æ¿ì //_LOG( LINF, "[%s] Result SUCCESS [%llu][%s]", szFileName.c_str(), nFileSize, szHashValue.c_str()); _LOG( LINF, "TOTO Result size [%llu]", nFileSize ); _LOG( LINF, "TOTO Result md5 hash [%s]", szTotoMd5.c_str()); _LOG( LINF, "TOTO Result checksum [%s]", szChecksum.c_str() ); _LOG( LINF, "TOTO Result dna key [%s]", szDnaCheckKey.c_str() ); } else { // ¿À·ù ¹ß»ý½Ã _LOG( LINF, "[%s][%s] Result ERROR [%s]", szFileName.c_str(), szSourceHostName.c_str(), szErrorMessage.c_str() ); } break; // ÀÀ´äÀ» ¹Þ¾ÒÀ¸´Ï ÀÀ´ä ´ë±â ·çÇÁ Á¾·á } else { // Replication ¿äû¿¡ ´ëÇÑ ÀÀ´äÆÐŶÀÌ ¾Æ´Ñ °æ¿ì. // ÇØ´ç ÆÐŶÀº ¹«½ÃÇÏ°í ´Ù½Ã Loop ·Î continue; } } // End logging _LOG( LINF, "ftsd TOTO check sample process End [%s][%s]", szSourceHostName.c_str(), szFileName.c_str()); _LOG( LINF, "-------------------------------------------------------------------------------" ); CLogger::Exit(); return EXIT_SUCCESS; }