MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:kpettersson Date:March 18 2008 11:54am
Subject:bk commit into 5.0 tree (thek:1.2594) BUG#30087
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of thek.  When thek does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2008-03-18 12:54:46+01:00, thek@adventure.(none) +5 -0
  Bug#30087 Set query_cache_size, if the value is too small, get a unclear warning
  
  This bugs clarifies a warning message issued when the query cache data
  size becomes smaller than the minium allowed size.

  mysql-test/r/query_cache.result@stripped, 2008-03-18 12:54:45+01:00, thek@adventure.(none) +4 -4
    New warning message when a too small value has been set for query cache
    size.

  sql/set_var.cc@stripped, 2008-03-18 12:54:45+01:00, thek@adventure.(none) +1 -6
    To avoid poluting the QC API the warning messages are moved into the 
    QC module.

  sql/share/errmsg.txt@stripped, 2008-03-18 12:54:45+01:00, thek@adventure.(none) +8 -7
    Changed error message so that minimal cache size always is hinted.

  sql/sql_cache.cc@stripped, 2008-03-18 12:54:45+01:00, thek@adventure.(none) +29 -0
    Modified the warning message so that the minimal cache size always is
    hinted.
    
    Added interface method Query_cache::get_minimal_size_limit().

  sql/sql_cache.h@stripped, 2008-03-18 12:54:45+01:00, thek@adventure.(none) +2 -0
    Modified the warning message so that the minimal cache size always is
    hinted.
    
    Added interface method Query_cache::get_minimal_size_limit().

diff -Nrup a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
--- a/mysql-test/r/query_cache.result	2007-08-21 17:47:03 +02:00
+++ b/mysql-test/r/query_cache.result	2008-03-18 12:54:45 +01:00
@@ -564,7 +564,7 @@ select * from t1;
 a
 set GLOBAL query_cache_size=1024;
 Warnings:
-Warning	1282	Query cache failed to set size 1024; new query cache size is 0
+Warning	1282	Query cache failed to set size 1024 (minimal value: 41297); new query cache size is 0
 show global variables like "query_cache_size";
 Variable_name	Value
 query_cache_size	0
@@ -572,7 +572,7 @@ select * from t1;
 a
 set GLOBAL query_cache_size=10240;
 Warnings:
-Warning	1282	Query cache failed to set size 10240; new query cache size is 0
+Warning	1282	Query cache failed to set size 10240 (minimal value: 41297); new query cache size is 0
 show global variables like "query_cache_size";
 Variable_name	Value
 query_cache_size	0
@@ -580,7 +580,7 @@ select * from t1;
 a
 set GLOBAL query_cache_size=20480;
 Warnings:
-Warning	1282	Query cache failed to set size 20480; new query cache size is 0
+Warning	1282	Query cache failed to set size 20480 (minimal value: 41297); new query cache size is 0
 show global variables like "query_cache_size";
 Variable_name	Value
 query_cache_size	0
@@ -588,7 +588,7 @@ select * from t1;
 a
 set GLOBAL query_cache_size=40960;
 Warnings:
-Warning	1282	Query cache failed to set size 40960; new query cache size is 0
+Warning	1282	Query cache failed to set size 40960 (minimal value: 41297); new query cache size is 0
 show global variables like "query_cache_size";
 Variable_name	Value
 query_cache_size	0
diff -Nrup a/sql/set_var.cc b/sql/set_var.cc
--- a/sql/set_var.cc	2008-01-10 12:01:24 +01:00
+++ b/sql/set_var.cc	2008-03-18 12:54:45 +01:00
@@ -1343,12 +1343,7 @@ static void fix_net_retry_count(THD *thd
 static void fix_query_cache_size(THD *thd, enum_var_type type)
 {
 #ifdef HAVE_QUERY_CACHE
-  ulong requested= query_cache_size;
-  query_cache.resize(query_cache_size);
-  if (requested != query_cache_size)
-    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
-			ER_WARN_QC_RESIZE, ER(ER_WARN_QC_RESIZE),
-			requested, query_cache_size);
+  query_cache_size= query_cache.resize(query_cache_size);
 #endif
 }
 
