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