Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
B
brpc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
brpc
Commits
0478fffe
Commit
0478fffe
authored
7 years ago
by
wuchengcheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
delete couchbase example file
parent
bbced206
master
0.9.8-rc01
0.9.7
0.9.7-rc03
0.9.7-rc02
0.9.7-rc01
0.9.6
0.9.6-rc03
0.9.6-rc02
0.9.6-rc01
0.9.5
v0.9.0
No related merge requests found
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
0 additions
and
229 deletions
+0
-229
Makefile
example/couchbase_c++/Makefile
+0
-38
client.cpp
example/couchbase_c++/client.cpp
+0
-191
No files found.
example/couchbase_c++/Makefile
deleted
100644 → 0
View file @
bbced206
BRPC_PATH
=
../../
include
$(BRPC_PATH)/config.mk
CXXFLAGS
+=
$(CPPFLAGS)
-std
=
c++0x
-DNDEBUG
-O2
-D__const__
=
-pipe
-W
-Wall
-fPIC
-fno-omit-frame-pointer
HDRS
+=
$(BRPC_PATH)
/output/include
LIBS
+=
$(BRPC_PATH)
/output/lib
HDRPATHS
=
$
(
addprefix
-I
,
$(HDRS)
)
LIBPATHS
=
$
(
addprefix
-L
,
$(LIBS)
)
COMMA
=
,
SOPATHS
=
$
(
addprefix
-Wl
$(COMMA)
-rpath
=
,
$(LIBS)
)
STATIC_LINKINGS
+=
-lbrpc
SOURCES
=
$
(
wildcard
*
.cpp
)
OBJS
=
$
(
addsuffix .o,
$
(
basename
$(SOURCES)
))
.PHONY
:
all
all
:
couchbase_client
.PHONY
:
clean
clean
:
@
echo
"Cleaning"
@
rm
-rf
couchbase_client
$(OBJS)
couchbase_client
:
$(OBJS)
@
echo
"Linking
$@
"
ifneq
(
"$(LINK_SO)"
,
""
)
@$(CXX)
$(LIBPATHS)
$(SOPATHS)
-Xlinker
"-("
$^
-Xlinker
"-)"
$(STATIC_LINKINGS)
$(DYNAMIC_LINKINGS)
-o
$@
else
@$(CXX)
$(LIBPATHS)
-Xlinker
"-("
$^
-Wl,-Bstatic
$(STATIC_LINKINGS)
-Wl,-Bdynamic
-Xlinker
"-)"
$(DYNAMIC_LINKINGS)
-o
$@
endif
%.o
:
%.cpp
@
echo
"Compiling
$@
"
@
$(CXX)
-c
$(HDRPATHS)
$(CXXFLAGS)
$<
-o
$@
%.o
:
%.cc
@
echo
"Compiling
$@
"
@
$(CXX)
-c
$(HDRPATHS)
$(CXXFLAGS)
$<
-o
$@
This diff is collapsed.
Click to expand it.
example/couchbase_c++/client.cpp
deleted
100644 → 0
View file @
bbced206
// Copyright (c) 2014 Baidu, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// A multi-threaded client getting keys from a memcache server constantly.
#include <gflags/gflags.h>
#include <bthread/bthread.h>
#include <butil/logging.h>
#include <butil/string_printf.h>
#include <brpc/channel.h>
#include <brpc/memcache.h>
#include <brpc/policy/couchbase_authenticator.h>
DEFINE_int32
(
thread_num
,
10
,
"Number of threads to send requests"
);
DEFINE_bool
(
use_bthread
,
false
,
"Use bthread to send requests"
);
DEFINE_string
(
connection_type
,
""
,
"Connection type. Available values: single, pooled, short"
);
DEFINE_string
(
server
,
"0.0.0.0:11211"
,
"IP Address of server"
);
DEFINE_string
(
bucket_name
,
""
,
"Couchbase bucktet name"
);
DEFINE_string
(
bucket_password
,
""
,
"Couchbase bucket password"
);
DEFINE_string
(
load_balancer
,
""
,
"The algorithm for load balancing"
);
DEFINE_int32
(
timeout_ms
,
100
,
"RPC timeout in milliseconds"
);
DEFINE_int32
(
max_retry
,
3
,
"Max retries(not including the first RPC)"
);
DEFINE_bool
(
dont_fail
,
false
,
"Print fatal when some call failed"
);
DEFINE_int32
(
exptime
,
0
,
"The to-be-got data will be expired after so many seconds"
);
DEFINE_string
(
key
,
"hello"
,
"The key to be get"
);
DEFINE_string
(
value
,
"world"
,
"The value associated with the key"
);
DEFINE_int32
(
batch
,
1
,
"Pipelined Operations"
);
bvar
::
LatencyRecorder
g_latency_recorder
(
"client"
);
bvar
::
Adder
<
int
>
g_error_count
(
"client_error_count"
);
butil
::
static_atomic
<
int
>
g_sender_count
=
BUTIL_STATIC_ATOMIC_INIT
(
0
);
static
void
*
sender
(
void
*
arg
)
{
google
::
protobuf
::
RpcChannel
*
channel
=
static_cast
<
google
::
protobuf
::
RpcChannel
*>
(
arg
);
const
int
base_index
=
g_sender_count
.
fetch_add
(
1
,
butil
::
memory_order_relaxed
);
std
::
string
value
;
std
::
vector
<
std
::
pair
<
std
::
string
,
std
::
string
>
>
kvs
;
kvs
.
resize
(
FLAGS_batch
);
for
(
int
i
=
0
;
i
<
FLAGS_batch
;
++
i
)
{
kvs
[
i
].
first
=
butil
::
string_printf
(
"%s%d"
,
FLAGS_key
.
c_str
(),
base_index
+
i
);
kvs
[
i
].
second
=
butil
::
string_printf
(
"%s%d"
,
FLAGS_value
.
c_str
(),
base_index
+
i
);
}
brpc
::
MemcacheRequest
request
;
for
(
int
i
=
0
;
i
<
FLAGS_batch
;
++
i
)
{
CHECK
(
request
.
Get
(
kvs
[
i
].
first
));
}
while
(
!
brpc
::
IsAskedToQuit
())
{
// We will receive response synchronously, safe to put variables
// on stack.
brpc
::
MemcacheResponse
response
;
brpc
::
Controller
cntl
;
// Because `done'(last parameter) is NULL, this function waits until
// the response comes back or error occurs(including timedout).
channel
->
CallMethod
(
NULL
,
&
cntl
,
&
request
,
&
response
,
NULL
);
const
int64_t
elp
=
cntl
.
latency_us
();
if
(
!
cntl
.
Failed
())
{
g_latency_recorder
<<
cntl
.
latency_us
();
for
(
int
i
=
0
;
i
<
FLAGS_batch
;
++
i
)
{
uint32_t
flags
;
if
(
!
response
.
PopGet
(
&
value
,
&
flags
,
NULL
))
{
LOG
(
INFO
)
<<
"Fail to GET the key, "
<<
response
.
LastError
();
brpc
::
AskToQuit
();
return
NULL
;
}
CHECK
(
flags
==
0xdeadbeef
+
base_index
+
i
)
<<
"flags="
<<
flags
;
CHECK
(
kvs
[
i
].
second
==
value
)
<<
"base="
<<
base_index
<<
" i="
<<
i
<<
" value="
<<
value
;
}
}
else
{
g_error_count
<<
1
;
CHECK
(
brpc
::
IsAskedToQuit
()
||
!
FLAGS_dont_fail
)
<<
"error="
<<
cntl
.
ErrorText
()
<<
" latency="
<<
elp
;
// We can't connect to the server, sleep a while. Notice that this
// is a specific sleeping to prevent this thread from spinning too
// fast. You should continue the business logic in a production
// server rather than sleeping.
bthread_usleep
(
50000
);
}
}
return
NULL
;
}
int
main
(
int
argc
,
char
*
argv
[])
{
// Parse gflags. We recommend you to use gflags as well.
GFLAGS_NS
::
ParseCommandLineFlags
(
&
argc
,
&
argv
,
true
);
if
(
FLAGS_exptime
<
0
)
{
FLAGS_exptime
=
0
;
}
// A Channel represents a communication line to a Server. Notice that
// Channel is thread-safe and can be shared by all threads in your program.
brpc
::
Channel
channel
;
brpc
::
policy
::
CouchbaseAuthenticator
auth
(
FLAGS_bucket_name
,
FLAGS_bucket_password
);
// Initialize the channel, NULL means using default options.
brpc
::
ChannelOptions
options
;
options
.
protocol
=
brpc
::
PROTOCOL_MEMCACHE
;
options
.
connection_type
=
FLAGS_connection_type
;
options
.
timeout_ms
=
FLAGS_timeout_ms
/*milliseconds*/
;
options
.
max_retry
=
FLAGS_max_retry
;
options
.
auth
=
&
auth
;
if
(
channel
.
Init
(
FLAGS_server
.
c_str
(),
FLAGS_load_balancer
.
c_str
(),
&
options
)
!=
0
)
{
LOG
(
ERROR
)
<<
"Fail to initialize channel"
;
return
-
1
;
}
// Pipeline #batch * #thread_num SET requests into memcache so that we
// have keys to get.
brpc
::
MemcacheRequest
request
;
brpc
::
MemcacheResponse
response
;
brpc
::
Controller
cntl
;
for
(
int
i
=
0
;
i
<
FLAGS_batch
*
FLAGS_thread_num
;
++
i
)
{
if
(
!
request
.
Set
(
butil
::
string_printf
(
"%s%d"
,
FLAGS_key
.
c_str
(),
i
),
butil
::
string_printf
(
"%s%d"
,
FLAGS_value
.
c_str
(),
i
),
0xdeadbeef
+
i
,
FLAGS_exptime
,
0
))
{
LOG
(
ERROR
)
<<
"Fail to SET "
<<
i
<<
"th request"
;
return
-
1
;
}
}
channel
.
CallMethod
(
NULL
,
&
cntl
,
&
request
,
&
response
,
NULL
);
if
(
cntl
.
Failed
())
{
LOG
(
ERROR
)
<<
"Fail to access memcache, "
<<
cntl
.
ErrorText
();
return
-
1
;
}
for
(
int
i
=
0
;
i
<
FLAGS_batch
*
FLAGS_thread_num
;
++
i
)
{
if
(
!
response
.
PopSet
(
NULL
))
{
LOG
(
ERROR
)
<<
"Fail to SET memcache, i="
<<
i
<<
", "
<<
response
.
LastError
();
return
-
1
;
}
}
if
(
FLAGS_exptime
>
0
)
{
LOG
(
INFO
)
<<
"Set "
<<
FLAGS_batch
*
FLAGS_thread_num
<<
" values, expired after "
<<
FLAGS_exptime
<<
" seconds"
;
}
else
{
LOG
(
INFO
)
<<
"Set "
<<
FLAGS_batch
*
FLAGS_thread_num
<<
" values, never expired"
;
}
std
::
vector
<
bthread_t
>
tids
;
tids
.
resize
(
FLAGS_thread_num
);
if
(
!
FLAGS_use_bthread
)
{
for
(
int
i
=
0
;
i
<
FLAGS_thread_num
;
++
i
)
{
if
(
pthread_create
(
&
tids
[
i
],
NULL
,
sender
,
&
channel
)
!=
0
)
{
LOG
(
ERROR
)
<<
"Fail to create pthread"
;
return
-
1
;
}
}
}
else
{
for
(
int
i
=
0
;
i
<
FLAGS_thread_num
;
++
i
)
{
if
(
bthread_start_background
(
&
tids
[
i
],
NULL
,
sender
,
&
channel
)
!=
0
)
{
LOG
(
ERROR
)
<<
"Fail to create bthread"
;
return
-
1
;
}
}
}
while
(
!
brpc
::
IsAskedToQuit
())
{
sleep
(
1
);
LOG
(
INFO
)
<<
"Accessing memcache server at qps="
<<
g_latency_recorder
.
qps
(
1
)
<<
" latency="
<<
g_latency_recorder
.
latency
(
1
);
}
LOG
(
INFO
)
<<
"memcache_client is going to quit"
;
for
(
int
i
=
0
;
i
<
FLAGS_thread_num
;
++
i
)
{
if
(
!
FLAGS_use_bthread
)
{
pthread_join
(
tids
[
i
],
NULL
);
}
else
{
bthread_join
(
tids
[
i
],
NULL
);
}
}
return
0
;
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment