Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//////////////////////////////////////////////////////////////////////////////
//
// 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()
|