Added support for computing size of internal log entries.

This commit is contained in:
Sears Russell 2006-10-04 04:38:21 +00:00
parent fd7f4074af
commit 4bd93ee66a
5 changed files with 25 additions and 1 deletions

View file

@ -91,6 +91,9 @@ extern int loggerType;
int LogInit(int logType); int LogInit(int logType);
int LogDeinit(); int LogDeinit();
void LogForce(lsn_t lsn); void LogForce(lsn_t lsn);
/**
@param lsn The first lsn that will be available after truncation.
*/
void LogTruncate(lsn_t lsn); void LogTruncate(lsn_t lsn);
/** This function is guaranteed to return the LSN of the most recent /** This function is guaranteed to return the LSN of the most recent
@ -161,6 +164,11 @@ lsn_t LogCLR(int xid, lsn_t LSN, recordid rid, lsn_t prevLSN);
*/ */
void LogEnd (TransactionLog * l); void LogEnd (TransactionLog * l);
/**
Needed by sizeofLogEntry
*/
long LoggerSizeOfInternalLogEntry(const LogEntry * e);
/** /**
For internal use only... This would be static, but it is called by the test cases. For internal use only... This would be static, but it is called by the test cases.
*/ */

View file

@ -123,3 +123,6 @@ LogEntry * readLSNEntry_InMemoryLog(lsn_t lsn) {
//printf("lsn: %ld prevlsn: %ld\n", ptr->LSN, ptr->prevLSN); //printf("lsn: %ld prevlsn: %ld\n", ptr->LSN, ptr->prevLSN);
return ret; return ret;
} }
long sizeofInternalLogEntry_InMemoryLog(const LogEntry * e) {
abort();
}

View file

@ -10,6 +10,7 @@ void syncLog_InMemoryLog();
int truncateLog_InMemoryLog(lsn_t lsn); int truncateLog_InMemoryLog(lsn_t lsn);
lsn_t firstLogEntry_InMemoryLog(); lsn_t firstLogEntry_InMemoryLog();
void close_InMemoryLog(); void close_InMemoryLog();
long sizeofInternalLogEntry_InMemoryLog(const LogEntry * e);
LogEntry * readLSNEntry_InMemoryLog(lsn_t lsn); LogEntry * readLSNEntry_InMemoryLog(lsn_t lsn);
lsn_t nextEntry_InMemoryLog(const LogEntry * e); lsn_t nextEntry_InMemoryLog(const LogEntry * e);
#endif #endif

View file

@ -48,7 +48,7 @@ terms specified in this license.
#include <assert.h> #include <assert.h>
#include <lladd/operations.h> #include <lladd/operations.h>
#include <lladd/logger/logger2.h>
LogEntry * allocCommonLogEntry(lsn_t prevLSN, int xid, unsigned int type) { LogEntry * allocCommonLogEntry(lsn_t prevLSN, int xid, unsigned int type) {
LogEntry * ret = malloc(sizeof(struct __raw_log_entry)); LogEntry * ret = malloc(sizeof(struct __raw_log_entry));
ret->LSN = -1; ret->LSN = -1;
@ -132,6 +132,8 @@ long sizeofLogEntry(const LogEntry * log) {
return sizeof(struct __raw_log_entry) + sizeof(UpdateLogEntry) + log->contents.update.argSize + return sizeof(struct __raw_log_entry) + sizeof(UpdateLogEntry) + log->contents.update.argSize +
((operationsTable[log->contents.update.funcID].undo == NO_INVERSE) ? physical_slot_length(log->contents.update.rid.size) : 0) + ((operationsTable[log->contents.update.funcID].undo == NO_INVERSE) ? physical_slot_length(log->contents.update.rid.size) : 0) +
((operationsTable[log->contents.update.funcID].undo == NO_INVERSE_WHOLE_PAGE) ? PAGE_SIZE : 0) ; ((operationsTable[log->contents.update.funcID].undo == NO_INVERSE_WHOLE_PAGE) ? PAGE_SIZE : 0) ;
case INTERNALLOG:
return LoggerSizeOfInternalLogEntry(log);
default: default:
return sizeof(struct __raw_log_entry); return sizeof(struct __raw_log_entry);
} }

View file

@ -61,6 +61,16 @@ terms specified in this license.
int loggerType = LOG_TO_FILE; int loggerType = LOG_TO_FILE;
long LoggerSizeOfInternalLogEntry(const LogEntry * e) {
if(loggerType == LOG_TO_FILE) {
return sizeofInternalLogEntry_LogWriter(e);
} else if (loggerType == LOG_TO_MEMORY) {
return sizeofInternalLogEntry_InMemoryLog(e);
} else {
abort(); // we dont have an appropriate implementation, or weren't initialized...
}
}
void LogWrite(LogEntry * e) { void LogWrite(LogEntry * e) {
if(loggerType == LOG_TO_FILE) { if(loggerType == LOG_TO_FILE) {
writeLogEntry(e); writeLogEntry(e);