Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnishapi
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
varnishapi
Commits
4803ddbf
Commit
4803ddbf
authored
Sep 02, 2018
by
Geoff Simmons
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor concurrency in govarnishlog.
parent
bcf25f55
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
18 deletions
+35
-18
govarnishlog.go
cmd/govarnishlog/govarnishlog.go
+35
-18
No files found.
cmd/govarnishlog/govarnishlog.go
View file @
4803ddbf
...
...
@@ -38,6 +38,7 @@ import (
"os/signal"
"runtime"
"runtime/pprof"
"sync"
"syscall"
"time"
...
...
@@ -64,6 +65,7 @@ var (
totIdle
=
time
.
Duration
(
0
)
tRdrStart
time
.
Time
seen
=
uint64
(
0
)
writes
=
uint64
(
0
)
eol
=
uint64
(
0
)
printTxFunc
=
printTxTerse
printRecFunc
=
printRecTerse
...
...
@@ -87,13 +89,22 @@ func newIdle(seen uint64, seenLast uint64, t time.Time,
}
func
txReader
(
q
*
log
.
Query
,
txChan
chan
[]
log
.
Tx
,
statusChan
chan
log
.
Status
,
s
igChan
chan
os
.
Signal
)
{
s
topChan
chan
struct
{},
wg
*
sync
.
WaitGroup
)
{
defer
wg
.
Done
()
seenLast
:=
uint64
(
0
)
idle
:=
maxIdle
tRdrStart
=
time
.
Now
()
tLast
:=
tRdrStart
for
{
select
{
case
<-
stopChan
:
close
(
txChan
)
return
default
:
break
}
txGrp
,
status
:=
q
.
NextTxGroup
()
if
status
==
log
.
EOL
{
eol
++
...
...
@@ -167,6 +178,14 @@ func print(txGrp []log.Tx) {
out
.
Flush
()
}
func
txWriter
(
txChan
chan
[]
log
.
Tx
,
wg
*
sync
.
WaitGroup
)
{
defer
wg
.
Done
()
for
txGrp
:=
range
txChan
{
print
(
txGrp
)
writes
++
}
}
func
main
()
{
flag
.
Parse
()
...
...
@@ -203,6 +222,7 @@ func main() {
statusChan
:=
make
(
chan
log
.
Status
)
signalChan
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
signalChan
,
syscall
.
SIGTERM
,
syscall
.
SIGINT
)
stopChan
:=
make
(
chan
struct
{})
if
*
cpuprof
!=
""
{
f
,
err
:=
os
.
Create
(
*
cpuprof
)
...
...
@@ -217,25 +237,22 @@ func main() {
defer
pprof
.
StopCPUProfile
()
}
var
wg
sync
.
WaitGroup
wg
.
Add
(
2
)
start
:=
time
.
Now
()
go
txReader
(
q
,
txChan
,
statusChan
,
signalChan
)
n
:=
uint64
(
0
)
go
txReader
(
q
,
txChan
,
statusChan
,
stopChan
,
&
wg
)
go
txWriter
(
txChan
,
&
wg
)
LOOP
:
for
{
select
{
case
status
:=
<-
statusChan
:
fmt
.
Fprintln
(
os
.
Stderr
,
"status:"
,
status
)
break
LOOP
case
sig
:=
<-
signalChan
:
fmt
.
Fprintln
(
os
.
Stderr
,
"received signal:"
,
sig
)
break
LOOP
case
txGrp
:=
<-
txChan
:
print
(
txGrp
)
n
++
}
select
{
case
status
:=
<-
statusChan
:
fmt
.
Fprintln
(
os
.
Stderr
,
"status:"
,
status
)
break
case
sig
:=
<-
signalChan
:
fmt
.
Fprintln
(
os
.
Stderr
,
"received signal:"
,
sig
)
stopChan
<-
struct
{}{}
}
wg
.
Wait
()
stop
:=
time
.
Now
()
out
.
Flush
()
...
...
@@ -256,7 +273,7 @@ LOOP:
fmt
.
Fprintf
(
os
.
Stderr
,
"%v wall clock time
\n
"
,
stop
.
Sub
(
start
))
fmt
.
Fprintf
(
os
.
Stderr
,
"%d tx grps read
\n
"
,
seen
)
fmt
.
Fprintf
(
os
.
Stderr
,
"%d tx grps written
\n
"
,
n
)
fmt
.
Fprintf
(
os
.
Stderr
,
"%d tx grps written
\n
"
,
writes
)
fmt
.
Fprintf
(
os
.
Stderr
,
"%d r/w channel high watermark
\n
"
,
chanHi
)
fmt
.
Fprintf
(
os
.
Stderr
,
"%d times reader at eol
\n
"
,
eol
)
...
...
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