229 lines
5.5 KiB
C++
229 lines
5.5 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (c) 1999-2000 Microsoft Corporation
|
|
//
|
|
// Module Name:
|
|
// CNodeConfig.cpp
|
|
//
|
|
// Description:
|
|
// Contains the definition of the CNodeConfig class.
|
|
//
|
|
// Documentation:
|
|
// TODO: Add pointer to external documentation later.
|
|
//
|
|
// Maintained By:
|
|
// Vij Vasu (Vvasu) 08-MAR-2000
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
// Include Files
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
// The precompiled header.
|
|
#include "pch.h"
|
|
|
|
// The header for this file
|
|
#include "CNodeConfig.h"
|
|
|
|
// For the CBaseClusterAddNode class.
|
|
#include "CBaseClusterAddNode.h"
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CNodeConfig::CNodeConfig()
|
|
//
|
|
// Description:
|
|
// Constructor of the CNodeConfig class
|
|
//
|
|
// Arguments:
|
|
// pbcanParentActionIn
|
|
// Pointer to the base cluster action of which this action is a part.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
// Exceptions Thrown:
|
|
// Any exceptions thrown by underlying functions
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CNodeConfig::CNodeConfig(
|
|
CBaseClusterAddNode * pbcanParentActionIn
|
|
)
|
|
: CNode( pbcanParentActionIn )
|
|
{
|
|
BCATraceScope( "" );
|
|
|
|
// Indicate that action can be rolled back.
|
|
SetRollbackPossible( true );
|
|
|
|
} //*** CNodeConfig::CNodeConfig()
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// CNodeConfig::~CNodeConfig( void )
|
|
//
|
|
// Description:
|
|
// Destructor of the CNodeConfig class.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
// Exceptions Thrown:
|
|
// Any exceptions thrown by underlying functions
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
CNodeConfig::~CNodeConfig( void )
|
|
{
|
|
BCATraceScope( "" );
|
|
|
|
} //*** CNodeConfig::~CNodeConfig()
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// void
|
|
// CNodeConfig::Commit( void )
|
|
//
|
|
// Description:
|
|
// Perform the node specific configuration steps.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
// Exceptions Thrown:
|
|
// Any that are thrown by the contained actions.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
CNodeConfig::Commit( void )
|
|
{
|
|
BCATraceScope( "" );
|
|
|
|
CStatusReport srConfigNode(
|
|
PbcaGetParent()->PBcaiGetInterfacePointer()
|
|
, TASKID_Major_Configure_Cluster_Services
|
|
, TASKID_Minor_Configuring_Cluster_Node
|
|
, 0, 1
|
|
, IDS_TASK_CONFIG_NODE
|
|
);
|
|
|
|
// Get the parent action pointer.
|
|
CBaseClusterAddNode * pcanClusterAddNode = dynamic_cast< CBaseClusterAddNode *>( PbcaGetParent() );
|
|
|
|
// If the parent action of this action is not CBaseClusterForm
|
|
if ( pcanClusterAddNode == NULL )
|
|
{
|
|
THROW_ASSERT( E_POINTER, "The parent action of this action is not CBaseClusterAddNode." );
|
|
} // an invalid pointer was passed in.
|
|
|
|
// Call the base class commit method.
|
|
BaseClass::Commit();
|
|
|
|
// Send the next step of this status report.
|
|
srConfigNode.SendNextStep( S_OK );
|
|
|
|
try
|
|
{
|
|
LogMsg( "Making miscellaneous changes to the node." );
|
|
|
|
// Configure the node.
|
|
Configure( pcanClusterAddNode->RStrGetClusterName() );
|
|
|
|
} // try:
|
|
catch( ... )
|
|
{
|
|
// If we are here, then something went wrong with the configuration.
|
|
|
|
BCATraceMsg( "Caught exception during commit." );
|
|
|
|
//
|
|
// Cleanup anything that the failed commit might have done.
|
|
// Catch any exceptions thrown during Cleanup to make sure that there
|
|
// is no collided unwind.
|
|
//
|
|
try
|
|
{
|
|
Cleanup();
|
|
}
|
|
catch( ... )
|
|
{
|
|
//
|
|
// The rollback of the committed action has failed.
|
|
// There is nothing that we can do.
|
|
// We certainly cannot rethrow this exception, since
|
|
// the exception that caused the rollback is more important.
|
|
//
|
|
|
|
THR( E_UNEXPECTED );
|
|
|
|
BCATraceMsg( "Caught exception during cleanup." );
|
|
LogMsg( "THIS COMPUTER MAY BE IN AN INVALID STATE. An error has occurred during cleanup." );
|
|
|
|
} // catch: all
|
|
|
|
// Rethrow the exception thrown by commit.
|
|
throw;
|
|
|
|
} // catch: all
|
|
|
|
// If we are here, then everything went well.
|
|
SetCommitCompleted( true );
|
|
|
|
// Send the last step of this status report.
|
|
srConfigNode.SendNextStep( S_OK );
|
|
|
|
} //*** CNodeConfig::Commit()
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// void
|
|
// CNodeConfig::Rollback( void )
|
|
//
|
|
// Description:
|
|
// Roll the node back to the state it was in before we tried to
|
|
// configure it.
|
|
//
|
|
// Arguments:
|
|
// None.
|
|
//
|
|
// Return Value:
|
|
// None.
|
|
//
|
|
// Exceptions Thrown:
|
|
// Any that are thrown by the underlying functions.
|
|
//
|
|
//--
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void
|
|
CNodeConfig::Rollback( void )
|
|
{
|
|
BCATraceScope( "" );
|
|
|
|
// Call the base class rollback method.
|
|
BaseClass::Rollback();
|
|
|
|
// Bring the node back to its original state.
|
|
Cleanup();
|
|
|
|
SetCommitCompleted( false );
|
|
|
|
} //*** CNodeConfig::Rollback()
|