/*++ Module Name: hsmreclq.h Abstract: This header file defines the CHsmRecallQueue object, which is used by the HSM Engine to direct work to be performed by the Remote Storage system. Author: Ravisankar Pudipeddi [ravisp] Revision History: --*/ #include "resource.h" // main symbols #include "wsb.h" // Wsb structure definitions #include "rms.h" // RMS structure definitions #include "job.h" // RMS structure definitions #include "metalib.h" // metadata library structure definitions #include "fsalib.h" // FSA structure definitions #include "tsklib.h" // FSA structure definitions #include "mvrint.h" // Datamover interface #ifndef __HSMRECALLQUEUE__ #define __HSMRECALLQUEUE__ ///////////////////////////////////////////////////////////////////////////// // task class CHsmRecallQueue : public CComObjectRoot, public IHsmRecallQueue, public IHsmSessionSinkEveryEvent, public IHsmSessionSinkEveryState, public CComCoClass { public: CHsmRecallQueue() {} BEGIN_COM_MAP(CHsmRecallQueue) COM_INTERFACE_ENTRY(IHsmRecallQueue) COM_INTERFACE_ENTRY(IHsmSessionSinkEveryEvent) COM_INTERFACE_ENTRY(IHsmSessionSinkEveryState) END_COM_MAP() DECLARE_REGISTRY_RESOURCEID( IDR_CHsmRecallQueue ) // IHsmRecallQueue public: STDMETHOD(FinalConstruct)(void); STDMETHOD(FinalRelease)(void); STDMETHOD(Add)(IFsaPostIt *pFsaWorkItem, IN GUID *pBagId, IN LONGLONG dataSetStart); STDMETHOD(Init)(IUnknown *pServer, IHsmFsaTskMgr *pTskMgr); STDMETHOD(Start)( void ); STDMETHOD(Stop)( void ); STDMETHOD(ContactOk)( void ); STDMETHOD(ProcessSessionEvent)(IHsmSession *pSession, HSM_JOB_PHASE phase, HSM_JOB_EVENT event); STDMETHOD(ProcessSessionState)(IHsmSession* pSession, IHsmPhase* pPhase, OLECHAR* currentPath); STDMETHOD(RaisePriority)(HSM_JOB_PHASE jobPhase, IHsmSession *pSession); STDMETHOD(Remove)(IHsmRecallItem *pWorkItem); STDMETHOD(LowerPriority)(HSM_JOB_PHASE jobPhase, IHsmSession *pSession); STDMETHOD(GetMediaId) (OUT GUID *mediaId); STDMETHOD(SetMediaId) (IN GUID *mediaId); STDMETHOD(IsEmpty) ( void ); // IHsmSystemState STDMETHOD( ChangeSysState )( HSM_SYSTEM_STATE* pSysState ); // Internal Helper functions STDMETHOD(RecallIt)( IHsmRecallItem *pWorkItem ); STDMETHOD(CheckRms)(void); STDMETHOD(CheckSession)(IHsmSession* pSession, IHsmRecallItem *pWorkItem); STDMETHOD(MountMedia)(IHsmRecallItem *pWorkItem, GUID mediaToMount, BOOL bShortWait=FALSE ); STDMETHOD(GetSource)(IFsaPostIt *pFsaWorkItem, OLECHAR **pSourceString); STDMETHOD(EndRecallSession)(IHsmRecallItem *pWorkItem, BOOL cancelled); STDMETHOD(GetScanItem)(IFsaPostIt *fsaWorkItem, IFsaScanItem** ppIFsaScanItem); STDMETHOD(DoWork)(void); STDMETHOD(DoFsaWork)(IHsmRecallItem *pWorkItem); STDMETHOD(SetState)(HSM_JOB_STATE state, HSM_JOB_PHASE phase, IHsmSession *pSession); STDMETHOD(Cancel)(HSM_JOB_PHASE jobPhase, IHsmSession *pSession); STDMETHOD(FailJob)(IHsmRecallItem *pWorkItem); STDMETHOD(GetMediaParameters)(void); STDMETHOD(DismountMedia)( BOOL bNoDelay = FALSE); STDMETHOD(ConvertRmsCartridgeType)(LONG rmsCartridgeType, HSM_JOB_MEDIA_TYPE *pMediaType); void (ReportMediaProgress)(HSM_JOB_MEDIA_STATE state, HRESULT status); STDMETHOD(MarkWorkItemAsDone)(IHsmSession *pSession, HSM_JOB_PHASE jobPhase); STDMETHOD(CheckRegistry)(void); STDMETHOD(TranslateRmsMountHr)(HRESULT rmsHr); STDMETHOD(UnsetMediaInfo)(void); STDMETHOD(FindRecallItemToCancel(IHsmRecallItem *pWorkItem, IHsmRecallItem **pWorkItemToCancel)); // Data // We want the next pointers (to the Hsm Server) to be weak // references and **not** add ref the object. This is so shutting // down the server really works. IHsmServer *m_pServer; IWsbCreateLocalObject *m_pHsmServerCreate; IHsmFsaTskMgr *m_pTskMgr; CComPtr m_pRmsServer; CComPtr m_pRmsCartridge; CComPtr m_pDataMover; // // The recall queue.. // CComPtr m_pWorkToDo; BOOL m_TerminateQueue; // True only if the queue should terminate while // there is still work in progress // Data mover info GUID m_MediaId; GUID m_MountedMedia; HSM_JOB_MEDIA_TYPE m_MediaType; CWsbStringPtr m_MediaName; CWsbStringPtr m_MediaBarCode; LONGLONG m_MediaFreeSpace; LONGLONG m_MediaCapacity; BOOL m_MediaReadOnly; GUID m_HsmId; GUID m_RmsMediaSetId; CWsbBstrPtr m_RmsMediaSetName; HSM_WORK_QUEUE_TYPE m_QueueType; FILETIME m_MediaUpdate; // Session reporting information HSM_JOB_PRIORITY m_JobPriority; HANDLE m_WorkerThread; CWsbStringPtr m_CurrentPath; CWsbStringPtr m_MediaBaseName; // Job abort on errors parameters ULONG m_JobAbortMaxConsecutiveErrors; ULONG m_JobAbortMaxTotalErrors; ULONG m_JobConsecutiveErrors; ULONG m_JobTotalErrors; ULONG m_JobAbortSysDiskSpace; LONGLONG m_CurrentSeekOffset; }; #endif // __HSMRECALLQUEUE__