Skip to content

Commit 4d315ea

Browse files
author
caijieming
committed
Merge branch 'master' of github.com:baidu/tera into show_bug
2 parents 9360318 + 8bf0c4c commit 4d315ea

File tree

122 files changed

+2856
-1344
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+2856
-1344
lines changed

.travis.yml

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
1-
language: cpp
2-
compiler: gcc
31
env:
42
global:
53
- secure: "EBGwhqHaPbERmOAPA7a1IprZZdFjEZqnuekgkNTBtzmGTaIYuh1BbSNGmVtnj3DuXuqAusiYN6olW2lMax15Fqw3Mwh++vh6DJFQ4wePImCzot7D4fTcopmNS2yoPl0IeyL/sLyQrxjflBfoTzw6DUZAXiU55gGB1faqCAfM5sQ="
4+
- CC=gcc-4.8
5+
- CXX=g++-4.8
66
addons:
77
apt:
8+
sources:
9+
- ubuntu-toolchain-r-test
810
packages:
11+
- gcc-4.8
12+
- g++-4.8
913
- gdb
1014
- apport
1115
coverity_scan:

Makefile

+27-13
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ include depends.mk
44
OPT ?= -g2 -Wall -Werror # (B) Debug mode, w/ full line-level debugging symbols
55
# OPT ?= -O2 -g2 -DNDEBUG # (C) Profiling mode: opt, but w/debugging symbols
66

7-
CC = cc
8-
CXX = g++
7+
ifndef CXX
8+
CXX = g++
9+
endif
10+
ifndef CC
11+
CC = gcc
12+
endif
913

