/****************************************************************************
				rc_balanced data object define
				-----------------------------------------

	begin      : 2019/03/04
	copyright  : (C) 2005 Solbox Inc.
	author     : Storage Team
	email      : huibong@solbox.com
	version    : 3.5

	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 __REBALANCE_DATA_H__
#define __REBALANCE_DATA_H__

#include <string>
#include <time.h>

// CRebalanceData 객체의 Move 처리 결과 멤버변수인 m_uMoveResult 에 저장될 값 정의
enum MoveResults {
	MOVE_OK = 0,				// 성공 -> Origin content 삭제 
	MOVE_ERROR_CREATE = 1,		// 물리 파일 생성 실패 (origin 접근 실패, target FHS 선정 실패등) -> 추가 action 불필요
	MOVE_ERROR_HASHCHECK = 2,	// 물리 파일 생성했으나 Hash check mismatch -> 생성된 파일 삭제 처리 필요
	MOVE_ERROR_UPDATE = 3		// 물리 파일 생성했으나 RCDB update 실패 -> 생성된 파일 삭제 처리 필요

};


// rebalnce 처리 object data 에 대한 세부 정보를 저장하기 위한 data class
class CRebalanceData
{

	public:

		// 생성자
		CRebalanceData();

		// 소멸자
		~CRebalanceData();


		// URI 정보는 특수문자 포함될 수 있어.. Query 에서 사용시 변환 처리 함수 
		std::string GetQueryURI( void );


	public:

		// 공통

		unsigned long long m_uResourceId;			// resouce_id 정보 (고유 key)
		std::string m_szURI;						// URI 정보 (특수 문자 포함관련 query 에서 사용시 변환 필요)
		std::string m_szServiceSeq;					// 서비스 sequence number


		// 원본 Content 정보

		std::string m_szOriginHost;					// origin hostname 정보
		std::string m_szOriginFileNameHash;			// origin filename_hash
		unsigned long long m_uOriginContentLength;	// origin get_content_length

		// Move 처리 결과
		// 세부 사항은 enum MoveResults 선언 참고
		enum MoveResults m_uMoveResult;


		// Move Content 정보

		std::string m_szMoveHost;					// move hostname 정보
		std::string m_szMoveFileNameHash;			// move filename_hash
		unsigned long long m_uMoveContentLength;	// move get_content_length

		// Delete 처리 관련 정보

		unsigned int m_uDeleteFailCount;			// delete 처리 관련 fail 횟수
		time_t m_timeLastDeleteFail;				// delete 처리 관련 마지막 실패 시각


	private:

		// uri 상의 특수 문자 변경을 위한 함수
		std::string ReplaceString( const std::string& source, const std::string search, const std::string replacement );
};


#endif /* __REBALANCE_DATA_H__ */

