
Revision 1501
-------------------
수정일 : 2020-07-20
수정자 : 유희곤

- CHG: fimngd 의 internal cache 생성을 위한 fd 감시 On/Off 항목 개선 (#33112)
       - EXTRACT_FD_COUNT 설정에 따라 fd count 정보 추출 기능을 on/off 처리
       - CHotContentInfoMap() 함수의 잘못된 변수 맵핑 버그 수정


Revision 1382
-------------------
수정일 : 2016-5-31
수정자 : 노경민

- CHG : 서비스 트래픽 통계 응답 기능 추가
	-  통계 수신 서버 종료 시 일부 통계 누락 발생 경우를 방어하기 위해 추가됨


Revision 1342
-------------------
수정일 : 2016-4-5
수정자 : 노경민

- BUG : 네크워트 통계 프로세스 CPU 점유 문제
	-  전송할 통계 없을 시 sleep 로직 누락으로 CPU 점유 상승함


Revision 1340
-------------------
수정일 : 2016-4-4
수정자 : 노경민

- BUG : 메세지큐 관련 비정상 종료 
	- thread safe 하지 못한 구조 때문임

- BUG : 설정한 메세지큐 개수만큼 생성되지 않음
	- 시스템 한계 500이지만 130개만 생성됨
	- 시스템 한계 만큼 생성될 수 있도록 생성함(프로세스 한계는 5000임)

- BUG : 비정상 종료 후 재생성 시 메세지큐 무한 생성 
	- 관련 클래스 clear되지 않는 객체 참조 때문임

- CHG : Hot Content 처리 로직 개선
	- SystemV message queue pop 속도보다 Hot Content 처리 속도가 늦어 발생하는
	메모리닉 같은 현상을 개선함

- BUG : 서비스 정보 갱신 프로세스 메모리 닉 
	-  서비스 별 수행 쿼리에 대한 clear 없이 쿼리 수행으로 메모리닉 발생함

- BUG : 네트워크 통계 누락 발생
	-  타임 구간 체크 로직에서 누락 발생할 수 이는 구조였음

- BUG : 서비스 정보 갱신 누락 발생 
	-  타임 구간 체크 로직에서 누락 발생할 수 이는 구조였음


Revision 1331
-------------------
수정일 : 2016-1-21
수정자 : 노경민

- CHG : 정상 종료 시 자신의 상태를 OUT으로 설정함
        - 서비스 모듈(HTTPD) 구동 시 종료 될 경우 이전 상태를 계속 사용하기 때문
	이를 방지하기 위해서 추가함
	- 비정상 종료(kill -9 or -KILL)에 대해서는 이 기능이 수행되지 않음
	- 운영자의한 종료 방법은 매뉴얼로 절차화

- CHG : 불필요한 컬럼 참조 수정
        - delete_yn 컬럼은 사용하지 않음

- CHG : 로그 수정
        - 정확하지 않는 로그에 대해서 수정함
		

Revision 1328
-------------------
수정일 : 2016-1-19
수정자 : 노경민

- CHG : 다른 서비스에 대한 동일한 디렉토리 설정 시 무인증 설정되지 않음
        - 내부 자료 구조에서 사용하는 key 중복으로 발생한 문제임


Revision 1257
-------------------
수정일 : 2015-10-06
수정자 : 김오종

- MOD : 로그 내용 정리
        - 로그에 주요정보 포함되어 있어 조정 처리
        - 로그에 소스 위치 정보 제외하여 로그용량을 줄임
        - Account 상태정보 로깅 조정


Revision 1254, 1255
-------------------
수정일 : 2015-10-05
수정자 : 김오종

- BUG: RCDB와 비정상 연결종료 현상에 대한 예외처리 
        - Account, Anony 정보 갱신시 예외처리 버그 수정
        - AccountUpdateThread.cpp, AnonyUpdateThread.cpp 소스 일부 수정처리
- ADD: 기존 서비스 중 삭제된 서비스에 대한 로깅 처리 추가
        - Accout 정보 갱신시에 삭제된 서비스에 대한 로그 추가

Revision 1217
-------------------
수정일 : 2015-09-09
수정자 : 김오종

- CHG: Version 3.5 변경
        - fimngd의 역할이 아래와 같이 크게 조정됨에 따라 버전을 변경한다.
		- 기존 openda-listener의 shared memory 관련기능 통합
		- rcts의 rc_mond 데몬과 연계하여 타FHS의 상태 정보를 sared memory에 갱신처리한다.
		- rcts의 rc_sscd 데몬으로 트래픽 및 스토리지 통계 데이터를 전달 한다.
		- account, 무인증 폴더 정보등을 RCDB로부터 가져와 shared memory에 업데이트 한다.
		- 기존 fimngd의 기능인 internal cache 기능은 그대로 포함한다.
		- 기존 fimngd의 기능인 log 정리 기능은 logmngd로 대체 하도록 한다.
		- *주의* fdcnt.sh가 같이 배포되어야 한다.

Revision 1118
-------------------
수정일 : 2014-11-11
수정자 : 김오종

- CHG: RCDB 연결을 필요시마다 수행 하도록 처리
        - 서비스 폴더 생성시 RCDB 조회 할 때 필요시마다 connect 처리

- CHG: log 오타 수정
        - "Caceh Replication Request Queue" --> "Internal Cache Request Queue" 로 변경

Revision 1068
-------------------
수정일 : 2014-08-27
수정자 : 김오종

- BUG: rcdb 접속시 password 정보 누락
	- password 정보 추가


Revision 1014
-------------------
수정일 : 2014-07-24
수정자 : 김오종

- DEL: 테스트 소스 제거
	- 서비스 폴더 생성 테스트 소스 제거

Revision 1011
-------------------
수정일 : 2014-07-23
수정자 : 김오종

- CHG: revision 변경

Revision 1009
-------------------
수정일 : 2014-07-23
수정자 : 김오종

- CHG: 구동 주기 및 로그 메세지 변경
	- ServicePathCreaterThread.cpp 내의 로그 메세지 조정
        - 구동 주기를 3min 으로 조정

Revision 1007
-------------------
수정일 : 2014-07-22
수정자 : 김오종

- DEL: UDP 통신을 통한 Internal Cache 제거
	- MsgCacheRequest.h MsgCacheRequest.cpp 제거

- DEL: Transfer Log 전송 기능 제거
	- ServiceInfoUpdaterThread.h ServiceInfoUpdaterThread.cpp 제거
	- TransferLogSender.h - TransferLogSender.cpp 제거
	- 해당 기능과 연관된 config 파일의 관련항목 제거

- ADD: 서비스 개퉁 후 서비스 디렉토리 생성 기능 추가
	- ServicePathCreaterThread.h ServicePathCreaterThread.cpp 추가

- CHG: TCP/IP 통신을 통한 Internal Cache 추가
	- ./coponent/BaseSocket.h ./coponent/BaseSocket.cpp 추가
	- CacheGeneratorTrhead 클래스 수정
	- rc_rmcd에 소켓연결을 위한 host,port 정보 추가

- CHG: 아파치 로그 추가 전송 및 로그파일 삭제 기능 변경
	- 기존 아파치 로그전송은 작업일 하루 전만 전송 후 제거
	- 작업일 최근 열흘을 대상으로 미전송 로그 전송 처리
	- 아파치 로그 최근 열흘이전의 로그파일에 대한 삭제 처리
	- LogFileCleaner, ApacheLogSender 클래스 변경

- CHG: 버전 변경에 따른 버전 정보 조정
    - Makefile 상의 버전 정보를 3.3.0.x -> 3.4.0.x 로 변경
	
Revision 0963
-------------------
수정일 : 2014-03-10
수정자 : 김오종

- DEL: Internal Cache 발현 조건 중 Disk Busy 상황을 사용하지 않기로 결정됨에 따라 관련기능을 제거 처리 함
	- geom, devstat 라이브러리 제거
	- DiskIOstatCollector.h DiskIOstatCollector.cpp 파일 삭제
	- work.cpp, HotContentDetectorThread.cpp 및 ProcessStatus class 부분 수정

- CHG: FreeBSD 10.X까지 지원하기 위해서 컴파일러 optimizer 옵션 조절
	- Makefile 상에서 -o option 레벨을 3에서 0(zero)로 변경 처리함

Revision 0839
-------------------
수정일 : 2012-11-15
수정자 : 노경민

- BUG: 메모리 급증 현상 완화
	- FHS 부하가 발생 시 fstat 응답 지연 확인되었으며, 이로 인해서 메모리 증가 확인됨
	- 기존 불필요한 로직 제거 및 fstat 실행 최적화

- BUG: 아파치 로그 전송 중 비정상 종료 현상
	- 구동 시간 대에서 구동을 위한 sleep 시간을 구하는 로직에서 제로 나누는 경우 때문임

- CHG: 로그 객체 가변 인자 체크 기능 추가
	- 일부 로그 중 인자 누락으로 해당 부분을 체크하기 위해서 추가됨

- CHG: 로그 관련 컴파일 warning 제거
	- 변경된 로그 객체로 검파일 시 발생한 warning 제거

- CHG: 브로드 캐스트 주소 획득 변경
	- 주소 획득 시 NULL 리턴되는 경우 존재함(소켓 사용 후 close 호출하지 않아서 발생)
	- 주소 획득 실패에 대한 로직 미흡했던 부분 변경함

- CHG: unlink() 함수에 대한 오류 처리 부분 수정
	- unlink() 함수 리턴 값에 -1 일때 해당 에러가 출력되도록 수정함

- CHG: Hot Content 감지 디폴트 설정 변경 
	- FD_COUNT : 3 -> 10
	- MIN_DISKIO_PERCENT : 50 -> 5

- CHG: 시스템 큐 Pop 로직 변경
	- 시스템 큐에서 꺼낸 값을 바로 다운로드 큐에서 사용하던 구조를 변경함

- NEW: 주요 큐 사이즈 출력 기능 추가
	- 다운로드 큐, 캐쉬 요청 큐, 로그 전성 큐를 매 2초마다 출력

- DEL: 코어 시그널 처리 로직 삭제
	- 서비스 1팀 시그널 정책에 따른 로직 삭제


Revision 0755
-------------------

수정일 : 2012-05-03
수정자 : 김오종

- BUG: GTL 로 전송정보 전달시 tran_id 누락 현상
       - TransferLogData.cpp 의 SetTranId() 수정

Revision 0731
-------------------

수정일 : 2012-04-05
수정자 : 김오종

- CHG: src/main.cpp 의 Daemon 생성 관련 코드 수정
       - MakeDaemon() 함수상에 Daemon 생성 관련 stdin, stdout, stderr Close 처리 코드 추가 ( 원격 기동시 CTRL+C 처리 불편에 따른 수정)

Revision 0704
-------------------

수정일 : 2012-03-06
수정자 : 김오종

CHG: transfer_log_send_yn 정보 확인 주기 조정 6sec=>300sec 로 조정
        - 신속성을 요하는 정보가 아니므로 RCDB의 부하를 줄이기 위한 조치.
CHG: ServiceInfoUpdaterThread 클래스 내의 RCDB 세션 관리방법 변경
        - 본 클래스에서 RCDB 세션을 정상적일경우 재사용 할 수 있도록 변경 처리
        - ServiceInfoUpdaterThread.cpp, ServiceInfoUpdaterThread.h 수정

Revision 0677
-------------------

수정일 : 2012-02-09
수정자 : 김오종

BUG: fimngd의 main.cpp 에 log객채 생성 파라메터 중 log path에 대한 인자값이 하드코딩되어있는 것이 확인 됨. 
     - main.cpp 의 소스 수정
     추가 : 디버그 메세지 추가
     - ProcessStatus.cpp 에 디버그 메세지 보강

Revision 0643
-------------------

수정일 : 2011-12-29
수정자 : 김오종

ADD: 신규 fimngd 소스를 등록한다. 아래 기능을 포함하고 있다.
    fimngd : Hot Content 감지 및 복제처리 기능 
    rctl : opendav를 통한 외부 요청내역을 gtl로 실시간 전송하는 기능 
    log_rotator : httpd 의 access 로그와 error 로그를 로그백업 서버로 전송하는 기능. 
        데몬 형태가 아님 /etc/crontab 에 등록되어 구동. 
    FHS 내의 각 Application 의 로그 정리 기능을 신규로 포함 한다. 


Revision 0641
-------------------

수정일 : 2011-12-29
수정자 : 김오종

DEL: 신규 fimngd를 등록하기 위한 사전작업으로 기존 fimngd 소스를 삭제 처리 함.

Revision 0556
-------------------

수정일 : 2011-05-30
수정자 : 장희준

CHG: fimngd.conf의 [COMMON] 섹션의 LOG_LEVEL 값만 사용하던 것을 
     [fimngd] 섹션의 LOG_LEVEL 값이 없는 경우에만 [COMMON] 세견의
     LOG_LEVEL을 사용하도록 수정.


Revision 478

BUG : 메모리 누수 수정
      아래 코드 중 root->firstChild->path = (char*) malloc( pathSize + 1 ); 에서 메모리 누수 발생.
      root->firstChild->path != NULL 인 경우 root->firstChild->path의 메모리를 해제하도록 수정.

수정 전 :
OpenFileTreeNode*
COpenFileTree::GetHotContentTree( std::string path, unsigned int count )
{
.
.
    /// 루트 노드의 child가 1이라는 말은 컨텐츠가 /user2/dav_storage 파티션에 있다는 말이다.
    /// 이 경우 root->firstChild->path에는 /user2/dav_stroage 디렉토리내의 
    /// 어느 한 디렉토리의 이름만 가지게 되는데 이렇게 되면 
    /// /user2/dav_stroage 내의 모든 디렉토리에 대한 검색을 할 수 없게 된다.
    /// 그래서, 이 경우는 root->firstChild->path = root->path로 설정함으로 
    /// /user2/dav_stroage 내의 모든 디렉토리에 대한 검색을 하도록 한다.
    if( GetChildCount( root ) == 1 )
    {   
        if( root->path != NULL )
        {
            int pathSize = strlen( root->path );
            root->firstChild->path = (char*) malloc( pathSize + 1 );  --> 메모리 누수 발생
            memset( root->firstChild->path, 0, pathSize + 1 );
            strncpy( root->firstChild->path, root->path, pathSize );
        }
    }

    return root;
}

수정 후 :
OpenFileTreeNode*
COpenFileTree::GetHotContentTree( std::string path, unsigned int count )
{
.
.
    /// 루트 노드의 child가 1이라는 말은 컨텐츠가 /user2/dav_storage 파티션에 있다는 말이다.
    /// 이 경우 root->firstChild->path에는 /user2/dav_stroage 디렉토리내의 
    /// 어느 한 디렉토리의 이름만 가지게 되는데 이렇게 되면 
    /// /user2/dav_stroage 내의 모든 디렉토리에 대한 검색을 할 수 없게 된다.
    /// 그래서, 이 경우는 root->firstChild->path = root->path로 설정함으로 
    /// /user2/dav_stroage 내의 모든 디렉토리에 대한 검색을 하도록 한다.
    if( GetChildCount( root ) == 1 )
    {   
        if( root->firstChild == NULL )
        {   
            TRACE( LOG_DEBUG, "end" );
            return root;
        }

        if( root->path == NULL )
        {
            TRACE( LOG_DEBUG, "end" );
            return root;
        }

        if( root->firstChild->path != NULL )
        {
            free( root->firstChild->path );
            root->firstChild->path = NULL;
        }

        int pathSize = strlen( root->path );
        root->firstChild->path = (char*) malloc( pathSize + 1 );
        memset( root->firstChild->path, 0, pathSize + 1 );
        strncpy( root->firstChild->path, root->path, pathSize );
    }
    return root;
}


Revision 476

CHG : fstat 결과에서 프로세스가 httpd인 것만 cache 요청 대상이 되게 하고 
      pid, fd, inode가 동일한 경우는 카운트를 증가 시키지 않도록 수정. 
      내부 테스트용으로 프로세스 httpd 외에 명령 인자로 특정 프로세스를 지정할 수 있게 수정.
      
      : 변경 코드
        - OpenFileTree.c
          AddToOpenFileTree(), IsAllowedProcessName(), AddLeafNode()
          typedef struct OPEN_FILE_TREE_NODE


BUG : 메모리 누수 수정
      fstat.c의 free_devs()을 아래와 같이 수정

------- 기존 코드 ---------------------
free_devs()
{
    if( devs == NULL )
    {
        return;
    }

    DEVS* d = devs;;

    if( d != NULL )
    {
        free( d );
        devs = NULL;
    }
}

------- 수정 코드 ---------------------
free_devs()
{
    if( devs == NULL )
    {
        return;
    }

    DEVS* next;
    DEVS* d = devs;;

    while( d != NULL )
    {
        next = d->next;
        free( d );
        d = next;
    }

    devs = NULL;
}

Revision 0462
-----------------------------
수정일 : 2010-12-28
수정자 : 장희준

Revision 461에서 수정일 및 수정자 정보가 빠져서 462로 다시 Revision 함.

Revision 0461
-------------------

수정일 : 2010-12-28
수정자 : 장희준

CHG: fhs.conf의 [fimngd] 섹션에 RCID 필드 추가
     - rc_rmcd로 캐시 요청시 RCID 값을 전달하기 위해 추가 함.

CHG: fhs.conf의 [fimngd] 섹션에 FD_COUNT 필드 추가
     - 기존에 소스 코드에 fix 되어 있던 값을 설정 파일에서 설정 하도록 하기 위함.
     - fhs.conf FD_COUNT가 설정되지 않으면 소스 코드에서 기본 값으로 5를 사용 함.

CHG: fstat.h fstat.c에 대한 FreeBSD 32bit, 64bit 통합 작업.
     - FreeBSD 64bit에서 fstat.c을 컴파일 하기 위해서는 Makefile에 __FREEBSD_64__을 define 해야 함.

CHG: fstat.h에 정의되어 있고 fstat.c에 구현되어 있던 리스트 자료구조 fs_list 제거 

ADD: C++ 코드에서 OpenFileTreeNode을 사용하기 위한 래퍼 클래스 COpenFileTree 추가

ADD: 제거된 fs_list을 대체하는 트리 자료구조 OpenFileTreeNode을 TreeForFstat.h에 정의하고 
     TreeForFstat.c에 구현함으로 fstat.c와 자료구조를 분리 시킴.

CHG: 로깅 코드 변경
     - 기존에는 로깅을 하는 모든 클래스는 생성자에서 Logger 객체의 포인터를 인자로 받아야 하고
       .cpp 파일에 아래와 같은 로그 처리를 위한 매크로를 정의 해야 함.
       예) #define CLASS_NAME "CCacheRequestManager"
           #define DEBUG_LOG( format, ...) \
               if(m_pLogger != NULL ) \
                  m_pLogger->Write( LOG_DEBUG,"[%s::%s()] " format, CLASS_NAME,__func__, ##__VA_ARGS__ )

     - 변경된 로깅 코드에는 생성자에서 Logger 객체를 받지 않아도 되고 .cpp 파일에 매크로를 정의대신 Trace.h 추가 해야 함.
       예) #include "Trace.h"

     - 로깅 코드와 로그 형식 변경
       : 기존 
         DEBUG_LOG("log string")          ---> [2010-12-23 16:00:48] [DBG] [Parent_Process::main()] log string
       : 변경
         TRACE( LOG_DEBUG, "log string")  ---> [2010-12-28 02:25:42] [DBG] log string [Parent_Process::main()]
         _TRACE( LOG_DEBUG, "log string") ---> [2010-12-28 02:25:42] [DBG] log string 

