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