greenplumn traceflags 源码
greenplumn traceflags 代码
文件路径:/src/backend/gporca/libnaucrates/src/traceflags.cpp
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2013 EMC Corp.
//
// @filename:
// traceflags.cpp
//
// @doc:
// Implementation of trace flags routines
//---------------------------------------------------------------------------
#include "naucrates/traceflags/traceflags.h"
#include "gpos/base.h"
#include "gpos/common/CBitSetIter.h"
#include "gpos/task/CAutoTraceFlag.h"
using namespace gpos;
//---------------------------------------------------------------------------
// @function:
// SetTraceflags
//
// @doc:
// Set trace flags based on given bit set, and return two output bit
// sets of old trace flags values
//
//---------------------------------------------------------------------------
void
SetTraceflags(
CMemoryPool *mp,
const CBitSet *pbsInput, // set of trace flags to be enabled
CBitSet *
*ppbsEnabled, // output: enabled trace flags before function is called
CBitSet *
*ppbsDisabled // output: disabled trace flags before function is called
)
{
if (nullptr == pbsInput)
{
// bail out if input set is null
return;
}
GPOS_ASSERT(nullptr != ppbsEnabled);
GPOS_ASSERT(nullptr != ppbsDisabled);
*ppbsEnabled = GPOS_NEW(mp) CBitSet(mp, EopttraceSentinel);
*ppbsDisabled = GPOS_NEW(mp) CBitSet(mp, EopttraceSentinel);
CBitSetIter bsiter(*pbsInput);
while (bsiter.Advance())
{
ULONG ulTraceFlag = bsiter.Bit();
if (GPOS_FTRACE(ulTraceFlag))
{
// set trace flag in the enabled set
BOOL fSet GPOS_ASSERTS_ONLY =
(*ppbsEnabled)->ExchangeSet(ulTraceFlag);
GPOS_ASSERT(!fSet);
}
else
{
// set trace flag in the disabled set
BOOL fSet GPOS_ASSERTS_ONLY =
(*ppbsDisabled)->ExchangeSet(ulTraceFlag);
GPOS_ASSERT(!fSet);
}
// set trace flag
GPOS_SET_TRACE(ulTraceFlag);
}
}
//---------------------------------------------------------------------------
// @function:
// ResetTraceflags
//
// @doc:
// Reset trace flags based on values given by input sets
//
//---------------------------------------------------------------------------
void
ResetTraceflags(CBitSet *pbsEnabled, CBitSet *pbsDisabled)
{
if (nullptr == pbsEnabled || nullptr == pbsDisabled)
{
// bail out if input sets are null
return;
}
GPOS_ASSERT(nullptr != pbsEnabled);
GPOS_ASSERT(nullptr != pbsDisabled);
CBitSetIter bsiterEnabled(*pbsEnabled);
while (bsiterEnabled.Advance())
{
ULONG ulTraceFlag = bsiterEnabled.Bit();
GPOS_SET_TRACE(ulTraceFlag);
}
CBitSetIter bsiterDisabled(*pbsDisabled);
while (bsiterDisabled.Advance())
{
ULONG ulTraceFlag = bsiterDisabled.Bit();
GPOS_UNSET_TRACE(ulTraceFlag);
}
}
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