[Groonga-mysql-commit] mroonga/mroonga [master] [storage] add groonga_dry_write variable to control write data.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 10月 13日 (木) 16:48:33 JST


Kouhei Sutou	2011-10-13 07:48:33 +0000 (Thu, 13 Oct 2011)

  New Revision: bd6f20c601c29240fff9ab8336b6892f752ea566

  Log:
    [storage] add groonga_dry_write variable to control write data.

  Added files:
    test/sql/groonga_storage/r/dry_write_delete.result
    test/sql/groonga_storage/r/dry_write_insert.result
    test/sql/groonga_storage/r/dry_write_update.result
    test/sql/groonga_storage/t/dry_write_delete.test
    test/sql/groonga_storage/t/dry_write_insert.test
    test/sql/groonga_storage/t/dry_write_update.test
  Modified files:
    ha_mroonga.cc

  Modified: ha_mroonga.cc (+45 -1)
===================================================================
--- ha_mroonga.cc    2011-10-12 00:15:44 +0000 (68dbeef)
+++ ha_mroonga.cc    2011-10-13 07:48:33 +0000 (0bcab22)
@@ -128,6 +128,8 @@ FILE *mrn_logfile = NULL;
 static bool mrn_logfile_opened = false;
 grn_log_level mrn_log_level_default = GRN_LOG_DEFAULT_LEVEL;
 ulong mrn_log_level = (ulong) mrn_log_level_default;
+static char mrn_dry_write_default = false;
+static char mrn_dry_write = mrn_dry_write_default;
 char mrn_default_parser_name[MRN_MAX_KEY_SIZE];
 char *mrn_default_parser;
 
@@ -259,13 +261,38 @@ static MYSQL_SYSVAR_STR(default_parser, mrn_default_parser,
                         mrn_default_parser_update,
                         MRN_PARSER_DEFAULT);
 
+static void mrn_dry_write_update(THD *thd, struct st_mysql_sys_var *var,
+                                 void *var_ptr, const void *save)
+{
+  MRN_DBUG_ENTER_FUNCTION();
+  bool new_value = *(bool *)save;
+  bool old_value = mrn_dry_write;
+  mrn_dry_write = new_value;
+  grn_ctx ctx;
+  grn_ctx_init(&ctx, 0);
+  GRN_LOG(&ctx, GRN_LOG_NOTICE, "dry write changed from '%s' to '%s'",
+          old_value ? "true" : "false",
+          new_value ? "true" : "false");
+  grn_ctx_fin(&ctx);
+  DBUG_VOID_RETURN;
+}
+
+  static MYSQL_SYSVAR_BOOL(dry_write, mrn_dry_write,
+                         PLUGIN_VAR_RQCMDARG,
+                         "If dry_write is true, any write operations are ignored.",
+                         NULL,
+                         mrn_dry_write_update,
+                         mrn_dry_write_default);
+
 struct st_mysql_sys_var *mrn_system_variables[] =
 {
   MYSQL_SYSVAR(log_level),
   MYSQL_SYSVAR(default_parser),
+  MYSQL_SYSVAR(dry_write),
   NULL
 };
 
