Commit 911e52db authored by unknown's avatar unknown
Browse files

Use DB_LOG_AUTOREMOVE flag instead of noticecall customization to BDB

so log files are deleted once they are no longer in use. (Bug #14655)


sql/ha_berkeley.cc:
  Remove usage of non-standard noticecall interface, and just use
  DB_LOG_AUTOREMOVE environment flag so that log files are deleted
  once no longer in use.
storage/bdb/dbinc/db.in:
  Remove noticecall interface
storage/bdb/env/env_method.c:
  Remove noticecall interface
storage/bdb/log/log_put.c:
  Remove noticecall interface
parent bffefbf8
Loading
Loading
Loading
Loading
+3 −15
Original line number Diff line number Diff line
@@ -76,7 +76,8 @@ const u_int32_t bdb_DB_RECOVER= DB_RECOVER;
const u_int32_t bdb_DB_PRIVATE= DB_PRIVATE;
const char *ha_berkeley_ext=".db";
bool berkeley_shared_data=0;
u_int32_t berkeley_init_flags= DB_PRIVATE | DB_RECOVER, berkeley_env_flags=0,
u_int32_t berkeley_init_flags= DB_PRIVATE | DB_RECOVER,
          berkeley_env_flags= DB_LOG_AUTOREMOVE,
          berkeley_lock_type= DB_LOCK_DEFAULT;
ulong berkeley_cache_size, berkeley_log_buffer_size, berkeley_log_file_size=0;
char *berkeley_home, *berkeley_tmpdir, *berkeley_logdir;
@@ -104,7 +105,6 @@ static int free_share(BDB_SHARE *share, TABLE *table, uint hidden_primary_key,
		      bool mutex_is_locked);
static int write_status(DB *status_block, char *buff, uint length);
static void update_status(BDB_SHARE *share, TABLE *table);
static void berkeley_noticecall(DB_ENV *db_env, db_notices notice);

static int berkeley_close_connection(THD *thd);
static int berkeley_commit(THD *thd, bool all);
@@ -192,7 +192,6 @@ bool berkeley_init(void)
    goto error;
  db_env->set_errcall(db_env,berkeley_print_error);
  db_env->set_errpfx(db_env,"bdb");
  db_env->set_noticecall(db_env, berkeley_noticecall);
  db_env->set_tmp_dir(db_env, berkeley_tmpdir);
  db_env->set_data_dir(db_env, mysql_data_home);
  db_env->set_flags(db_env, berkeley_env_flags, 1);
@@ -365,17 +364,6 @@ static void berkeley_print_error(const DB_ENV *db_env, const char *db_errpfx,
}


static void berkeley_noticecall(DB_ENV *db_env, db_notices notice)
{
  switch (notice)
  {
  case DB_NOTICE_LOGFILE_CHANGED: /* purecov: tested */
    mysql_manager_submit(berkeley_cleanup_log_files);
    pthread_cond_signal(&COND_manager);
    break;
  }
}

void berkeley_cleanup_log_files(void)
{
  DBUG_ENTER("berkeley_cleanup_log_files");
+0 −6
Original line number Diff line number Diff line
@@ -1736,10 +1736,6 @@ struct __db_qam_stat {
 *******************************************************/
#define	DB_REGION_MAGIC	0x120897	/* Environment magic number. */

typedef enum {
	DB_NOTICE_LOGFILE_CHANGED
} db_notices;

/* Database Environment handle. */
struct __db_env {
	/*******************************************************
@@ -1757,7 +1753,6 @@ struct __db_env {
					/* Other Callbacks. */
	void (*db_feedback) __P((DB_ENV *, int, int));
	void (*db_paniccall) __P((DB_ENV *, int));
	void (*db_noticecall) __P((DB_ENV *, db_notices));

					/* App-specified alloc functions. */
	void *(*db_malloc) __P((size_t));
@@ -1932,7 +1927,6 @@ struct __db_env {
	int  (*set_feedback) __P((DB_ENV *, void (*)(DB_ENV *, int, int)));
	int  (*get_flags) __P((DB_ENV *, u_int32_t *));
	int  (*set_flags) __P((DB_ENV *, u_int32_t, int));
	void (*set_noticecall) __P((DB_ENV *, void (*)(DB_ENV *, db_notices)));
	int  (*get_home) __P((DB_ENV *, const char **));
	int  (*set_intermediate_dir) __P((DB_ENV *, int, u_int32_t));
	int  (*get_open_flags) __P((DB_ENV *, u_int32_t *));
+0 −17
Original line number Diff line number Diff line
@@ -156,7 +156,6 @@ __dbenv_init(dbenv)
		dbenv->set_feedback = __dbcl_env_set_feedback;
		dbenv->get_flags = __dbcl_env_get_flags;
		dbenv->set_flags = __dbcl_env_flags;
		dbenv->set_noticecall = __dbcl_env_noticecall;
		dbenv->set_paniccall = __dbcl_env_paniccall;
		dbenv->set_rpc_server = __dbcl_envrpcserver;
		dbenv->get_shm_key = __dbcl_get_shm_key;
@@ -195,7 +194,6 @@ __dbenv_init(dbenv)
		dbenv->get_flags = __dbenv_get_flags;
		dbenv->set_flags = __dbenv_set_flags;
		dbenv->set_intermediate_dir = __dbenv_set_intermediate_dir;
		dbenv->set_noticecall = __dbenv_set_noticecall;
		dbenv->set_paniccall = __dbenv_set_paniccall;
		dbenv->set_rpc_server = __dbenv_set_rpc_server_noclnt;
		dbenv->get_shm_key = __dbenv_get_shm_key;
@@ -810,21 +808,6 @@ __dbenv_set_msgfile(dbenv, msgfile)
	dbenv->db_msgfile = msgfile;
}

/*
 * __dbenv_set_noticecall --
 *	{DB_ENV,DB}->set_noticecall.
 *
 * PUBLIC: int  __dbenv_set_noticecall __P((DB_ENV *, void (*)(DB_ENV *, int)));
 */
int
__dbenv_set_noticecall(dbenv, noticecall)
	DB_ENV *dbenv;
	void (*noticecall) __P((DB_ENV *, int));
{
	dbenv->db_noticecall = noticecall;
	return (0);
}

/*
 * __dbenv_set_paniccall --
 *	{DB_ENV,DB}->set_paniccall.
+0 −3
Original line number Diff line number Diff line
@@ -376,9 +376,6 @@ __log_put_next(dbenv, lsn, dbt, hdr, old_lsnp)
		 * anyway.
		 */
		newfile = 1;

		if (dbenv->db_noticecall != NULL)
			dbenv->db_noticecall(dbenv, DB_NOTICE_LOGFILE_CHANGED);
	}

	/*