Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
72d5a27a
Unverified
Commit
72d5a27a
authored
Sep 10, 2019
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core, metrics, p2p: switch some invalid counters to gauges
parent
4f6bf2f1
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
108 additions
and
70 deletions
+108
-70
freezer.go
core/rawdb/freezer.go
+4
-4
freezer_table.go
core/rawdb/freezer_table.go
+11
-11
freezer_table_test.go
core/rawdb/freezer_table_test.go
+31
-31
tx_pool.go
core/tx_pool.go
+19
-19
gauge.go
metrics/gauge.go
+38
-0
metrics.go
p2p/metrics.go
+5
-5
No files found.
core/rawdb/freezer.go
View file @
72d5a27a
...
@@ -80,9 +80,9 @@ type freezer struct {
...
@@ -80,9 +80,9 @@ type freezer struct {
func
newFreezer
(
datadir
string
,
namespace
string
)
(
*
freezer
,
error
)
{
func
newFreezer
(
datadir
string
,
namespace
string
)
(
*
freezer
,
error
)
{
// Create the initial freezer object
// Create the initial freezer object
var
(
var
(
readMeter
=
metrics
.
NewRegisteredMeter
(
namespace
+
"ancient/read"
,
nil
)
readMeter
=
metrics
.
NewRegisteredMeter
(
namespace
+
"ancient/read"
,
nil
)
writeMeter
=
metrics
.
NewRegisteredMeter
(
namespace
+
"ancient/write"
,
nil
)
writeMeter
=
metrics
.
NewRegisteredMeter
(
namespace
+
"ancient/write"
,
nil
)
size
Counter
=
metrics
.
NewRegisteredCounter
(
namespace
+
"ancient/size"
,
nil
)
size
Gauge
=
metrics
.
NewRegisteredGauge
(
namespace
+
"ancient/size"
,
nil
)
)
)
// Ensure the datadir is not a symbolic link if it exists.
// Ensure the datadir is not a symbolic link if it exists.
if
info
,
err
:=
os
.
Lstat
(
datadir
);
!
os
.
IsNotExist
(
err
)
{
if
info
,
err
:=
os
.
Lstat
(
datadir
);
!
os
.
IsNotExist
(
err
)
{
...
@@ -103,7 +103,7 @@ func newFreezer(datadir string, namespace string) (*freezer, error) {
...
@@ -103,7 +103,7 @@ func newFreezer(datadir string, namespace string) (*freezer, error) {
instanceLock
:
lock
,
instanceLock
:
lock
,
}
}
for
name
,
disableSnappy
:=
range
freezerNoSnappy
{
for
name
,
disableSnappy
:=
range
freezerNoSnappy
{
table
,
err
:=
newTable
(
datadir
,
name
,
readMeter
,
writeMeter
,
size
Counter
,
disableSnappy
)
table
,
err
:=
newTable
(
datadir
,
name
,
readMeter
,
writeMeter
,
size
Gauge
,
disableSnappy
)
if
err
!=
nil
{
if
err
!=
nil
{
for
_
,
table
:=
range
freezer
.
tables
{
for
_
,
table
:=
range
freezer
.
tables
{
table
.
Close
()
table
.
Close
()
...
...
core/rawdb/freezer_table.go
View file @
72d5a27a
...
@@ -94,18 +94,18 @@ type freezerTable struct {
...
@@ -94,18 +94,18 @@ type freezerTable struct {
// to count how many historic items have gone missing.
// to count how many historic items have gone missing.
itemOffset
uint32
// Offset (number of discarded items)
itemOffset
uint32
// Offset (number of discarded items)
headBytes
uint32
// Number of bytes written to the head file
headBytes
uint32
// Number of bytes written to the head file
readMeter
metrics
.
Meter
// Meter for measuring the effective amount of data read
readMeter
metrics
.
Meter
// Meter for measuring the effective amount of data read
writeMeter
metrics
.
Meter
// Meter for measuring the effective amount of data written
writeMeter
metrics
.
Meter
// Meter for measuring the effective amount of data written
size
Counter
metrics
.
Counter
// Counter
for tracking the combined size of all freezer tables
size
Gauge
metrics
.
Gauge
// Gauge
for tracking the combined size of all freezer tables
logger
log
.
Logger
// Logger with database path and table name ambedded
logger
log
.
Logger
// Logger with database path and table name ambedded
lock
sync
.
RWMutex
// Mutex protecting the data file descriptors
lock
sync
.
RWMutex
// Mutex protecting the data file descriptors
}
}
// newTable opens a freezer table with default settings - 2G files
// newTable opens a freezer table with default settings - 2G files
func
newTable
(
path
string
,
name
string
,
readMeter
metrics
.
Meter
,
writeMeter
metrics
.
Meter
,
size
Counter
metrics
.
Counter
,
disableSnappy
bool
)
(
*
freezerTable
,
error
)
{
func
newTable
(
path
string
,
name
string
,
readMeter
metrics
.
Meter
,
writeMeter
metrics
.
Meter
,
size
Gauge
metrics
.
Gauge
,
disableSnappy
bool
)
(
*
freezerTable
,
error
)
{
return
newCustomTable
(
path
,
name
,
readMeter
,
writeMeter
,
size
Counter
,
2
*
1000
*
1000
*
1000
,
disableSnappy
)
return
newCustomTable
(
path
,
name
,
readMeter
,
writeMeter
,
size
Gauge
,
2
*
1000
*
1000
*
1000
,
disableSnappy
)
}
}
// openFreezerFileForAppend opens a freezer table file and seeks to the end
// openFreezerFileForAppend opens a freezer table file and seeks to the end
...
@@ -149,7 +149,7 @@ func truncateFreezerFile(file *os.File, size int64) error {
...
@@ -149,7 +149,7 @@ func truncateFreezerFile(file *os.File, size int64) error {
// newCustomTable opens a freezer table, creating the data and index files if they are
// newCustomTable opens a freezer table, creating the data and index files if they are
// non existent. Both files are truncated to the shortest common length to ensure
// non existent. Both files are truncated to the shortest common length to ensure
// they don't go out of sync.
// they don't go out of sync.
func
newCustomTable
(
path
string
,
name
string
,
readMeter
metrics
.
Meter
,
writeMeter
metrics
.
Meter
,
size
Counter
metrics
.
Counter
,
maxFilesize
uint32
,
noCompression
bool
)
(
*
freezerTable
,
error
)
{
func
newCustomTable
(
path
string
,
name
string
,
readMeter
metrics
.
Meter
,
writeMeter
metrics
.
Meter
,
size
Gauge
metrics
.
Gauge
,
maxFilesize
uint32
,
noCompression
bool
)
(
*
freezerTable
,
error
)
{
// Ensure the containing directory exists and open the indexEntry file
// Ensure the containing directory exists and open the indexEntry file
if
err
:=
os
.
MkdirAll
(
path
,
0755
);
err
!=
nil
{
if
err
:=
os
.
MkdirAll
(
path
,
0755
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -172,7 +172,7 @@ func newCustomTable(path string, name string, readMeter metrics.Meter, writeMete
...
@@ -172,7 +172,7 @@ func newCustomTable(path string, name string, readMeter metrics.Meter, writeMete
files
:
make
(
map
[
uint32
]
*
os
.
File
),
files
:
make
(
map
[
uint32
]
*
os
.
File
),
readMeter
:
readMeter
,
readMeter
:
readMeter
,
writeMeter
:
writeMeter
,
writeMeter
:
writeMeter
,
size
Counter
:
sizeCounter
,
size
Gauge
:
sizeGauge
,
name
:
name
,
name
:
name
,
path
:
path
,
path
:
path
,
logger
:
log
.
New
(
"database"
,
path
,
"table"
,
name
),
logger
:
log
.
New
(
"database"
,
path
,
"table"
,
name
),
...
@@ -189,7 +189,7 @@ func newCustomTable(path string, name string, readMeter metrics.Meter, writeMete
...
@@ -189,7 +189,7 @@ func newCustomTable(path string, name string, readMeter metrics.Meter, writeMete
tab
.
Close
()
tab
.
Close
()
return
nil
,
err
return
nil
,
err
}
}
tab
.
size
Counter
.
Inc
(
int64
(
size
))
tab
.
size
Gauge
.
Inc
(
int64
(
size
))
return
tab
,
nil
return
tab
,
nil
}
}
...
@@ -378,7 +378,7 @@ func (t *freezerTable) truncate(items uint64) error {
...
@@ -378,7 +378,7 @@ func (t *freezerTable) truncate(items uint64) error {
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
t
.
size
Counter
.
Dec
(
int64
(
oldSize
-
newSize
))
t
.
size
Gauge
.
Dec
(
int64
(
oldSize
-
newSize
))
return
nil
return
nil
}
}
...
@@ -510,7 +510,7 @@ func (t *freezerTable) Append(item uint64, blob []byte) error {
...
@@ -510,7 +510,7 @@ func (t *freezerTable) Append(item uint64, blob []byte) error {
t
.
index
.
Write
(
idx
.
marshallBinary
())
t
.
index
.
Write
(
idx
.
marshallBinary
())
t
.
writeMeter
.
Mark
(
int64
(
bLen
+
indexEntrySize
))
t
.
writeMeter
.
Mark
(
int64
(
bLen
+
indexEntrySize
))
t
.
size
Counter
.
Inc
(
int64
(
bLen
+
indexEntrySize
))
t
.
size
Gauge
.
Inc
(
int64
(
bLen
+
indexEntrySize
))
atomic
.
AddUint64
(
&
t
.
items
,
1
)
atomic
.
AddUint64
(
&
t
.
items
,
1
)
return
nil
return
nil
...
...
core/rawdb/freezer_table_test.go
View file @
72d5a27a
...
@@ -56,7 +56,7 @@ func TestFreezerBasics(t *testing.T) {
...
@@ -56,7 +56,7 @@ func TestFreezerBasics(t *testing.T) {
// set cutoff at 50 bytes
// set cutoff at 50 bytes
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fmt
.
Sprintf
(
"unittest-%d"
,
rand
.
Uint64
()),
fmt
.
Sprintf
(
"unittest-%d"
,
rand
.
Uint64
()),
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
New
Counter
(),
50
,
true
)
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
New
Gauge
(),
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -99,11 +99,11 @@ func TestFreezerBasicsClosing(t *testing.T) {
...
@@ -99,11 +99,11 @@ func TestFreezerBasicsClosing(t *testing.T) {
// set cutoff at 50 bytes
// set cutoff at 50 bytes
var
(
var
(
fname
=
fmt
.
Sprintf
(
"basics-close-%d"
,
rand
.
Uint64
())
fname
=
fmt
.
Sprintf
(
"basics-close-%d"
,
rand
.
Uint64
())
rm
,
wm
,
s
c
=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
f
*
freezerTable
f
*
freezerTable
err
error
err
error
)
)
f
,
err
=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -112,7 +112,7 @@ func TestFreezerBasicsClosing(t *testing.T) {
...
@@ -112,7 +112,7 @@ func TestFreezerBasicsClosing(t *testing.T) {
data
:=
getChunk
(
15
,
x
)
data
:=
getChunk
(
15
,
x
)
f
.
Append
(
uint64
(
x
),
data
)
f
.
Append
(
uint64
(
x
),
data
)
f
.
Close
()
f
.
Close
()
f
,
err
=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -129,7 +129,7 @@ func TestFreezerBasicsClosing(t *testing.T) {
...
@@ -129,7 +129,7 @@ func TestFreezerBasicsClosing(t *testing.T) {
t
.
Fatalf
(
"test %d, got
\n
%x !=
\n
%x"
,
y
,
got
,
exp
)
t
.
Fatalf
(
"test %d, got
\n
%x !=
\n
%x"
,
y
,
got
,
exp
)
}
}
f
.
Close
()
f
.
Close
()
f
,
err
=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -139,11 +139,11 @@ func TestFreezerBasicsClosing(t *testing.T) {
...
@@ -139,11 +139,11 @@ func TestFreezerBasicsClosing(t *testing.T) {
// TestFreezerRepairDanglingHead tests that we can recover if index entries are removed
// TestFreezerRepairDanglingHead tests that we can recover if index entries are removed
func
TestFreezerRepairDanglingHead
(
t
*
testing
.
T
)
{
func
TestFreezerRepairDanglingHead
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"dangling_headtest-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"dangling_headtest-%d"
,
rand
.
Uint64
())
{
// Fill table
{
// Fill table
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -172,7 +172,7 @@ func TestFreezerRepairDanglingHead(t *testing.T) {
...
@@ -172,7 +172,7 @@ func TestFreezerRepairDanglingHead(t *testing.T) {
idxFile
.
Close
()
idxFile
.
Close
()
// Now open it again
// Now open it again
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -190,11 +190,11 @@ func TestFreezerRepairDanglingHead(t *testing.T) {
...
@@ -190,11 +190,11 @@ func TestFreezerRepairDanglingHead(t *testing.T) {
// TestFreezerRepairDanglingHeadLarge tests that we can recover if very many index entries are removed
// TestFreezerRepairDanglingHeadLarge tests that we can recover if very many index entries are removed
func
TestFreezerRepairDanglingHeadLarge
(
t
*
testing
.
T
)
{
func
TestFreezerRepairDanglingHeadLarge
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"dangling_headtest-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"dangling_headtest-%d"
,
rand
.
Uint64
())
{
// Fill a table and close it
{
// Fill a table and close it
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -222,7 +222,7 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) {
...
@@ -222,7 +222,7 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) {
idxFile
.
Close
()
idxFile
.
Close
()
// Now open it again
// Now open it again
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -243,7 +243,7 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) {
...
@@ -243,7 +243,7 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) {
}
}
// And if we open it, we should now be able to read all of them (new values)
// And if we open it, we should now be able to read all of them (new values)
{
{
f
,
_
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
_
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
for
y
:=
1
;
y
<
255
;
y
++
{
for
y
:=
1
;
y
<
255
;
y
++
{
exp
:=
getChunk
(
15
,
^
y
)
exp
:=
getChunk
(
15
,
^
y
)
got
,
err
:=
f
.
Retrieve
(
uint64
(
y
))
got
,
err
:=
f
.
Retrieve
(
uint64
(
y
))
...
@@ -260,11 +260,11 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) {
...
@@ -260,11 +260,11 @@ func TestFreezerRepairDanglingHeadLarge(t *testing.T) {
// TestSnappyDetection tests that we fail to open a snappy database and vice versa
// TestSnappyDetection tests that we fail to open a snappy database and vice versa
func
TestSnappyDetection
(
t
*
testing
.
T
)
{
func
TestSnappyDetection
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"snappytest-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"snappytest-%d"
,
rand
.
Uint64
())
// Open with snappy
// Open with snappy
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -277,7 +277,7 @@ func TestSnappyDetection(t *testing.T) {
...
@@ -277,7 +277,7 @@ func TestSnappyDetection(t *testing.T) {
}
}
// Open without snappy
// Open without snappy
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
false
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
false
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -289,7 +289,7 @@ func TestSnappyDetection(t *testing.T) {
...
@@ -289,7 +289,7 @@ func TestSnappyDetection(t *testing.T) {
// Open with snappy
// Open with snappy
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -317,11 +317,11 @@ func assertFileSize(f string, size int64) error {
...
@@ -317,11 +317,11 @@ func assertFileSize(f string, size int64) error {
// the index is repaired
// the index is repaired
func
TestFreezerRepairDanglingIndex
(
t
*
testing
.
T
)
{
func
TestFreezerRepairDanglingIndex
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"dangling_indextest-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"dangling_indextest-%d"
,
rand
.
Uint64
())
{
// Fill a table and close it
{
// Fill a table and close it
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -357,7 +357,7 @@ func TestFreezerRepairDanglingIndex(t *testing.T) {
...
@@ -357,7 +357,7 @@ func TestFreezerRepairDanglingIndex(t *testing.T) {
// 45, 45, 15
// 45, 45, 15
// with 3+3+1 items
// with 3+3+1 items
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -374,11 +374,11 @@ func TestFreezerRepairDanglingIndex(t *testing.T) {
...
@@ -374,11 +374,11 @@ func TestFreezerRepairDanglingIndex(t *testing.T) {
func
TestFreezerTruncate
(
t
*
testing
.
T
)
{
func
TestFreezerTruncate
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"truncation-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"truncation-%d"
,
rand
.
Uint64
())
{
// Fill table
{
// Fill table
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -395,7 +395,7 @@ func TestFreezerTruncate(t *testing.T) {
...
@@ -395,7 +395,7 @@ func TestFreezerTruncate(t *testing.T) {
}
}
// Reopen, truncate
// Reopen, truncate
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -417,10 +417,10 @@ func TestFreezerTruncate(t *testing.T) {
...
@@ -417,10 +417,10 @@ func TestFreezerTruncate(t *testing.T) {
// That will rewind the index, and _should_ truncate the head file
// That will rewind the index, and _should_ truncate the head file
func
TestFreezerRepairFirstFile
(
t
*
testing
.
T
)
{
func
TestFreezerRepairFirstFile
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"truncationfirst-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"truncationfirst-%d"
,
rand
.
Uint64
())
{
// Fill table
{
// Fill table
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -448,7 +448,7 @@ func TestFreezerRepairFirstFile(t *testing.T) {
...
@@ -448,7 +448,7 @@ func TestFreezerRepairFirstFile(t *testing.T) {
}
}
// Reopen
// Reopen
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -473,10 +473,10 @@ func TestFreezerRepairFirstFile(t *testing.T) {
...
@@ -473,10 +473,10 @@ func TestFreezerRepairFirstFile(t *testing.T) {
// - check that we did not keep the rdonly file descriptors
// - check that we did not keep the rdonly file descriptors
func
TestFreezerReadAndTruncate
(
t
*
testing
.
T
)
{
func
TestFreezerReadAndTruncate
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"read_truncate-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"read_truncate-%d"
,
rand
.
Uint64
())
{
// Fill table
{
// Fill table
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -493,7 +493,7 @@ func TestFreezerReadAndTruncate(t *testing.T) {
...
@@ -493,7 +493,7 @@ func TestFreezerReadAndTruncate(t *testing.T) {
}
}
// Reopen and read all files
// Reopen and read all files
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
50
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
50
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -519,10 +519,10 @@ func TestFreezerReadAndTruncate(t *testing.T) {
...
@@ -519,10 +519,10 @@ func TestFreezerReadAndTruncate(t *testing.T) {
func
TestOffset
(
t
*
testing
.
T
)
{
func
TestOffset
(
t
*
testing
.
T
)
{
t
.
Parallel
()
t
.
Parallel
()
rm
,
wm
,
s
c
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewCounter
()
rm
,
wm
,
s
g
:=
metrics
.
NewMeter
(),
metrics
.
NewMeter
(),
metrics
.
NewGauge
()
fname
:=
fmt
.
Sprintf
(
"offset-%d"
,
rand
.
Uint64
())
fname
:=
fmt
.
Sprintf
(
"offset-%d"
,
rand
.
Uint64
())
{
// Fill table
{
// Fill table
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
40
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
40
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -578,7 +578,7 @@ func TestOffset(t *testing.T) {
...
@@ -578,7 +578,7 @@ func TestOffset(t *testing.T) {
}
}
// Now open again
// Now open again
{
{
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
c
,
40
,
true
)
f
,
err
:=
newCustomTable
(
os
.
TempDir
(),
fname
,
rm
,
wm
,
s
g
,
40
,
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
...
core/tx_pool.go
View file @
72d5a27a
...
@@ -101,9 +101,9 @@ var (
...
@@ -101,9 +101,9 @@ var (
invalidTxMeter
=
metrics
.
NewRegisteredMeter
(
"txpool/invalid"
,
nil
)
invalidTxMeter
=
metrics
.
NewRegisteredMeter
(
"txpool/invalid"
,
nil
)
underpricedTxMeter
=
metrics
.
NewRegisteredMeter
(
"txpool/underpriced"
,
nil
)
underpricedTxMeter
=
metrics
.
NewRegisteredMeter
(
"txpool/underpriced"
,
nil
)
pending
Counter
=
metrics
.
NewRegisteredCounter
(
"txpool/pending"
,
nil
)
pending
Gauge
=
metrics
.
NewRegisteredGauge
(
"txpool/pending"
,
nil
)
queued
Counter
=
metrics
.
NewRegisteredCounter
(
"txpool/queued"
,
nil
)
queued
Gauge
=
metrics
.
NewRegisteredGauge
(
"txpool/queued"
,
nil
)
local
Counter
=
metrics
.
NewRegisteredCounter
(
"txpool/local"
,
nil
)
local
Gauge
=
metrics
.
NewRegisteredGauge
(
"txpool/local"
,
nil
)
)
)
// TxStatus is the current status of a transaction as seen by the pool.
// TxStatus is the current status of a transaction as seen by the pool.
...
@@ -628,7 +628,7 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (replaced bool, err e
...
@@ -628,7 +628,7 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (replaced bool, err e
}
}
}
}
if
local
||
pool
.
locals
.
contains
(
from
)
{
if
local
||
pool
.
locals
.
contains
(
from
)
{
local
Counter
.
Inc
(
1
)
local
Gauge
.
Inc
(
1
)
}
}
pool
.
journalTx
(
from
,
tx
)
pool
.
journalTx
(
from
,
tx
)
...
@@ -658,7 +658,7 @@ func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction) (bool, er
...
@@ -658,7 +658,7 @@ func (pool *TxPool) enqueueTx(hash common.Hash, tx *types.Transaction) (bool, er
queuedReplaceMeter
.
Mark
(
1
)
queuedReplaceMeter
.
Mark
(
1
)
}
else
{
}
else
{
// Nothing was replaced, bump the queued counter
// Nothing was replaced, bump the queued counter
queued
Counter
.
Inc
(
1
)
queued
Gauge
.
Inc
(
1
)
}
}
if
pool
.
all
.
Get
(
hash
)
==
nil
{
if
pool
.
all
.
Get
(
hash
)
==
nil
{
pool
.
all
.
Add
(
tx
)
pool
.
all
.
Add
(
tx
)
...
@@ -707,7 +707,7 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T
...
@@ -707,7 +707,7 @@ func (pool *TxPool) promoteTx(addr common.Address, hash common.Hash, tx *types.T
pendingReplaceMeter
.
Mark
(
1
)
pendingReplaceMeter
.
Mark
(
1
)
}
else
{
}
else
{
// Nothing was replaced, bump the pending counter
// Nothing was replaced, bump the pending counter
pending
Counter
.
Inc
(
1
)
pending
Gauge
.
Inc
(
1
)
}
}
// Failsafe to work around direct pending inserts (tests)
// Failsafe to work around direct pending inserts (tests)
if
pool
.
all
.
Get
(
hash
)
==
nil
{
if
pool
.
all
.
Get
(
hash
)
==
nil
{
...
@@ -841,7 +841,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
...
@@ -841,7 +841,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
pool
.
priced
.
Removed
(
1
)
pool
.
priced
.
Removed
(
1
)
}
}
if
pool
.
locals
.
contains
(
addr
)
{
if
pool
.
locals
.
contains
(
addr
)
{
local
Counter
.
Dec
(
1
)
local
Gauge
.
Dec
(
1
)
}
}
// Remove the transaction from the pending lists and reset the account nonce
// Remove the transaction from the pending lists and reset the account nonce
if
pending
:=
pool
.
pending
[
addr
];
pending
!=
nil
{
if
pending
:=
pool
.
pending
[
addr
];
pending
!=
nil
{
...
@@ -858,7 +858,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
...
@@ -858,7 +858,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
// Update the account nonce if needed
// Update the account nonce if needed
pool
.
pendingNonces
.
setIfLower
(
addr
,
tx
.
Nonce
())
pool
.
pendingNonces
.
setIfLower
(
addr
,
tx
.
Nonce
())
// Reduce the pending counter
// Reduce the pending counter
pending
Counter
.
Dec
(
int64
(
1
+
len
(
invalids
)))
pending
Gauge
.
Dec
(
int64
(
1
+
len
(
invalids
)))
return
return
}
}
}
}
...
@@ -866,7 +866,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
...
@@ -866,7 +866,7 @@ func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {
if
future
:=
pool
.
queue
[
addr
];
future
!=
nil
{
if
future
:=
pool
.
queue
[
addr
];
future
!=
nil
{
if
removed
,
_
:=
future
.
Remove
(
tx
);
removed
{
if
removed
,
_
:=
future
.
Remove
(
tx
);
removed
{
// Reduce the queued counter
// Reduce the queued counter
queued
Counter
.
Dec
(
1
)
queued
Gauge
.
Dec
(
1
)
}
}
if
future
.
Empty
()
{
if
future
.
Empty
()
{
delete
(
pool
.
queue
,
addr
)
delete
(
pool
.
queue
,
addr
)
...
@@ -1164,7 +1164,7 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans
...
@@ -1164,7 +1164,7 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans
promoted
=
append
(
promoted
,
tx
)
promoted
=
append
(
promoted
,
tx
)
}
}
}
}
queued
Counter
.
Dec
(
int64
(
len
(
readies
)))
queued
Gauge
.
Dec
(
int64
(
len
(
readies
)))
// Drop all transactions over the allowed limit
// Drop all transactions over the allowed limit
var
caps
types
.
Transactions
var
caps
types
.
Transactions
...
@@ -1179,9 +1179,9 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans
...
@@ -1179,9 +1179,9 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans
}
}
// Mark all the items dropped as removed
// Mark all the items dropped as removed
pool
.
priced
.
Removed
(
len
(
forwards
)
+
len
(
drops
)
+
len
(
caps
))
pool
.
priced
.
Removed
(
len
(
forwards
)
+
len
(
drops
)
+
len
(
caps
))
queued
Counter
.
Dec
(
int64
(
len
(
forwards
)
+
len
(
drops
)
+
len
(
caps
)))
queued
Gauge
.
Dec
(
int64
(
len
(
forwards
)
+
len
(
drops
)
+
len
(
caps
)))
if
pool
.
locals
.
contains
(
addr
)
{
if
pool
.
locals
.
contains
(
addr
)
{
local
Counter
.
Dec
(
int64
(
len
(
forwards
)
+
len
(
drops
)
+
len
(
caps
)))
local
Gauge
.
Dec
(
int64
(
len
(
forwards
)
+
len
(
drops
)
+
len
(
caps
)))
}
}
// Delete the entire queue entry if it became empty.
// Delete the entire queue entry if it became empty.
if
list
.
Empty
()
{
if
list
.
Empty
()
{
...
@@ -1240,9 +1240,9 @@ func (pool *TxPool) truncatePending() {
...
@@ -1240,9 +1240,9 @@ func (pool *TxPool) truncatePending() {
log
.
Trace
(
"Removed fairness-exceeding pending transaction"
,
"hash"
,
hash
)
log
.
Trace
(
"Removed fairness-exceeding pending transaction"
,
"hash"
,
hash
)
}
}
pool
.
priced
.
Removed
(
len
(
caps
))
pool
.
priced
.
Removed
(
len
(
caps
))
pending
Counter
.
Dec
(
int64
(
len
(
caps
)))
pending
Gauge
.
Dec
(
int64
(
len
(
caps
)))
if
pool
.
locals
.
contains
(
offenders
[
i
])
{
if
pool
.
locals
.
contains
(
offenders
[
i
])
{
local
Counter
.
Dec
(
int64
(
len
(
caps
)))
local
Gauge
.
Dec
(
int64
(
len
(
caps
)))
}
}
pending
--
pending
--
}
}
...
@@ -1267,9 +1267,9 @@ func (pool *TxPool) truncatePending() {
...
@@ -1267,9 +1267,9 @@ func (pool *TxPool) truncatePending() {
log
.
Trace
(
"Removed fairness-exceeding pending transaction"
,
"hash"
,
hash
)
log
.
Trace
(
"Removed fairness-exceeding pending transaction"
,
"hash"
,
hash
)
}
}
pool
.
priced
.
Removed
(
len
(
caps
))
pool
.
priced
.
Removed
(
len
(
caps
))
pending
Counter
.
Dec
(
int64
(
len
(
caps
)))
pending
Gauge
.
Dec
(
int64
(
len
(
caps
)))
if
pool
.
locals
.
contains
(
addr
)
{
if
pool
.
locals
.
contains
(
addr
)
{
local
Counter
.
Dec
(
int64
(
len
(
caps
)))
local
Gauge
.
Dec
(
int64
(
len
(
caps
)))
}
}
pending
--
pending
--
}
}
...
@@ -1353,9 +1353,9 @@ func (pool *TxPool) demoteUnexecutables() {
...
@@ -1353,9 +1353,9 @@ func (pool *TxPool) demoteUnexecutables() {
log
.
Trace
(
"Demoting pending transaction"
,
"hash"
,
hash
)
log
.
Trace
(
"Demoting pending transaction"
,
"hash"
,
hash
)
pool
.
enqueueTx
(
hash
,
tx
)
pool
.
enqueueTx
(
hash
,
tx
)
}
}
pending
Counter
.
Dec
(
int64
(
len
(
olds
)
+
len
(
drops
)
+
len
(
invalids
)))
pending
Gauge
.
Dec
(
int64
(
len
(
olds
)
+
len
(
drops
)
+
len
(
invalids
)))
if
pool
.
locals
.
contains
(
addr
)
{
if
pool
.
locals
.
contains
(
addr
)
{
local
Counter
.
Dec
(
int64
(
len
(
olds
)
+
len
(
drops
)
+
len
(
invalids
)))
local
Gauge
.
Dec
(
int64
(
len
(
olds
)
+
len
(
drops
)
+
len
(
invalids
)))
}
}
// If there's a gap in front, alert (should never happen) and postpone all transactions
// If there's a gap in front, alert (should never happen) and postpone all transactions
if
list
.
Len
()
>
0
&&
list
.
txs
.
Get
(
nonce
)
==
nil
{
if
list
.
Len
()
>
0
&&
list
.
txs
.
Get
(
nonce
)
==
nil
{
...
@@ -1365,7 +1365,7 @@ func (pool *TxPool) demoteUnexecutables() {
...
@@ -1365,7 +1365,7 @@ func (pool *TxPool) demoteUnexecutables() {
log
.
Error
(
"Demoting invalidated transaction"
,
"hash"
,
hash
)
log
.
Error
(
"Demoting invalidated transaction"
,
"hash"
,
hash
)
pool
.
enqueueTx
(
hash
,
tx
)
pool
.
enqueueTx
(
hash
,
tx
)
}
}
pending
Counter
.
Dec
(
int64
(
len
(
gapped
)))
pending
Gauge
.
Dec
(
int64
(
len
(
gapped
)))
}
}
// Delete the entire queue entry if it became empty.
// Delete the entire queue entry if it became empty.
if
list
.
Empty
()
{
if
list
.
Empty
()
{
...
...
metrics/gauge.go
View file @
72d5a27a
...
@@ -6,6 +6,8 @@ import "sync/atomic"
...
@@ -6,6 +6,8 @@ import "sync/atomic"
type
Gauge
interface
{
type
Gauge
interface
{
Snapshot
()
Gauge
Snapshot
()
Gauge
Update
(
int64
)
Update
(
int64
)
Dec
(
int64
)
Inc
(
int64
)
Value
()
int64
Value
()
int64
}
}
...
@@ -65,6 +67,16 @@ func (GaugeSnapshot) Update(int64) {
...
@@ -65,6 +67,16 @@ func (GaugeSnapshot) Update(int64) {
panic
(
"Update called on a GaugeSnapshot"
)
panic
(
"Update called on a GaugeSnapshot"
)
}
}
// Dec panics.
func
(
GaugeSnapshot
)
Dec
(
int64
)
{
panic
(
"Dec called on a GaugeSnapshot"
)
}
// Inc panics.
func
(
GaugeSnapshot
)
Inc
(
int64
)
{
panic
(
"Inc called on a GaugeSnapshot"
)
}
// Value returns the value at the time the snapshot was taken.
// Value returns the value at the time the snapshot was taken.
func
(
g
GaugeSnapshot
)
Value
()
int64
{
return
int64
(
g
)
}
func
(
g
GaugeSnapshot
)
Value
()
int64
{
return
int64
(
g
)
}
...
@@ -77,6 +89,12 @@ func (NilGauge) Snapshot() Gauge { return NilGauge{} }
...
@@ -77,6 +89,12 @@ func (NilGauge) Snapshot() Gauge { return NilGauge{} }
// Update is a no-op.
// Update is a no-op.
func
(
NilGauge
)
Update
(
v
int64
)
{}
func
(
NilGauge
)
Update
(
v
int64
)
{}
// Dec is a no-op.
func
(
NilGauge
)
Dec
(
i
int64
)
{}
// Inc is a no-op.
func
(
NilGauge
)
Inc
(
i
int64
)
{}
// Value is a no-op.
// Value is a no-op.
func
(
NilGauge
)
Value
()
int64
{
return
0
}
func
(
NilGauge
)
Value
()
int64
{
return
0
}
...
@@ -101,6 +119,16 @@ func (g *StandardGauge) Value() int64 {
...
@@ -101,6 +119,16 @@ func (g *StandardGauge) Value() int64 {
return
atomic
.
LoadInt64
(
&
g
.
value
)
return
atomic
.
LoadInt64
(
&
g
.
value
)
}
}
// Dec decrements the gauge's current value by the given amount.
func
(
g
*
StandardGauge
)
Dec
(
i
int64
)
{
atomic
.
AddInt64
(
&
g
.
value
,
-
i
)
}
// Inc increments the gauge's current value by the given amount.
func
(
g
*
StandardGauge
)
Inc
(
i
int64
)
{
atomic
.
AddInt64
(
&
g
.
value
,
i
)
}
// FunctionalGauge returns value from given function
// FunctionalGauge returns value from given function
type
FunctionalGauge
struct
{
type
FunctionalGauge
struct
{
value
func
()
int64
value
func
()
int64
...
@@ -118,3 +146,13 @@ func (g FunctionalGauge) Snapshot() Gauge { return GaugeSnapshot(g.Value()) }
...
@@ -118,3 +146,13 @@ func (g FunctionalGauge) Snapshot() Gauge { return GaugeSnapshot(g.Value()) }
func
(
FunctionalGauge
)
Update
(
int64
)
{
func
(
FunctionalGauge
)
Update
(
int64
)
{
panic
(
"Update called on a FunctionalGauge"
)
panic
(
"Update called on a FunctionalGauge"
)
}
}
// Dec panics.
func
(
FunctionalGauge
)
Dec
(
int64
)
{
panic
(
"Dec called on a FunctionalGauge"
)
}
// Inc panics.
func
(
FunctionalGauge
)
Inc
(
int64
)
{
panic
(
"Inc called on a FunctionalGauge"
)
}
p2p/metrics.go
View file @
72d5a27a
...
@@ -45,7 +45,7 @@ var (
...
@@ -45,7 +45,7 @@ var (
ingressTrafficMeter
=
metrics
.
NewRegisteredMeter
(
MetricsInboundTraffic
,
nil
)
// Meter metering the cumulative ingress traffic
ingressTrafficMeter
=
metrics
.
NewRegisteredMeter
(
MetricsInboundTraffic
,
nil
)
// Meter metering the cumulative ingress traffic
egressConnectMeter
=
metrics
.
NewRegisteredMeter
(
MetricsOutboundConnects
,
nil
)
// Meter counting the egress connections
egressConnectMeter
=
metrics
.
NewRegisteredMeter
(
MetricsOutboundConnects
,
nil
)
// Meter counting the egress connections
egressTrafficMeter
=
metrics
.
NewRegisteredMeter
(
MetricsOutboundTraffic
,
nil
)
// Meter metering the cumulative egress traffic
egressTrafficMeter
=
metrics
.
NewRegisteredMeter
(
MetricsOutboundTraffic
,
nil
)
// Meter metering the cumulative egress traffic
activePeer
Counter
=
metrics
.
NewRegisteredCounter
(
"p2p/peers"
,
nil
)
// Gauge tracking the current peer count
activePeer
Gauge
=
metrics
.
NewRegisteredGauge
(
"p2p/peers"
,
nil
)
// Gauge tracking the current peer count
PeerIngressRegistry
=
metrics
.
NewPrefixedChildRegistry
(
metrics
.
EphemeralRegistry
,
MetricsInboundTraffic
+
"/"
)
// Registry containing the peer ingress
PeerIngressRegistry
=
metrics
.
NewPrefixedChildRegistry
(
metrics
.
EphemeralRegistry
,
MetricsInboundTraffic
+
"/"
)
// Registry containing the peer ingress
PeerEgressRegistry
=
metrics
.
NewPrefixedChildRegistry
(
metrics
.
EphemeralRegistry
,
MetricsOutboundTraffic
+
"/"
)
// Registry containing the peer egress
PeerEgressRegistry
=
metrics
.
NewPrefixedChildRegistry
(
metrics
.
EphemeralRegistry
,
MetricsOutboundTraffic
+
"/"
)
// Registry containing the peer egress
...
@@ -124,7 +124,7 @@ func newMeteredConn(conn net.Conn, ingress bool, ip net.IP) net.Conn {
...
@@ -124,7 +124,7 @@ func newMeteredConn(conn net.Conn, ingress bool, ip net.IP) net.Conn {
}
else
{
}
else
{
egressConnectMeter
.
Mark
(
1
)
egressConnectMeter
.
Mark
(
1
)
}
}
activePeer
Counter
.
Inc
(
1
)
activePeer
Gauge
.
Inc
(
1
)
return
&
meteredConn
{
return
&
meteredConn
{
Conn
:
conn
,
Conn
:
conn
,
...
@@ -200,7 +200,7 @@ func (c *meteredConn) Close() error {
...
@@ -200,7 +200,7 @@ func (c *meteredConn) Close() error {
IP
:
c
.
ip
,
IP
:
c
.
ip
,
Elapsed
:
time
.
Since
(
c
.
connected
),
Elapsed
:
time
.
Since
(
c
.
connected
),
})
})
activePeer
Counter
.
Dec
(
1
)
activePeer
Gauge
.
Dec
(
1
)
return
err
return
err
}
}
id
:=
c
.
id
id
:=
c
.
id
...
@@ -212,7 +212,7 @@ func (c *meteredConn) Close() error {
...
@@ -212,7 +212,7 @@ func (c *meteredConn) Close() error {
IP
:
c
.
ip
,
IP
:
c
.
ip
,
ID
:
id
,
ID
:
id
,
})
})
activePeer
Counter
.
Dec
(
1
)
activePeer
Gauge
.
Dec
(
1
)
return
err
return
err
}
}
ingress
,
egress
:=
uint64
(
c
.
ingressMeter
.
Count
()),
uint64
(
c
.
egressMeter
.
Count
())
ingress
,
egress
:=
uint64
(
c
.
ingressMeter
.
Count
()),
uint64
(
c
.
egressMeter
.
Count
())
...
@@ -233,6 +233,6 @@ func (c *meteredConn) Close() error {
...
@@ -233,6 +233,6 @@ func (c *meteredConn) Close() error {
Ingress
:
ingress
,
Ingress
:
ingress
,
Egress
:
egress
,
Egress
:
egress
,
})
})
activePeer
Counter
.
Dec
(
1
)
activePeer
Gauge
.
Dec
(
1
)
return
err
return
err
}
}
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