Home

关于ob代码规范里面的行末空格

行尾的空格在post-review的时候会被标识成红色,其实可以通过如下vim配置直接显示出来并全部去掉: " 删除所有行未尾空格 nnoremap <C-f12> :%s/[ \t\r]\+$//g<cr>'' "显示空格 highlight ExtraWhitespace ctermbg=red guibg=red match ExtraWhitespace /\s\+$/ augroup ExtraWhitespaceGroup autocmd! autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ autocmd InsertEnter * match ExtraWhitespa...

Read more

关于得到当前执行文件所在的目录

今天遇到一个问题,程序里面用相对路径引用了同一级目录下的一个文件,shell在上一级目录调用程序的时候,发现当前目录变成了上一级目录,于是程序在上一级目录找那个文件。最简单的办法当然是shell脚本里面加cd操作,但是暂时不方便修改脚本。所以直接通过程序获取绝对路径好了。 首先,直接 realpath(“./”) 和 getcwd 获取的都是当前路径,也就是当前shell所在的路径。__FILE__获取的是文件名,不包含路径,而且是编译过程确定的,最简单的办法当然是argv[0],但是在test_case(gtest)里面不方便传来传去,后来发现最好的办法是这样的: #include "libgen.h" #define MAX_PATH_SIZE 100 char current...

Read more

分布式调试之导入import文件

最近看元启师兄写了一个脚本更新所有重构之后的include引用,我暂时没有需要如此伤筋动骨的代码,所以暂时用不上。但是有时候引用一个类要去找所在的文件,而有时候经常会记错地方。写了一个简单的vim插件依赖ctags来找对象或函数所在的位置。代码如下: if !exists('g:base_dir_mark') "set base_dir_mark to indicate where to generate post-review.sh let g:base_dir_mark = 'tags' endif if !exists('g:strip_prefix_arr') "set base_dir_mark to indicate where to gen...

Read more

分布式调试系列:关于日志的比对

有时候我们其实会遇到这种情况,本地修改了一点东西,然后发现跑跟预期结果不一致,这时候去看日志发现各种日志里面有各种ERROR,但是这些ERROR实际上并不是这个问题导致的,因为你回滚修改之后发现这些ERROR依然存在。如果有core文件当然最好,但是如果没有或者core里面并看不出问题就比较纠结了。前面一篇文章我们探讨了如何写个插件通过log来定位源码行,这篇日志我们讨论一下如何快速定位自己的错误日志。 首先,前面的状况至少可以保证一点,你check一份新的代码或者回滚本地修改然后运行,得到的错误日志和你当前的错误日志是可比较的。也就是说,你的错误至少不会导致错误日志之中有巨大的变化。这样的话我们可以采取如下的策略比较错误日志。 得到当前的错误日志,假使命名为log.core...

Read more

分布式调试之vim日志定位解决方案

做分布式系统看日志解决问题是基本功了,毕竟多个server跑在不同的机器上,即使用gdb能attach到某个进程上,或者用非daemon模式启动并调试但是case往往很复杂,难以用测试环境完全模拟case,所以大部分情况下还是需要看日志解决问题的。 不过日志多了之后往往容易跟丢,在浩如烟海的日志里面定位到发生错误的地方也不是见容易的事情。这周大部分时间就费在这上面了(不过还是不熟)。期间写了一个简单的vim插件实现日志的定位。想法如下: 偶然发现通过deploy.py ob1.rs0.less打开less窗口之后按v键可以转到vim窗口,这就解决很多问题了,毕竟我可不想在less下实现什么功能。vim script就熟悉多了。 ob的log格式是这样的 [2013-1...

Read more

自己写的一个根据路径打开文件的插件

这个其实修改了很多次,最初的目的是在linux下嘛,找电影不方便,只能用locate打印出一个电影列表来,但是每次复制路径到命令行多不方便啊,最好能在vim里面操作,于是想想干脆做成通用的好了,就有了这个filelist.vim "============================================================================= " FileName: filelist.vim " Desc: " Author: ChenXiaohui " Email: sdqxcxh@gmail.com " HomePage: http://www.cxh.me " Ve...

Read more

如何构建按高可用系统(分享的笔记)

版权所有:[解伦师兄][1] ###介绍篇 可用性vs可靠性 可用性主要是从时间的角度看,可靠的时间。可靠性主要是看不可用的频率。如果一个系统1小时宕机1ms,可用性非常高,可靠性非常低。 可用性可靠性是系统的工程,设计开发,管理,运维等等。 宕机几大因素:软件-硬件-网络-人为 data loss的最大因素:drop table, 所以要做好充分的容错。 ###设计篇 减少故障发生的可能 避免单点故障,防止扩散,有效的监控运维配合 常见的冗余设计。 RAID,Replica,Erasure Code BackUp, Reassign,Retry Master-Slave,Mirror,RAC.. 减少对外部系统强依赖...

Read more

分布式调试之用gdb调试分布式系统

分布式系统开发的时候我们最经常遇到的问题就是,从一个server发送了一条报文之后怎么在另一个server查看这条报文的处理逻辑是否正确,单机的debug都不是问题,但是多机debug怎么做呢? 在ob团队里面,正常情况下我们有如下三种方式处理这些问题: 做mock,写单测,隔离开集群环境 加调试日志,部署集群环境,看日志。 非daemon模式下通过gdb调试。 这里我们详细说一下第三种。这也是最有效果的一种。 需要强调的是,正常情况下ob启动之后各个server会以守护进程方式运行,这时候如果用gdb启动server的话,gdb不知道在fork之后跟哪个进程,而在我测试下,set follow-fork-mode貌似也没成功过。 所以最好的方法是直接不要...

Read more