Files
interactive/rcts/rc_rmcd/src/ProcessStatus.h
T
2026-08-07 17:38:18 +09:00

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__