[Groonga-commit] groonga/groonga [master] Enhanced grn_ii_buffer_check().

Back to archive index

null+****@clear***** null+****@clear*****
2010年 7月 14日 (水) 11:59:14 JST


Daijiro MORI	2010-07-14 02:59:14 +0000 (Wed, 14 Jul 2010)

  New Revision: 7fea69b0c9cb8964c162bdbae356a3b40cfb8c18

  Log:
    Enhanced grn_ii_buffer_check().

  Modified files:
    lib/ii.c

  Modified: lib/ii.c (+22 -5)
===================================================================
--- lib/ii.c    2010-07-13 09:52:23 +0000 (5c31b0e)
+++ lib/ii.c    2010-07-14 02:59:14 +0000 (6647902)
@@ -2940,7 +2940,8 @@ grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg)
   grn_io_win sw;
   buffer *sb;
   uint8_t *sc = NULL;
-  uint32_t pseg, scn, nerrors = 0, nterm_with_chunk = 0;
+  uint32_t pseg, scn, nterms_with_corrupt_chunk = 0, nterm_with_chunk = 0;
+  uint32_t ndeleted_terms_with_value = 0;
   buffer_term *bt;
   uint8_t *sbp = NULL;
   datavec rdv[MAX_N_ELEMENTS + 1];
@@ -2979,6 +2980,7 @@ grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg)
   GRN_OUTPUT_ARRAY_OPEN("TERMS", sb->header.nterms);
 
   for (bt = sb->terms, n = sb->header.nterms; n; n--, bt++) {
+    grn_id tid;
     char key[GRN_TABLE_MAX_KEY_SIZE];
     int key_size;
     uint16_t nextb;
@@ -2992,11 +2994,20 @@ grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg)
       nterms_void++;
       continue;
     }
+    GRN_OUTPUT_ARRAY_OPEN("TERM", -1);
     key_size = grn_table_get_key(ctx, ii->lexicon, bt->tid, key, GRN_TABLE_MAX_KEY_SIZE);
+    tid = grn_table_get(ctx, ii->lexicon, key, key_size);
     GRN_OUTPUT_STR(key, key_size);
+    GRN_OUTPUT_INT64(bt->tid);
+    GRN_OUTPUT_INT64(tid);
     nextb = bt->pos_in_buffer;
     size_in_buffer += bt->size_in_buffer;
+    if (tid != bt->tid && (bt->size_in_buffer || bt->size_in_chunk)) {
+      ndeleted_terms_with_value++;
+    }
     GETNEXTB();
+    GRN_OUTPUT_INT64(bt->size_in_buffer);
+    GRN_OUTPUT_INT64(bt->size_in_chunk);
     if (sc && bt->size_in_chunk) {
       uint8_t *scp = sc + bt->pos_in_chunk;
       uint8_t *sce = scp + bt->size_in_chunk;
@@ -3020,23 +3031,25 @@ grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg)
         {
           int j = 0;
           sdf = rdv[j].data_size;
+          GRN_OUTPUT_INT64(sdf);
           srp = rdv[j++].data;
           if ((ii->header->flags & GRN_OBJ_WITH_SECTION)) { ssp = rdv[j++].data; }
           if (sdf != rdv[j].data_size) {
-            nerrors++;
+            nterms_with_corrupt_chunk++;
           }
           stp = rdv[j++].data;
           if ((ii->header->flags & GRN_OBJ_WITH_WEIGHT)) { sop = rdv[j++].data; }
+          GRN_OUTPUT_INT64(rdv[j].data_size);
           snn = rdv[j].data_size;
           snp = rdv[j].data;
         }
         nterm_with_chunk++;
       }
     }
+    GRN_OUTPUT_ARRAY_CLOSE();
     if (cinfo) { GRN_FREE(cinfo); }
   }
   GRN_OUTPUT_ARRAY_CLOSE();
-
   GRN_OUTPUT_CSTR("buffer free");
   GRN_OUTPUT_INT64(sb->header.buffer_free);
   GRN_OUTPUT_CSTR("size in buffer");
@@ -3049,9 +3062,13 @@ grn_ii_buffer_check(grn_ctx *ctx, grn_ii *ii, uint32_t seg)
   }
   GRN_OUTPUT_CSTR("nterms with chunk");
   GRN_OUTPUT_INT64(nterm_with_chunk);
-  if (nerrors) {
+  if (nterms_with_corrupt_chunk) {
     GRN_OUTPUT_CSTR("nterms with corrupt chunk");
-    GRN_OUTPUT_INT64(nerrors);
+    GRN_OUTPUT_INT64(nterms_with_corrupt_chunk);
+  }
+  if (ndeleted_terms_with_value) {
+    GRN_OUTPUT_CSTR("number of deleted terms with value");
+    GRN_OUTPUT_INT64(ndeleted_terms_with_value);
   }
   GRN_OUTPUT_MAP_CLOSE();
   datavec_fin(ctx, rdv);




Groonga-commit メーリングリストの案内
Back to archive index