blob: 7dcbbde8fb84407e200e52e4a3d8f2c05f4d68e5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.iotdb.db.storageengine.dataregion.tsfile;
import static org.apache.iotdb.commons.conf.IoTDBConstant.FILE_NAME_SEPARATOR;
import static org.apache.iotdb.tsfile.utils.FilePathUtils.splitTsFilePath;
public class TsFileID {
public final int regionId;
public final long timePartitionId;
public final long fileVersion;
// high 32 bit is compaction level, low 32 bit is merge count
public final long compactionVersion;
public TsFileID() {
this.regionId = -1;
this.timePartitionId = -1;
this.fileVersion = -1;
this.compactionVersion = -1;
}
public TsFileID(int regionId, long timePartitionId, long fileVersion, long compactionVersion) {
this.regionId = regionId;
this.timePartitionId = timePartitionId;
this.fileVersion = fileVersion;
this.compactionVersion = compactionVersion;
}
public TsFileID(String tsFileAbsolutePath) {
int tmpRegionId = -1;
long tmpTimePartitionId = -1;
String[] pathSegments = splitTsFilePath(tsFileAbsolutePath);
int pathLength = pathSegments.length;
if (pathLength >= 3) {
try {
tmpRegionId = Integer.parseInt(pathSegments[pathLength - 3]);
} catch (NumberFormatException e) {
// ignore, load will get in here
}
try {
tmpTimePartitionId = Long.parseLong(pathSegments[pathLength - 2]);
} catch (NumberFormatException e) {
// ignore, load will get in here
}
}
this.regionId = tmpRegionId;
this.timePartitionId = tmpTimePartitionId;
long[] arr = null;
try {
arr = splitAndGetVersionArray(pathSegments[pathLength - 1]);
} catch (NumberFormatException e) {
// ignore, load will get in here
}
this.fileVersion = arr == null || arr.length != 2 ? -1 : arr[0];
this.compactionVersion = arr == null || arr.length != 2 ? -1 : arr[1];
}
/**
* @return a long array whose length is 2, the first long value is tsfile version, second long
* value is compaction version, high 32 bit is in-space compaction count, low 32 bit is
* cross-space compaction count
*/
private static long[] splitAndGetVersionArray(String tsFileName) {
String[] names = tsFileName.split(FILE_NAME_SEPARATOR);
long[] versionArray = new long[2];
if (names.length != 4) {
// ignore, load will get in here
return versionArray;
}
versionArray[0] = Long.parseLong(names[1]);
int dotIndex = names[3].indexOf(".");
versionArray[1] =
(Long.parseLong(names[2]) << 32) | Long.parseLong(names[3].substring(0, dotIndex));
return versionArray;
}
}