/*******************************************************************//**
Creates a space memory object and puts it to the tablespace memory cache. If
there is an error, prints an error message to the .err log.
@return    TRUE if success */
UNIV_INTERN
ibool
fil_space_create(
/*=============*/
    const char*    name,    /*!< in: space name */
    ulint        id,    /*!< in: space id */
    ulint        flags,    /*!< in: compressed page size
                and file format, or 0 */
    ulint        purpose)/*!< in: FIL_TABLESPACE, or FIL_LOG if log */
{
    fil_space_t*    space;

    /* The tablespace flags (FSP_SPACE_FLAGS) should be 0 for
    ROW_FORMAT=COMPACT
    ((table->flags & ~(~0 << DICT_TF_BITS)) == DICT_TF_COMPACT) and
    ROW_FORMAT=REDUNDANT (table->flags == 0).  For any other
    format, the tablespace flags should equal
    (table->flags & ~(~0 << DICT_TF_BITS)). */
    ut_a(flags != DICT_TF_COMPACT);
    ut_a(!(flags & (~0UL << DICT_TF_BITS)));

try_again:
    /*printf(
    "InnoDB: Adding tablespace %lu of name %s, purpose %lu\n", id, name,
    purpose);*/

    ut_a(fil_system);
    ut_a(name);

    mutex_enter(&fil_system->mutex);

    space = fil_space_get_by_name(name);

    if (UNIV_LIKELY_NULL(space)) {
      goto try_again;
    }

    space = fil_space_get_by_id(id);

    if (UNIV_LIKELY_NULL(space)) {     return(FALSE);
    }
        /**     *结构体详见     */
    space = mem_alloc(sizeof(fil_space_t));

    space->name = mem_strdup(name);
    space->id = id;

    fil_system->tablespace_version++;
    space->tablespace_version = fil_system->tablespace_version;
    space->mark = FALSE;

    if (UNIV_LIKELY(purpose == FIL_TABLESPACE && !recv_recovery_on)
        && UNIV_UNLIKELY(id > fil_system->max_assigned_id)) {
        if (!fil_system->space_id_reuse_warned) {

        }

        fil_system->max_assigned_id = id;
    }

    space->stop_ios = FALSE;
    space->stop_new_ops = FALSE;
    space->purpose = purpose;
    space->size = ;
    space->flags = flags;

    space->n_reserved_extents = ;

    space->n_pending_flushes = ;
    space->n_pending_ops = ;
    //初始化chain链表
    UT_LIST_INIT(space->chain);
    space->magic_n = FIL_SPACE_MAGIC_N;

    rw_lock_create(fil_space_latch_key, &space->latch, SYNC_FSP);
        //分别以id和name作为哈希值,放入fil_system相应哈希表中
    HASH_INSERT(fil_space_t, hash, fil_system->spaces, id, space);

    HASH_INSERT(fil_space_t, name_hash, fil_system->name_hash,ut_fold_string(name), space);
    space->is_in_unflushed_spaces = FALSE;
        //放入lru中
    UT_LIST_ADD_LAST(space_list, fil_system->space_list, space);

    mutex_exit(&fil_system->mutex);

    return(TRUE);
}
/*******************************************************************//**
Returns the table space by a given name, NULL if not found. */
UNIV_INLINE
fil_space_t*
fil_space_get_by_name(
/*==================*/
    const char*    name)    /*!< in: space name */
{
    fil_space_t*    space;
    ulint        fold;

    ut_ad(mutex_own(&fil_system->mutex));

    fold = ut_fold_string(name);

    HASH_SEARCH(name_hash, fil_system->name_hash, fold,
            fil_space_t*, space,
            ut_ad(space->magic_n == FIL_SPACE_MAGIC_N),
            !strcmp(name, space->name));

    return(space);
}

fil_space_create的更多相关文章

  1. fil_system_struct

    /** The tablespace memory cache */ typedef struct fil_system_struct fil_system_t; /** The tablespace ...

  2. Innodb物理存储结构系列1

    本篇先介绍 下Innodb表空间,文件相关的内存数据结构. 1. 数据结构 Innodb的tablespace和文件的关系,是一对多的关系,先来看三个结构体 1. fil_system_struct: ...

  3. InnoDB undo log物理结构的初始化

    水平有限,如果有误请指出.一直以来未对Innodb 的undo进行好好的学习,最近刚好有点时间准备学习一下,通过阿里内核月报和自己看代码的综合总结一下.本文环境: 代码版本 percona 5.7.2 ...

  4. MySQL启动过程详解三:Innodb存储引擎的启动

    Innodb启动过程如下: 1. 初始化innobase_hton,它是一个handlerton类型的指针,以便在server层能够调用存储引擎的接口. 2. Innodb相关参数的检车和初始化,包括 ...

随机推荐

  1. Oracle的substr函数简单用法

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  2. 30款jQuery常用网页焦点图banner图片切换 下载

    1.jquery 图片滚动特效制作 slide 图片类似窗帘式图片滚动 查看演示 2.jquery幻灯片插件带滚动条的圆形立体图片旋转滚动 查看演示 3.jQuery图片层叠旋转类似洗牌翻转图片幻灯片 ...

  3. UML类图关系大全-转

    1.关联 双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来 ...

  4. EXTJS学习笔记

    由于公司统一决策,决定使用EXTJS作为前台的开发UI框架,所以从今天开始学习EXTJS,对学习过程中遇到的问题做记录. 首先第一个问题:为什么要用ExtJS作为公司开发基础架构?   推荐一篇文章: ...

  5. 【最小生成树】BZOJ 1196: [HNOI2006]公路修建问题

    1196: [HNOI2006]公路修建问题 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1435  Solved: 810[Submit][Sta ...

  6. catci监控

    snmp安装:yum install net-snmp* 配置/etc/snmp/snmpd.conf:com2sec notConfigUser 192.168.79.129    publicac ...

  7. PHP之mysql_real_escape_string()函数讲解

    定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符. 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功, ...

  8. java基础知识回顾之java Socket学习(二)--TCP协议编程

    TCP传输(传输控制协议):TCP协议是一种面向连接的,可靠的字节流服务.当客户端和服务器端彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能进行数据的传输.它将一台主机发出的字节流无差错的 ...

  9. 关于dynamic_cast

    http://www.groad.net/bbs/read.php?tid-5476.html dynamic_cast 进行运行时强制转换.如果在执行时转换非法,则会转换失败.dynamic_cas ...

  10. .NET复习笔记

    .NET 基础知识点汇总 课前知识储备. 一.C#与.NET的区别? 1..NET/dotnet:一般指.Net Framework框架,一种平台,一种技术 2.C#(sharp):一种编程语言,可以 ...