namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

check point



古川です。

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