diff -Nrup a/sql/share/errmsg.txt b/sql/share/errmsg.txt
--- a/sql/share/errmsg.txt	2007-10-23 13:15:27 +02:00
+++ b/sql/share/errmsg.txt	2008-03-18 12:54:45 +01:00
@@ -4992,13 +4992,13 @@ ER_WRONG_NAME_FOR_CATALOG 42000 
 	spa "Nombre de catalog incorrecto '%-.100s'"
 	swe "Felaktigt katalog namn '%-.100s'"
 ER_WARN_QC_RESIZE  
-	eng "Query cache failed to set size %lu; new query cache size is %lu"
+	eng "Query cache failed to set size %lu (minimal value: %lu); new query cache size is %lu"
 ER_BAD_FT_COLUMN  
 	eng "Column '%-.64s' cannot be part of FULLTEXT index"
 	ger "Feld '%-.64s' kann nicht Teil eines FULLTEXT-Index sein"
@@ -5641,3 +5641,4 @@ ER_NAME_BECOMES_EMPTY
         eng "Name '%-.64s' has become ''"
 ER_AMBIGUOUS_FIELD_TERM
 	eng "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY"
+
diff -Nrup a/sql/sql_cache.cc b/sql/sql_cache.cc
--- a/sql/sql_cache.cc	2007-10-01 12:44:28 +02:00
+++ b/sql/sql_cache.cc	2008-03-18 12:54:45 +01:00
@@ -816,6 +816,16 @@ ulong Query_cache::resize(ulong query_ca
   free_cache();
   query_cache_size= query_cache_size_arg;
   ::query_cache_size= init_cache();
+
+  if (::query_cache_size != query_cache_size_arg)
+  {
+    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                        ER_WARN_QC_RESIZE, ER(ER_WARN_QC_RESIZE),
+                        query_cache_size_arg,
+                        get_minimal_size_limit(),
+                        ::query_cache_size);
+  }
+
   STRUCT_UNLOCK(&structure_guard_mutex);
   DBUG_RETURN(::query_cache_size);
 }
@@ -1613,6 +1623,25 @@ void Query_cache::init()
   DBUG_VOID_RETURN;
 }
 
+
+/**
+  Return the lowest possible query cache size.
+*/
+
+ulong Query_cache::get_minimal_size_limit()
+{
+  ulong approx_additional_data_size= (sizeof(Query_cache) +
+                                      sizeof(gptr)*(def_query_hash_size+
+                                      def_table_hash_size));
+
+  ulong data_size= (min_allocation_unit << QUERY_CACHE_MEM_BIN_STEP_PWR2 <<
+                    QUERY_CACHE_MEM_BIN_FIRST_STEP_PWR2) +
+                    ALIGN_SIZE(1) - 1 +
+                    (1 << QUERY_CACHE_MEM_BIN_STEP_PWR2) - 1 +
+                    (1 << QUERY_CACHE_MEM_BIN_FIRST_STEP_PWR2) - 1;
+
+  return(data_size + approx_additional_data_size);
+}
 
 ulong Query_cache::init_cache()
 {
diff -Nrup a/sql/sql_cache.h b/sql/sql_cache.h
--- a/sql/sql_cache.h	2007-08-17 16:55:19 +02:00
+++ b/sql/sql_cache.h	2008-03-18 12:54:45 +01:00
@@ -245,6 +245,8 @@ private:
 
   void free_query_internal(Query_cache_block *point);
 
+  ulong get_minimal_size_limit();
+
 protected:
   /*
     The following mutex is locked when searching or changing global
Thread
bk commit into 5.0 tree (thek:1.2594) BUG#30087kpettersson18 Mar