Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
trackrdrd
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
trackrdrd
Commits
f29742a4
Commit
f29742a4
authored
May 22, 2014
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
trackrdrd: add field for shard key to the data table
parent
fd2a01ad
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
67 additions
and
25 deletions
+67
-25
config.c
trackrdrd/src/config.c
+3
-0
data.c
trackrdrd/src/data.c
+6
-4
regress.sh
trackrdrd/src/test/regress.sh
+1
-1
test_data.c
trackrdrd/src/test/test_data.c
+52
-20
trackrdrd.h
trackrdrd/src/trackrdrd.h
+5
-0
No files found.
trackrdrd/src/config.c
View file @
f29742a4
...
...
@@ -120,6 +120,7 @@ CONF_Add(const char *lval, const char *rval)
confUnsigned
(
"maxopen.scale"
,
maxopen_scale
);
confUnsigned
(
"maxdata"
,
maxdata
);
confUnsigned
(
"maxkeylen"
,
maxkeylen
);
confUnsigned
(
"qlen.goal"
,
qlen_goal
);
confUnsigned
(
"hash.max_probes"
,
hash_max_probes
);
confUnsigned
(
"hash.ttl"
,
hash_ttl
);
...
...
@@ -198,6 +199,7 @@ CONF_Init(void)
config
.
maxopen_scale
=
DEF_MAXOPEN_SCALE
;
config
.
maxdone
=
DEF_MAXDONE
;
config
.
maxdata
=
DEF_MAXDATA
;
config
.
maxkeylen
=
DEF_MAXKEYLEN
;
config
.
qlen_goal
=
DEF_QLEN_GOAL
;
config
.
hash_max_probes
=
DEF_HASH_MAX_PROBES
;
config
.
hash_ttl
=
DEF_HASH_TTL
;
...
...
@@ -249,6 +251,7 @@ CONF_Dump(void)
confdump
(
"maxopen.scale = %u"
,
config
.
maxopen_scale
);
confdump
(
"maxdone = %u"
,
config
.
maxdone
);
confdump
(
"maxdata = %u"
,
config
.
maxdata
);
confdump
(
"maxkeylen = %u"
,
config
.
maxkeylen
);
confdump
(
"qlen.goal = %u"
,
config
.
qlen_goal
);
confdump
(
"hash.max_probes = %u"
,
config
.
hash_max_probes
);
confdump
(
"hash.ttl = %u"
,
config
.
hash_ttl
);
...
...
trackrdrd/src/data.c
View file @
f29742a4
...
...
@@ -53,7 +53,7 @@ DATA_Init(void)
dataentry
*
entryptr
;
char
*
bufptr
;
unsigned
bufsize
=
config
.
maxdata
;
unsigned
bufsize
=
config
.
maxdata
+
config
.
maxkeylen
;
/*
* we want enough space to accomodate all open and done records
...
...
@@ -87,6 +87,7 @@ DATA_Init(void)
dtbl
.
entry
[
i
].
state
=
DATA_EMPTY
;
dtbl
.
entry
[
i
].
hasdata
=
false
;
dtbl
.
entry
[
i
].
data
=
&
dtbl
.
buf
[
i
*
bufsize
];
dtbl
.
entry
[
i
].
key
=
&
dtbl
.
buf
[(
i
*
bufsize
)
+
config
.
maxdata
];
VSTAILQ_INSERT_TAIL
(
&
dtbl
.
freehead
,
&
dtbl
.
entry
[
i
],
freelist
);
dtbl
.
nfree
++
;
}
...
...
@@ -130,9 +131,10 @@ DATA_Dump1(dataentry *entry, int i)
{
if
(
entry
->
state
==
DATA_EMPTY
)
return
;
LOG_Log
(
LOG_INFO
,
"Data entry %d: XID=%d tid=%d state=%s data=[%.*s]"
,
i
,
entry
->
xid
,
entry
->
tid
,
statename
[
entry
->
state
],
entry
->
end
,
entry
->
data
);
LOG_Log
(
LOG_INFO
,
"Data entry %d: XID=%d tid=%d state=%s data=[%.*s] key=[%.*s]"
,
i
,
entry
->
xid
,
entry
->
tid
,
statename
[
entry
->
state
],
entry
->
end
,
entry
->
data
,
entry
->
keylen
,
entry
->
key
);
}
void
...
...
trackrdrd/src/test/regress.sh
View file @
f29742a4
...
...
@@ -22,7 +22,7 @@ CMD="../trackrdrd -D -f varnish.binlog -l - -d -c test.conf"
# the user running it
CKSUM
=
$(
$CMD
|
sed
-e
's/\(initializing\) \(.*\)/\1/'
|
sed
-e
's/\(Running as\) \([a-zA-Z0-9]*\)$/\1/'
|
grep
-v
'Not running as root'
|
cksum
)
if
[
"
$CKSUM
"
!=
'
2459426004 234127
'
]
;
then
if
[
"
$CKSUM
"
!=
'
1900415110 234158
'
]
;
then
echo
"ERROR: Regression test incorrect cksum:
$CKSUM
"
exit
1
fi
...
...
trackrdrd/src/test/test_data.c
View file @
f29742a4
...
...
@@ -36,7 +36,6 @@
#include "../trackrdrd.h"
int
tests_run
=
0
;
static
char
errmsg
[
BUFSIZ
];
static
struct
freehead_s
local_freehead
=
VSTAILQ_HEAD_INITIALIZER
(
local_freehead
);
...
...
@@ -49,13 +48,45 @@ static char
printf
(
"... testing data table initialization
\n
"
);
config
.
maxopen_scale
=
10
;
config
.
maxdone
=
1024
;
config
.
maxopen_scale
=
DEF_MAXOPEN_SCALE
;
config
.
maxdone
=
DEF_MAXDONE
;
config
.
maxdata
=
DEF_MAXDATA
;
config
.
maxkeylen
=
DEF_MAXKEYLEN
;
err
=
DATA_Init
();
sprintf
(
errmsg
,
"DATA_Init: %s"
,
strerror
(
err
));
mu_assert
(
errmsg
,
err
==
0
);
sprintf
(
errmsg
,
"DATA_Init: expected table length 2048, got %d"
,
dtbl
.
len
);
mu_assert
(
errmsg
,
dtbl
.
len
==
2048
);
VMASSERT
(
err
==
0
,
"DATA_Init: %s"
,
strerror
(
err
));
VMASSERT
(
dtbl
.
len
==
2048
,
"DATA_Init: expected table length 2048, got %d"
,
dtbl
.
len
);
for
(
int
i
=
0
;
i
<
dtbl
.
len
;
i
++
)
{
MCHECK_OBJ_NOTNULL
(
&
dtbl
.
entry
[
i
],
DATA_MAGIC
);
MASSERT
(
dtbl
.
entry
[
i
].
state
==
DATA_EMPTY
);
MASSERT
(
!
dtbl
.
entry
[
i
].
hasdata
);
MAN
(
dtbl
.
entry
[
i
].
data
);
MAN
(
dtbl
.
entry
[
i
].
key
);
}
return
NULL
;
}
static
const
char
*
test_data_set_get
(
void
)
{
char
data
[
DEF_MAXDATA
],
key
[
DEF_MAXKEYLEN
];
printf
(
"... testing data write and read
\n
"
);
for
(
int
i
=
0
;
i
<
dtbl
.
len
;
i
++
)
{
memset
(
dtbl
.
entry
[
i
].
data
,
'd'
,
DEF_MAXDATA
);
memset
(
dtbl
.
entry
[
i
].
key
,
'k'
,
DEF_MAXKEYLEN
);
}
memset
(
data
,
'd'
,
DEF_MAXDATA
);
memset
(
key
,
'k'
,
DEF_MAXKEYLEN
);
for
(
int
i
=
0
;
i
<
dtbl
.
len
;
i
++
)
{
MASSERT
(
memcmp
(
dtbl
.
entry
[
i
].
data
,
data
,
DEF_MAXDATA
)
==
0
);
MASSERT
(
memcmp
(
dtbl
.
entry
[
i
].
key
,
key
,
DEF_MAXKEYLEN
)
==
0
);
}
return
NULL
;
}
...
...
@@ -67,14 +98,14 @@ static const char
DATA_Take_Freelist
(
&
local_freehead
);
mu_assert
(
"Local freelist empty after take"
,
!
VSTAILQ_EMPTY
(
&
local_freehead
)
);
MASSERT0
(
!
VSTAILQ_EMPTY
(
&
local_freehead
)
,
"Local freelist empty after take"
);
sprintf
(
errmsg
,
"Global free count non-zero after take (%u)"
,
dtbl
.
nfree
);
mu_assert
(
errmsg
,
dtbl
.
nfree
==
0
);
VMASSERT
(
dtbl
.
nfree
==
0
,
"Global free count non-zero after take (%u)"
,
dtbl
.
nfree
);
mu_assert
(
"Global free list non-empty after take"
,
VSTAILQ_EMPTY
(
&
dtbl
.
freehead
)
);
MASSERT0
(
VSTAILQ_EMPTY
(
&
dtbl
.
freehead
)
,
"Global free list non-empty after take"
);
return
NULL
;
}
...
...
@@ -86,15 +117,15 @@ static const char
DATA_Return_Freelist
(
&
local_freehead
,
2048
);
mu_assert
(
"Local freelist non-empty after return"
,
VSTAILQ_EMPTY
(
&
local_freehead
)
);
MASSERT0
(
VSTAILQ_EMPTY
(
&
local_freehead
)
,
"Local freelist non-empty after return"
);
sprintf
(
errmsg
,
"Expected global free count == 2048 after return (%u)"
,
dtbl
.
nfree
);
mu_assert
(
errmsg
,
dtbl
.
nfree
==
2048
);
VMASSERT
(
dtbl
.
nfree
==
2048
,
"Expected global free count == 2048 after return (%u)"
,
dtbl
.
nfree
);
mu_assert
(
"Global free list empty after take"
,
!
VSTAILQ_EMPTY
(
&
dtbl
.
freehead
)
);
MASSERT0
(
!
VSTAILQ_EMPTY
(
&
dtbl
.
freehead
)
,
"Global free list empty after take"
);
return
NULL
;
}
...
...
@@ -103,6 +134,7 @@ static const char
*
all_tests
(
void
)
{
mu_run_test
(
test_data_init
);
mu_run_test
(
test_data_set_get
);
mu_run_test
(
test_data_take
);
mu_run_test
(
test_data_return
);
return
NULL
;
...
...
trackrdrd/src/trackrdrd.h
View file @
f29742a4
...
...
@@ -135,6 +135,8 @@ struct dataentry_s {
bool
incomplete
;
/* expired or evacuated */
char
*
data
;
char
*
key
;
unsigned
keylen
;
};
typedef
struct
dataentry_s
dataentry
;
...
...
@@ -271,6 +273,9 @@ struct config {
unsigned
maxdata
;
/* size of char data buffer */
#define DEF_MAXDATA 1024
unsigned
maxkeylen
;
/* size of shard key buffer */
#define DEF_MAXKEYLEN 128
/*
* queue-length goal:
*
...
...
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