This is an automated email from the ASF dual-hosted git repository.

xuekaifeng pushed a commit to branch xkf_id_table
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 9c7fff6e67c73914e13f466f4c4eea4fb689c49e
Author: 151250176 <[email protected]>
AuthorDate: Mon Dec 6 10:00:23 2021 +0800

    init framework
---
 .../db/metadata/id_table/DiskSchemaManager.java    | 40 +++++++++++
 .../iotdb/db/metadata/id_table/IDManager.java      | 66 +++++++++++++++++
 .../iotdb/db/metadata/id_table/IDManagerImpl.java  | 83 ++++++++++++++++++++++
 .../apache/iotdb/db/metadata/id_table/IDTable.java | 66 +++++++++++++++++
 .../db/metadata/id_table/entry/DeviceEntry.java    | 31 ++++++++
 .../metadata/id_table/entry/DiskSchemaEntry.java   | 35 +++++++++
 .../db/metadata/id_table/entry/IDeviceID.java      | 22 ++++++
 .../db/metadata/id_table/entry/PlainDeviceID.java  | 48 +++++++++++++
 .../db/metadata/id_table/entry/SHA256DeviceID.java | 44 ++++++++++++
 .../db/metadata/id_table/entry/SchemaEntry.java    | 44 ++++++++++++
 .../db/metadata/id_table/entry/TimeseriesID.java   | 25 +++++++
 11 files changed, 504 insertions(+)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/DiskSchemaManager.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/DiskSchemaManager.java
