Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

        在使用离线整理工具的时候,必须保证IOTDB server停止运行,否则会出错。

3.1 用户使用

3.1.1 运行方法

#Windows
.\settle.bat <目录路径/tsFile路径> <目录路径/tsFile路径> ...

#MacOs or Linux
./settle.sh <目录路径/tsFile路径> <目录路径/tsFile路径> ...

3.1.2 运行示例

>.\settle.bat C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0

````````````````````````
Starting Settling the tsFile
````````````````````````
Totally find 3 tsFiles to be settled, including 0 tsFiles to be recovered.
Start settling for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631261328514-1-0-2.tsFile
Finish settling successfully for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631261328514-1-0-2.tsFile
Start settling for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631274465662-3-0-1.tsFile
Finish settling successfully for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631274465662-3-0-1.tsFile
Start settling for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631433121335-5-0-0.tsFile
Finish settling successfully for tsFile : C:\IOTDB\sourceCode\choubenson\iotdb\data\data\sequence\root.ln\0\0\1631433121335-5-0-0.tsFile
Finish settling all tsFiles successfully!

3.2 相关类

         整理工具类:org.apache.iotdb.db.tools.settle.tsFileAndModSettleTool

四. 在线整理工具

        当用户在IoTDB客户端输入了settle命令后,在线整理工具会在后台注册启动一个整理服务Settle Service,该服务会去寻找指定存储组下的所有tsFile文件,并为每个tsFile开启一个整理线程进行整理。在线整理工具在整理过程中不允许用户对该虚拟存储组下的数据有任何的删除操作,直到整理完毕。当用户在IoTDB客户端输入了settle命令后,在线整理工具会在主线程启动整理服务Settle Service,该服务会去寻找指定存储组下的所有tsFile文件,依次对每个TsFile进行整理。在线整理工具在整理过程中不允许用户对该虚拟存储组下的数据有任何的删除操作,直到整理完毕。

        此模块预留了整理线程的接口供后续为每个TsFile提供一个整理线程在后台执行整理操作,但目前只允许整理线程的串行执行,避免了线程的不安全。

4.1 用户使用

4.1.1 运行方法

IoTDB> Settle <存储组>

4.1.2 运行示例

IoTDB> Settle root.ln;
Msg: The statement is executed successfully.

4.2 整理线程

4.2.1 工作流程

  1. 首先对该旧tsFile文件加读锁,避免在重写的过程中该tsFile被删除,而在删除该tsFile的本地mods文件前允许用户对该tsFile进行查询操作。【该步骤在StorageGroupProcessor类的settle()方法里】

  2. 往整理日志记录标记该文件的状态为1。

  3. 对旧tsFile和其mods文件进行整理并重写到新tsFile文件(此时新tsFile和对应的新.resource文件已经生成并存放在临时目录下,位置为:“旧tsFile所在目录\新tsFile时间分区目录\”)。若该旧tsFile数据都已被删除了,则会直接删除本地tsFile及其.resource文件。注意:在删除tsFile文件的前后会加写锁并释放写锁。【该步骤在tsFileAndModSettleTool类的settleOnetsFileAndMod()方法里】

  4. 往整理日志记录标记该文件的状态为2。

  5. 对旧tsFile文件加写锁,阻塞用户的查询等操作。【该步骤在StorageGroupProcessor类的settletsFileCallBack()方法里】

  6. 删除旧mods文件,然后将新tsFile和对应的新.resource文件移动到正确的目录下(即旧tsFile所在目录),此过程是先删除旧对应旧文件,再把新的移动过去。【该步骤在tsFileRewriteTool类的moveNewtsFile()方法里】

  7. 清空内存中与该tsFile的相关缓存数据,即该被重写的tsFile在内存中涉及到的相关数据都应该被及时更新:

    (1) 需要clear cache (包括chunk cache和timeseriesmetadata cache),防止因为Mods被删除而读出该tsFile已被删除的数据(脏数据)

    (2) 若整理后,此tsFile被删除,则要从StorageGroupProcessor的tsFileManagement里挪去该oldtsFileResource.

    【该步骤在StorageGroupProcessor类的settletsFileCallBack()方法里】

  8. 对该tsFile释放写锁,允许用户对该文件进行查询操作,然后释放读锁,允许该文件被删除。

  9. 往整理日志标记该文件的状态为3,settle结束!

...