01: /*-
02: * See the file LICENSE for redistribution information.
03: *
04: * Copyright (c) 2002,2008 Oracle. All rights reserved.
05: *
06: * $Id: CheckpointStart.java,v 1.28.2.3 2008/01/07 15:14:14 cwl Exp $
07: */
08:
09: package com.sleepycat.je.recovery;
10:
11: import java.nio.ByteBuffer;
12: import java.sql.Timestamp;
13: import java.util.Calendar;
14:
15: import com.sleepycat.je.log.LogException;
16: import com.sleepycat.je.log.LogUtils;
17: import com.sleepycat.je.log.Loggable;
18:
19: /**
20: * CheckpointStart creates a log entry that marks the beginning of a
21: * checkpoint.
22: */
23: public class CheckpointStart implements Loggable {
24:
25: private Timestamp startTime;
26: private long id;
27:
28: /*
29: * invoker is just a way to tag each checkpoint in the log for easier log
30: * based debugging. It will tell us whether the checkpoint was invoked by
31: * recovery, the daemon, the api, or the cleaner.
32: */
33: private String invoker;
34:
35: public CheckpointStart(long id, String invoker) {
36: Calendar cal = Calendar.getInstance();
37: this .startTime = new Timestamp(cal.getTime().getTime());
38: this .id = id;
39: if (invoker == null) {
40: this .invoker = "";
41: } else {
42: this .invoker = invoker;
43: }
44: }
45:
46: /* For logging only. */
47: public CheckpointStart() {
48: }
49:
50: /*
51: * Logging support for writing.
52: */
53:
54: /**
55: * @see Loggable#getLogSize
56: */
57: public int getLogSize() {
58: return LogUtils.getTimestampLogSize()
59: + LogUtils.getLongLogSize()
60: + LogUtils.getStringLogSize(invoker);
61: }
62:
63: /**
64: * @see Loggable#writeToLog
65: */
66: public void writeToLog(ByteBuffer logBuffer) {
67: LogUtils.writeTimestamp(logBuffer, startTime);
68: LogUtils.writeLong(logBuffer, id);
69: LogUtils.writeString(logBuffer, invoker);
70: }
71:
72: /**
73: * @see Loggable#readFromLog
74: */
75: public void readFromLog(ByteBuffer logBuffer, byte entryTypeVersion)
76: throws LogException {
77:
78: startTime = LogUtils.readTimestamp(logBuffer);
79: id = LogUtils.readLong(logBuffer);
80: invoker = LogUtils.readString(logBuffer);
81: }
82:
83: /**
84: * @see Loggable#dumpLog
85: */
86: public void dumpLog(StringBuffer sb, boolean verbose) {
87: sb.append("<CkptStart invoker=\"").append(invoker);
88: sb.append("\" time=\"").append(startTime);
89: sb.append("\" id=\"").append(id);
90: sb.append("\"/>");
91: }
92:
93: /**
94: * @see Loggable#getTransactionId
95: */
96: public long getTransactionId() {
97: return 0;
98: }
99: }
|