CHG: 설정 파일 처리 로직 변경
     - 기존에는 설정 파일에 매핑되는 구조체 st_config를 fimngd.h에 정의하고 GetConfg.cpp에 C 코드 형태로 
       설정 파일의 값을 로딩하는 구조로 데이터와 구현이 분리되어 있음.
     - C 코드 형태의 g_envConfig를 main.cpp에 정의해서 사용함.
     - 변경 후에는 싱글톤 클래스 CFhsConfig를 추가함으로 전역 변수를 사용하는 불편함을 제거했음.

ADD: 로깅을 편리하게 하기 위해서 Logger 래퍼 싱글톤 클래스 Trace.h 추가
     - Trace.h 추가로 전역 변수 g_Logger을 삭제하고 모든 클래스에서 멤버 변수 m_pLogger를 삭제하고 생성자에서 인자 Logger*도 삭제함.

CHG: 캐시 요청에 필요한 데이터 맵 관리를 기존에는 CCacheRequestManager가 담당했는데 이 역할을 CDataRequestMap 클래스로 이관하고
     CCacheRequestManager가 수행하던 데이터 비교 역할을 CDataRequestInfo 클래스로 이관함.

ADD: CDataRequestMap 추가.
     CCacheRequestManager가 직접 관리하던 CDataRequestInfo 맵의 역할을 분리하기 위해 추가된 클래스.	

