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
788453f5
Commit
788453f5
authored
May 23, 2014
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
trackrdrd: Parser can read shard keys from VCL_Log
parent
f29742a4
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
52 additions
and
28 deletions
+52
-28
child.c
trackrdrd/src/child.c
+2
-1
parse.c
trackrdrd/src/parse.c
+6
-1
test_parse.c
trackrdrd/src/test/test_parse.c
+38
-24
trackrdrd.h
trackrdrd/src/trackrdrd.h
+6
-2
No files found.
trackrdrd/src/child.c
View file @
788453f5
...
...
@@ -670,6 +670,7 @@ OSL_Track(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
char
*
data
,
reqend_str
[
strlen
(
REQEND_T_VAR
)
+
22
];
struct
timespec
reqend_t
;
float
tim
;
vcl_log_t
data_type
;
static
float
tim_exp_check
=
0
.
0
;
...
...
@@ -733,7 +734,7 @@ OSL_Track(void *priv, enum VSL_tag_e tag, unsigned fd, unsigned len,
break
;
err
=
Parse_VCL_Log
(
&
ptr
[
TRACKLOG_PREFIX_LEN
],
len
-
TRACKLOG_PREFIX_LEN
,
&
xid
,
&
data
,
&
datalen
);
&
xid
,
&
data
,
&
datalen
,
&
data_type
);
AZ
(
err
);
LOG_Log
(
LOG_DEBUG
,
"%s: XID=%u, data=[%.*s]"
,
VSL_tags
[
tag
],
xid
,
datalen
,
data
);
...
...
trackrdrd/src/parse.c
View file @
788453f5
...
...
@@ -108,14 +108,19 @@ Parse_ReqEnd(const char *ptr, unsigned len, unsigned *xid,
*/
int
Parse_VCL_Log
(
const
char
*
ptr
,
int
len
,
unsigned
*
xid
,
char
**
data
,
int
*
datalen
)
char
**
data
,
int
*
datalen
,
vcl_log_t
*
type
)
{
*
type
=
VCL_LOG_DATA
;
char
*
blank
=
memchr
(
ptr
,
' '
,
len
);
if
(
blank
==
NULL
)
return
EINVAL
;
int
err
=
Parse_XID
(
ptr
,
blank
-
ptr
,
xid
);
if
(
err
!=
0
)
return
err
;
if
(
strncmp
(
blank
+
1
,
"key "
,
4
)
==
0
)
{
blank
+=
4
;
*
type
=
VCL_LOG_KEY
;
}
*
data
=
blank
+
1
;
*
datalen
=
ptr
+
len
-
blank
-
1
;
return
(
0
);
...
...
trackrdrd/src/test/test_parse.c
View file @
788453f5
...
...
@@ -177,28 +177,26 @@ static char
unsigned
xid
;
int
err
,
len
;
char
*
data
;
vcl_log_t
type
;
printf
(
"... testing Parse_VCL_Log
\n
"
);
#define VCLLOG "1253687608 url=%2Frdrtestapp%2F"
err
=
Parse_VCL_Log
(
VCLLOG
,
strlen
(
VCLLOG
),
&
xid
,
&
data
,
&
len
);
sprintf
(
errmsg
,
"VCL_Log %s: %s"
,
VCLLOG
,
strerror
(
err
));
mu_assert
(
errmsg
,
err
==
0
);
sprintf
(
errmsg
,
"VCL_Log %s: returned XID=%d"
,
VCLLOG
,
xid
);
mu_assert
(
errmsg
,
xid
==
1253687608
);
sprintf
(
errmsg
,
"VCL_Log %s: returned length=%d"
,
VCLLOG
,
len
);
mu_assert
(
errmsg
,
len
==
20
);
sprintf
(
errmsg
,
"VCL_Log %s: returned data=[%.*s]"
,
VCLLOG
,
len
,
data
);
mu_assert
(
errmsg
,
strncmp
(
data
,
"url=%2Frdrtestapp%2F"
,
20
)
==
0
);
err
=
Parse_VCL_Log
(
VCLLOG
,
strlen
(
VCLLOG
),
&
xid
,
&
data
,
&
len
,
&
type
);
VMASSERT
(
err
==
0
,
"VCL_Log %s: %s"
,
VCLLOG
,
strerror
(
err
));
MASSERT
(
xid
==
1253687608
);
MASSERT
(
len
==
20
);
MASSERT
(
type
==
VCL_LOG_DATA
);
VMASSERT
(
strncmp
(
data
,
"url=%2Frdrtestapp%2F"
,
20
)
==
0
,
"VCL_Log %s: returned data=[%.*s]"
,
VCLLOG
,
len
,
data
);
err
=
Parse_VCL_Log
(
"foo"
,
3
,
&
xid
,
&
data
,
&
len
);
sprintf
(
errmsg
,
"VCL_Log foo: expected EINVAL, got %d"
,
err
);
mu_assert
(
errmsg
,
err
==
EINVAL
);
err
=
Parse_VCL_Log
(
"foo"
,
3
,
&
xid
,
&
data
,
&
len
,
&
type
);
VMASSERT
(
err
==
EINVAL
,
"VCL_Log foo: expected EINVAL, got %d"
,
err
);
#define VCLLOG_INVALID "foo url=%2Frdrtestapp%2F"
err
=
Parse_VCL_Log
(
VCLLOG_INVALID
,
3
,
&
xid
,
&
data
,
&
len
);
sprintf
(
errmsg
,
"VCL_Log %s: expected EINVAL, got %d"
,
VCLLOG_INVALID
,
err
);
mu_assert
(
errmsg
,
err
==
EINVAL
);
err
=
Parse_VCL_Log
(
VCLLOG_INVALID
,
3
,
&
xid
,
&
data
,
&
len
,
&
type
);
VMASSERT
(
err
==
EINVAL
,
"VCL_Log %s: expected EINVAL, got %d"
,
VCLLOG_INVALID
,
err
);
/* 1024 chars */
#define LONG_STRING \
...
...
@@ -219,15 +217,31 @@ static char
"1234567890123456789012345678901234567890123456789012345678901234" \
"1234567890123456789012345678901234567890123456789012345678901234"
#define VCLLOG_LONG "1253687608 foo=" LONG_STRING
err
=
Parse_VCL_Log
(
VCLLOG_LONG
,
1039
,
&
xid
,
&
data
,
&
len
);
sprintf
(
errmsg
,
"VCL_Log long string: %s"
,
strerror
(
err
));
mu_assert
(
errmsg
,
err
==
0
);
sprintf
(
errmsg
,
"VCL_Log long string: returned XID=%d"
,
xid
);
mu_assert
(
errmsg
,
xid
==
1253687608
);
sprintf
(
errmsg
,
"VCL_Log long string: returned length=%d"
,
len
);
mu_assert
(
errmsg
,
len
==
1028
);
sprintf
(
errmsg
,
"VCL_Log long string: returned data=[%.*s]"
,
len
,
data
);
mu_assert
(
errmsg
,
strncmp
(
data
,
"foo="
LONG_STRING
,
1028
)
==
0
);
err
=
Parse_VCL_Log
(
VCLLOG_LONG
,
1039
,
&
xid
,
&
data
,
&
len
,
&
type
);
VMASSERT
(
err
==
0
,
"VCL_Log long string: %s"
,
strerror
(
err
));
MASSERT
(
xid
==
1253687608
);
MASSERT
(
len
==
1028
);
MASSERT
(
type
==
VCL_LOG_DATA
);
VMASSERT
(
strncmp
(
data
,
"foo="
LONG_STRING
,
1028
)
==
0
,
"VCL_Log long string: returned data=[%.*s]"
,
len
,
data
);
#define VCLKEY "1253687608 key foobarbazquux"
err
=
Parse_VCL_Log
(
VCLKEY
,
strlen
(
VCLKEY
),
&
xid
,
&
data
,
&
len
,
&
type
);
VMASSERT
(
err
==
0
,
"VCL_Log %s: %s"
,
VCLKEY
,
strerror
(
err
));
MASSERT
(
xid
==
1253687608
);
MASSERT
(
len
==
13
);
MASSERT
(
type
==
VCL_LOG_KEY
);
VMASSERT
(
strncmp
(
data
,
"foobarbazquux"
,
13
)
==
0
,
"VCL_Log %s: returned data=[%.*s]"
,
VCLKEY
,
len
,
data
);
#define VCLKEY_LONG "1253687608 key " LONG_STRING
err
=
Parse_VCL_Log
(
VCLKEY_LONG
,
1039
,
&
xid
,
&
data
,
&
len
,
&
type
);
VMASSERT
(
err
==
0
,
"VCL_Log long key: %s"
,
strerror
(
err
));
MASSERT
(
xid
==
1253687608
);
MASSERT
(
len
==
1024
);
MASSERT
(
type
==
VCL_LOG_KEY
);
VMASSERT
(
strncmp
(
data
,
LONG_STRING
,
1024
)
==
0
,
"VCL_Log long key: returned data=[%.*s]"
,
len
,
data
);
return
NULL
;
}
...
...
trackrdrd/src/trackrdrd.h
View file @
788453f5
...
...
@@ -375,12 +375,16 @@ void MON_StatsInit(void);
void
MON_StatsUpdate
(
stats_update_t
update
);
/* parse.c */
/* Whether a VCL_Log entry contains a data payload or a shard key */
typedef
enum
{
VCL_LOG_DATA
,
VCL_LOG_KEY
}
vcl_log_t
;
int
Parse_XID
(
const
char
*
str
,
int
len
,
unsigned
*
xid
);
int
Parse_ReqStart
(
const
char
*
ptr
,
int
len
,
unsigned
*
xid
);
int
Parse_ReqEnd
(
const
char
*
ptr
,
unsigned
len
,
unsigned
*
xid
,
struct
timespec
*
reqend_t
);
struct
timespec
*
reqend_t
);
int
Parse_VCL_Log
(
const
char
*
ptr
,
int
len
,
unsigned
*
xid
,
char
**
data
,
int
*
datalen
);
char
**
data
,
int
*
datalen
,
vcl_log_t
*
type
);
/* generic init attributes */
pthread_mutexattr_t
attr_lock
;
...
...
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