-
Notifications
You must be signed in to change notification settings - Fork 13
ストレージ上にのみ存在するファイルの一覧を取得する
kamonohashiの管理データ上は削除されてるが、ストレージ上には実体が残っているファイルを一覧にする方法を説明する。
kamonohashiの不具合により、管理データ上ではファイルが削除されているが、ストレージ上には実体が残っているという事象が発生している。具体的には
- データを削除した場合、そのデータに属するファイルの実体が残る
- 前処理履歴を削除した場合、前処理後データに属するファイルの実体が残る
という事象が発生する。
ノートブック、学習の添付ファイル、学習履歴、推論の添付ファイル、推論履歴の削除ではそのようにはならない。また、データに属するファイルを個別に削除した場合も、そのようにはならない。
この不具合は4.0及び3.2で発生している。3.1では発生していない。修正は4.0.1にて行われた。
この事象によりkamonohashiの管理からファイルが一度外れると、不具合を修正したkamonohashiに更新してもそのファイルはストレージ上に残ったままとなる。そこで、kamonohashi外での作業になるが、その一覧を取得する方法を記述する。
ストレージ上にのみ存在するファイルの一覧を取得する手順の概要は次のとおり
- ストレージ上に実体が存在するファイルの一覧を作成し、作業者のローカルマシンに転送する。
- kamonohashi上に管理データが存在するファイルの一覧を作成し、作業者のローカルマシンに転送する。
- 作業者のローカルマシンにてこれらの差分を計算する。
これで得られた差分が、ストレージ上にのみ存在するファイルの一覧である。
ストレージ上のファイル一覧を取得する手順は次のとおり
sshでminioのサーバにログインし、superuserになる。
kamonohashiのデフォルト構成では、minioの/var/lib/kamonohashi/nfs
にストレージがマウントされている。カスタム構成にしている場合は、mountの実行結果などからストレージのマウントポイントを確認する。
- マウントポイントにcdする
-
find . -type d -path './.*' -prune -o -type f -path '*/Data/*' \! -name dummyFile -print
として、ストレージ上のファイルを検索する。結果は任意のファイルにリダイレクトして保存しておく。 - 検索結果をローカルマシンにsftpなどで転送する
この手順をマウントポイントの数だけ繰り返す。
検索結果は次のような行がファイル数だけ繰り返されている。
./sandbox/Data/af4ac373-f7e3-4cd3-be86-c5c3d90096ce.png
sandboxの部分は、そのファイルが属するテナントを表す。
Dataの部分は、これがkamonohashiのデータに属するファイルであることを示す。
af4ac373-f7e3-4cd3-be86-c5c3d90096ce.pngの部分は、ストレージ上でのファイル名である。
マウントポイント以下にはドットで始まるディレクトリが存在する場合があるが、これはminioの管理ファイルであるためfindの検索外としている。dummyFileという名前のファイルも同様にminioの管理ファイルなので除外している。
Dataの部分は、kamonohashi上での管理種別が異なるもの、例えば学習結果であれば別の名前になる。今回の事象ではkamonohashiのデータのみが対象となるので、検索はパスにDataを含むものに限定している。
kamonohashi管理下にあるファイルの一覧を取得する手順は次の通りである
sshでkubernetesのmasterにログインし、superuserになる。続いてkubectl get pod -n kqi-system
でPostgreSQLのpodを検索する。postgres-というプレフィックスがついているのがPostgreSQLのpodである。このpodにkubectl exec -it {pod名} -n kqi-system -- /bin/bash
として接続する。
PostgreSQLのpodでpsql --username=platypus --password --dbname=platypusdb -t -A -F, -o /backup/kqidata.txt
としてkamonohashiのdbに接続する。-o
は問い合わせ結果の出力先であり、/backup/
ディレクトリの適当なファイルを指定する。
psql上でselect "Tenants"."Name", "DataFiles"."StoredPath" from "DataFiles", "Tenants" where "Tenants"."Id" = "DataFiles"."TenantId";
としてファイル一覧を作成する。作成後、\q
でpsqlを終了する。
sshでkqiサーバにログインし、superuserになる。
PostgreSQLのpodで/backup/
に作成したファイル一覧が、kqiサーバから/var/lib/kamonohashi/postgresql/backup/
にて参照できるはずである。この結果を、sftpなどでローカルマシンに転送する。転送後、その結果ファイルを削除する。
検索結果は次のような行がファイル数だけ繰り返されている。
sandbox,af4ac373-f7e3-4cd3-be86-c5c3d90096ce.png
sandboxの部分は、そのファイルが属するテナントを表す。
af4ac373-f7e3-4cd3-be86-c5c3d90096ce.pngの部分は、ストレージ上でのファイル名として、kamonohashiが認識しているファイル名である。
DataFilesテーブルには、kamonohashiのデータに属するファイルの情報が格納されている。今回の事象ではkamonohashiのデータのみが対象となるので、検索はこのテーブルに限定している。
詳細手順1の結果に存在し、詳細手順2の結果に存在しないファイルが、ストレージ上にのみ存在するファイルとなる。
この差分の計算方法は、作業者に委ねる。ローカルマシン上で適当なプログラムを作成するか、excelなどで処理できるだろう。
差分の利用方法についても、作業者に委ねることにする。minioサーバのストレージマウントポイントからファイルをメンテナンスする、あるいはminioかストレージの管理機能を用いてファイルをメンテナンスすることができるだろう。
なお、ファイルをそのままにしておいても、ストレージの容量を消費する以外の弊害はない。
Contributing to KAMONOHASHI
Project Management
Documentation
Other