Open cosven opened 5 years ago
cat /proc/{pid}/limits
结果是不一样的,为什么呢?[tidb@172.xx.xx.xx ~]$ cat /proc/18097/limits
Limit Soft Limit Hard Limit Units
Max open files 1048576 1048576 files
[tidb@172.xx.xx.xx ~]$ sudo lsof -p 18097 | wc -l
293955
[tidb@172.xx.xx.xx ~]$ sudo lsof -p 18097 | egrep "TCP|UDP" | wc -l
293576
[tidb@172.xx.xx.xx ~]$ sudo lsof -p 18097 -i | wc -l
lsof: no pwd entry for UID 65534
lsof: no pwd entry for UID 65534
295312
~ > k exec -it targetdb-tidb-tikv-1 -- lsof | wc -l
295757
GC 怎样判断一个 secondary key 是应该提交还是回滚呢?
回答:看代码应该是会出现 primary key 不存在的情况。但不知道为啥? 不存在时,有可能当成 rollback,也有可能报错,TiDB 端可以传参到 TiKV。 相关代码:ResolveLockRequest,CheckTxnStatus。
几个 TODO
参考资料:
https://pingcap.com/docs-cn/stable/reference/garbage-collection/overview/#resolve-locks
Resolve Locks 这一步的任务即对 safe point 之前的锁进行回滚或提交,取决于其 Primary 是否被提交。如果一个 Primary 锁也残留了下来,那么该事务应当视为超时并进行回滚。这一步是必不可少的,因为如果其 Primary 的 Write 记录由于太老而被 GC 清除掉了,那么就再也无法知道该事务是否成功。如果该事务存在残留的 Secondary 锁,那么也无法知道它应当被回滚还是提交,也就无法保证一致性。
https://pingcap.com/blog-cn/tidb-transaction-model/
另外,在实际实现的过程中还会遇到一个问题,当 gc 一个 key 时发现 meta 中有锁(可能是由于清除 secondary lock 时客户端崩溃或者其他原因),你并不能简单删除之,因为如果这个 key 中的锁是 secondary lock,在 gc 进程去查看这个锁对应的 primary key 的对应版本是提交还是回滚时,如果 primary key 的那个版本已经被 gc 删除掉了,对于 gc 进程来说就没有办法确定该事务到底是提交还是回滚,可能出现数据误删的情况。TiKV 通过对事务的 primary key 的 meta version 进行一个特殊的标记,由于没有集中事务管理器的存在,判断一个事务的执行状态只有 primary key 的 meta 中有记录,所以在 gc 时会绕过这些 primary key 的 version 解决了这个问题,保证了数据的安全。
?
具体的几个问题
__chaosfs__test__
目录是怎么回事?
大概意思是 move mount 可以避免之前的 fd 使用终断mkdir /lib64
ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
[x] json 是怎样 escape 和 unescape quote 的呢?
参考 python json module 实现可以发现,它使用这样一个正则来捕获那些需要被 escape 的字符
ESCAPE = re.compile(r'[\x00-\x1f\\"\b\f\n\r\t]')
\x00-\x1f
代表控制字符,\b\f
这两个以及 \r\t\n
这几个都是特殊字符。
绝大部分控制字符会被替换为 \\u{0:04x}.format(i)
,04x
表示用 4 个 16 进制数字来表示一个数,左边用 0 补 padding。
[ ] 控制字符与快捷键
[x] Python 中 print('\u0061')
会输出什么呢?a
print('\u54c8')
-> 哈
;print('\xae')
呢?
https://docs.python.org/zh-cn/3/howto/unicode.html#unicode-literals-in-python-source-code
[ ] latin-1 编码, unicode 编码规则
[ ] PEG parser
Status DBImpl::CompactRange(const CompactRangeOptions& options,
ColumnFamilyHandle* column_family,
const Slice* begin, const Slice* end)
2019-08 月之前
整理成文:http://cosven.me/blogs/100