+
 /* UDF - last_insert_grn_id() */
 my_bool last_insert_grn_id_init(UDF_INIT *initid, UDF_ARGS *args, char *message)
 {
@@ -3275,10 +3302,16 @@ err:
 int ha_mroonga::storage_write_row(uchar *buf)
 {
   MRN_DBUG_ENTER_METHOD();
+  int error = 0;
+
+  if (mrn_dry_write) {
+    DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+    DBUG_RETURN(error);
+  }
+
   THD *thd = ha_thd();
   int i, col_size;
   int n_columns = table->s->fields;
-  int error = 0;
 
   if (table->next_number_field && buf == table->record[0])
   {
@@ -3657,6 +3690,11 @@ int ha_mroonga::storage_update_row(const uchar *old_data, uchar *new_data)
   MRN_DBUG_ENTER_METHOD();
   int error = 0;
 
+  if (mrn_dry_write) {
+    DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+    DBUG_RETURN(error);
+  }
+
   grn_obj colbuf;
   int i, col_size;
   int n_columns = table->s->fields;
@@ -3947,6 +3985,12 @@ int ha_mroonga::storage_delete_row(const uchar *buf)
 {
   MRN_DBUG_ENTER_METHOD();
   int error = 0;
+
+  if (mrn_dry_write) {
+    DBUG_PRINT("info", ("mroonga: dry write: ha_mroonga::%s", __FUNCTION__));
+    DBUG_RETURN(error);
+  }
+
   grn_table_delete_by_id(ctx, grn_table, record_id);
   if (ctx->rc) {
     my_message(ER_ERROR_ON_WRITE, ctx->errbuf, MYF(0));

  Added: test/sql/groonga_storage/r/dry_write_delete.result (+28 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/groonga_storage/r/dry_write_delete.result    2011-10-13 07:48:33 +0000 (38824ac)
@@ -0,0 +1,28 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table	Create Table
+diaries	CREATE TABLE `diaries` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `body` text,
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `body_index` (`body`)
+) ENGINE=groonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+id	body
+1	will start groonga!
+set global groonga_dry_write=true;
+delete from diaries where id = 1;
+select * from diaries;
+id	body
+1	will start groonga!
+set global groonga_dry_write=false;
+delete from diaries where id = 1;
+select * from diaries;
+id	body
+drop table diaries;

  Added: test/sql/groonga_storage/r/dry_write_insert.result (+30 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/groonga_storage/r/dry_write_insert.result    2011-10-13 07:48:33 +0000 (b0ba24f)
@@ -0,0 +1,30 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table	Create Table
+diaries	CREATE TABLE `diaries` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `body` text,
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `body_index` (`body`)
+) ENGINE=groonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+id	body
+1	will start groonga!
+set global groonga_dry_write=true;
+insert into diaries (body) values ("starting groonga...");
+select * from diaries;
+id	body
+1	will start groonga!
+set global groonga_dry_write=false;
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+id	body
+1	will start groonga!
+2	started groonga.
+drop table diaries;

  Added: test/sql/groonga_storage/r/dry_write_update.result (+26 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/groonga_storage/r/dry_write_update.result    2011-10-13 07:48:33 +0000 (4f6881a)
@@ -0,0 +1,26 @@
+drop table if exists diaries;
+create table diaries (
+id int primary key auto_increment,
+body text,
+fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+Table	Create Table
+diaries	CREATE TABLE `diaries` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `body` text,
+  PRIMARY KEY (`id`),
+  FULLTEXT KEY `body_index` (`body`)
+) ENGINE=groonga DEFAULT CHARSET=utf8
+insert into diaries (body) values ("will start groonga!");
+set global groonga_dry_write=true;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+id	body
+1	will start groonga!
+set global groonga_dry_write=false;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+id	body
+1	starting groonga...
+drop table diaries;

  Added: test/sql/groonga_storage/t/dry_write_delete.test (+39 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/groonga_storage/t/dry_write_delete.test    2011-10-13 07:48:33 +0000 (9f45bd8)
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou****@clear*****>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+--source suite/groonga_include/groonga_init.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+  id int primary key auto_increment,
+  body text,
+  fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+set global groonga_dry_write=true;
+delete from diaries where id = 1;
+select * from diaries;
+set global groonga_dry_write=false;
+delete from diaries where id = 1;
+select * from diaries;
+drop table diaries;
+
+--source suite/groonga_include/groonga_deinit.inc

  Added: test/sql/groonga_storage/t/dry_write_insert.test (+39 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/groonga_storage/t/dry_write_insert.test    2011-10-13 07:48:33 +0000 (e17d590)
@@ -0,0 +1,39 @@
+# Copyright(C) 2011 Kouhei Sutou <kou****@clear*****>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+--source suite/groonga_include/groonga_init.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+  id int primary key auto_increment,
+  body text,
+  fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+insert into diaries (body) values ("will start groonga!");
+select * from diaries;
+set global groonga_dry_write=true;
+insert into diaries (body) values ("starting groonga...");
+select * from diaries;
+set global groonga_dry_write=false;
+insert into diaries (body) values ("started groonga.");
+select * from diaries;
+drop table diaries;
+
+--source suite/groonga_include/groonga_deinit.inc

  Added: test/sql/groonga_storage/t/dry_write_update.test (+38 -0) 100644
===================================================================
--- /dev/null
+++ test/sql/groonga_storage/t/dry_write_update.test    2011-10-13 07:48:33 +0000 (7a1a6a2)
@@ -0,0 +1,38 @@
+# Copyright(C) 2011 Kouhei Sutou <kou****@clear*****>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+--source suite/groonga_include/groonga_init.inc
+
+--disable_warnings
+drop table if exists diaries;
+--enable_warnings
+
+create table diaries (
+  id int primary key auto_increment,
+  body text,
+  fulltext index body_index (body)
+) default charset utf8;
+show create table diaries;
+insert into diaries (body) values ("will start groonga!");
+set global groonga_dry_write=true;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+set global groonga_dry_write=false;
+update diaries set body = "starting groonga..." where id = 1;
+select * from diaries;
+drop table diaries;
+
+--source suite/groonga_include/groonga_deinit.inc




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