1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2002, 2014 Oracle and/or its affiliates.  All rights reserved.
5  *
6  */
7 
8 package com.sleepycat.je.recovery;
9 
10 import java.nio.ByteBuffer;
11 import java.util.Calendar;
12 
13 import com.sleepycat.je.log.LogUtils;
14 import com.sleepycat.je.log.Loggable;
15 import com.sleepycat.je.utilint.Timestamp;
16 
17 /**
18  * CheckpointStart creates a log entry that marks the beginning of a
19  * checkpoint.
20  */
21 public class CheckpointStart implements Loggable {
22 
23     private Timestamp startTime;
24     private long id;
25 
26     /*
27      * invoker is just a way to tag each checkpoint in the log for easier log
28      * based debugging. It will tell us whether the checkpoint was invoked by
29      * recovery, the daemon, the api, or the cleaner.
30      */
31     private String invoker;
32 
CheckpointStart(long id, String invoker)33     public CheckpointStart(long id, String invoker) {
34         Calendar cal = Calendar.getInstance();
35         this.startTime = new Timestamp(cal.getTime().getTime());
36         this.id = id;
37         if (invoker == null) {
38             this.invoker = "";
39         } else {
40             this.invoker = invoker;
41         }
42     }
43 
44     /* For logging only. */
CheckpointStart()45     public CheckpointStart() {
46     }
47 
48     /*
49      * Logging support for writing.
50      */
51 
52     /**
53      * @see Loggable#getLogSize
54      */
getLogSize()55     public int getLogSize() {
56         return LogUtils.getTimestampLogSize(startTime) +
57             LogUtils.getPackedLongLogSize(id) +
58             LogUtils.getStringLogSize(invoker);
59     }
60 
61     /**
62      * @see Loggable#writeToLog
63      */
writeToLog(ByteBuffer logBuffer)64     public void writeToLog(ByteBuffer logBuffer) {
65         LogUtils.writeTimestamp(logBuffer, startTime);
66         LogUtils.writePackedLong(logBuffer, id);
67         LogUtils.writeString(logBuffer, invoker);
68     }
69 
70     /**
71      * @see Loggable#readFromLog
72      */
readFromLog(ByteBuffer logBuffer, int entryVersion)73     public void readFromLog(ByteBuffer logBuffer, int entryVersion) {
74         boolean unpacked = (entryVersion < 6);
75         startTime = LogUtils.readTimestamp(logBuffer, unpacked);
76         id = LogUtils.readLong(logBuffer, unpacked);
77         invoker = LogUtils.readString(logBuffer, unpacked, entryVersion);
78     }
79 
80     /**
81      * @see Loggable#dumpLog
82      */
dumpLog(StringBuilder sb, boolean verbose)83     public void dumpLog(StringBuilder sb, boolean verbose) {
84         sb.append("<CkptStart invoker=\"").append(invoker);
85         sb.append("\" time=\"").append(startTime);
86         sb.append("\" id=\"").append(id);
87         sb.append("\"/>");
88     }
89 
90     /**
91      * @see Loggable#getTransactionId
92      */
getTransactionId()93     public long getTransactionId() {
94         return 0;
95     }
96 
97    /**
98      * @see Loggable#logicalEquals
99      * Always return false, this item should never be compared.
100      */
logicalEquals(Loggable other)101     public boolean logicalEquals(Loggable other) {
102         return false;
103     }
104 }
105