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
84cd6185
Commit
84cd6185
authored
May 21, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ethdb: documentation and corruption recovery
parent
ef8744d9
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
8 deletions
+13
-8
database.go
ethdb/database.go
+13
-8
No files found.
ethdb/database.go
View file @
84cd6185
...
@@ -7,6 +7,7 @@ import (
...
@@ -7,6 +7,7 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/logger/glog"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb"
"github.com/syndtr/goleveldb/leveldb/errors"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/iterator"
"github.com/syndtr/goleveldb/leveldb/opt"
"github.com/syndtr/goleveldb/leveldb/opt"
)
)
...
@@ -24,9 +25,17 @@ type LDBDatabase struct {
...
@@ -24,9 +25,17 @@ type LDBDatabase struct {
quit
chan
struct
{}
quit
chan
struct
{}
}
}
// NewLDBDatabase returns a LevelDB wrapped object. LDBDatabase does not persist data by
// it self but requires a background poller which syncs every X. `Flush` should be called
// when data needs to be stored and written to disk.
func
NewLDBDatabase
(
file
string
)
(
*
LDBDatabase
,
error
)
{
func
NewLDBDatabase
(
file
string
)
(
*
LDBDatabase
,
error
)
{
// Open the db
// Open the db
db
,
err
:=
leveldb
.
OpenFile
(
file
,
&
opt
.
Options
{
OpenFilesCacheCapacity
:
OpenFileLimit
})
db
,
err
:=
leveldb
.
OpenFile
(
file
,
&
opt
.
Options
{
OpenFilesCacheCapacity
:
OpenFileLimit
})
// check for curruption and attempt to recover
if
_
,
iscorrupted
:=
err
.
(
*
errors
.
ErrCorrupted
);
iscorrupted
{
db
,
err
=
leveldb
.
RecoverFile
(
file
,
nil
)
}
// (re) check for errors and abort if opening of the db failed
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
...
@@ -44,21 +53,15 @@ func (self *LDBDatabase) makeQueue() {
...
@@ -44,21 +53,15 @@ func (self *LDBDatabase) makeQueue() {
self
.
queue
=
make
(
map
[
string
][]
byte
)
self
.
queue
=
make
(
map
[
string
][]
byte
)
}
}
// Put puts the given key / value to the queue
func
(
self
*
LDBDatabase
)
Put
(
key
[]
byte
,
value
[]
byte
)
{
func
(
self
*
LDBDatabase
)
Put
(
key
[]
byte
,
value
[]
byte
)
{
self
.
mu
.
Lock
()
self
.
mu
.
Lock
()
defer
self
.
mu
.
Unlock
()
defer
self
.
mu
.
Unlock
()
self
.
queue
[
string
(
key
)]
=
value
self
.
queue
[
string
(
key
)]
=
value
/*
value = rle.Compress(value)
err := self.db.Put(key, value, nil)
if err != nil {
fmt.Println("Error put", err)
}
*/
}
}
// Get returns the given key if it's present.
func
(
self
*
LDBDatabase
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
func
(
self
*
LDBDatabase
)
Get
(
key
[]
byte
)
([]
byte
,
error
)
{
self
.
mu
.
Lock
()
self
.
mu
.
Lock
()
defer
self
.
mu
.
Unlock
()
defer
self
.
mu
.
Unlock
()
...
@@ -76,6 +79,7 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
...
@@ -76,6 +79,7 @@ func (self *LDBDatabase) Get(key []byte) ([]byte, error) {
return
rle
.
Decompress
(
dat
)
return
rle
.
Decompress
(
dat
)
}
}
// Delete deletes the key from the queue and database
func
(
self
*
LDBDatabase
)
Delete
(
key
[]
byte
)
error
{
func
(
self
*
LDBDatabase
)
Delete
(
key
[]
byte
)
error
{
self
.
mu
.
Lock
()
self
.
mu
.
Lock
()
defer
self
.
mu
.
Unlock
()
defer
self
.
mu
.
Unlock
()
...
@@ -100,6 +104,7 @@ func (self *LDBDatabase) NewIterator() iterator.Iterator {
...
@@ -100,6 +104,7 @@ func (self *LDBDatabase) NewIterator() iterator.Iterator {
return
self
.
db
.
NewIterator
(
nil
,
nil
)
return
self
.
db
.
NewIterator
(
nil
,
nil
)
}
}
// Flush flushes out the queue to leveldb
func
(
self
*
LDBDatabase
)
Flush
()
error
{
func
(
self
*
LDBDatabase
)
Flush
()
error
{
self
.
mu
.
Lock
()
self
.
mu
.
Lock
()
defer
self
.
mu
.
Unlock
()
defer
self
.
mu
.
Unlock
()
...
...
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