ADD: 캐시 요청 메시지 인코딩/디코딩 역할을 하는 CMsgCacheRequest 추가

Revision 0458
-------------------
수정일 : 2010-12-13
수정자 : 장희준

- BUG: array overflow 버그 수정
        - CCacheRequestManager::SendRequest()에서 아래 코드 수정
         //cm.hostname[HOSTNAME_LEN] = '\0';
         cm.hostname[ HOSTNAME_LEN - 1 ] = '\0';

- CHG: gcc 4.4.5에서 컴파일 오류 수정
       - Config.h에서 아래 수정
         //void SetDelimiter( string& key, string& value = CONFIG_DEFAULT_VALUE_DELIMITER )
         void SetDelimiter( string& key, string value = CONFIG_DEFAULT_VALUE_DELIMITER )
       - Logger.cpp에 #include <string.h> 추가 

- CHG: fhs.conf 관련 수정
       - fhs.conf에 INTERNAL_NIC_NAME이 [COMMON] 섹션과 [fimngd] 섹션에서 중복 사용되고 있는데
         [COMMON] 섹션에서만 사용하도록 변경.
       - [fimngd] 섹션의 CACHE_CHECK_INTERVAL 필드명을 CACHE_CHECK_MAX_INTERVAL로 변경하고 이에 따른 
         소스 코드 수정

