Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
sds-keyval
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
4
Issues
4
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sds
sds-keyval
Commits
e3a69a7e
Commit
e3a69a7e
authored
Jan 22, 2020
by
Matthieu Dorier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated C++ APi
parent
9d73e02a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
56 additions
and
32 deletions
+56
-32
include/sdskv-client.hpp
include/sdskv-client.hpp
+53
-28
src/sdskv-benchmark.cc
src/sdskv-benchmark.cc
+3
-4
No files found.
include/sdskv-client.hpp
View file @
e3a69a7e
...
...
@@ -218,6 +218,10 @@ class client {
put
(
db
,
object_data
(
key
),
object_size
(
key
),
object_data
(
value
),
object_size
(
value
));
}
//////////////////////////
// PUT_MULTI methods
//////////////////////////
/**
* @brief Equivalent to sdskv_put_multi.
*
...
...
@@ -228,13 +232,10 @@ class client {
* @param values Array of values.
* @param vsizes Array of value sizes.
*/
void
put
(
const
database
&
db
,
void
put
_multi
(
const
database
&
db
,
hg_size_t
count
,
const
void
*
const
*
keys
,
const
hg_size_t
*
ksizes
,
const
void
*
const
*
values
,
const
hg_size_t
*
vsizes
)
const
;
//////////////////////////
// PUT_MULTI methods
//////////////////////////
/**
* @brief Version of put taking std::vectors instead of arrays of pointers.
...
...
@@ -245,7 +246,7 @@ class client {
* @param values Vector of pointers to values.
* @param vsizes Vector of value sizes.
*/
inline
void
put
(
const
database
&
db
,
inline
void
put
_multi
(
const
database
&
db
,
const
std
::
vector
<
const
void
*>&
keys
,
const
std
::
vector
<
hg_size_t
>&
ksizes
,
const
std
::
vector
<
const
void
*>&
values
,
const
std
::
vector
<
hg_size_t
>&
vsizes
)
const
{
if
(
keys
.
size
()
!=
ksizes
.
size
()
...
...
@@ -253,7 +254,7 @@ class client {
||
keys
.
size
()
!=
vsizes
.
size
())
{
throw
std
::
length_error
(
"Provided vectors should have the same size"
);
}
put
(
db
,
keys
.
size
(),
keys
.
data
(),
ksizes
.
data
(),
values
.
data
(),
vsizes
.
data
());
put
_multi
(
db
,
keys
.
size
(),
keys
.
data
(),
ksizes
.
data
(),
values
.
data
(),
vsizes
.
data
());
}
/**
...
...
@@ -267,7 +268,7 @@ class client {
* @param values Vector of values.
*/
template
<
typename
K
,
typename
V
>
inline
void
put
(
const
database
&
db
,
inline
void
put
_multi
(
const
database
&
db
,
const
std
::
vector
<
K
>&
keys
,
const
std
::
vector
<
V
>&
values
)
{
if
(
keys
.
size
()
!=
values
.
size
())
{
throw
std
::
length_error
(
"Provided vectors should have the same size"
);
...
...
@@ -284,7 +285,7 @@ class client {
vsizes
.
push_back
(
object_size
(
v
));
vdata
.
push_back
(
object_data
(
v
));
}
put
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
put
_multi
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
}
/**
...
...
@@ -301,7 +302,7 @@ class client {
* @param vend end of the iterator to values.
*/
template
<
typename
IK
,
typename
IV
>
inline
void
put
(
const
database
&
db
,
inline
void
put
_multi
(
const
database
&
db
,
const
IK
&
kbegin
,
const
IK
&
kend
,
const
IV
&
vbegin
,
const
IV
&
vend
)
const
{
hg_size_t
count
=
std
::
distance
(
kbegin
,
kend
);
...
...
@@ -320,7 +321,7 @@ class client {
vsizes
.
push_back
(
object_size
(
*
it
));
vdata
.
push_back
(
object_data
(
*
it
));
}
put
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
put
_multi
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
}
//////////////////////////
...
...
@@ -399,7 +400,7 @@ class client {
* @param ksizes Array of key sizes.
* @param vsizes Resulting value sizes.
*/
bool
length
(
const
database
&
db
,
bool
length
_multi
(
const
database
&
db
,
hg_size_t
num
,
const
void
*
const
*
keys
,
const
hg_size_t
*
ksizes
,
hg_size_t
*
vsizes
)
const
;
...
...
@@ -413,7 +414,7 @@ class client {
* @param vsizes Resulting vector of value sizes.
*/
template
<
typename
K
>
inline
bool
length
(
const
database
&
db
,
inline
bool
length
_multi
(
const
database
&
db
,
const
std
::
vector
<
K
>&
keys
,
std
::
vector
<
hg_size_t
>&
vsizes
)
const
{
vsizes
.
resize
(
keys
.
size
());
...
...
@@ -423,7 +424,7 @@ class client {
kdata
.
push_back
(
object_data
(
k
));
ksizes
.
push_back
(
object_size
(
k
));
}
return
length
(
db
,
keys
.
size
(),
kdata
.
data
(),
ksizes
.
data
(),
vsizes
.
data
());
return
length
_multi
(
db
,
keys
.
size
(),
kdata
.
data
(),
ksizes
.
data
(),
vsizes
.
data
());
}
/**
...
...
@@ -438,9 +439,9 @@ class client {
* @return Vector of corresponding value sizes.
*/
template
<
typename
K
>
inline
std
::
vector
<
hg_size_t
>
length
(
const
database
&
db
,
const
std
::
vector
<
K
>&
keys
)
const
{
inline
std
::
vector
<
hg_size_t
>
length
_multi
(
const
database
&
db
,
const
std
::
vector
<
K
>&
keys
)
const
{
std
::
vector
<
hg_size_t
>
vsizes
(
keys
.
size
());
length
(
db
,
keys
,
vsizes
);
length
_multi
(
db
,
keys
,
vsizes
);
return
vsizes
;
}
...
...
@@ -528,7 +529,7 @@ class client {
* @param values Array of value buffers.
* @param vsizes Array of sizes of value buffers.
*/
bool
get
(
const
database
&
db
,
bool
get
_multi
(
const
database
&
db
,
hg_size_t
count
,
const
void
*
const
*
keys
,
const
hg_size_t
*
ksizes
,
void
**
values
,
hg_size_t
*
vsizes
)
const
;
...
...
@@ -541,7 +542,7 @@ class client {
* @param values Vector of value addresses.
* @param vsizes Vector of value sizes.
*/
inline
bool
get
(
const
database
&
db
,
inline
bool
get
_multi
(
const
database
&
db
,
const
std
::
vector
<
const
void
*>&
keys
,
const
std
::
vector
<
hg_size_t
>&
ksizes
,
std
::
vector
<
void
*>&
values
,
std
::
vector
<
hg_size_t
>&
vsizes
)
const
{
if
(
keys
.
size
()
!=
ksizes
.
size
()
...
...
@@ -549,7 +550,7 @@ class client {
||
keys
.
size
()
!=
vsizes
.
size
())
{
throw
std
::
length_error
(
"Provided vectors should have the same size"
);
}
return
get
(
db
,
keys
.
size
(),
keys
.
data
(),
ksizes
.
data
(),
values
.
data
(),
vsizes
.
data
());
return
get
_multi
(
db
,
keys
.
size
(),
keys
.
data
(),
ksizes
.
data
(),
values
.
data
(),
vsizes
.
data
());
}
/**
...
...
@@ -564,7 +565,7 @@ class client {
* @param values Vector of values.
*/
template
<
typename
K
,
typename
V
>
inline
bool
get
(
const
database
&
db
,
inline
bool
get
_multi
(
const
database
&
db
,
const
std
::
vector
<
K
>&
keys
,
std
::
vector
<
V
>&
values
)
const
{
if
(
keys
.
size
()
!=
values
.
size
())
{
throw
std
::
length_error
(
"Provided vectors should have the same size"
);
...
...
@@ -581,7 +582,7 @@ class client {
vsizes
.
push_back
(
object_size
(
v
));
vdata
.
push_back
(
object_data
(
v
));
}
get
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
get
_multi
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
for
(
unsigned
i
=
0
;
i
<
values
.
size
();
i
++
)
{
object_resize
(
values
[
i
],
vsizes
[
i
]);
}
...
...
@@ -602,7 +603,7 @@ class client {
* @param vend End iterator for values.
*/
template
<
typename
IK
,
typename
IV
>
inline
bool
get
(
const
database
&
db
,
inline
bool
get
_multi
(
const
database
&
db
,
const
IK
&
kbegin
,
const
IK
&
kend
,
const
IV
&
vbegin
,
const
IV
&
vend
)
const
{
hg_size_t
count
=
std
::
distance
(
kbegin
,
kend
);
...
...
@@ -621,7 +622,7 @@ class client {
vsizes
.
push_back
(
object_size
(
*
it
));
vdata
.
push_back
(
object_data
(
*
it
));
}
return
get
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
return
get
_multi
(
db
,
kdata
,
ksizes
,
vdata
,
vsizes
);
}
/**
...
...
@@ -637,17 +638,17 @@ class client {
* @return the resulting std::vector of values.
*/
template
<
typename
K
,
typename
V
>
inline
std
::
vector
<
V
>
get
(
inline
std
::
vector
<
V
>
get
_multi
(
const
database
&
db
,
const
std
::
vector
<
K
>&
keys
)
{
hg_size_t
num
=
keys
.
size
();
std
::
vector
<
hg_size_t
>
vsizes
(
num
);
length
(
db
,
keys
,
vsizes
);
length
_multi
(
db
,
keys
,
vsizes
);
std
::
vector
<
V
>
values
(
num
);
for
(
unsigned
i
=
0
;
i
<
num
;
i
++
)
{
object_resize
(
values
[
i
],
vsizes
[
i
]);
}
get
(
db
,
keys
,
values
);
get
_multi
(
db
,
keys
,
values
);
return
values
;
}
...
...
@@ -1298,6 +1299,14 @@ class database {
m_ph
.
m_client
->
put
(
*
this
,
std
::
forward
<
T
>
(
args
)...);
}
/**
* @brief @see client::put_multi.
*/
template
<
typename
...
T
>
void
put_multi
(
T
&&
...
args
)
const
{
m_ph
.
m_client
->
put_multi
(
*
this
,
std
::
forward
<
T
>
(
args
)...);
}
/**
* @brief @see client::length.
*/
...
...
@@ -1306,6 +1315,14 @@ class database {
return
m_ph
.
m_client
->
length
(
*
this
,
std
::
forward
<
T
>
(
args
)...);
}
/**
* @brief @see client::length_multi.
*/
template
<
typename
...
T
>
decltype
(
auto
)
length_multi
(
T
&&
...
args
)
const
{
return
m_ph
.
m_client
->
length_multi
(
*
this
,
std
::
forward
<
T
>
(
args
)...);
}
/**
* @brief @see client::get.
*/
...
...
@@ -1314,6 +1331,14 @@ class database {
return
m_ph
.
m_client
->
get
(
*
this
,
std
::
forward
<
T
>
(
args
)...);
}
/**
* @brief @see client::get_multi.
*/
template
<
typename
...
T
>
decltype
(
auto
)
get_multi
(
T
&&
...
args
)
const
{
return
m_ph
.
m_client
->
get_multi
(
*
this
,
std
::
forward
<
T
>
(
args
)...);
}
/**
* @brief @see client::exists
*/
...
...
@@ -1407,7 +1432,7 @@ inline void client::put(const database& db,
_CHECK_RET
(
ret
);
}
inline
void
client
::
put
(
const
database
&
db
,
inline
void
client
::
put
_multi
(
const
database
&
db
,
hg_size_t
count
,
const
void
*
const
*
keys
,
const
hg_size_t
*
ksizes
,
const
void
*
const
*
values
,
const
hg_size_t
*
vsizes
)
const
{
int
ret
=
sdskv_put_multi
(
db
.
m_ph
.
m_ph
,
db
.
m_db_id
,
...
...
@@ -1431,7 +1456,7 @@ inline bool client::exists(const database& db, const void* key, hg_size_t ksize)
return
flag
;
}
inline
bool
client
::
length
(
const
database
&
db
,
inline
bool
client
::
length
_multi
(
const
database
&
db
,
hg_size_t
num
,
const
void
*
const
*
keys
,
const
hg_size_t
*
ksizes
,
hg_size_t
*
vsizes
)
const
{
int
ret
=
sdskv_length_multi
(
db
.
m_ph
.
m_ph
,
db
.
m_db_id
,
...
...
@@ -1449,7 +1474,7 @@ inline bool client::get(const database& db,
return
true
;
}
inline
bool
client
::
get
(
const
database
&
db
,
inline
bool
client
::
get
_multi
(
const
database
&
db
,
hg_size_t
count
,
const
void
*
const
*
keys
,
const
hg_size_t
*
ksizes
,
void
**
values
,
hg_size_t
*
vsizes
)
const
{
int
ret
=
sdskv_get_multi
(
db
.
m_ph
.
m_ph
,
db
.
m_db_id
,
...
...
src/sdskv-benchmark.cc
View file @
e3a69a7e
...
...
@@ -241,10 +241,9 @@ class PutMultiBenchmark : public PutBenchmark {
m_vsizes
.
resize
(
count
);
m_vptrs
.
resize
(
count
);
}
db
.
put
(
m_kptrs
,
m_ksizes
,
m_vptrs
,
m_vsizes
);
db
.
put
_multi
(
m_kptrs
,
m_ksizes
,
m_vptrs
,
m_vsizes
);
remaining
-=
count
;
}
db
.
put
(
m_keys
,
m_vals
);
}
virtual
void
teardown
()
override
{
...
...
@@ -386,7 +385,7 @@ class GetMultiBenchmark : public GetBenchmark {
m_vsizes
.
resize
(
count
);
m_vptrs
.
resize
(
count
);
}
db
.
get
(
m_kptrs
,
m_ksizes
,
m_vptrs
,
m_vsizes
);
db
.
get
_multi
(
m_kptrs
,
m_ksizes
,
m_vptrs
,
m_vsizes
);
if
(
!
m_reuse_buffer
)
k
+=
count
;
j
+=
count
;
...
...
@@ -468,7 +467,7 @@ class LengthMultiBenchmark : public LengthBenchmark {
m_ksizes
[
i
]
=
m_keys
[
i
+
j
].
size
();
m_kptrs
[
i
]
=
(
const
void
*
)
m_keys
[
i
+
j
].
data
();
}
db
.
length
(
count
,
m_kptrs
.
data
(),
m_ksizes
.
data
(),
m_vsizes
.
data
()
+
k
);
db
.
length
_multi
(
count
,
m_kptrs
.
data
(),
m_ksizes
.
data
(),
m_vsizes
.
data
()
+
k
);
remaining
-=
count
;
j
+=
count
;
if
(
!
m_reuse_buffer
)
...
...
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