Home

oceanbase的库依赖问题

今天遇到一个问题: 写测试用例的时候发现总是找不到符号undefined refrence, 第一反应是我去有个没编译的吧, 但是打印了所有的符号,发现其实编译生成库文件里面完全有对应的符号,命名空间也没有错误。这就是很诡异的问题了,刚好手头另一份代码可以编译链接成功,于是对比了一下午结果,发现最后一个函数在类里实现就能编译,类外实现就不能编译,这个问题就太毁三观了。 最后请教了 解伦师兄 , 发现其实是库依赖的问题, Libtool制定的链接库列表是有相互依赖关系的,比如: LDADD = libtest2.a \ libtest2.a 或者gcc命令 gcc –o test main.c libtest2.a libtest1.a 这里编译的时候会认为lib...

Read more

oceanbase源码分析-root_table_manager相关

记录一下root_table_manager相关类的阅读和心得。 ###ObTableNameIterator 一个Iterator, 用于获取所有的TableName init 初始化并调用scan_tables执行查询表名的sql语句 scan_tables 执行sql语句 “select table_name, table_id from __all_table” 来得到所有表的表名 get_next 获取下一个表名, 如果 table_idx_ < 3 获取的是内部表的信息, 否则从sql执行结果中迭代返回普通表名 table_idx_对应的表名分别是: …...

Read more

防止通过rm误删文件

相信大家都有通过rm误删文件的经历, 而且Linux下又貌似没有Final Data之类的工具. 相对于Windows或者Nautilus里的删除机制, rm虽然高效, 但是很危险. 为了防止误删文件, 我们可以把删除的文件先转移到/tmp下, /tmp下的文件会被系统定时清除, 也就起到了回收站的作用. 这里我们首先建立如下脚本: #!/bin/sh dirpath=/tmp/recycle_$USER # find a place for recycle now=`date +%Y%m%d_%H_%M_%S_` arg=$1 if [ "$arg" = "-rf" ] || [ "$arg" = "-fr" ] || [ "$arg" = "-r" ]; then # ...

Read more

oceanbase源码分析-Rowkey相关

这里分析一下ObRowkey相关的源码. 引用晓楚师兄的一段话: Rowkey是OceanBase诞生之初就引入的概念,最终被确立是在OceanBase 0.3。 为了便于理解,不妨把OceanBase想象成一个Key-Value系统,Rowkey就是Key,Value就是返回的行数据。 如果你对mysql数据库熟悉,那么不妨把Rowkey理解成primary key,它就是那几个主键列的组合,列的顺序与primary key中定义的顺序一致。 ###ObObjType 定义了OceanBase中支持的基本数据类型,我们可以在ob_obj_type.h中看到其定义 ###ObRowkeyColumn 定义了RowKey中的每个列Column ###O...

Read more

oceanbase源码分析-RootServer主要框架

这里记录一下RootServer主要框架的阅读和心得。 ###BaseMain BaseMain的逻辑从start开始,首先定义了日志格式(ob_easy_log_format),具体定义在ob_easy_log.cpp中 日志格式如何使用需要跟到Libeasy里去看了. 之后parse_cmd_line解析命令行参数.既然继承自同一个基类,那么这几个server的启动函数就非常相似 之后是一些启动琐事,建立pid文件,建立log文件,设置log级别等.有些地方引用到了TBsys和libeasy,如果需要了解的话可以跟进去看看. start的最后注册了signal ,并调用do_work开始逻辑.do_work需要子类重载实现. restart处理了重启的问题. ###...

Read more

普通英雄

只是想起一首老歌: </embed> 有时候 我必须 选择一个人过冬 习惯在 冰天雪地里 追梦 人从容 再出手 自然也就从容 只相信 地球间的 那一点红 看世上 所有英雄 哪一个 做得轻松 我也不 希望被歌颂 我只想 普普通通 自己的伤自己知道痛 哪道深哪一道最重 血肉之躯只会越战越勇 好男儿气贯长虹 倒下也要忍着痛苦 看这世上所有的英雄 竟没有一个人想通 淹没在残酷的波涛中 就像岸上的砂粒一样 普普通通 就像岸上的砂粒一样 来去匆匆 就像岸上的砂粒一样 感叹如风

Read more

Octopress的一些技巧

自从把wordpress换成Octopress, 腰不酸了背不疼了, 写博客也有劲了~ 以上只是吐个槽而已, Octopress是基于Jekyll的博客系统, Jekyll是从markdown生成静态网页的网页生成器. 这是背景. 详细的不表. 主要说下面几个小技巧: ###1. alias(别名) 话说每次写博客的时候要敲rake new_post/ rake generate/ rake preview/ rake deploy…等等, 中间再出一点什么git同步的错误, 严重影响写博客的心情.可以通过alias简化命令: alias rg='rake generate && rake preview' alias rd='rake deplo...

Read more

用vimdiff来显示gitdiff

git diff默认是调用linux的diff工具的, 一眼看上去毕竟还是不知所云, 不像其他两栏的diff工具那么直观. 我们可以考虑用vimdiff来显示gitdiff的结果. 具体说来有两种办法: 在~/.gitconfig中我们可以通过如下语句添加一个配置项, 指明使用的diff工具. git config --global diff.tool vimdiff git config --global difftool.prompt No 这里需要注意的是我们需要通过git difftool来调用vimdiff, 默认的gitdiff依然是调用Linux diff工具的. 第二行[difftool].prompt 的作用是免除gitdiff时的提示, 否则会有如下...

Read more