Revision 0327
-------------------
수정일 : 2010-08-03
수정자 : 김오종

- DEL: lib내의 Makefile 수정
        - CBasesocket.o 제거

Revision 0326
-------------------
수정일 : 2010-08-03
수정자 : 김오종

- DEL: CBasesocket class 제거
        - 사용하지 않는 부분이 포함되어 있어 제거 함.

Revision 0325
-------------------
수정일 : 2010-08-03
수정자 : 김오종

- BUG: 멤버 변수 속성 변경.
        - 변수를 private에서 public으로 변경.
          CCacheTargetFinder.h 의 m_nCachedContentCnt.
          
Revision 0324
-------------------
수정일 : 2010-08-03
수정자 : 김오종

- ADD: 캐시 대상파일 추출 주기 로직 변경
        - 기존에 설정한 주가 값만 사용 했으나, 상황에 따라 아래처럼 조정한다.
          : 대상파일의 개수가 2개 이하일때는 설정한 주기 값 사용.
          : 대상파일의 수가 10개를 초과했을 경우에는 2sec의 주기 값 사용.
          : 대상파일의 수가 2개 초과 10개 미만일때는 15sec의 주기 값 사용.

Revision 0323
-------------------
수정일 : 2010-08-02
수정자 : 김오종

- NEW: SVN 신규 등록
       - 기존 svn://211.38.137.33/work/trunk/fimngd 에 존재하는 개발 완료 소스를 SVN 에 정식버전으로 등록함.
       - 본 버전은 개발 및 성능 테스트를 완료한 버전으로 기존 cma의 기능을 보완한 것이다. 기본 기능은 아래와 같다.
         : fhs의 mount경로 내의 file discription 수(5개이상)를 기반으로 cache Type(is_cached = 'Y')의 복제본을 증가 할지를 판단
          후 증가 하는 기능을 포함하고 있다.(기존 cma의 기능)
         : file discription 수가 5개이상을 유지 할 경우 확인주가때 마다 반복적으로 복제본수가 증가하는 현상을 개선.
       - 단 현재 버전은 FreeBSD 5.4, 6.2 버전상에서만 테스트되었으며 다른 OS 로 포팅 처리시 코드를 재확인해야 함.

- NEW: History 저장을 위한 Changelog.txt 파일 추가
       - 앞으로 각 작업에 대한 로그를 확인하도록 Changelog.txt 파일을 추가

