Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Willemt Raft
Commits
aaa5ff81
Commit
aaa5ff81
authored
May 17, 2018
by
Yossi Gottlieb
Committed by
Willem
May 17, 2018
Browse files
Add custom heap management hooks. (#56)
parent
d9d35596
Changes
5
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
aaa5ff81
...
...
@@ -868,4 +868,13 @@ int raft_node_is_voting_committed(raft_node_t* me_);
**/
int
raft_node_is_addition_committed
(
raft_node_t
*
me_
);
/**
* Register custom heap management functions, to be used if an alternative
* heap management is used.
**/
void
raft_set_heap_functions
(
void
*
(
*
_malloc
)(
size_t
),
void
*
(
*
_calloc
)(
size_t
,
size_t
),
void
*
(
*
_realloc
)(
void
*
,
size_t
),
void
(
*
_free
)(
void
*
));
#endif
/* RAFT_H_ */
include/raft_private.h
View file @
aaa5ff81
...
...
@@ -136,6 +136,12 @@ int raft_node_is_active(raft_node_t* me_);
void
raft_node_set_voting_committed
(
raft_node_t
*
me_
,
int
voting
);
int
raft_node_set_addition_committed
(
raft_node_t
*
me_
,
int
committed
);
void
raft_node_set_addition_committed
(
raft_node_t
*
me_
,
int
committed
);
/* Heap functions */
extern
void
*
(
*
__raft_malloc
)(
size_t
size
);
extern
void
*
(
*
__raft_calloc
)(
size_t
nmemb
,
size_t
size
);
extern
void
*
(
*
__raft_realloc
)(
void
*
ptr
,
size_t
size
);
extern
void
(
*
__raft_free
)(
void
*
ptr
);
#endif
/* RAFT_PRIVATE_H_ */
src/raft_log.c
View file @
aaa5ff81
...
...
@@ -54,7 +54,7 @@ static int __ensurecapacity(log_private_t * me)
if
(
me
->
count
<
me
->
size
)
return
0
;
temp
=
(
raft_entry_t
*
)
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
*
2
);
temp
=
(
raft_entry_t
*
)
__raft_
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
*
2
);
if
(
!
temp
)
return
RAFT_ERR_NOMEM
;
...
...
@@ -66,7 +66,7 @@ static int __ensurecapacity(log_private_t * me)
}
/* clean up old entries */
free
(
me
->
entries
);
__raft_
free
(
me
->
entries
);
me
->
size
*=
2
;
me
->
entries
=
temp
;
...
...
@@ -101,14 +101,14 @@ int log_load_from_snapshot(log_t *me_, int idx, int term)
log_t
*
log_alloc
(
int
initial_size
)
{
log_private_t
*
me
=
(
log_private_t
*
)
calloc
(
1
,
sizeof
(
log_private_t
));
log_private_t
*
me
=
(
log_private_t
*
)
__raft_
calloc
(
1
,
sizeof
(
log_private_t
));
if
(
!
me
)
return
NULL
;
me
->
size
=
initial_size
;
log_clear
((
log_t
*
)
me
);
me
->
entries
=
(
raft_entry_t
*
)
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
);
me
->
entries
=
(
raft_entry_t
*
)
__raft_
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
);
if
(
!
me
->
entries
)
{
free
(
me
);
__raft_
free
(
me
);
return
NULL
;
}
return
(
log_t
*
)
me
;
...
...
@@ -300,8 +300,8 @@ void log_free(log_t * me_)
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
free
(
me
->
entries
);
free
(
me
);
__raft_
free
(
me
->
entries
);
__raft_
free
(
me
);
}
int
log_get_current_idx
(
log_t
*
me_
)
...
...
src/raft_node.c
View file @
aaa5ff81
...
...
@@ -15,6 +15,7 @@
#include <assert.h>
#include "raft.h"
#include "raft_private.h"
#define RAFT_NODE_VOTED_FOR_ME (1 << 0)
#define RAFT_NODE_VOTING (1 << 1)
...
...
@@ -38,7 +39,7 @@ typedef struct
raft_node_t
*
raft_node_new
(
void
*
udata
,
int
id
)
{
raft_node_private_t
*
me
;
me
=
(
raft_node_private_t
*
)
calloc
(
1
,
sizeof
(
raft_node_private_t
));
me
=
(
raft_node_private_t
*
)
__raft_
calloc
(
1
,
sizeof
(
raft_node_private_t
));
if
(
!
me
)
return
NULL
;
me
->
udata
=
udata
;
...
...
@@ -51,7 +52,7 @@ raft_node_t* raft_node_new(void* udata, int id)
void
raft_node_free
(
raft_node_t
*
me_
)
{
free
(
me_
);
__raft_
free
(
me_
);
}
int
raft_node_get_next_idx
(
raft_node_t
*
me_
)
...
...
src/raft_server.c
View file @
aaa5ff81
...
...
@@ -28,6 +28,22 @@
#define max(a, b) ((a) < (b) ? (b) : (a))
#endif
void
*
(
*
__raft_malloc
)(
size_t
)
=
malloc
;
void
*
(
*
__raft_calloc
)(
size_t
,
size_t
)
=
calloc
;
void
*
(
*
__raft_realloc
)(
void
*
,
size_t
)
=
realloc
;
void
(
*
__raft_free
)(
void
*
)
=
free
;
void
raft_set_heap_functions
(
void
*
(
*
_malloc
)(
size_t
),
void
*
(
*
_calloc
)(
size_t
,
size_t
),
void
*
(
*
_realloc
)(
void
*
,
size_t
),
void
(
*
_free
)(
void
*
))
{
__raft_malloc
=
_malloc
;
__raft_calloc
=
_calloc
;
__raft_realloc
=
_realloc
;
__raft_free
=
_free
;
}
static
void
__log
(
raft_server_t
*
me_
,
raft_node_t
*
node
,
const
char
*
fmt
,
...)
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
...
@@ -53,7 +69,7 @@ void raft_randomize_election_timeout(raft_server_t* me_)
raft_server_t
*
raft_new
()
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
calloc
(
1
,
sizeof
(
raft_server_private_t
));
(
raft_server_private_t
*
)
__raft_
calloc
(
1
,
sizeof
(
raft_server_private_t
));
if
(
!
me
)
return
NULL
;
me
->
current_term
=
0
;
...
...
@@ -64,7 +80,7 @@ raft_server_t* raft_new()
raft_randomize_election_timeout
((
raft_server_t
*
)
me
);
me
->
log
=
log_new
();
if
(
!
me
->
log
)
{
free
(
me
);
__raft_
free
(
me
);
return
NULL
;
}
me
->
voting_cfg_change_log_idx
=
-
1
;
...
...
@@ -91,7 +107,7 @@ void raft_free(raft_server_t* me_)
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
log_free
(
me
->
log
);
free
(
me_
);
__raft_
free
(
me_
);
}
void
raft_clear
(
raft_server_t
*
me_
)
...
...
@@ -915,7 +931,7 @@ raft_node_t* raft_add_node(raft_server_t* me_, void* udata, int id, int is_self)
node
=
raft_node_new
(
udata
,
id
);
if
(
!
node
)
return
NULL
;
void
*
p
=
realloc
(
me
->
nodes
,
sizeof
(
void
*
)
*
(
me
->
num_nodes
+
1
));
void
*
p
=
__raft_
realloc
(
me
->
nodes
,
sizeof
(
void
*
)
*
(
me
->
num_nodes
+
1
));
if
(
!
p
)
{
raft_node_free
(
node
);
return
NULL
;
...
...
@@ -1076,7 +1092,9 @@ void raft_offer_log(raft_server_t* me_, raft_entry_t* ety, const int idx)
break
;
case
RAFT_LOGTYPE_ADD_NODE
:
node
=
raft_add_node
(
me_
,
NULL
,
node_id
,
is_self
);
if
(
!
node
)
{
node
=
raft_add_node
(
me_
,
NULL
,
node_id
,
is_self
);
}
assert
(
node
);
assert
(
raft_node_is_voting
(
node
));
break
;
...
...
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