学习让我快乐

争于世, 不争于势;简洁, 高效, 赏心悦目

谁动了我的 Schema?

在一次常规的ADB PG实例备份巡检中, 发现了一个实例备份失败, 而且报错原因很是奇怪: schema with OID 34196 does not exist. 查看代码得知该报错是指: 在 pg_namespace 中找不到 pg_class 中某个 relation 对应的 schema. 这不可能啊! 毕竟在 schema 内仍存在对象时我们是无法删除 schema 的啊: r...

死锁追击

在一次对 分析型数据库PostgreSQL版(下称 ADB PG版) 的日常测试中, 发现了日志中报 deadlock detector 错误. 一开始并未当回事, 毕竟能被 PostgreSQL 的 deadlock detector 检测到的死锁应该不是啥大问题. 所以写了个小脚本, 周期性抓取 pg_locks 并输出到文件, 这一看不得了了. 触发 deadlock detecto...

天秀之路

记录着一些有趣的事儿. 可能是亲身经历的, 也可能是八卦听说来的. 我平日最喜欢八卦围观各种 bug. 对于其中一些令人拍案惊奇的 bug 会脱敏之后放在这里. 困在 facebook/wangle 的凌晨三点 这是在百度参与开发百度分布式消息队列 Bigpipe 时遇到的. 在某次大版本开发中, 我们非常激进地引入 facebook/wangle 来作为我们的异步编程框架, 希望能为我...

你应该了解的 memory barrier 背后细节

前言 这是以读书笔记的形式记录的关于 memory barrier 背后细节的一篇文章, 某些篇幅可能会直接引用到原文, 而不会在本文中再次赘述. 所以可能会需要一份原文. Intorduction 为什么要引入 memory barriers. 参考原文了解, 一句话来描述的话是因为编译期指令乱序以及 cpu 乱序执行的存在, 所以需要引入 memory barrier. 原文这里并...

编译器设计读书笔记

可能对你并没有什么用的

前言 这里记录了在学习编译器设计这本书时记录的读书笔记, 限于每篇文章篇幅, 读书笔记被拆分成了多个部分, 这里是第一部分. 编译器书籍选择。编译原理(龙书),编译器设计(engineering a complier)。其中编译器设计更容易上手一点,更适合实践。编译原理更偏向于理论一点,更为全面。以 dfa 最小化算法举例,编译器设计首先介绍状态等价的概念,然后介绍了算法,很直观,但是有...

C++er 的 java 入门指南

前言 本文章根据 Java Tutorials Learning Paths, java 1.8 结合 C++ 经验制作而成; 只会记录一些琐碎的概念与知识点; 大多数语法上禁忌没有记录在内, 比如 local class 不能定义 static method 这种, 毕竟编译器会时刻提示我们的嘛. 个人觉得比较适合 C++er 的 java 入门入作; 毕竟 java 与 C++ 大体...

folly, wangle, proxygen 库

wangle 关于 wangle 的学习使用, wangle 文档不是很齐全, 反正当时我是看完 wangle 下面所有的 md 文档之后仍有很多不得其解, 所以不得不直接上手看源码了; 而且由于没有一个全局认知, 刚开始看会很迷糊, 不过会越来越有种拨开云雾见光明的感觉. 下面会零零散散地介绍实际使用中遇到的一些点, 以及 wangle 中一些全局概念, 争取能对 wangle 全局认知...

异步编程模式

再说异步编程模式之前, 先了解一下, golang 是如何以同步的方式编写异步代码的; 按我理解, golang 是通过协程来实施这一操作. 协程是什么呢, 协程就是一个逻辑执行流, 具有自己的当前指令指针, 以及局部变量这些状态. 协程必须运行在一个真实的线程中. 当协程执行到可能会阻塞的操作时, 此时 golang 运行时会在协程提交操作请求之后, 将协程置为挂起状态并从当前线程中移除,...

PhxPaxos Group 多状态机另外一种实现思路

目前 PhxPaxos 中的 Group 支持挂载多个状态机. 并且除了用户显式挂载的状态机之外, PhxPaxos 也会根据配置往 Group 上挂载一些内部状态机, 比如负责 master 选举的 MasterStateMachine 等. 但目前由于 MasterStateMachine, SystemVSM 等内部状态机各自都会构建自己的 checkpoint 以及从 checkp...

Storm ShellBolt 死锁

Storm ShellBolt 存在死锁的风险. 在 storm 中, ShellBolt 与其子进程通过标准输入/标准输出, 即文件描述符 0, 1 来通信, 同时也会读取标准出错, 即文件描述符 2 中的内容, 并将读取到的内容通过 storm 的日志系统输出到日志中. 具体如下: public void writeBoltMsg(BoltMsg msg) throws IOExcep...

Storm UI 统计不准确

发现 Storm ui 上的统计不是很准确. 经过一番 beidu 之后, 在 setStatsSampleRate 这里找到原因. 按我理解, storm 上 topology 每一次 emit/ack/fail tuple, 或者其他任何动作时都会调用 storm 的一些 hook. config.setStatsSampleRate() 指定了调用频率, 默认是 0.05, 即 to...

Storm.py json decode exception

事故现场如图: 本来因为是 ShellBolt 出现 BUG 了. 感觉像 writeBoltMsg() 时遇到了 InterruptedException 导致只写入了 "comp: nu", 然后又一次调用 writeBoltMsg() 导致错乱了. 后来发现不对. 因为这个异常只出现在我们的一个组件 C 内. C 使用了多进程, 并且 C 的子进程中调用了 storm.em...

mysql SQL 优化案例 JOIN 顺序调整

线上 mysql slow log 显示有一条 sql 其执行时间几率性 2s+. sql 如下: SELECT tableA.col10 FROM tableB INNER JOIN tableA ON tableB.col6 >= :c1 AND tableB.col6 <= :c2 AND tableB.col9 < :col9 AND tableB.id = ta...