new file mode 100644
index 0000000..9998e75
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/DiskSchemaManager.java
@@ -0,0 +1,40 @@
+/*
+ * 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.metadata.id_table;
+
+import org.apache.iotdb.db.metadata.id_table.entry.DiskSchemaEntry;
+
+public interface DiskSchemaManager {
+
+  /**
+   * serialize a disk schema entry
+   *
+   * @param diskSchemaEntry disk schema entry
+   * @return disk position of that entry
+   */
+  public long serialize(DiskSchemaEntry diskSchemaEntry);
+
+  /**
+   * deserialize a disk schema entry
+   *
+   * @param pos disk position
+   * @return disk schema entry
+   */
+  public DiskSchemaEntry deserialize(long pos);
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDManager.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDManager.java
new file mode 100644
index 0000000..3bef50a
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDManager.java
@@ -0,0 +1,66 @@
+/*
+ * 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.metadata.id_table;
+
+import com.sun.tools.javac.util.Pair;
+import org.apache.iotdb.db.metadata.id_table.entry.TimeseriesID;
+
+public interface IDManager {
+
+  /**
+   * check whether a time series is exist if exist, check the type consistency 
if not exist, call
+   * MManager to create it
+   *
+   * @param seriesKey full path of the time series
+   * @return timeseries ID of this time series
+   */
+  public TimeseriesID checkOrCreateIfNotExist(String seriesKey);
+
+  /**
+   * upatde latest flushed time of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @param flushedTime latest flushed time
+   */
+  public void updateLatestFlushedTime(TimeseriesID timeseriesID, long 
flushedTime);
+
+  /**
+   * upatde latest flushed time of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @return latest flushed time of one timeseries
+   */
+  public long getLatestFlushedTime(TimeseriesID timeseriesID);
+
+  /**
+   * get latest time value pair of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @return latest time value pair of one timeseries
+   */
+  public Pair<Long, Object> getLastTimeValuePair(TimeseriesID timeseriesID);
+
+  /**
+   * update latest time value pair of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @param lastTimeValue latest time value pair of one timeseries
+   */
+  public void updateLastTimeValuePair(TimeseriesID timeseriesID, Pair<Long, 
Object> lastTimeValue);
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDManagerImpl.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDManagerImpl.java
new file mode 100644
index 0000000..68b537e
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDManagerImpl.java
@@ -0,0 +1,83 @@
+/*
+ * 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.metadata.id_table;
+
+import com.sun.tools.javac.util.Pair;
+import java.util.Map;
+import org.apache.iotdb.db.metadata.id_table.entry.TimeseriesID;
+
+public class IDManagerImpl implements IDManager {
+
+  /** storage group name -> ID table */
+  private Map<String, IDTable> storageGroupIDTableMap;
+
+  /**
+   * check whether a time series is exist if exist, check the type consistency 
if not exist, call
+   * MManager to create it
+   *
+   * @param seriesKey full path of the time series
+   * @return timeseries ID of this time series
+   */
+  @Override
+  public TimeseriesID checkOrCreateIfNotExist(String seriesKey) {
+    return null;
+  }
+
+  /**
+   * upatde latest flushed time of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @param flushedTime latest flushed time
+   */
+  @Override
+  public void updateLatestFlushedTime(TimeseriesID timeseriesID, long 
flushedTime) {}
+
+  /**
+   * upatde latest flushed time of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @return latest flushed time of one timeseries
+   */
+  @Override
+  public long getLatestFlushedTime(TimeseriesID timeseriesID) {
+    return 0;
+  }
+
+  /**
+   * get latest time value pair of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @return latest time value pair of one timeseries
+   */
+  @Override
+  public Pair<Long, Object> getLastTimeValuePair(TimeseriesID timeseriesID) {
+    return null;
+  }
+
+  /**
+   * update latest time value pair of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @param lastTimeValue latest time value pair of one timeseries
+   */
+  @Override
+  public void updateLastTimeValuePair(
+      TimeseriesID timeseriesID, Pair<Long, Object> lastTimeValue) {}
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java
new file mode 100644
index 0000000..60ecf30
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/IDTable.java
@@ -0,0 +1,66 @@
+/*
+ * 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.metadata.id_table;
+
+import java.util.Map;
+import org.apache.iotdb.db.metadata.id_table.entry.DeviceEntry;
+import org.apache.iotdb.db.metadata.id_table.entry.IDeviceID;
+import org.apache.iotdb.db.metadata.id_table.entry.TimeseriesID;
+
+public class IDTable {
+
+  /**
+   * 256 hashmap for avoiding rehash performance issue and lock competition 
device ID ->
+   * (measurement name -> schema entry)
+   */
+  private Map<IDeviceID, DeviceEntry>[] idTables;
+
+  /** disk schema manager to manage disk schema entry */
+  private DiskSchemaManager diskSchemaManager;
+
+  /**
+   * check whether a time series is exist if exist, check the type consistency 
if not exist, call
+   * MManager to create it
+   *
+   * @param timeseriesID ID of the time series
+   * @return type consistency
+   */
+  public boolean checkOrCreateIfNotExist(TimeseriesID timeseriesID) {
+    return false;
+  }
+
+  /**
+   * upatde latest flushed time of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @param flushedTime latest flushed time
+   */
+  public void updateLatestFlushedTime(TimeseriesID timeseriesID, long 
flushedTime) {}
+
+  /**
+   * upatde latest flushed time of one timeseries
+   *
+   * @param timeseriesID timeseries id
+   * @return latest flushed time of one timeseries
+   */
+  public long getLatestFlushedTime(TimeseriesID timeseriesID) {
+    return 0;
+  }
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceEntry.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceEntry.java
new file mode 100644
index 0000000..127581a
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DeviceEntry.java
@@ -0,0 +1,31 @@
+/*
+ * 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.metadata.id_table.entry;
+
+import java.util.Map;
+
+public class DeviceEntry {
+
+  /** for device ID reuse in memtable */
+  IDeviceID deviceID;
+
+  /** measurement schema map */
+  Map<String, SchemaEntry> measurementMap;
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DiskSchemaEntry.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DiskSchemaEntry.java
new file mode 100644
index 0000000..702586b
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/DiskSchemaEntry.java
@@ -0,0 +1,35 @@
+/*
+ * 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.metadata.id_table.entry;
+
+public class DiskSchemaEntry {
+
+  private byte[] deviceID;
+
+  String seriesKey;
+
+  String measurementName;
+
+  byte type;
+
+  byte encoding;
+
+  byte compressor;
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/IDeviceID.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/IDeviceID.java
new file mode 100644
index 0000000..1bfc4d6
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/IDeviceID.java
@@ -0,0 +1,22 @@
+/*
+ * 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.metadata.id_table.entry;
+
+public interface IDeviceID {}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/PlainDeviceID.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/PlainDeviceID.java
new file mode 100644
index 0000000..d1572e6
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/PlainDeviceID.java
@@ -0,0 +1,48 @@
+/*
+ * 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.metadata.id_table.entry;
+
+import java.util.Objects;
+
+/** Using device id path as id */
+public class PlainDeviceID implements IDeviceID {
+  String deviceID;
+
+  public PlainDeviceID(String deviceID) {
+    this.deviceID = deviceID;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof PlainDeviceID)) {
+      return false;
+    }
+    PlainDeviceID that = (PlainDeviceID) o;
+    return Objects.equals(deviceID, that.deviceID);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(deviceID);
+  }
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/SHA256DeviceID.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/SHA256DeviceID.java
new file mode 100644
index 0000000..46362d7
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/SHA256DeviceID.java
@@ -0,0 +1,44 @@
+/*
+ * 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.metadata.id_table.entry;
+
+/** Using sha 256 hash value of device path as device ID */
+public class SHA256DeviceID implements IDeviceID {
+  long l1;
+  long l2;
+  long l3;
+  long l4;
+
+  /** The probability that each bit of sha 256 is 0 or 1 is equal */
+  public int hashCode() {
+    return (int) l1;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof SHA256DeviceID)) {
+      return false;
+    }
+    SHA256DeviceID that = (SHA256DeviceID) o;
+    return l1 == that.l1 && l2 == that.l2 && l3 == that.l3 && l4 == that.l4;
+  }
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/SchemaEntry.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/SchemaEntry.java
new file mode 100644
index 0000000..f635afe
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/SchemaEntry.java
@@ -0,0 +1,44 @@
+/*
+ * 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.metadata.id_table.entry;
+
+import java.io.Serializable;
+
+public class SchemaEntry implements Serializable {
+
+  /*    1 byte of type      */
+  /*   1 byte of encoding   */
+  /*  1 byte of compressor  */
+  /* 5 byte of disk pointer */
+  long schema;
+
+  long lastTime;
+
+  Object lastValue;
+
+  long flushTime;
+
+  public SchemaEntry(long schema, long lastTime, Object lastValue, long 
flushTime) {
+    this.schema = schema;
+    this.lastTime = lastTime;
+    this.lastValue = lastValue;
+    this.flushTime = flushTime;
+  }
+}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/TimeseriesID.java
 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/TimeseriesID.java
new file mode 100644
index 0000000..ed2386a
--- /dev/null
+++ 
b/server/src/main/java/org/apache/iotdb/db/metadata/id_table/entry/TimeseriesID.java
@@ -0,0 +1,25 @@
+/*
+ * 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.metadata.id_table.entry;
+
+public class TimeseriesID {
+  private IDeviceID deviceID;
+
+  private String measurement;
+}

Reply via email to