|
@@ -22,7 +22,13 @@ type WAL struct {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func New(path string) (*WAL, error) {
|
|
func New(path string) (*WAL, error) {
|
|
|
- f, err := os.Create(path)
|
|
|
|
|
|
|
+ f, err := os.Open(path)
|
|
|
|
|
+ if err == nil {
|
|
|
|
|
+ f.Close()
|
|
|
|
|
+ return nil, os.ErrExist
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ f, err = os.Create(path)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
@@ -30,6 +36,13 @@ func New(path string) (*WAL, error) {
|
|
|
return &WAL{f, bw}, nil
|
|
return &WAL{f, bw}, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func (w *WAL) Close() {
|
|
|
|
|
+ if w.f != nil {
|
|
|
|
|
+ w.flush()
|
|
|
|
|
+ w.f.Close()
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func (w *WAL) writeInfo(id int64) error {
|
|
func (w *WAL) writeInfo(id int64) error {
|
|
|
// | 8 bytes | 8 bytes | 8 bytes |
|
|
// | 8 bytes | 8 bytes | 8 bytes |
|
|
|
// | type | len | nodeid |
|
|
// | type | len | nodeid |
|