val physicalPosition = log.sizeInBytes()//当前日志段位移if(physicalPosition ==0)//如果是空,记录用于切分日志段依据
rollingBasedTimestamp = Some(largestTimestamp)// largestTimestamp: Long, 当前这批消息里面最大的时间戳//FileRecords中的方法privatefinal AtomicInteger size;@Override
public int sizeInBytes(){
return size.get();}/**
* Gets the current value.
*
* @return the current value
*/
public final int get(){
return value;}// The timestamp we used for time based log rolling and for ensuring max compaction delay// volatile for LogCleaner to see the update@volatileprivatevar rollingBasedTimestamp: Option[Long]= None
/** Class `Some[A]` represents existing values of type
* `A`.
*/@SerialVersionUID(1234815782226070388L)// value computed by serialver for 2.11.2, annotation added in 2.11.4finalcaseclass Some[+A](value: A)extends Option[A]{
def get: A = value
}
第二步:确保输入参数最大位移值是合法的
ensureOffsetInRange(largestOffset)
private def ensureOffsetInRange(offset: Long): Unit = {
if (!canConvertToRelativeOffset(offset))
throw new LogSegmentOffsetOverflowException(this, offset)
}
/**
* checks that the argument offset can be represented as an integer offset relative to the baseOffset.
*/
def canConvertToRelativeOffset(offset: Long