greenplumn CErrorHandlerStandard 源码

  • 2022-08-18
  • 浏览 (298)

greenplumn CErrorHandlerStandard 代码

文件路径:/src/backend/gporca/libgpos/src/error/CErrorHandlerStandard.cpp

//---------------------------------------------------------------------------
//	Greenplum Database
//	Copyright (C) 2008 - 2010 Greenplum, Inc.
//
//	@filename:
//		CErrorHandlerStandardStandard.cpp
//
//	@doc:
//		Implements standard error handler
//---------------------------------------------------------------------------

#include "gpos/error/CErrorHandlerStandard.h"

#include "gpos/base.h"
#include "gpos/error/CErrorContext.h"
#include "gpos/error/CLogger.h"
#include "gpos/io/ioutils.h"
#include "gpos/string/CWStringStatic.h"
#include "gpos/task/CAutoSuspendAbort.h"
#include "gpos/task/CTask.h"

using namespace gpos;

//---------------------------------------------------------------------------
//	@function:
//		CErrorHandlerStandard::Process
//
//	@doc:
//		Process pending error context;
//
//---------------------------------------------------------------------------
void
CErrorHandlerStandard::Process(CException exception)
{
	CTask *task = CTask::Self();

	GPOS_ASSERT(nullptr != task && "No task in current context");

	IErrorContext *err_ctxt = task->GetErrCtxt();
	CLogger *log = dynamic_cast<CLogger *>(task->GetErrorLogger());

	GPOS_ASSERT(err_ctxt->IsPending() && "No error to process");
	GPOS_ASSERT(err_ctxt->GetException() == exception &&
				"Exception processed different from pending");

	// print error stack trace
	if (CException::ExmaSystem == exception.Major() && !err_ctxt->IsRethrown())
	{
		if (CException::ExmiIOError == exception.Minor() && 0 < errno)
		{
			err_ctxt->AppendErrnoMsg();
		}

		if (ILogger::EeilMsgHeaderStack <= log->InfoLevel())
		{
			err_ctxt->AppendStackTrace();
		}
	}

	// scope for suspending cancellation
	{
		// suspend cancellation
		CAutoSuspendAbort asa;

		// log error message
		log->Log(err_ctxt->GetErrorMsg(), err_ctxt->GetSeverity(), __FILE__,
				 __LINE__);
	}
}

// EOF

相关信息

greenplumn 源码目录

相关文章

greenplumn CAutoExceptionStack 源码

greenplumn CAutoTrace 源码

greenplumn CErrorContext 源码

greenplumn CException 源码

greenplumn CLogger 源码

greenplumn CLoggerStream 源码

greenplumn CLoggerSyslog 源码

greenplumn CMessage 源码

greenplumn CMessageRepository 源码

greenplumn CMessageTable 源码

0  赞