157 lines
5.1 KiB
C++
157 lines
5.1 KiB
C++
/***************************************************************************
|
|
Process 상태 정보 저장 및 console 출력 처리 class
|
|
-----------------------------------------
|
|
begin : 2010/03/05
|
|
copyright : (C) 2005 Solbox Inc.
|
|
author : storage dev team
|
|
email : storage.sd@solbox.com
|
|
version : 3.3
|
|
|
|
CopyRight(C) 2005 Solbox Inc. All Rights reserved.
|
|
Redistribution and use in source and binary forms, with or with out
|
|
modification, are not permitted in outside of Solbox Inc.
|
|
***************************************************************************/
|
|
|
|
#ifndef __PROCESS_STATUS_H__
|
|
#define __PROCESS_STATUS_H__
|
|
|
|
#include <pthread.h>
|
|
|
|
#include "DataQueue.hpp"
|
|
#include "ReplicationData.h"
|
|
#include "CacheRequestData.h"
|
|
#include "CacheJobList.h"
|
|
|
|
// CProcessStatus class
|
|
// - 프로세스 내부에서 사용 중인 Queue 정보와
|
|
// - Replcation 처리 thread 수, Hot Content 처리 thread 수를 관리,
|
|
// - 해당 정보를 console 상에 표시하는 역활을 수행한다.
|
|
// - 2016-06-18 다른 모듈과 연동시 반환값 처리 관련 문제가 많아
|
|
// 확장성 포기하고 업무 Flow 에 맞게 단순하게 동작하도록 수정 처리함.
|
|
// 특히 무제한 설정 관련 기능은 전부 제거 처리함.
|
|
class CProcessStatus
|
|
{
|
|
private:
|
|
|
|
// Replication 처리 관련 동시 최대 생성 가능 Thread 수.
|
|
int m_nMaxReplicationThreadCount;
|
|
|
|
// Hot Content cache 처리 관련 동시 최대 생성 가능 Thread 수
|
|
int m_nMaxCacheThreadCount;
|
|
|
|
// Lock 처리 관련
|
|
pthread_mutex_t m_mxReplicateThreadCount;
|
|
pthread_mutex_t m_mxCacheThreadCount;
|
|
|
|
|
|
////// 프로세스 title 로 모니터 대상 정보 /////////////
|
|
|
|
// Replication 처리 관련 현재 생성된 Thread 수.
|
|
int m_nCurrentReplicationCount;
|
|
|
|
// Hot Content cache 처리 관련 현재 생성된 Thread 수
|
|
int m_nCurrentCacheCount;
|
|
|
|
// Replication content 저장 queue 에 대한 포인터
|
|
// 생성자를 통해 전달받음.
|
|
CDataQueue<CSourceData>* m_pQueueSource;
|
|
|
|
// Replication 재시도 content 저장 queue 에 대한 포인터
|
|
// 생성자를 통해 전달받음.
|
|
CDataQueue<CRetryData>* m_pQueueRetry;
|
|
|
|
// Replication 완료 정보 저장 queue 에 대한 포인터
|
|
// 생성자를 통해 전달받음.
|
|
CDataQueue<CCompleteData>* m_pQueueCompleteReplication;
|
|
|
|
// Hot Content cache 요청 정보 저장 관련 queue 에 대한 포인터.
|
|
CDataQueue<CCacheRequestData>* m_pQueueCacheRequest;
|
|
|
|
// Hot Content cache 처리 완료 관련 queue 에 대한 포인터.
|
|
CDataQueue<CCacheData>* m_pQueueCacheComplete;
|
|
|
|
// Hot Content cache 생성 관리 job 객체에 대한 포인터.
|
|
CCacheJobList* m_pCacheJob;
|
|
|
|
//////////////////////////////////////////////////
|
|
|
|
// 작업의 종류를 구분하는 열거형 변수
|
|
// Replication : 0, Cache : 1
|
|
enum Job { Replication, Cache };
|
|
|
|
|
|
// 쓰레드 핸들
|
|
pthread_t m_threadHandle;
|
|
|
|
|
|
public :
|
|
// 생성자
|
|
// @param [in] pQueueSource : Replication content 저장 queue 에 대한 포인터
|
|
// @param [in] pQueueRetry : Replication 재시도 content 저장 queue 에 대한 포인터
|
|
// @param [in] pQueueCompleteReplication : Replication 완료 정보 저장 queue 에 대한 포인터
|
|
// @param [in] pQueueContentInfo : 캐시 요청 정보 저장 관련 queue 에 대한 포인터.
|
|
// @param [in] pQueueCompleteCache : 캐시 처리 완료된 queue 에 대한 포인터.
|
|
// @param [in] pListJob : 캐시 생성 job 객체에 대한 포인터.
|
|
CProcessStatus( CDataQueue<CSourceData>* const pQueueSource
|
|
, CDataQueue<CRetryData>* const pQueueRetry
|
|
, CDataQueue<CCompleteData>* const pQueueCompleteReplication
|
|
, CDataQueue<CCacheRequestData>* const pQueueCacheRequest
|
|
, CDataQueue<CCacheData>* const pQueueCacheComplete
|
|
, CCacheJobList* const pCacheJob
|
|
);
|
|
|
|
// 소멸자
|
|
~CProcessStatus();
|
|
|
|
// 객체 초기화
|
|
// @param [in] nMaxReplicationThreadCount Replication 처리 관련 동시 최대 생성 가능 Thread 수
|
|
// @param [in] nMaxCacheThreadCount Hot Content cache 처리 관련 동시 최대 생성 가능 Thread 수
|
|
// @return true 성공
|
|
// false 생성자로 전달된 객체 포인터가 유효하지 않은 경우,
|
|
// 인자로 전달된 최대 Thread 수가 너무 큰 경우.(MAX_THREAD_COUNT_LIMIT 초과시)
|
|
bool Init(const unsigned int nMaxReplicationThreadCount, const unsigned int nMaxCacheThreadCount);
|
|
|
|
// thread를 생성하여 프로세스 출력 상태 갱신 작업을 수행.
|
|
bool Start();
|
|
|
|
|
|
// 현재 프로세스 표시 정보 업데이트
|
|
void UpdateTitle( void );
|
|
|
|
// Replication 관련 동시 생성 가능한 Thread 수를 반환
|
|
unsigned int GetValidReplicationCount( void );
|
|
|
|
// Hot Content Cache 관련 동시 생성 가능한 Thread 수를 반환
|
|
unsigned int GetValidCacheCount( void );
|
|
|
|
|
|
// Replication 관련 작업 Thread 수를 1 증가 처리
|
|
void AddReplicationCount(void);
|
|
|
|
// Replication 관련 작업 Thread 수를 1 감소 처리
|
|
void SubtractReplicationCount(void);
|
|
|
|
|
|
// Hot content cache 관련 작업 Thread 수를 1 증가 처리
|
|
void AddCacheCount(void);
|
|
|
|
// Hot content cache 관련 작업 Thread 수를 1 감소 처리
|
|
void SubtractCacheCount(void);
|
|
|
|
|
|
private :
|
|
|
|
// 스레드 함수
|
|
static void* threadFunc( void* arg );
|
|
|
|
|
|
// 전달받은 작업의 Thread 수를 1 증가 시킨다.
|
|
void AddCount(CProcessStatus::Job job);
|
|
|
|
// 전달받은 작업의 Thread 수를 1 감소 시킨다.
|
|
void SubtractCount(CProcessStatus::Job job);
|
|
|
|
};
|
|
|
|
#endif //__PROCESS_STATUS_H__
|