namazu-ml(avocado)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
check point
- From: Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx>
- Date: Thu, 26 Nov 1998 20:13:28 +0900
- X-ml-name: namazu
- X-mail-count: 01671
古川です。
mknmz -f 500
とすると、500 個読んだところで終了処理に入り、自分自身を exec し直すよ
うにしてみました。
このパッチについて。
(1)
やっていることは「『"Out of memory" 対策として、ファイル数を 500 個く
らいづつに分けて mknmz を行なう』を自動化した」程度のものですが、みか
け上、いつぞや話が出ていた「チェックポイント機能」に近いものになると思
います。
limit で datasize を下げて、いっぺんにインデックスを作れないケースで、
この方法にて成功したことを確認しました。
# こういう確認方法でいいのかどうかは、分かりません
(2)
ファイルの個数ではなくて、サイズを基準にするように変更することも可能だ
と思います。
(3)
exec し直す場合には、NMZ.w を作る必要がない (最後の一回でやればよい)
ので、その処理をしないようにしています。
例えば、 -f 100 として、ファイルの数が 101 個だった場合、
1 回目 … 100 個のファイルを処理し、NMZ.w を作らない
2 回目 … 1 個のファイルを処理し、NMZ.w を作る
(4)
exec($^X, $0, @ARGV) という形で exec しているので、起動のしかたによっ
ては、これではまずい場合もあるかもしれません。
# 自分自身を起動しなおす、一般的な方法を知らないものですから。
(5)
空いているオプション文字を探すのは、大変でした。とりあえず -f を使って
みました。
(6)
このパッチを作っていて思ったのですが…
$SYSTEM が "MSWIN32" or "os2" のときにだけ呼ばれる shiftjis_to_eucjp
というサブルーチンがありますが、ここで見ている、@ktoe が初期化されるの
は全てが終わった後ってことはないでしょうか?
------------------------------ ここから ------------------------------
*** mknmz.orig Fri Nov 20 12:04:27 1998
--- mknmz Thu Nov 26 12:20:29 1998
***************
*** 58,63 ****
--- 58,65 ----
$VERSION, $WAKATI, $LANGUAGE, $WAKATITMP, $WORDLIST,
$WORDLIST_, $SEARCH_FIELD, $FIELDINFO, $WORD_LENG_MAX, $DATEINDEX);
+ my ($MaxFile, $RedoFlag, @OrigARGV);
+
##
## ソフトウェア情報
##
***************
*** 356,361 ****
--- 358,368 ----
$LastKeyN = 0;
$all_file_size = 0;
foreach $cfile (@FList) {
+ if ($RedoFlag){
+ $cfile = "";
+ next;
+ }
+
# 各ファイルの処理を行い、エラーなら @FList の登録を削除すべし
$cfile_size = namazu_core($cfile, $file_count, $file_segment);
unless ($cfile_size) {
***************
*** 364,369 ****
--- 371,382 ----
}
$all_file_size += $cfile_size;
$file_count++;
+
+ if ($file_count == $MaxFile){
+ $RedoFlag = 1;
+ $NoRegexpIndexOpt = 1;
+ }
+
if ($all_file_size > $ON_MEMORY_MAX * $swap) {
if ($tmp = put_index()) {
$key_count = $tmp;
***************
*** 383,388 ****
--- 396,402 ----
put_phrase_hash()
unless $NoPhraseIndexOpt;
remain_process($all_file_size, $file_count, $key_count, $start_time);
+ exec($^X, $0, @OrigARGV) if $RedoFlag;
}
sub dprint (@) {
***************
*** 1318,1323 ****
--- 1332,1338 ----
$output_dir = "";
usage() if (@ARGV == 0);
+ @OrigARGV = @ARGV;
while (defined($ARGV[0]) && $ARGV[0] =~ /^-/) {
$TARGET_FILE = ".*" if $ARGV[0] =~ /a/;
$WAKATI = $KAKASI, $MorphOpt = 0 if $ARGV[0] =~ /k/;
***************
*** 1369,1374 ****
--- 1384,1393 ----
print "Loaded: $ARGV[0]\n" unless $QuietOpt;
$target_loaded = 1;
$target_dir = cwd();
+ } elsif ($ARGV[0] =~ /f$/){
+ shift @ARGV;
+ $MaxFile = 0 + $ARGV[0];
+ print "MaxFile: $MaxFile\n";
}
shift @ARGV;
}
------------------------------ ここまで ------------------------------
--
ヤマハ(株)ピアノプレーヤ設計課
古川 令
furukawa@xxxxxxxxxxxxxxxx