小编Vis*_*rma的帖子

TSan 在 Boost 无锁队列中报告数据竞争

我正在使用线程清理程序运行boost 无锁队列文档中给出的 MPMC 示例,令我惊讶的是,这个基本示例包含按照 TSan 的数据竞争。知道可能出了什么问题吗?

OS: Red Hat Enterprise Linux Server release 7.7 / Ubuntu 18.04.4
Compiler: g++ (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2) / g++ (Ubuntu 11.1.0-1ubuntu-18.04.1) 11.1.0
CPU Architecture: x86_64
Boost Version: 1.79
Run Code Online (Sandbox Code Playgroud)

TSan 的输出如下:

@vishal: g++ testQ.cpp -lboost_thread -L /usr/local/lib/ -pthread -fsanitize=thread -ggdb3 -fPIE -pie 

@vishal: TSAN_OPTIONS="history_size=7" ./a.out 

boost::lockfree::queue is lockfree
==================
WARNING: ThreadSanitizer: data race (pid=22019)
  Atomic write of size 8 at 0x7b1000001c00 by thread T1:
    #0 __tsan_atomic64_store <null> (libtsan.so.0+0x800ca)
    #1 std::atomic<boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int>::node> >::store(boost::lockfree::detail::tagged_ptr<boost::lockfree::queue<int>::node>, …
Run Code Online (Sandbox Code Playgroud)

c++ boost thread-sanitizer data-race

10
推荐指数
0
解决办法
337
查看次数

Cassandra - 避免 nodetool 清理

如果我们向 C* 环添加了新节点,是否需要运行“nodetool cleanup”来清除现在已分配到其他地方的数据?或者在正常压缩期间无论如何都会发生这种情况?在正常压缩期间,C* 是否会删除不再属于该节点的数据,或者我们是否需要为此运行“nodetoool cleanup”?询问是因为“清理”需要永远并且在完成之前使节点崩溃。

如果我们需要运行“nodetool cleanup”,有没有办法找出哪些节点现在拥有它们不应再拥有的数据?(即现在属于新节点的数据,但仍然存在于旧节点上,因为没有人删除它。这是“nodetool cleanup”将删除的数据。)我们有 RF=3 和两个数据中心,每个数据中心它具有数据的完整副本。我假设我们需要在我们添加节点的数据中心的所有节点上运行清理,因为新节点上的每一行过去都在另一个节点(主节点)上,再加上其他两个节点上的两个副本(副本)。

cassandra nodetool cassandra-3.0

6
推荐指数
1
解决办法
2828
查看次数

Cassandra Batch语句-多个表

我想使用批处理语句从数据库中的3个表中删除一行,以确保原子性。所有三个表中的分区键都将相同。在我阅读的有关批处理语句的所有示例中,所有查询都针对单个表?就我而言,使用批处理语句是一个好主意吗?或者,我应该避免吗?

我正在使用Cassandra-3.11.2,并使用C ++驱动程序执行查询。

cassandra cassandra-3.0

6
推荐指数
1
解决办法
2143
查看次数

Codahale指标和Dropwizard指标之间的差异

