dataminor

Results 5 issues of dataminor

What is the correct way to retry when errors such as EOF or broken pipe is encountered when writing? I saw the comment in the code that when a failure...

Hi, @syang0 We're going to use nanolog as our logging library, but we found that the file used for logging will never be rolled over. This makes it hard for...

我们用braft+brpc来做强一致性解决方案,目前在压力大持续时间长时,会导致死锁,通过gdb可以直接bt看到的栈分为两类。 类型1的线程在等类型2的线程中的锁,而2在执行过程中拿了1所需要的锁,在试图往rq中push时由于_rq是满的会失败然后usleep。而_rq里的task pop出来执行很可能也是log_manager的相关操作,也需要拿同一把锁。这样就形成了循环,死锁 在这里log_manager中的锁有可能进行逻辑上的拆分,从而使得从bthread里push进入时需要拿的锁和pop出来时调用的函数拿锁使用不同的锁吗? 请教一下这里的解决思路 ~~ 类型1 `#0 0x00007f9edd212334 in __lll_lock_wait () from /lib64/libpthread.so.0 #1 0x00007f9edd20d5d8 in _L_lock_854 () from /lib64/libpthread.so.0 #2 0x00007f9edd20d4a7 in pthread_mutex_lock () from /lib64/libpthread.so.0 #3 0x0000000000df637b...

@aspirer 你好,我读了下rename的设计文档,这里有几个问题想请教一下: 1 sdk是否在发送rpc时,如果是normal类型的,那么发送的txid是它内存中记录的copyset的txid,而如果是tx类型的(例如rename)那么发送的txid是它内存中记录的copyset的txid+1? 2 请问是否对于一个copyset,其metaserver同时只会处理一个操作? 3 请问如果一个sdk把A rename成了B在metaserver成功了,但是response timeout了。这样的情况下再来发送rename请求过来,对于A和B所在的copyset来说,都是需要先做类似rollback的操作的吗?例如在文档里写的“copyset需要删除dentryA副本” 4 每个sdk自己维护在本地一个copyset的txid。那如果有多个sdk的时候他们之间如何同步这些txid呢?例如sdk1 create成功了file A,使得它的txid变成了1,然后sdk2也试图去create fileA,但是它带过来的txid应该是0,那此时metaserver是如何处理的呢? 5 文中用sdk的 rpc带过来的txid和metaserver的pendingtxid比较,如果txid>=pendingtxid就认为txid是成功了,实际上的意思是不是说如果是normal类型的rpc,需要txid=pendingtxid认为txid是成功了,而对于tx类型的rpc,需要txid=pendingtxid+1才认为txid成功了? 多谢答疑解惑

看实现是类似一个一个MPSC的无锁队列。 多个producer会通过exchange保证调用顺序和WriteRequest的插入顺序是一致的。在single consumer写之前,会找到old_head和new_head之间的WriteRequest进行链表反转,然后往fd里写出这一部分数据。 一般实现是:单纯的单链表,维护一个head和一个tail指针,producer在tail插入新的WriteRequest,而consumer在head处消费。 请问这样的一般实现和目前的实现相比,目前的实现会有哪些advantage么?是否目前的实现使得插入和消费实际上是在两个互不相干的链表上从而减少了需要race的场景?