Commit 740eb50f authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into neptunus.homeip.net:/home/msvensson/mysql/mysql-5.0

parents 8daa5188 5301150e
Loading
Loading
Loading
Loading
+87 −87
Original line number Diff line number Diff line
@@ -4841,7 +4841,7 @@ uint ndb_get_commitcount(THD* thd, char* dbname, char* tabname,

  if (ndb_cache_check_time > 0)
  {
    // Use cached commit_count from share
    /* Use cached commit_count from share */
    char name[FN_REFLEN];
    NDB_SHARE *share;
    (void)strxnmov(name, FN_REFLEN,
@@ -4861,7 +4861,7 @@ uint ndb_get_commitcount(THD* thd, char* dbname, char* tabname,
    DBUG_RETURN(0);
  }

  // Get commit_count from NDB
  /* Get commit_count from NDB */
  Ndb *ndb;
  if (!(ndb= check_ndb_in_thd(thd)))
    DBUG_RETURN(1);
@@ -4925,14 +4925,14 @@ ndbcluster_cache_retrieval_allowed(THD* thd,

  if (ndb_get_commitcount(thd, dbname, tabname, &commit_count))
  {
    *engine_data+= 1; // invalidate
    *engine_data+= 1; /* invalidate */
    DBUG_RETURN(FALSE);
  }
  DBUG_PRINT("info", ("*engine_data=%llu, commit_count=%llu",
		      *engine_data, commit_count));
  if (*engine_data != commit_count)
  {
    *engine_data= commit_count; // invalidate
    *engine_data= commit_count; /* invalidate */
    DBUG_PRINT("exit",("Do not use cache, commit_count has changed"));
    DBUG_RETURN(FALSE);
  }
@@ -4978,7 +4978,6 @@ ha_ndbcluster::register_query_cache_table(THD* thd,
  if (!is_autocommit)
    DBUG_RETURN(FALSE);

  
  Uint64 commit_count;
  if (ndb_get_commitcount(thd, m_dbname, m_tabname, &commit_count))
  {
@@ -4992,6 +4991,7 @@ ha_ndbcluster::register_query_cache_table(THD* thd,
  DBUG_RETURN(TRUE);
}


/*
  Handling the shared NDB_SHARE structure that is needed to
  provide table locking.
@@ -5648,7 +5648,7 @@ ha_ndbcluster::update_table_comment(
extern "C" pthread_handler_decl(ndb_util_thread_func,
                                arg __attribute__((unused)))
{
  THD *thd; // needs to be first for thread_stack
  THD *thd; /* needs to be first for thread_stack */
  int error= 0;
  struct timespec abstime;

@@ -5656,13 +5656,13 @@ extern "C" pthread_handler_decl(ndb_util_thread_func,
  DBUG_ENTER("ndb_util_thread");
  DBUG_PRINT("enter", ("ndb_cache_check_time: %d", ndb_cache_check_time));

  thd= new THD; // note that contructor of THD uses DBUG_ !
  thd= new THD; /* note that contructor of THD uses DBUG_ */
  THD_CHECK_SENTRY(thd);

  pthread_detach_this_thread();
  ndb_util_thread= pthread_self();

  thd->thread_stack = (char*)&thd; // remember where our stack is
  thd->thread_stack= (char*)&thd; /* remember where our stack is */
  if (thd->store_globals())
  {
    thd->cleanup();
@@ -5685,7 +5685,7 @@ extern "C" pthread_handler_decl(ndb_util_thread_func,
                                   ndb_cache_check_time));

    if (abort_loop)
      break; // Shutting down server
      break; /* Shutting down server */

    if (ndb_cache_check_time == 0)
    {
@@ -5693,32 +5693,31 @@ extern "C" pthread_handler_decl(ndb_util_thread_func,
      continue;
    }

    // Set new time to wake up 
    /* Set new time to wake up */
    set_timespec(abstime, ndb_cache_check_time);

    // Lock mutex and fill list with pointers to all open tables
    /* Lock mutex and fill list with pointers to all open tables */
    NDB_SHARE *share;
    pthread_mutex_lock(&ndbcluster_mutex);
    for (uint i= 0; i < ndbcluster_open_tables.records; i++)
    {
      share= (NDB_SHARE *)hash_element(&ndbcluster_open_tables, i);
      share->use_count++; // Make sure the table can't be closed
      share->use_count++; /* Make sure the table can't be closed */

      DBUG_PRINT("ndb_util_thread",
                 ("Found open table[%d]: %s, use_count: %d",
                  i, share->table_name, share->use_count));

      // Store pointer to table
      /* Store pointer to table */
      util_open_tables.push_back(share);
    }
    pthread_mutex_unlock(&ndbcluster_mutex);

    
    // Iterate through the  open files list 
    /* Iterate through the  open files list */
    List_iterator_fast<NDB_SHARE> it(util_open_tables);
    while (share= it++)
    {
      // Split tab- and dbname
      /* Split tab- and dbname */
      char buf[FN_REFLEN];
      char *tabname, *db;
      uint length= dirname_length(share->table_name);
@@ -5730,10 +5729,11 @@ extern "C" pthread_handler_decl(ndb_util_thread_func,
                 ("Fetching commit count for: %s, db: %s, tab: %s",
                  share->table_name, db, tabname));

      // Contact NDB to get commit count for table
      /* Contact NDB to get commit count for table */
      g_ndb->setDatabaseName(db);
      struct Ndb_statistics stat;;
      if(ndb_get_table_statistics(g_ndb, tabname, &stat) == 0){
      if(ndb_get_table_statistics(g_ndb, tabname, &stat) == 0)
      {
        DBUG_PRINT("ndb_util_thread",
                   ("Table: %s, rows: %llu, commit_count: %llu",
                    share->table_name, stat.row_count, stat.commit_count));
@@ -5744,13 +5744,13 @@ extern "C" pthread_handler_decl(ndb_util_thread_func,
        DBUG_PRINT("ndb_util_thread",
                   ("Error: Could not get commit count for table %s",
                    share->table_name));
	share->commit_count++; // Invalidate
        share->commit_count++; /* Invalidate */
      }
      // Decrease the use count and possibly free share
      /* Decrease the use count and possibly free share */
      free_share(share);
    }

    // Clear the list of open tables
    /* Clear the list of open tables */
    util_open_tables.empty();

  }