package com.sleepycat.je.txn; import java.nio.ByteBuffer; import java.sql.Timestamp; import com.sleepycat.je.log.LogEntryType; import com.sleepycat.je.log.LogReadable; import com.sleepycat.je.log.LogUtils; import com.sleepycat.je.log.LoggableObject; import com.sleepycat.je.utilint.DbLsn; import de.ovgu.cide.jakutil.*; /** * This class writes out a transaction commit or transaction end record. */ public abstract class TxnEnd implements LoggableObject, LogReadable { protected long id; protected Timestamp time; private long lastLsn; TxnEnd( long id, long lastLsn){ this.id=id; time=new Timestamp(System.currentTimeMillis()); this.lastLsn=lastLsn; } /** * For constructing from the log */ public TxnEnd(){ lastLsn=DbLsn.NULL_LSN; } public long getId(){ return id; } long getLastLsn(){ return lastLsn; } protected abstract String getTagName(); /** * @see LoggableObject#getLogType */ public abstract LogEntryType getLogType(); /** * @see LoggableObject#marshallOutsideWriteLatchCan be marshalled outside the log write latch. */ public boolean marshallOutsideWriteLatch(){ return true; } /** * @see LoggableObject#countAsObsoleteWhenLogged */ public boolean countAsObsoleteWhenLogged(){ return false; } /** * @see LoggableObject#postLogWork */ public void postLogWork( long justLoggedLsn){ } /** * @see LoggableObject#getLogSize */ public int getLogSize(){ return LogUtils.LONG_BYTES + LogUtils.getTimestampLogSize() + LogUtils.getLongLogSize(); } /** * @see LoggableObject#writeToLog */ public void writeToLog( ByteBuffer logBuffer){ LogUtils.writeLong(logBuffer,id); LogUtils.writeTimestamp(logBuffer,time); LogUtils.writeLong(logBuffer,lastLsn); } /** * @see LogReadable#readFromLog */ public void readFromLog( ByteBuffer logBuffer, byte entryTypeVersion){ id=LogUtils.readLong(logBuffer); time=LogUtils.readTimestamp(logBuffer); lastLsn=LogUtils.readLong(logBuffer); } /** * @see LogReadable#dumpLog */ public void dumpLog( StringBuffer sb, boolean verbose){ sb.append("<").append(getTagName()); sb.append(" id=\"").append(id); sb.append("\" time=\"").append(time); sb.append("\">"); sb.append(DbLsn.toString(lastLsn)); sb.append("</").append(getTagName()).append(">"); } /** * @see LogReadable#logEntryIsTransactional */ public boolean logEntryIsTransactional(){ return true; } /** * @see LogReadable#getTransactionId */ public long getTransactionId(){ return id; } }