[Groonga-mysql-commit] mroonga/mroonga [master] added error handling for ER_CANT_OPEN_FILE.

アーカイブの一覧に戻る

null+****@clear***** null+****@clear*****
2010年 10月 7日 (木) 19:16:24 JST


Tetsuro IKEDA	2010-10-07 10:16:24 +0000 (Thu, 07 Oct 2010)

  New Revision: fa46d5be75f1113f02a855257e71415b76abcb0d

  Log:
    added error handling for ER_CANT_OPEN_FILE.

  Modified files:
    ha_mroonga.cc

  Modified: ha_mroonga.cc (+22 -8)
===================================================================
--- ha_mroonga.cc    2010-10-07 09:32:04 +0000 (a2bcea4)
+++ ha_mroonga.cc    2010-10-07 10:16:24 +0000 (30f98ee)
@@ -676,10 +676,11 @@ int ha_mroonga::create(const char *name, TABLE *table, HA_CREATE_INFO *info)
     } else {
       // opening existing database
       db_obj = grn_db_open(ctx, db_path);
-      if (db_obj == NULL) {
+      if (ctx->rc) {
         GRN_LOG(ctx, GRN_LOG_ERROR, "cannot open database (%s)", db_path);
+        my_message(ER_CANT_OPEN_FILE, "cannot open database file", MYF(0));
         pthread_mutex_unlock(&db_mutex);
-        DBUG_RETURN(-1);
+        DBUG_RETURN(ER_CANT_OPEN_FILE);
       }
     }
     mrn_hash_put(ctx, mrn_hash, db_name, db_obj);
@@ -860,10 +861,10 @@ int ha_mroonga::open(const char *name, int mode, uint test_if_locked)
   // we should not call grn_db_open() very often. so we use cache.
   if (mrn_hash_get(ctx, mrn_hash, db_name, (void**) &(db)) != 0) {
     db = grn_db_open(ctx, db_path);
-    if (db == NULL) {
+    if (ctx->rc) {
       GRN_LOG(ctx, GRN_LOG_ERROR, "cannot open database (%s)", db_path);
       pthread_mutex_unlock(&db_mutex);
-      DBUG_RETURN(-1);
+      DBUG_RETURN(ER_CANT_OPEN_FILE);
     }
     mrn_hash_put(ctx, mrn_hash, db_name, db);
   }
@@ -874,9 +875,9 @@ int ha_mroonga::open(const char *name, int mode, uint test_if_locked)
   char tbl_name[MRN_MAX_PATH_SIZE];
   mrn_table_name_gen(name, tbl_name);
   tbl = grn_ctx_get(ctx, tbl_name, strlen(tbl_name));
-  if (tbl == NULL) {
+  if (ctx->rc) {
     GRN_LOG(ctx, GRN_LOG_ERROR, "cannot open table (%s)", tbl_name);
-    DBUG_RETURN(-1);
+    DBUG_RETURN(ER_CANT_OPEN_FILE);
   }
 
   /* open columns */
@@ -889,11 +890,11 @@ int ha_mroonga::open(const char *name, int mode, uint test_if_locked)
     const char *col_name = field->field_name;
     int col_name_size = strlen(col_name);
     col[i] = grn_obj_column(ctx, tbl, col_name, col_name_size);
-    if (col[i] == NULL) {
+    if (ctx->rc) {
       GRN_LOG(ctx, GRN_LOG_ERROR, "cannot open table(col) %s(%s)",
               tbl_name, col_name);
       grn_obj_unlink(ctx, tbl);
-      DBUG_RETURN(-1);
+      DBUG_RETURN(ER_CANT_OPEN_FILE);
     }
   }
 
@@ -922,12 +923,25 @@ int ha_mroonga::open(const char *name, int mode, uint test_if_locked)
 
     mrn_index_name_gen(tbl_name, i, idx_name);
     idx_tbl[i] = grn_ctx_get(ctx, idx_name, strlen(idx_name));
+    if (ctx->rc) {
+      GRN_LOG(ctx, GRN_LOG_ERROR, "cannot open table(index) %s(%s)",
+              tbl_name, idx_name);
+      grn_obj_unlink(ctx, tbl);
+      DBUG_RETURN(ER_CANT_OPEN_FILE);
+    }
 
     KEY key_info = table->s->key_info[i];
     Field *field = key_info.key_part[0].field;
     const char *col_name = field->field_name;
     int col_name_size = strlen(col_name);
     idx_col[i] = grn_obj_column(ctx, idx_tbl[i], col_name, col_name_size);
+    if (ctx->rc) {
+      GRN_LOG(ctx, GRN_LOG_ERROR, "cannot open index(col) %s(%s)",
+              idx_name, col_name);
+      grn_obj_unlink(ctx, idx_tbl[i]);
+      grn_obj_unlink(ctx, tbl);
+      DBUG_RETURN(ER_CANT_OPEN_FILE);
+    }
   }
   DBUG_RETURN(0);
 }




Groonga-mysql-commit メーリングリストの案内
アーカイブの一覧に戻る