我是Java的新手.在探索监控Cassandra的方法时,我发现(https://cassandra.apache.org/doc/latest/operating/metrics.html)"使用Dropwizard Metrics库管理Cassandra中的度量标准".然而,在几个地方,我读过关于Codahale Metrics的信息,这让我对两者之间的差异/关系感到困惑.这些不同的库是做同样的事情,还是之前被称为Crawhale Metrics的dropwizard指标?

java metrics cassandra dropwizard

6
推荐指数
1
解决办法
1635
查看次数

Cassandra默认配置为丢失10秒的数据?

正如Commitlog数据被刷新到磁盘定期每10秒后(通过控制commitlog_sync_period_in_ms),因此,如果在10秒内所有副本崩溃,我将失去所有这些数据呢?从理论上讲,Cassandra Cluster是否会丢失数据?

data-integrity cassandra data-loss

5
推荐指数
1
解决办法
1934
查看次数

nodetool cfhistograms 输出

当我运行“nodetool cfhistograms”时,我看到表格数据。

Percentile  SSTables     Write Latency      Read Latency    Partition Size        Cell Count
                              (micros)          (micros)           (bytes)                  
50%             2.00              0.00           8239.00               924                20
75%             4.00              0.00           9887.00              1109                20
95%             4.00              0.00          51012.00              1916                24
98%             4.00              0.00          51012.00              2299                29
99%             4.00              0.00          51012.00              2759                35
Min             0.00              0.00            150.00                73                 2
Max             4.00              0.00          51012.00              3973                60
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这些是如何计算的吗?我理解 %le 概念,但我想知道计算上述结果需要考虑多少次读/写。

cassandra nodetool cassandra-2.0 cassandra-3.0

5
推荐指数
1
解决办法
1513
查看次数

运行 cassandra 时出现 gc.log 文件错误

为了安装 Cassandra,我做了以下工作: 1. 下载了 TAR 文件。2. 解压文件。3.在yaml文件中设置data和commitlog目录的路径。

现在,当我运行 Cassandra 时,出现以下错误:“Java HotSpot (TM) 64 位服务器 VM 警告:无法打开文件。/..logs/gc.log 由于没有这样的文件或目录”

是什么导致了这个问题?在运行它之前我是否需要做其他事情。

操作系统:RHEL 6.5 Cassandra 版本:3.11.1

cassandra

5
推荐指数
1
解决办法
6074
查看次数

Cassandra 中的强一致性

根据datastax文章,如果R + W > N,则可以保证强一致性,其中R是读操作的一致性级别W是写操作的一致性级别N是副本数

这里的强一致性是什么意思?这是否意味着“每次”从数据库给出查询响应,响应将“始终”是最后更新的值?如果在cassandra中保持强一致性的条件,那么,不存在返回数据可能不一致的场景吗?简而言之,强一致性是否意味着 100% 的一致性?

编辑 1

添加一些关于某些场景的额外材料,即使 R+W>RF Cassandra 也可能不一致

  1. Quorum CL 写入失败
  2. Cassandra 的最终一致性

cassandra cassandra-3.0

5
推荐指数
2
解决办法
5155
查看次数

如果没有存储函数返回的指针会发生什么?

有一个函数返回一个指针(任何类型),如果我在调用函数时没有存储指针,会发生什么?在这种情况下,函数是否仍会返回指针?如果是,那么会有内存泄漏,因为我没有释放分配的内存吗?

以下面的代码为例:

int * testfunc()
{
int * a=new int();
return(a);
}

int main()
{
testfunc();
return(0);
}
Run Code Online (Sandbox Code Playgroud)

c++

4
推荐指数
1
解决办法
126
查看次数

在 CMake 中为每个目标设置编译器/链接器标志

我为我的项目创建了以下 CMakelists.txt,其中包含一些需要用 C 编译的文件,然后与我的 C++ 二进制文件链接。我也在用libasan。

cmake_minimum_required(VERSION 3.0)

SET(GCC_COVERAGE_COMPILE_FLAGS "-g3 -fsanitize=address -fno-omit-frame-pointer")
SET(GCC_COVERAGE_LINK_FLAGS    "-fsanitize=address -static-libasan")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

project(ABC_PROXY VERSION 1.0.0 LANGUAGES C CXX)

add_executable(abc_proxy
src/file1.c
src/main.cpp
)

target_include_directories(abc_proxy PRIVATE /home/vishal/cpp_file/new /home/vishal/cpp_file/new/framework)
SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

在上面的文件中,我只有一个目标二进制文件。但现在我想要 2 个二进制文件。一个将使用 libasan 进行编译,另一个将不使用 libasan 进行编译。如何在 'CMAKE_EXE_LINKER_FLAGS' 、 'CMAKE_CXX_FLAGS' 和 'CMAKE_CXX_FLAGS' 中为每个二进制目标使用不同的标志值?

c c++ cmake

3
推荐指数
1
解决办法
3542
查看次数