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
RedisLabs Raft
Commits
b4430b25
Commit
b4430b25
authored
Mar 04, 2018
by
Yossi Gottlieb
Browse files
Add custom heap management hooks.
parent
d1885191
Changes
5
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
b4430b25
...
@@ -870,4 +870,13 @@ int raft_node_is_voting_committed(raft_node_t* me_);
...
@@ -870,4 +870,13 @@ int raft_node_is_voting_committed(raft_node_t* me_);
**/
**/
int
raft_node_is_addition_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_ */
#endif
/* RAFT_H_ */
include/raft_private.h
View file @
b4430b25
...
@@ -136,6 +136,12 @@ int raft_node_is_active(raft_node_t* me_);
...
@@ -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
);
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_ */
#endif
/* RAFT_PRIVATE_H_ */
src/raft_log.c
View file @
b4430b25
...
@@ -54,7 +54,7 @@ static int __ensurecapacity(log_private_t * me)
...
@@ -54,7 +54,7 @@ static int __ensurecapacity(log_private_t * me)
if
(
me
->
count
<
me
->
size
)
if
(
me
->
count
<
me
->
size
)
return
0
;
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
)
if
(
!
temp
)
return
RAFT_ERR_NOMEM
;
return
RAFT_ERR_NOMEM
;
...
@@ -66,7 +66,7 @@ static int __ensurecapacity(log_private_t * me)
...
@@ -66,7 +66,7 @@ static int __ensurecapacity(log_private_t * me)
}
}
/* clean up old entries */
/* clean up old entries */
free
(
me
->
entries
);
__raft_
free
(
me
->
entries
);
me
->
size
*=
2
;
me
->
size
*=
2
;
me
->
entries
=
temp
;
me
->
entries
=
temp
;
...
@@ -101,14 +101,14 @@ int log_load_from_snapshot(log_t *me_, int idx, int term)
...
@@ -101,14 +101,14 @@ int log_load_from_snapshot(log_t *me_, int idx, int term)
log_t
*
log_alloc
(
int
initial_size
)
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
)
if
(
!
me
)
return
NULL
;
return
NULL
;
me
->
size
=
initial_size
;
me
->
size
=
initial_size
;
log_clear
((
log_t
*
)
me
);
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
)
{
if
(
!
me
->
entries
)
{
free
(
me
);
__raft_
free
(
me
);
return
NULL
;
return
NULL
;
}
}
return
(
log_t
*
)
me
;
return
(
log_t
*
)
me
;
...
@@ -300,8 +300,8 @@ void log_free(log_t * me_)
...
@@ -300,8 +300,8 @@ void log_free(log_t * me_)
{
{
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
free
(
me
->
entries
);
__raft_
free
(
me
->
entries
);
free
(
me
);
__raft_
free
(
me
);
}
}
int
log_get_current_idx
(
log_t
*
me_
)
int
log_get_current_idx
(
log_t
*
me_
)
...
...
src/raft_node.c
View file @
b4430b25
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
#include <assert.h>
#include <assert.h>
#include "raft.h"
#include "raft.h"
#include "raft_private.h"
#define RAFT_NODE_VOTED_FOR_ME (1 << 0)
#define RAFT_NODE_VOTED_FOR_ME (1 << 0)
#define RAFT_NODE_VOTING (1 << 1)
#define RAFT_NODE_VOTING (1 << 1)
...
@@ -38,7 +39,7 @@ typedef struct
...
@@ -38,7 +39,7 @@ typedef struct
raft_node_t
*
raft_node_new
(
void
*
udata
,
int
id
)
raft_node_t
*
raft_node_new
(
void
*
udata
,
int
id
)
{
{
raft_node_private_t
*
me
;
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
)
if
(
!
me
)
return
NULL
;
return
NULL
;
me
->
udata
=
udata
;
me
->
udata
=
udata
;
...
@@ -51,7 +52,7 @@ raft_node_t* raft_node_new(void* udata, int id)
...
@@ -51,7 +52,7 @@ raft_node_t* raft_node_new(void* udata, int id)
void
raft_node_free
(
raft_node_t
*
me_
)
void
raft_node_free
(
raft_node_t
*
me_
)
{
{
free
(
me_
);
__raft_
free
(
me_
);
}
}
int
raft_node_get_next_idx
(
raft_node_t
*
me_
)
int
raft_node_get_next_idx
(
raft_node_t
*
me_
)
...
...
src/raft_server.c
View file @
b4430b25
...
@@ -28,6 +28,22 @@
...
@@ -28,6 +28,22 @@
#define max(a, b) ((a) < (b) ? (b) : (a))
#define max(a, b) ((a) < (b) ? (b) : (a))
#endif
#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
,
...)
static
void
__log
(
raft_server_t
*
me_
,
raft_node_t
*
node
,
const
char
*
fmt
,
...)
{
{
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
...
@@ -53,7 +69,7 @@ void raft_randomize_election_timeout(raft_server_t* me_)
...
@@ -53,7 +69,7 @@ void raft_randomize_election_timeout(raft_server_t* me_)
raft_server_t
*
raft_new
()
raft_server_t
*
raft_new
()
{
{
raft_server_private_t
*
me
=
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
)
if
(
!
me
)
return
NULL
;
return
NULL
;
me
->
current_term
=
0
;
me
->
current_term
=
0
;
...
@@ -64,7 +80,7 @@ raft_server_t* raft_new()
...
@@ -64,7 +80,7 @@ raft_server_t* raft_new()
raft_randomize_election_timeout
((
raft_server_t
*
)
me
);
raft_randomize_election_timeout
((
raft_server_t
*
)
me
);
me
->
log
=
log_new
();
me
->
log
=
log_new
();
if
(
!
me
->
log
)
{
if
(
!
me
->
log
)
{
free
(
me
);
__raft_
free
(
me
);
return
NULL
;
return
NULL
;
}
}
me
->
voting_cfg_change_log_idx
=
-
1
;
me
->
voting_cfg_change_log_idx
=
-
1
;
...
@@ -91,7 +107,7 @@ void raft_free(raft_server_t* me_)
...
@@ -91,7 +107,7 @@ void raft_free(raft_server_t* me_)
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
log_free
(
me
->
log
);
log_free
(
me
->
log
);
free
(
me_
);
__raft_
free
(
me_
);
}
}
void
raft_clear
(
raft_server_t
*
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)
...
@@ -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
);
node
=
raft_node_new
(
udata
,
id
);
if
(
!
node
)
if
(
!
node
)
return
NULL
;
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
)
{
if
(
!
p
)
{
raft_node_free
(
node
);
raft_node_free
(
node
);
return
NULL
;
return
NULL
;
...
@@ -1076,7 +1092,9 @@ void raft_offer_log(raft_server_t* me_, raft_entry_t* ety, const int idx)
...
@@ -1076,7 +1092,9 @@ void raft_offer_log(raft_server_t* me_, raft_entry_t* ety, const int idx)
break
;
break
;
case
RAFT_LOGTYPE_ADD_NODE
:
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
(
node
);
assert
(
raft_node_is_voting
(
node
));
assert
(
raft_node_is_voting
(
node
));
break
;
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