/****************************************************************************
Desc:	Displays an error message with an RCODE.
*****************************************************************************/
void gigaOutputRcErr(
	const char *	pszWhat,
	RCODE				rc,
	FLMBOOL			bMutexLocked)
{
	char	szMsg [100];

	f_sprintf( szMsg, "Error %s: %s (%04X)", pszWhat,
		FlmErrorString( rc), (unsigned)rc);
	gigaOutputErrMsg( szMsg, bMutexLocked);
}
Exemple #2
0
/********************************************************************
Desc: ?
*********************************************************************/
FSTATIC void bldShowResults(
	const char *	FuncName,
	RCODE				rc,
	FLMUINT			uiTotalRecords,
	FLMUINT			uiRecordsRecovered,
	FLMUINT			uiDictRecordsRecovered)
{
	char		szErrMsg[ 100];

	if( RC_BAD( rc))
	{
		if( rc != FERR_FAILURE)
		{
			f_strcpy( szErrMsg, "Error calling ");
			f_strcpy( &szErrMsg[ f_strlen( szErrMsg)], FuncName);
			f_strcpy( &szErrMsg[ f_strlen( szErrMsg)], ": ");
			f_strcpy( &szErrMsg[ f_strlen( szErrMsg)], FlmErrorString( rc));
			bldShowError( szErrMsg);
			if( gv_bLoggingEnabled)
			{
				bldLogString( szErrMsg);
			}
		}
		else if( gv_bLoggingEnabled)
		{
			bldLogString( "REBUILD HALTED BY USER");
			gv_bShutdown = TRUE;
		}
	}
	else
	{
		bldOutNumValue( TOTAL_REC_ROW, uiTotalRecords);
		bldOutNumValue( RECOV_ROW, uiRecordsRecovered);
		bldOutNumValue( DICT_RECOV_ROW, uiDictRecordsRecovered);
		if( gv_bLoggingEnabled)
		{
			f_sprintf( (char *)szErrMsg, "Total Records:     %u", (unsigned)uiTotalRecords);
			bldLogString( szErrMsg);
			f_sprintf( (char *)szErrMsg, "Records Recovered: %u", (unsigned)uiRecordsRecovered);
			bldLogString( szErrMsg);
			f_sprintf( (char *)szErrMsg, "Dict Items Recovered: %u",
					(unsigned)uiDictRecordsRecovered);
			bldLogString( szErrMsg);
		}
		f_strcpy( szErrMsg, "Recovery completed successfully");
		bldShowError( szErrMsg);
		if( gv_bLoggingEnabled)
		{
			bldLogString( szErrMsg);
		}
	}
}
Exemple #3
0
/********************************************************************
Desc: ?
*********************************************************************/
FSTATIC FLMBOOL bldDoRebuild( void)
{
	RCODE				rc;
	FLMBOOL			bOk = TRUE;
	char				szErrMsg[ 100];
	CREATE_OPTS		createOpts;

	gv_ui64DatabaseSize = 0;
	gv_ui64BytesDone = 0;
	gv_uiDictRecsRecovered = 0;
	gv_iLastDoing = -1;
	gv_uiTotalRecs = 0;
	gv_uiRecsRecovered = 0;

	f_conSetBackFore( FLM_BLACK, FLM_LIGHTGRAY);
	f_conClearScreen( 0, 0);

	gv_bLoggingEnabled = FALSE;
	gv_uiLogBufferCount = 0;

	if( gv_szLogFileName[ 0])
	{
		gv_pFileSystem->deleteFile( gv_szLogFileName);
		if (RC_OK( rc = gv_pFileSystem->createFile( 
			gv_szLogFileName, FLM_IO_RDWR, &gv_pLogFile)))
		{
			gv_bLoggingEnabled = TRUE;
		}
		else
		{
			f_strcpy( szErrMsg, "Error creating log file: ");
			f_strcpy( &szErrMsg[ f_strlen( szErrMsg)], FlmErrorString( rc));
			bldShowError( szErrMsg);
			bOk = FALSE;
			goto Exit;
		}
	}

	/* Configure FLAIM */

	if (RC_BAD( rc = FlmConfig( FLM_CACHE_LIMIT,
							(void *)(gv_uiCacheSize * 1024), (void *)0)))
	{
		f_strcpy( szErrMsg, "Error setting cache size for FLAIM share: ");
		f_strcpy( &szErrMsg[ f_strlen( szErrMsg)], FlmErrorString( rc));
		bldShowError( szErrMsg);
		bOk = FALSE;
		goto Exit;
	}

	f_conSetBackFore( FLM_BLACK, FLM_WHITE);
	if( gv_bLoggingEnabled)
	{
		bldLogString( NULL);
		bldLogString( NULL);
		bldLogString( NULL);
		bldLogString( 
"==========================================================================");
		bldLogString( "REBUILD PARAMETERS:");
	}
	f_conClearScreen( 0, PARAM_ROW);
	f_conStrOutXY( "REBUILD PARAMETERS:", LABEL_COLUMN, PARAM_ROW);
	bldOutLabel( LABEL_COLUMN + 2, SOURCE_ROW, "Source DB",
					 gv_szSrcFileName, 0, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, SOURCE_DATA_DIR_ROW,
		"Src. Data Dir",
		(gv_szSrcDataDir [0])
		? &gv_szSrcDataDir [0]
		: "<NONE>", 0, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, DEST_ROW, "Destination DB",
		gv_szDestFileName, 0, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, DEST_DATA_DIR_ROW,
		"Dest. Data Dir",
		(gv_szDestDataDir [0])
		? &gv_szDestDataDir [0]
		: "<NONE>", 0, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, DEST_RFL_ROW, "Dest. RFL Dir",
		(gv_szDestRflDir [0])
		? &gv_szDestRflDir [0]
		: "<NONE>", 0, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, DICT_ROW, "Dictionary File",
		(gv_szDictFileName [0])
		? &gv_szDictFileName [0]
		: "<NONE>", 0, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, CACHE_ROW, "Cache (kb)", NULL,
		gv_uiCacheSize, TRUE);
	bldOutLabel( LABEL_COLUMN + 2, LOG_FILE_ROW, "Log File",
		(gv_szLogFileName [0])
		? &gv_szLogFileName [0]
		: "<NONE>", 0, TRUE);
	bldOutLabel( LABEL_COLUMN, DOING_ROW, "Current Action",
		"Startup                  ", 0L, FALSE);
	bldOutLabel( LABEL_COLUMN, DB_SIZE_ROW, "Database Size",
		NULL, (FLMUINT)gv_ui64DatabaseSize, FALSE);
	bldOutLabel( LABEL_COLUMN, BYTES_DONE_ROW, "Bytes Processed",
		NULL, (FLMUINT)gv_ui64BytesDone, FALSE);
	bldOutLabel( LABEL_COLUMN, TOTAL_REC_ROW, "Total Records",
		NULL, gv_uiTotalRecs, FALSE);
	bldOutLabel( LABEL_COLUMN, RECOV_ROW, "Records Recovered",
		NULL, gv_uiRecsRecovered, FALSE);
	bldOutLabel( LABEL_COLUMN, DICT_RECOV_ROW, "Dict Items Recov",
		NULL, gv_uiDictRecsRecovered, FALSE);

	if( gv_szDictFileName [0])
	{
		gv_pszDictPath = &gv_szDictFileName [0];
	}
	else
	{
		gv_pszDictPath = NULL;
	}

	/*
	Open the database ONLY to get the createOpts.
	Rebuild the exact prefix and other create options.
	*/

	rc = bldGetCreateOpts( gv_szSrcFileName, &createOpts);
	if ((!gv_bShutdown) && (RC_OK( rc)))
	{
		char *	pszDestRflDir;

		pszDestRflDir = ((gv_szDestRflDir [0])
											 ? &gv_szDestRflDir [0]
											 : NULL);

		rc = FlmDbRebuild( gv_szSrcFileName, gv_szSrcDataDir,
									gv_szDestFileName, gv_szDestDataDir,
									pszDestRflDir,
									gv_pszDictPath, &createOpts,
									&gv_uiTotalRecs,
									&gv_uiRecsRecovered,
									bldProgFunc, NULL);
		bldShowResults( "FlmDbRebuild",
									rc, gv_uiTotalRecs, gv_uiRecsRecovered,
									gv_uiDictRecsRecovered);
	}

Exit:

	if( gv_bLoggingEnabled)
	{
		bldLogFlush();
		gv_pLogFile->Release();
		gv_pLogFile = NULL;
	}

	return( bOk);
}
Exemple #4
0
/********************************************************************
Desc: ?
*********************************************************************/
FSTATIC RCODE bldGetCreateOpts(
	const char *		pszFileName,
	CREATE_OPTS *		pCreateOpts)
{
	RCODE					rc = FERR_OK;
	char					szBuf[ 80];
	FLMBYTE				ucLogHdr [LOG_HEADER_SIZE];
	HDR_INFO				HdrInfo;
	FLMUINT				uiVersion;
	IF_FileHdl *		pCFileHdl = NULL;

	f_memset( pCreateOpts, 0, sizeof( CREATE_OPTS));
	if( gv_bFixHdrInfo)
	{
		f_memcpy( pCreateOpts, &gv_DefaultCreateOpts, sizeof( CREATE_OPTS));
		goto Exit;
	}

	if( RC_BAD( rc = gv_FlmSysData.pFileSystem->openFile( pszFileName, 
		FLM_IO_RDWR | FLM_IO_SH_DENYNONE | FLM_IO_DIRECT, &pCFileHdl)))
	{
		goto Exit;
	}
	
	if( (rc = flmGetHdrInfo( pCFileHdl, &HdrInfo.FileHdr,
									 &HdrInfo.LogHdr, ucLogHdr)) == FERR_NOT_FLAIM)
	{
		uiVersion = gv_DefaultCreateOpts.uiVersionNum;
		f_memcpy( pCreateOpts, &gv_DefaultCreateOpts, sizeof( CREATE_OPTS));
		rc = FERR_OK;
	}
	else
	{
		uiVersion = HdrInfo.FileHdr.uiVersionNum;
		flmGetCreateOpts( &HdrInfo.FileHdr, ucLogHdr, pCreateOpts);
	}

	if (rc != FERR_OK &&
		 rc != FERR_INCOMPLETE_LOG &&
		 rc != FERR_BLOCK_CHECKSUM)
	{
		if (((rc == FERR_UNSUPPORTED_VERSION) || (rc == FERR_NEWER_FLAIM)) &&
			 (uiVersion == 999))
		{
			rc = FERR_OK;
		}
		else
		{
			f_strcpy( szBuf, "Error reading header info from ");
			f_strcpy( &szBuf[ f_strlen( szBuf)], pszFileName);
			f_strcpy( &szBuf[ f_strlen( szBuf)], ": ");
			f_strcpy( &szBuf[ f_strlen( szBuf)], FlmErrorString( rc));
			bldShowError( szBuf);
			if( gv_bLoggingEnabled)
			{
				bldLogString( szBuf);
			}
			goto Exit;
		}
	}
	else
	{
		rc = FERR_OK;
	}
	
Exit:

	if( pCFileHdl)
	{
		pCFileHdl->Release();
	}
	
	return( rc);
}