blob: 4fe3ca35117e3f804076a42f661a33049516ab68 [file] [log] [blame]
// ***************************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
// -*-C++-*-
// ***************************************************************************
//
// File: CmpErrLog.h
// Description: This file contains the definition of the CmpErrLog class.
// This class is used for logging information to a file when
// certain types of errors occur. It is used primarily for
// logging memory errors, but may be used for other types of
// errors too.
//
// This class is used by simply constructing a CmpErrLog
// object.
//
// Created: 9/19/2008
// Language: C++
//
// ***************************************************************************
#ifndef _CMP_ERR_LOG_H
#define _CMP_ERR_LOG_H
#include "Platform.h"
#include <sys/types.h>
// Forward declarations
class NAMemory;
class NAHeap;
typedef NAMemory CollHeap;
class CmpErrLog
{
public:
// CmpErrLog constructor. The "failedHeap" field below is a pointer
// to the heap where a failure occurred.
CmpErrLog(const char *failureTxt, CollHeap *failedHeap = 0, size_t size = 0);
~CmpErrLog();
// This function may be passed to NAMemory::setErrorCallback() to
// allow logging to occur when a memory allocation failure occurs
// in the NAMemory code.
static void CmpErrLogCallback(NAHeap *heap, size_t userSize);
private:
void renameBigLogFile(const char *fileName);
void openLogFile();
void closeLogFile();
void writeHeader(const char *failureTxt, CollHeap *failedHeap, size_t size);
void writeMemoryStats();
void writeHeapInfo(CollHeap *heap);
void writeAllHeapInfo(CollHeap *failedHeap);
void writeCQDInfo();
void writeQueryInfo();
void writeStackTrace();
// Output file pointer
FILE *fp;
// Pointer to memory buffer that can be freed to allow memory needed
// during logging to be allocated.
static void *memPtr;
};
#endif // _CMP_ERR_LOG_H