633 lines
12 KiB
C++
633 lines
12 KiB
C++
/*++
|
||
|
||
© 1998 Seagate Software, Inc. All rights reserved.
|
||
|
||
Module Name:
|
||
|
||
hsmcln.cpp
|
||
|
||
Abstract:
|
||
|
||
This component is an provides helper functions to access to the
|
||
collections maintained by the HSM engine.
|
||
|
||
Author:
|
||
|
||
Cat Brant [cbrant] 09-Jan-1997
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
|
||
#include "stdafx.h"
|
||
#include "wsb.h"
|
||
#include "HsmEng.h"
|
||
#include "HsmServ.h"
|
||
#include "HsmConn.h"
|
||
#include "job.h"
|
||
#include "metalib.h"
|
||
|
||
#define WSB_TRACE_IS WSB_TRACE_BIT_HSMENG
|
||
|
||
// Local functions
|
||
static HRESULT LoadCollection(IStream* pStream, IWsbIndexedCollection* pIWC);
|
||
static HRESULT StoreCollection(IStream* pStream, IWsbIndexedCollection* pIWC);
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadJobs(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for Jobs
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadJobs"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirmHr(LoadCollection(pStream, m_pJobs));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadJobs"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreJobs(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for Jobs.
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreJobs"),OLESTR(""));
|
||
//
|
||
// Make sure we have a valid collection pointer
|
||
//
|
||
try {
|
||
WsbAffirmHr(StoreCollection(pStream, m_pJobs));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreJobs"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadJobDefs(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for Job Definitions
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadJobDefs"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirmHr(LoadCollection(pStream, m_pJobDefs));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadJobDefs"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreJobDefs(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for Job Definitons
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreJobDefs"),OLESTR(""));
|
||
//
|
||
try {
|
||
WsbAffirmHr(StoreCollection(pStream, m_pJobDefs));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreJobDefs"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadPolicies(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for policies
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadPolicies"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirmHr(LoadCollection(pStream, m_pPolicies));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadPolicies"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StorePolicies(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for policies.
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StorePolicies"),OLESTR(""));
|
||
//
|
||
// Make sure we have a valid collection pointer
|
||
//
|
||
try {
|
||
WsbAffirmHr(StoreCollection(pStream, m_pPolicies));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StorePolicies"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadManagedResources(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for managed resources
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadManagedResources"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirmHr(LoadCollection(pStream, m_pManagedResources));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadManagedResources"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreManagedResources(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for managed resources.
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreManagedResources"),OLESTR(""));
|
||
//
|
||
// Make sure we have a valid collection pointer
|
||
//
|
||
try {
|
||
WsbAffirmHr(StoreCollection(pStream, m_pManagedResources));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreManagedResources"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadStoragePools(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for storage pools
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadStoragePools"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirmHr(LoadCollection(pStream, m_pStoragePools));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadStoragePools"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreStoragePools(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for managed resources.
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreStoragePools"),OLESTR(""));
|
||
//
|
||
// Make sure we have a valid collection pointer
|
||
//
|
||
try {
|
||
WsbAffirmHr(StoreCollection(pStream, m_pStoragePools));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreStoragePools"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadSegmentInformation(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for the segment information
|
||
|
||
Arguments:
|
||
|
||
None
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
CWsbStringPtr tmpString;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadSegmentInformation"),OLESTR(""));
|
||
|
||
try {
|
||
BOOL CreateFlag = FALSE;
|
||
CComPtr<ISegDb> l_pSegmentDatabase;
|
||
|
||
// Determine if we should try to create the DB or just open it.
|
||
// If the persistence file was just created we're probably starting
|
||
// for the first time so creating the DB is correct. Also, if
|
||
// the media count is still zero, then even if there was an old
|
||
// DB that got deleted, it probably didn't have any useful information
|
||
// in it anyway so creating a new one is OK.
|
||
if (m_persistWasCreated || 0 == m_mediaCount) {
|
||
CreateFlag = TRUE;
|
||
}
|
||
|
||
// Initialize the Engine database
|
||
//
|
||
WsbAffirmHr(CoCreateInstance( CLSID_CSegDb, 0, CLSCTX_SERVER, IID_ISegDb, (void **)&l_pSegmentDatabase ));
|
||
WsbAffirmHr(GetIDbPath(&tmpString, 0));
|
||
WsbAffirmHr(l_pSegmentDatabase->Initialize(tmpString, m_pDbSys, &CreateFlag));
|
||
|
||
WsbAffirmHr(l_pSegmentDatabase->QueryInterface(IID_IWsbDb, (void**) &m_pSegmentDatabase));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadSegmentInformation"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreSegmentInformation(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for the segment information.
|
||
|
||
Arguments:
|
||
|
||
None
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
// CWsbStringPtr tmpString;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreSegmentInformation"),OLESTR(""));
|
||
//
|
||
// Make sure we have a valid collection pointer
|
||
//
|
||
try {
|
||
WsbAssert(m_pSegmentDatabase != 0, E_POINTER);
|
||
// This should not be necessary for a real DB
|
||
// WsbAffirmHr(m_pSegmentDatabase->Close());
|
||
// WsbAffirmHr(m_pSegmentDatabase->Open());
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreSegmentInformation"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreSegmentInformationFinal(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the segment information
|
||
|
||
Arguments:
|
||
|
||
None
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
CWsbStringPtr tmpString;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreSegmentInformationFinal"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(m_pSegmentDatabase.p != 0, E_POINTER);
|
||
// This should not be necessary for a real DB
|
||
// WsbAffirmHr(m_pSegmentDatabase->Close());
|
||
m_pSegmentDatabase = 0;
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreSegmentInformationFinal"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmServer::LoadMessages(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Loads the persistent data for messages
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was loaded OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::LoadMessages"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirmHr(LoadCollection(pStream, m_pMessages));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::LoadMessages"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmServer::StoreMessages(
|
||
IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Saves the persistent data for messages.
|
||
|
||
Arguments:
|
||
|
||
pStream - Data stream.
|
||
|
||
Return Value:
|
||
|
||
S_OK: The collection was saved OK.
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmServer::StoreMessages"),OLESTR(""));
|
||
//
|
||
// Make sure we have a valid collection pointer
|
||
//
|
||
try {
|
||
WsbAffirmHr(StoreCollection(pStream, m_pMessages));
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmServer::StoreMessages"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
// LoadCollection - load a collection from the given stream
|
||
static HRESULT LoadCollection(IStream* pStream, IWsbIndexedCollection* pIWC)
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
CComPtr<IPersistStream> pIStream;
|
||
|
||
WsbAffirm(0 != pStream, E_POINTER);
|
||
WsbAffirm(0 != pIWC, E_POINTER);
|
||
|
||
// Load the ordered collection from the persistent file
|
||
WsbAffirmHr(pIWC->QueryInterface(IID_IPersistStream, (void**)&pIStream));
|
||
WsbAffirmHr(pIStream->Load(pStream));
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
// StoreCollection - store a collection to the given stream
|
||
static HRESULT StoreCollection(IStream* pStream, IWsbIndexedCollection* pIWC)
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
CComPtr<IPersistStream> pIStream;
|
||
|
||
// Get the IPersistStream interface for the collection
|
||
WsbAffirm(0 != pStream, E_POINTER);
|
||
WsbAffirm(0 != pIWC, E_POINTER);
|
||
WsbAffirmHr(pIWC->QueryInterface(IID_IPersistStream, (void**)&pIStream));
|
||
|
||
// Store the ordered collection to the persistent file
|
||
WsbAffirmHr(pIStream->Save(pStream, TRUE));
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|