Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
unique-xids
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
unique-xids
Commits
33a22425
Commit
33a22425
authored
Feb 19, 2012
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Push struct worker out of STV_NewObject()
parent
a34c900c
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
52 additions
and
40 deletions
+52
-40
cache.h
bin/varnishd/cache/cache.h
+2
-2
cache_center.c
bin/varnishd/cache/cache_center.c
+13
-4
stevedore.c
bin/varnishd/storage/stevedore.c
+25
-24
storage.h
bin/varnishd/storage/storage.h
+6
-4
storage_persistent.c
bin/varnishd/storage/storage_persistent.c
+6
-6
No files found.
bin/varnishd/cache/cache.h
View file @
33a22425
...
@@ -1005,8 +1005,8 @@ unsigned RFC2616_Req_Gzip(const struct sess *sp);
...
@@ -1005,8 +1005,8 @@ unsigned RFC2616_Req_Gzip(const struct sess *sp);
int
RFC2616_Do_Cond
(
const
struct
sess
*
sp
);
int
RFC2616_Do_Cond
(
const
struct
sess
*
sp
);
/* stevedore.c */
/* stevedore.c */
struct
object
*
STV_NewObject
(
struct
worker
*
wrk
,
const
char
*
hint
,
unsigned
len
,
struct
object
*
STV_NewObject
(
struct
busyobj
*
,
struct
objcore
**
,
uint16_t
nhttp
);
const
char
*
hint
,
unsigned
len
,
uint16_t
nhttp
);
struct
storage
*
STV_alloc
(
struct
busyobj
*
,
size_t
size
);
struct
storage
*
STV_alloc
(
struct
busyobj
*
,
size_t
size
);
void
STV_trim
(
struct
storage
*
st
,
size_t
size
);
void
STV_trim
(
struct
storage
*
st
,
size_t
size
);
void
STV_free
(
struct
storage
*
st
);
void
STV_free
(
struct
storage
*
st
);
...
...
bin/varnishd/cache/cache_center.c
View file @
33a22425
...
@@ -475,9 +475,12 @@ cnt_error(struct sess *sp, struct worker *wrk, struct req *req)
...
@@ -475,9 +475,12 @@ cnt_error(struct sess *sp, struct worker *wrk, struct req *req)
wrk
->
busyobj
=
VBO_GetBusyObj
(
wrk
);
wrk
->
busyobj
=
VBO_GetBusyObj
(
wrk
);
wrk
->
busyobj
->
vsl
->
wid
=
sp
->
vsl_id
;
wrk
->
busyobj
->
vsl
->
wid
=
sp
->
vsl_id
;
req
->
obj
=
STV_NewObject
(
wrk
,
TRANSIENT_STORAGE
,
AZ
(
wrk
->
busyobj
->
stats
);
cache_param
->
http_resp_size
,
wrk
->
busyobj
->
stats
=
&
wrk
->
stats
;
req
->
obj
=
STV_NewObject
(
wrk
->
busyobj
,
&
req
->
objcore
,
TRANSIENT_STORAGE
,
cache_param
->
http_resp_size
,
(
uint16_t
)
cache_param
->
http_max_hdr
);
(
uint16_t
)
cache_param
->
http_max_hdr
);
wrk
->
busyobj
->
stats
=
NULL
;
if
(
req
->
obj
==
NULL
)
{
if
(
req
->
obj
==
NULL
)
{
req
->
doclose
=
"Out of objects"
;
req
->
doclose
=
"Out of objects"
;
req
->
director
=
NULL
;
req
->
director
=
NULL
;
...
@@ -786,18 +789,24 @@ cnt_prepfetch(struct sess *sp, struct worker *wrk, struct req *req)
...
@@ -786,18 +789,24 @@ cnt_prepfetch(struct sess *sp, struct worker *wrk, struct req *req)
req
->
objcore
==
NULL
)
req
->
objcore
==
NULL
)
req
->
storage_hint
=
TRANSIENT_STORAGE
;
req
->
storage_hint
=
TRANSIENT_STORAGE
;
req
->
obj
=
STV_NewObject
(
wrk
,
req
->
storage_hint
,
l
,
nhttp
);
assert
(
bo
==
wrk
->
busyobj
);
AZ
(
bo
->
stats
);
bo
->
stats
=
&
wrk
->
stats
;
req
->
obj
=
STV_NewObject
(
bo
,
&
req
->
objcore
,
req
->
storage_hint
,
l
,
nhttp
);
if
(
req
->
obj
==
NULL
)
{
if
(
req
->
obj
==
NULL
)
{
/*
/*
* Try to salvage the transaction by allocating a
* Try to salvage the transaction by allocating a
* shortlived object on Transient storage.
* shortlived object on Transient storage.
*/
*/
req
->
obj
=
STV_NewObject
(
wrk
,
TRANSIENT_STORAGE
,
l
,
nhttp
);
req
->
obj
=
STV_NewObject
(
bo
,
&
req
->
objcore
,
TRANSIENT_STORAGE
,
l
,
nhttp
);
if
(
bo
->
exp
.
ttl
>
cache_param
->
shortlived
)
if
(
bo
->
exp
.
ttl
>
cache_param
->
shortlived
)
bo
->
exp
.
ttl
=
cache_param
->
shortlived
;
bo
->
exp
.
ttl
=
cache_param
->
shortlived
;
bo
->
exp
.
grace
=
0
.
0
;
bo
->
exp
.
grace
=
0
.
0
;
bo
->
exp
.
keep
=
0
.
0
;
bo
->
exp
.
keep
=
0
.
0
;
}
}
bo
->
stats
=
NULL
;
if
(
req
->
obj
==
NULL
)
{
if
(
req
->
obj
==
NULL
)
{
req
->
err_code
=
503
;
req
->
err_code
=
503
;
sp
->
step
=
STP_ERROR
;
sp
->
step
=
STP_ERROR
;
...
...
bin/varnishd/storage/stevedore.c
View file @
33a22425
...
@@ -227,13 +227,15 @@ struct stv_objsecrets {
...
@@ -227,13 +227,15 @@ struct stv_objsecrets {
*/
*/
struct
object
*
struct
object
*
STV_MkObject
(
struct
worker
*
wrk
,
void
*
ptr
,
unsigned
ltot
,
STV_MkObject
(
struct
busyobj
*
bo
,
struct
objcore
**
ocp
,
void
*
ptr
,
unsigned
ltot
,
const
struct
stv_objsecrets
*
soc
)
const
struct
stv_objsecrets
*
soc
)
{
{
struct
object
*
o
;
struct
object
*
o
;
unsigned
l
;
unsigned
l
;
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
CHECK_OBJ_NOTNULL
(
soc
,
STV_OBJ_SECRETES_MAGIC
);
CHECK_OBJ_NOTNULL
(
soc
,
STV_OBJ_SECRETES_MAGIC
);
AN
(
ocp
);
assert
(
PAOK
(
ptr
));
assert
(
PAOK
(
ptr
));
assert
(
PAOK
(
soc
->
wsl
));
assert
(
PAOK
(
soc
->
wsl
));
...
@@ -253,17 +255,17 @@ STV_MkObject(struct worker *wrk, void *ptr, unsigned ltot,
...
@@ -253,17 +255,17 @@ STV_MkObject(struct worker *wrk, void *ptr, unsigned ltot,
WS_Assert
(
o
->
ws_o
);
WS_Assert
(
o
->
ws_o
);
assert
(
o
->
ws_o
->
e
<=
(
char
*
)
ptr
+
ltot
);
assert
(
o
->
ws_o
->
e
<=
(
char
*
)
ptr
+
ltot
);
http_Setup
(
o
->
http
,
o
->
ws_o
,
wrk
->
busyobj
->
vsl
);
http_Setup
(
o
->
http
,
o
->
ws_o
,
bo
->
vsl
);
o
->
http
->
magic
=
HTTP_MAGIC
;
o
->
http
->
magic
=
HTTP_MAGIC
;
o
->
exp
=
wrk
->
busyobj
->
exp
;
o
->
exp
=
bo
->
exp
;
VTAILQ_INIT
(
&
o
->
store
);
VTAILQ_INIT
(
&
o
->
store
);
wrk
->
stats
.
n_object
++
;
bo
->
stats
->
n_object
++
;
if
(
wrk
->
sp
->
req
->
objcore
!=
NULL
)
{
if
(
*
ocp
!=
NULL
)
{
CHECK_OBJ_NOTNULL
(
wrk
->
sp
->
req
->
objcore
,
OBJCORE_MAGIC
);
CHECK_OBJ_NOTNULL
(
(
*
ocp
)
,
OBJCORE_MAGIC
);
o
->
objcore
=
wrk
->
sp
->
req
->
objcore
;
o
->
objcore
=
*
ocp
;
wrk
->
sp
->
req
->
objcore
=
NULL
;
/* refcnt follows pointer. */
*
ocp
=
NULL
;
/* refcnt follows pointer. */
BAN_NewObjCore
(
o
->
objcore
);
BAN_NewObjCore
(
o
->
objcore
);
o
->
objcore
->
methods
=
&
default_oc_methods
;
o
->
objcore
->
methods
=
&
default_oc_methods
;
...
@@ -278,13 +280,15 @@ STV_MkObject(struct worker *wrk, void *ptr, unsigned ltot,
...
@@ -278,13 +280,15 @@ STV_MkObject(struct worker *wrk, void *ptr, unsigned ltot,
*/
*/
struct
object
*
struct
object
*
stv_default_allocobj
(
struct
stevedore
*
stv
,
struct
worker
*
wrk
,
unsigned
ltot
,
stv_default_allocobj
(
struct
stevedore
*
stv
,
struct
busyobj
*
bo
,
const
struct
stv_objsecrets
*
soc
)
struct
objcore
**
ocp
,
unsigned
ltot
,
const
struct
stv_objsecrets
*
soc
)
{
{
struct
object
*
o
;
struct
object
*
o
;
struct
storage
*
st
;
struct
storage
*
st
;
CHECK_OBJ_NOTNULL
(
soc
,
STV_OBJ_SECRETES_MAGIC
);
CHECK_OBJ_NOTNULL
(
soc
,
STV_OBJ_SECRETES_MAGIC
);
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
AN
(
ocp
);
st
=
stv
->
alloc
(
stv
,
ltot
);
st
=
stv
->
alloc
(
stv
,
ltot
);
if
(
st
==
NULL
)
if
(
st
==
NULL
)
return
(
NULL
);
return
(
NULL
);
...
@@ -293,7 +297,7 @@ stv_default_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
...
@@ -293,7 +297,7 @@ stv_default_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
return
(
NULL
);
return
(
NULL
);
}
}
ltot
=
st
->
len
=
st
->
space
;
ltot
=
st
->
len
=
st
->
space
;
o
=
STV_MkObject
(
wrk
,
st
->
ptr
,
ltot
,
soc
);
o
=
STV_MkObject
(
bo
,
ocp
,
st
->
ptr
,
ltot
,
soc
);
CHECK_OBJ_NOTNULL
(
o
,
OBJECT_MAGIC
);
CHECK_OBJ_NOTNULL
(
o
,
OBJECT_MAGIC
);
o
->
objstore
=
st
;
o
->
objstore
=
st
;
return
(
o
);
return
(
o
);
...
@@ -306,8 +310,8 @@ stv_default_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
...
@@ -306,8 +310,8 @@ stv_default_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
*/
*/
struct
object
*
struct
object
*
STV_NewObject
(
struct
worker
*
wrk
,
const
char
*
hint
,
unsigned
wsl
,
STV_NewObject
(
struct
busyobj
*
bo
,
struct
objcore
**
ocp
,
const
char
*
hint
,
uint16_t
nhttp
)
unsigned
wsl
,
uint16_t
nhttp
)
{
{
struct
object
*
o
;
struct
object
*
o
;
struct
stevedore
*
stv
,
*
stv0
;
struct
stevedore
*
stv
,
*
stv0
;
...
@@ -315,7 +319,8 @@ STV_NewObject(struct worker *wrk, const char *hint, unsigned wsl,
...
@@ -315,7 +319,8 @@ STV_NewObject(struct worker *wrk, const char *hint, unsigned wsl,
struct
stv_objsecrets
soc
;
struct
stv_objsecrets
soc
;
int
i
;
int
i
;
CHECK_OBJ_NOTNULL
(
wrk
,
WORKER_MAGIC
);
CHECK_OBJ_NOTNULL
(
bo
,
BUSYOBJ_MAGIC
);
AN
(
ocp
);
assert
(
wsl
>
0
);
assert
(
wsl
>
0
);
wsl
=
PRNDUP
(
wsl
);
wsl
=
PRNDUP
(
wsl
);
...
@@ -330,27 +335,23 @@ STV_NewObject(struct worker *wrk, const char *hint, unsigned wsl,
...
@@ -330,27 +335,23 @@ STV_NewObject(struct worker *wrk, const char *hint, unsigned wsl,
ltot
=
sizeof
*
o
+
wsl
+
lhttp
;
ltot
=
sizeof
*
o
+
wsl
+
lhttp
;
stv
=
stv0
=
stv_pick_stevedore
(
wrk
->
vsl
,
&
hint
);
stv
=
stv0
=
stv_pick_stevedore
(
bo
->
vsl
,
&
hint
);
AN
(
stv
->
allocobj
);
AN
(
stv
->
allocobj
);
o
=
stv
->
allocobj
(
stv
,
wrk
,
ltot
,
&
soc
);
o
=
stv
->
allocobj
(
stv
,
bo
,
ocp
,
ltot
,
&
soc
);
if
(
o
==
NULL
&&
hint
==
NULL
)
{
if
(
o
==
NULL
&&
hint
==
NULL
)
{
do
{
do
{
stv
=
stv_pick_stevedore
(
wrk
->
vsl
,
&
hint
);
stv
=
stv_pick_stevedore
(
bo
->
vsl
,
&
hint
);
AN
(
stv
->
allocobj
);
AN
(
stv
->
allocobj
);
o
=
stv
->
allocobj
(
stv
,
wrk
,
ltot
,
&
soc
);
o
=
stv
->
allocobj
(
stv
,
bo
,
ocp
,
ltot
,
&
soc
);
}
while
(
o
==
NULL
&&
stv
!=
stv0
);
}
while
(
o
==
NULL
&&
stv
!=
stv0
);
}
}
if
(
o
==
NULL
)
{
if
(
o
==
NULL
)
{
/* XXX: lend busyobj wrk's stats while we nuke */
AZ
(
wrk
->
busyobj
->
stats
);
wrk
->
busyobj
->
stats
=
&
wrk
->
stats
;
/* no luck; try to free some space and keep trying */
/* no luck; try to free some space and keep trying */
for
(
i
=
0
;
o
==
NULL
&&
i
<
cache_param
->
nuke_limit
;
i
++
)
{
for
(
i
=
0
;
o
==
NULL
&&
i
<
cache_param
->
nuke_limit
;
i
++
)
{
if
(
EXP_NukeOne
(
wrk
->
busyobj
,
stv
->
lru
)
==
-
1
)
if
(
EXP_NukeOne
(
bo
,
stv
->
lru
)
==
-
1
)
break
;
break
;
o
=
stv
->
allocobj
(
stv
,
wrk
,
ltot
,
&
soc
);
o
=
stv
->
allocobj
(
stv
,
bo
,
ocp
,
ltot
,
&
soc
);
}
}
wrk
->
busyobj
->
stats
=
NULL
;
}
}
if
(
o
==
NULL
)
if
(
o
==
NULL
)
...
...
bin/varnishd/storage/storage.h
View file @
33a22425
...
@@ -34,6 +34,8 @@
...
@@ -34,6 +34,8 @@
struct
stv_objsecrets
;
struct
stv_objsecrets
;
struct
stevedore
;
struct
stevedore
;
struct
sess
;
struct
sess
;
struct
busyobj
;
struct
objcore
;
struct
worker
;
struct
worker
;
struct
lru
;
struct
lru
;
...
@@ -42,8 +44,8 @@ typedef void storage_open_f(const struct stevedore *);
...
@@ -42,8 +44,8 @@ typedef void storage_open_f(const struct stevedore *);
typedef
struct
storage
*
storage_alloc_f
(
struct
stevedore
*
,
size_t
size
);
typedef
struct
storage
*
storage_alloc_f
(
struct
stevedore
*
,
size_t
size
);
typedef
void
storage_trim_f
(
struct
storage
*
,
size_t
size
);
typedef
void
storage_trim_f
(
struct
storage
*
,
size_t
size
);
typedef
void
storage_free_f
(
struct
storage
*
);
typedef
void
storage_free_f
(
struct
storage
*
);
typedef
struct
object
*
storage_allocobj_f
(
struct
stevedore
*
,
typedef
struct
object
*
storage_allocobj_f
(
struct
stevedore
*
,
struct
busyobj
*
,
struct
worker
*
wrk
,
unsigned
ltot
,
const
struct
stv_objsecrets
*
);
struct
objcore
**
,
unsigned
ltot
,
const
struct
stv_objsecrets
*
);
typedef
void
storage_close_f
(
const
struct
stevedore
*
);
typedef
void
storage_close_f
(
const
struct
stevedore
*
);
/* Prototypes for VCL variable responders */
/* Prototypes for VCL variable responders */
...
@@ -90,8 +92,8 @@ extern struct stevedore *stv_transient;
...
@@ -90,8 +92,8 @@ extern struct stevedore *stv_transient;
int
STV_GetFile
(
const
char
*
fn
,
int
*
fdp
,
const
char
**
fnp
,
const
char
*
ctx
);
int
STV_GetFile
(
const
char
*
fn
,
int
*
fdp
,
const
char
**
fnp
,
const
char
*
ctx
);
uintmax_t
STV_FileSize
(
int
fd
,
const
char
*
size
,
unsigned
*
granularity
,
uintmax_t
STV_FileSize
(
int
fd
,
const
char
*
size
,
unsigned
*
granularity
,
const
char
*
ctx
);
const
char
*
ctx
);
struct
object
*
STV_MkObject
(
struct
worker
*
wrk
,
void
*
ptr
,
unsigned
ltot
,
struct
object
*
STV_MkObject
(
struct
busyobj
*
bo
,
struct
objcore
**
ocp
,
const
struct
stv_objsecrets
*
soc
);
void
*
ptr
,
unsigned
ltot
,
const
struct
stv_objsecrets
*
soc
);
struct
lru
*
LRU_Alloc
(
void
);
struct
lru
*
LRU_Alloc
(
void
);
void
LRU_Free
(
struct
lru
*
lru
);
void
LRU_Free
(
struct
lru
*
lru
);
...
...
bin/varnishd/storage/storage_persistent.c
View file @
33a22425
...
@@ -460,8 +460,8 @@ smp_allocx(struct stevedore *st, size_t min_size, size_t max_size,
...
@@ -460,8 +460,8 @@ smp_allocx(struct stevedore *st, size_t min_size, size_t max_size,
*/
*/
static
struct
object
*
static
struct
object
*
smp_allocobj
(
struct
stevedore
*
stv
,
struct
worker
*
wrk
,
unsigned
ltot
,
smp_allocobj
(
struct
stevedore
*
stv
,
struct
busyobj
*
bo
,
struct
objcore
**
ocp
,
const
struct
stv_objsecrets
*
soc
)
unsigned
ltot
,
const
struct
stv_objsecrets
*
soc
)
{
{
struct
object
*
o
;
struct
object
*
o
;
struct
storage
*
st
;
struct
storage
*
st
;
...
@@ -471,11 +471,11 @@ smp_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
...
@@ -471,11 +471,11 @@ smp_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
struct
objcore
*
oc
;
struct
objcore
*
oc
;
unsigned
objidx
;
unsigned
objidx
;
if
(
wrk
->
sp
->
req
->
objcore
==
NULL
)
AN
(
ocp
);
if
(
*
ocp
==
NULL
)
return
(
NULL
);
/* from cnt_error */
return
(
NULL
);
/* from cnt_error */
CAST_OBJ_NOTNULL
(
sc
,
stv
->
priv
,
SMP_SC_MAGIC
);
CAST_OBJ_NOTNULL
(
sc
,
stv
->
priv
,
SMP_SC_MAGIC
);
AN
(
wrk
->
sp
->
req
->
objcore
);
AN
(
bo
->
exp
.
ttl
>
0
.);
AN
(
wrk
->
busyobj
->
exp
.
ttl
>
0
.);
ltot
=
IRNUP
(
sc
,
ltot
);
ltot
=
IRNUP
(
sc
,
ltot
);
...
@@ -486,7 +486,7 @@ smp_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
...
@@ -486,7 +486,7 @@ smp_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
assert
(
st
->
space
>=
ltot
);
assert
(
st
->
space
>=
ltot
);
ltot
=
st
->
len
=
st
->
space
;
ltot
=
st
->
len
=
st
->
space
;
o
=
STV_MkObject
(
wrk
,
st
->
ptr
,
ltot
,
soc
);
o
=
STV_MkObject
(
bo
,
ocp
,
st
->
ptr
,
ltot
,
soc
);
CHECK_OBJ_NOTNULL
(
o
,
OBJECT_MAGIC
);
CHECK_OBJ_NOTNULL
(
o
,
OBJECT_MAGIC
);
o
->
objstore
=
st
;
o
->
objstore
=
st
;
...
...
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