1014
INCPATH += -I./src -I./include -I./src/leveldb/include -I./src/leveldb \
1115
-I./src/sdk/java/native-src $(DEPS_INCPATH)
1216
CFLAGS += $(OPT) $(INCPATH) -fPIC -fvisibility=hidden # hide internal symbol of tera
13-
CXXFLAGS += $(CFLAGS)
17+
CXXFLAGS += -std=gnu++11 $(CFLAGS)
1418
LDFLAGS += -rdynamic $(DEPS_LDPATH) $(DEPS_LDFLAGS) -lpthread -lrt -lz -ldl \
1519
-lreadline -lncurses
1620
SO_LDFLAGS += -rdynamic $(DEPS_LDPATH) $(SO_DEPS_LDFLAGS) -lpthread -lrt -lz -ldl \
@@ -32,7 +36,8 @@ OTHER_SRC := $(wildcard src/zk/*.cc) $(wildcard src/utils/*.cc) $(VERSION_SRC) \
3236
src/tera_flags.cc
3337
COMMON_SRC := $(wildcard src/common/base/*.cc) $(wildcard src/common/net/*.cc) \
3438
$(wildcard src/common/file/*.cc) $(wildcard src/common/file/recordio/*.cc) \
35-
$(wildcard src/common/console/*.cc)
39+
$(wildcard src/common/console/*.cc)
40+
SERVER_WRAPPER_SRC := src/tera_main_wrapper.cc
3641
SERVER_SRC := src/tera_main.cc src/tera_entry.cc
3742
CLIENT_SRC := src/teracli_main.cc
3843
TEST_CLIENT_SRC := src/tera_test_main.cc
@@ -41,7 +46,7 @@ MONITOR_SRC := src/monitor/teramo_main.cc
4146
MARK_SRC := src/benchmark/mark.cc src/benchmark/mark_main.cc
4247
TEST_SRC := src/utils/test/prop_tree_test.cc src/utils/test/tprinter_test.cc \
4348
src/io/test/tablet_io_test.cc src/io/test/tablet_scanner_test.cc \
44-
src/master/test/master_impl_test.cc src/io/test/load_test.cc
49+
src/master/test/master_impl_test.cc src/io/test/load_test.cc
4550

4651
TEST_OUTPUT := test_output
4752
UNITTEST_OUTPUT := $(TEST_OUTPUT)/unittest
@@ -54,6 +59,7 @@ PROTO_OBJ := $(PROTO_SRC:.cc=.o)
5459
JNI_TERA_OBJ := $(JNI_TERA_SRC:.cc=.o)
5560
OTHER_OBJ := $(OTHER_SRC:.cc=.o)
5661
COMMON_OBJ := $(COMMON_SRC:.cc=.o)
62+
SERVER_WRAPPER_OBJ := $(SERVER_WRAPPER_SRC:.cc=.o)
5763
SERVER_OBJ := $(SERVER_SRC:.cc=.o)
5864
CLIENT_OBJ := $(CLIENT_SRC:.cc=.o)
5965
TEST_CLIENT_OBJ := $(TEST_CLIENT_SRC:.cc=.o)
@@ -64,11 +70,12 @@ HTTP_OBJ := $(HTTP_SRC:.cc=.o)
6470
TEST_OBJ := $(TEST_SRC:.cc=.o)
6571
ALL_OBJ := $(MASTER_OBJ) $(TABLETNODE_OBJ) $(IO_OBJ) $(SDK_OBJ) $(PROTO_OBJ) \
6672
$(JNI_TERA_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(SERVER_OBJ) $(CLIENT_OBJ) \
67-
$(TEST_CLIENT_OBJ) $(TERA_C_OBJ) $(MONITOR_OBJ) $(MARK_OBJ) $(TEST_OBJ)
73+
$(TEST_CLIENT_OBJ) $(TERA_C_OBJ) $(MONITOR_OBJ) $(MARK_OBJ) $(TEST_OBJ) \
74+
$(SERVER_WRAPPER_OBJ)
6875
LEVELDB_LIB := src/leveldb/libleveldb.a
69-
LEVELDB_UTIL := src/leveldb/util/histogram.o
76+
LEVELDB_UTIL := src/leveldb/util/histogram.o src/leveldb/port/port_posix.o
7077

71-
PROGRAM = tera_main teracli teramo tera_test
78+
PROGRAM = tera_main tera_master tabletserver teracli teramo tera_test
7279
LIBRARY = libtera.a
7380
SOLIBRARY = libtera.so
7481
TERA_C_SO = libtera_c.so
@@ -110,8 +117,15 @@ cleanall:
110117
$(MAKE) clean
111118
rm -rf build
112119

113-
tera_main: $(SERVER_OBJ) $(MASTER_OBJ) $(TABLETNODE_OBJ) $(IO_OBJ) $(SDK_OBJ) \
114-
$(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_LIB)
120+
tera_main: src/tera_main_wrapper.o src/version.o src/tera_flags.o
121+
$(CXX) -o $@ $^ $(LDFLAGS)
122+
123+
tera_master: $(SERVER_OBJ) $(MASTER_OBJ) $(IO_OBJ) $(SDK_OBJ) \
124+
$(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_LIB)
125+
$(CXX) -o $@ $^ $(LDFLAGS)
126+
127+
tabletserver: $(SERVER_OBJ) $(TABLETNODE_OBJ) $(IO_OBJ) $(SDK_OBJ) \
128+
$(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_LIB)
115129
$(CXX) -o $@ $^ $(LDFLAGS)
116130

117131
libtera.a: $(SDK_OBJ) $(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_UTIL)
@@ -142,7 +156,7 @@ libjni_tera.so: $(JNI_TERA_OBJ) $(LIBRARY)
142156
$(CXX) -o $@ $^ $(SO_LDFLAGS)
143157

144158
src/leveldb/libleveldb.a: FORCE
145-
$(MAKE) -C src/leveldb
159+
CC=$(CC) CXX=$(CXX) $(MAKE) -C src/leveldb
146160

147161
tera_bench:
148162

@@ -174,8 +188,8 @@ tablet_scanner_test: src/io/test/tablet_scanner_test.o src/tabletnode/tabletnode
174188
$(IO_OBJ) $(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_LIB)
175189
$(CXX) -o $@ $^ $(LDFLAGS)
176190

177-
master_impl_test: src/master/test/master_impl_test.o src/tera_entry.o $(MASTER_OBJ) $(TABLETNODE_OBJ) $(IO_OBJ) $(SDK_OBJ) \
178-
$(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_LIB)
191+
master_impl_test: src/master/test/master_impl_test.o src/tera_entry.cc $(MASTER_OBJ) $(IO_OBJ) $(SDK_OBJ) \
192+
$(PROTO_OBJ) $(OTHER_OBJ) $(COMMON_OBJ) $(LEVELDB_LIB)
179193
$(CXX) -o $@ $^ $(LDFLAGS)
180194

181195
$(ALL_OBJ): %.o: %.cc $(PROTO_OUT_H)

build.conf.template

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ MIRROR=$1
99
BOOST_VERSION=1_58_0
1010
PROTOBUF_VERSION=2.6.1
1111
SNAPPY_VERSION=1.1.3
12-
SOFA_PBRPC_VERSION=1.1.1
12+
SOFA_PBRPC_VERSION=1.1.3
1313
ZOOKEEPER_VERSION=3.4.9
1414
GFLAGS_VERSION=2.1.2
1515
GLOG_VERSION=0.3.3
@@ -28,7 +28,7 @@ if [ $MIRROR == "china" ]; then
2828
GFLAGS_URL=https://github.com/schuhschuh/gflags/archive/v${GFLAGS_VERSION}.tar.gz
2929
GLOG_URL=https://github.com/google/glog/archive/v${GLOG_VERSION}.tar.gz
3030
GTEST_URL=https://github.com/google/googletest/archive/release-${GTEST_VERSION}.tar.gz
31-
LIBUNWIND_URL=http://mirrors.163.com/gentoo/distfiles/libunwind-${LIBUNWIND_VERSION}.tar.gz
31+
LIBUNWIND_URL=http://repository.timesys.com/buildsources/l/libunwind/libunwind-${LIBUNWIND_VERSION}/libunwind-${LIBUNWIND_VERSION}.tar.gz
3232
GPERFTOOLS_URL=https://github.com/00k/gperftools/raw/master/gperftools-${GPERFTOOLS_VERSION}.tar.gz
3333
INS_URL=https://github.com/baidu/ins/archive/${INS_VERSION}.tar.gz
3434
NOSE_URL=http://mirrors.163.com/gentoo/distfiles/nose-${NOSE_VERSION}.tar.gz

doc/cn/cluster_setup.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ Tera集群搭建
4747
* 在master节点上,执行以下命令
4848
```
4949
cd ${tera_prefix}/bin
50-
nohup ./tera_main --flagfile=../conf/tera.flag --tera_role=master &> ../log/master.stderr &
50+
nohup ./tera_master --flagfile=../conf/tera.flag &> ../log/master.stderr &
5151
```
5252
* 在TabletServer节点上,执行以下命令
5353
```
5454
cd ${tera_prefix}/bin
55-
nohup ./tera_main --flagfile=../conf/tera.flag --tera_role=tabletnode &> ../log/tabletserver.stderr &
55+
nohup ./tabletserver --flagfile=../conf/tera.flag &> ../log/tabletserver.stderr &
5656
```
5757
5. 停止tera
58-
* 用kill命令杀掉tera_main对应的进程即可
58+
* 用kill命令杀掉tera_master和tabletserver对应的进程即可

doc/cn/onebox.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
## 准备工作
1010
1. 完成Tera的编译,请参考:https://github.com/baidu/tera/wiki/Build-Manual
11-
2. 将编译生成的tera_main, teracli两个二进制文件放入example/onebox/bin
11+
2. 将编译生成的tera_master, tabletserver, teracli三个二进制文件放入example/onebox/bin
1212
3. 如有需要,通过修改example/onebox/bin/config中的选项配置tabletnode个数
1313
4. 进入example/onebox/bin/目录
1414

doc/en/onebox.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Your can run Tera in pseudo-distributed mode which means that Tera runs on a sin
99
1. git clone https://github.com/baidu/tera.git
1010
1. cd tera
1111
1. ./build.sh
12-
1. cp {tera_main,teracli} example/onebox/bin
12+
1. cp {tera_master,tabletserver,teracli} example/onebox/bin
1313
1. cd example/onebox/bin
1414

1515

doc/ubuntu_install_onebox_and_cluster.md

+7-4
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,15 @@ ubuntu安装tera(单机和集群)
4141
4). 提示错误:fatal error: readline/history.h:
4242
sudo apt-get install libreadline-dev
4343

44-
5). 提示缺少ncurses包:
44+
5). 提示缺少ncurses包:
4545
sudo apt-get install libncurses5-dev
4646

47+
6). 提示 "cmake: command not found":
48+
sudo apt-get install cmake
49+
4750
3. 等待编译结束 & 单机体验
4851

49-
将编译生成的tera_main和teracli文件copy到example/onebox/bin目录下,进入目录执行:sh launch_tera.sh。然后执行./teracli进终端交互。Have fun!
52+
将编译生成的tera_master,tabletserver和teracli文件copy到example/onebox/bin目录下,进入目录执行:sh launch_tera.sh。然后执行./teracli进终端交互。Have fun!
5053
详见:https://github.com/baidu/tera/blob/master/doc/onebox-cn.md
5154

5255

@@ -259,10 +262,10 @@ ubuntu安装tera(单机和集群)
259262
> 在zookeeper目录中执行:./bin/zkServer.sh status,找到leader那台机器,即master
260263
> 进入tera_root的bin目录,
261264
在master上执行:
262-
nohup ./tera_main --flagfile=../conf/tera.flag --tera_role=master &> ../log/master.stderr &
265+
nohup ./tera_master --flagfile=../conf/tera.flag &> ../log/master.stderr &
263266
264267
在其他两台slave机器上执行:
265-
nohup ./tera_main --flagfile=../conf/tera.flag --tera_role=tabletnode &> ../log/tabletserver.stderr &
268+
nohup ./tabletserver --flagfile=../conf/tera.flag &> ../log/tabletserver.stderr &
266269
267270
> 在任意一台机器上的tera_root/bin目录中执行:./teracli
268271
Have Fun!

example/docker/master

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/jre/lib/amd64/:/home/ubuntu/leiliyuan/hadoop-1.2.1/lib:$(hadoop classpath)
44
cd /opt/tera/bin
55

6-
nohup ./tera_main --flagfile=../conf/tera.flag --tera_local_addr $1 --tera_role=master &> ../../share/log/master.stderr &
6+
nohup ./tera_master --flagfile=../conf/tera.flag --tera_local_addr $1 &> ../../share/log/master.stderr &

example/docker/tabletnode

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/jre/lib/amd64/:/home/ubuntu/leiliyuan/hadoop-1.2.1/lib:$(hadoop classpath)
44
cd /opt/tera/bin
5-
nohup ./tera_main --flagfile=../conf/tera.flag --tera_local_addr $1 --tera_role=tabletnode &> ../../share/log/tabletserver.stderr &
5+
nohup ./tabletserver --flagfile=../conf/tera.flag --tera_local_addr $1 &> ../../share/log/tabletserver.stderr &

example/onebox/bin/kill_tera.sh

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
#!/bin/bash
22
source ./config
33

4-
for ((i=0; i<=${TABLETNODE_NUM}; i++)); do
5-
PID=`ps x | grep tera_main | grep $((PORT+i)) | awk '{print $1}'`;
4+
PID=`ps x | grep tera_master | grep $PORT | awk '{print $1}'`;
5+
if [ ${PID}"x" != "x" ]; then
6+
kill -9 $PID;
7+
fi
8+
9+
for ((i=1; i<=${TABLETNODE_NUM}; i++)); do
10+
PID=`ps x | grep tabletserver | grep $((PORT+i)) | awk '{print $1}'`;
611
if [ ${PID}"x" != "x" ]; then
712
kill -9 $PID;
813
fi

example/onebox/bin/launch_tera.sh

+2-4
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@ for ((i=1; i<=$TABLETNODE_NUM; i++)); do
3333
if [ ! -x $CACHE_PATH ];then
3434
mkdir -p $CACHE_PATH
3535
fi
36-
${CURRENT_DIR}/tera_main \
36+
${CURRENT_DIR}/tabletserver \
3737
--flagfile=${CURRENT_DIR}/../conf/tera.flag \
38-
--tera_role=tabletnode \
3938
--tera_tabletnode_port=$((PORT+i)) \
4039
--tera_leveldb_log_path=${LEVELDB_LOG_FILE} \
4140
--tera_tabletnode_cache_paths=${CACHE_PATH} \
@@ -53,9 +52,8 @@ MASTER_LOG_FILE=${CURRENT_DIR}/../log/master.stderr
5352
if [ -f ${MASTER_LOG_FILE} ];then
5453
mv ${MASTER_LOG_FILE} ${MASTER_LOG_FILE}.${TIME}
5554
fi
56-
${CURRENT_DIR}/tera_main \
55+
${CURRENT_DIR}/tera_master \
5756
--flagfile=${CURRENT_DIR}/../conf/tera.flag \
58-
--tera_role=master \
5957
--tera_master_port=${PORT} \
6058
--tera_fake_zk_path_prefix=${FAKE_ZK_PATH_PREFIX} \
6159
--tera_log_prefix=master &> ${MASTER_LOG_FILE} </dev/null &

ft_test.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ if ! $run_without_fetch; then
5151
cp example/onebox/conf/tera.flag $test_dir/conf
5252

5353
cp build/bin/teracli $test_dir/bin
54-
cp build/bin/tera_main $test_dir/bin
54+
cp build/bin/tera_master $test_dir/bin
55+
cp build/bin/tabletserver $test_dir/bin
5556
cp build/bin/tera_test $test_dir/bin
5657
cp build/benchmark/tera_bench $test_dir/bin
5758
cp build/benchmark/tera_mark $test_dir/bin

include/tera_c.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,15 @@ void tera_table_apply_reader_batch(tera_table_t* table, tera_row_reader_t** read
6868
tera_row_mutation_t* tera_row_mutation(tera_table_t* table, const char* row_key, uint64_t keylen);
6969
void tera_table_apply_mutation(tera_table_t* table, tera_row_mutation_t* mutation);
7070
void tera_table_apply_mutation_batch(tera_table_t* table, tera_row_mutation_t** mutation_batch, int64_t num);
71-
void tera_row_mutation_put_kv(tera_row_mutation_t* mu,
72-
const char* val, uint64_t vallen, int32_t ttl);
71+
void tera_row_mutation_put_kv(tera_row_mutation_t* mu,
72+
const char* val, uint64_t vallen, int32_t ttl);
7373
void tera_row_mutation_put(tera_row_mutation_t* mu, const char* cf,
7474
const char* qu, uint64_t qulen,
7575
const char* val, uint64_t vallen);
76+
void tera_row_mutation_put_with_timestamp(tera_row_mutation_t* mu, const char* cf,
77+
const char* qu, uint64_t qulen,
78+
int64_t timestamp,
79+
const char* val, uint64_t vallen);
7680
void tera_row_mutation_put_int64(tera_row_mutation_t* mu, const char* cf,
7781
const char* qu, uint64_t qulen, int64_t val);
7882
void tera_row_mutation_delete_column(tera_row_mutation_t* mu, const char* cf,

readme-cn.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ map<RowKey, map<ColummnFamily:Qualifier, map<Timestamp, Value> > >
2121

2222
#系统架构
2323
系统主要由Tabletserver、Master和ClientSDK三部分构成。其中Tabletserver是核心服务器,承载着所有的数据管理与访问;Master是系统的仲裁者,负责表格的创建、schema更新与负载均衡;ClientSDK包含供管理员使用的命令行工具teracli和给用户使用的SDK。
24-
表格被按RowKey全局排序,并横向切分成多个Tablet,每个Tablet负责服务RowKey的一个区间,表格又被纵向且分为多个LocalityGroup,一个Tablet的多个Localitygroup在物理上单独存储,可以选择不同的存储介质,以优化访问效率。
24+
表格被按RowKey全局排序,并横向切分成多个Tablet,每个Tablet负责服务RowKey的一个区间,表格又被纵向切分为多个LocalityGroup,一个Tablet的多个Localitygroup在物理上单独存储,可以选择不同的存储介质,以优化访问效率。
2525

2626
![架构图](resources/images/arch.png)
2727

src/benchmark/mark.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ void Adapter::Write(const std::string& row,
7474
if (FLAGS_verify) {
7575
add_checksum(row, family, qualifier, &value);
7676
}
77-
row_mu->Put(family, qualifier, timestamp, value);
77+
row_mu->Put(family, qualifier, value, (int64_t)timestamp);
7878
if (FLAGS_verify) {
7979
remove_checksum(&value);
8080
}

src/benchmark/mark_main.cc

+2
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,7 @@ void print_summary(Statistic* marker, double duration) {
424424

425425
print_opt(marker);
426426
std::streamsize precision = std::cout.precision();
427+
std::ios::fmtflags flag(std::cout.flags());
427428
std::cout.precision(3);
428429
std::cout << " Summary: " << std::fixed << duration << " s\n"
429430
<< " total: " << finish_size << " bytes "
@@ -434,6 +435,7 @@ void print_summary(Statistic* marker, double duration) {
434435
<< (double)success_size / 1048576 / duration << " MB/s"
435436
<< std::endl;
436437
std::cout.precision(precision);
438+
std::cout.flags(flag);
437439
}
438440

439441
void print_summary_proc(Adapter* adapter, double duration) {

src/common/thread.h

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@
77
#ifndef TERA_COMMON_THREAD_H_
88
#define TERA_COMMON_THREAD_H_
99

10+
#include <functional>
1011
#include <pthread.h>
1112

12-
#include <boost/function.hpp>
13-
1413
namespace common {
1514

1615
class Thread {
1716
public:
1817
Thread() : tid_(0) {}
19-
bool Start(boost::function<void()> thread_proc) {
18+
bool Start(std::function<void()> thread_proc) {
2019
user_proc_ = thread_proc;
2120
int ret = pthread_create(&tid_, NULL, ProcWrapper, this);
2221
return (ret == 0);
@@ -33,7 +32,7 @@ class Thread {
3332
}
3433

3534
private:
36-
boost::function<void()> user_proc_;
35+
std::function<void()> user_proc_;
3736
pthread_t tid_;
3837
};
3938

src/common/thread_attributes.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class ThreadAttributes {
4040
}
4141

4242
bool SetCpuMask(int32_t cpu_id) {
43-
if (cpu_id < 0 || cpu_id > cpu_num_) {
43+
if (cpu_id < 0 || cpu_id >= cpu_num_) {
4444
return false;
4545
}
4646

src/common/thread_pool.h

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
#define TERA_COMMON_THREAD_POOL_H_
99

1010
#include <deque>
11+
#include <functional>
1112
#include <map>
1213
#include <queue>
1314
#include <set>
1415
#include <sstream>
1516
#include <vector>
16-
#include <boost/function.hpp>
17+
1718
#include "mutex.h"
1819
#include "timer.h"
1920

@@ -60,7 +61,8 @@ class ThreadPool {
6061
bool Stop(bool wait) {
6162
if (wait) {
6263
while (pending_num_ > 0) {
63-
usleep(10000);
64+
struct timespec ts = {0, 10000000};
65+
nanosleep(&ts, NULL);
6466
}
6567
}
6668

@@ -77,7 +79,7 @@ class ThreadPool {
7779
}
7880

7981
// Task definition.
80-
typedef boost::function<void (int64_t)> Task;
82+
typedef std::function<void (int64_t)> Task;
8183

8284
// Add a task to the thread pool.
8385
void AddTask(const Task& task) {

0 commit comments

Comments
 (0)