Trying to auto-open & auto-close db...
Had to comment changes until fixed.
This commit is contained in:
		
							
								
								
									
										104
									
								
								boltrest.go
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								boltrest.go
									
									
									
									
									
								
							| @@ -44,13 +44,25 @@ func Create(filename string) (*DB, error) { | ||||
| // Open opens the DB so things can be done | ||||
| func (b *DB) Open() error { | ||||
| 	var err error | ||||
| 	b.localDB, err = Open(b.localFile, 0644, nil) | ||||
| 	if !b.isOpen { | ||||
| 		b.localDB, err = bolt.Open(b.localFile, 0644, nil) | ||||
| 		if err == nil { | ||||
| 			b.isOpen = true | ||||
| 		} | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // Close closes the DB | ||||
| func (b *DB) Close() error { | ||||
| 	return b.localDB.Close() | ||||
| 	var err error | ||||
| 	if b.isOpen { | ||||
| 		err = b.localDB.Close() | ||||
| 		if err == nil { | ||||
| 			b.isOpen = false | ||||
| 		} | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // Offline sets this DB to offline mode | ||||
| @@ -61,8 +73,18 @@ func (b *DB) Offline() { | ||||
|  | ||||
| // MkBucketPath builds all buckets in the string slice | ||||
| func (b *DB) MkBucketPath(path []string) error { | ||||
| 	var err error | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	err := b.localDB.Update(func(tx *bolt.Tx) error { | ||||
| 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||
| 		var err error | ||||
| 		bkt := tx.Bucket([]byte(path[0])) | ||||
| 		if bkt == nil { | ||||
| @@ -98,6 +120,15 @@ func (b *DB) MkBucketPath(path []string) error { | ||||
| func (b *DB) GetValue(path []string, key string) (string, error) { | ||||
| 	var err error | ||||
| 	var ret string | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return ret, err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	b.localDB.View(func(tx *bolt.Tx) error { | ||||
| 		bkt := tx.Bucket([]byte(path[0])) | ||||
| @@ -121,8 +152,18 @@ func (b *DB) GetValue(path []string, key string) (string, error) { | ||||
| // SetValue sets the value at path to val | ||||
| // path is a slice of tokens | ||||
| func (b *DB) SetValue(path []string, key, val string) error { | ||||
| 	var err error | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	err := b.MkBucketPath(path) | ||||
| 	err = b.MkBucketPath(path) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -202,10 +243,18 @@ func (b *DB) SetTimestamp(path []string, key string, val time.Time) error { | ||||
|  | ||||
| // GetBucketList returns a list of all sub-buckets at path | ||||
| func (b *DB) GetBucketList(path []string) ([]string, error) { | ||||
| 	b.RefreshDB() | ||||
|  | ||||
| 	var err error | ||||
| 	var ret []string | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return ret, err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||
| 		bkt := tx.Bucket([]byte(path[0])) | ||||
| 		if bkt == nil { | ||||
| @@ -238,10 +287,18 @@ func (b *DB) GetBucketList(path []string) ([]string, error) { | ||||
|  | ||||
| // GetKeyList returns a list of all keys at path | ||||
| func (b *DB) GetKeyList(path []string) ([]string, error) { | ||||
| 	b.RefreshDB() | ||||
|  | ||||
| 	var err error | ||||
| 	var ret []string | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return ret, err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||
| 		bkt := tx.Bucket([]byte(path[0])) | ||||
| 		if bkt == nil { | ||||
| @@ -272,8 +329,17 @@ func (b *DB) GetKeyList(path []string) ([]string, error) { | ||||
|  | ||||
| // DeletePair deletes the pair with key at path | ||||
| func (b *DB) DeletePair(path []string, key string) error { | ||||
| 	b.RefreshDB() | ||||
| 	var err error | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||
| 		bkt := tx.Bucket([]byte(path[0])) | ||||
| 		if bkt == nil { | ||||
| @@ -301,8 +367,17 @@ func (b *DB) DeletePair(path []string, key string) error { | ||||
|  | ||||
| // DeleteBucket deletes the bucket key at path | ||||
| func (b *DB) DeleteBucket(path []string, key string) error { | ||||
| 	b.RefreshDB() | ||||
| 	var err error | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	b.RefreshDB() | ||||
| 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||
| 		bkt := tx.Bucket([]byte(path[0])) | ||||
| 		if bkt == nil { | ||||
| @@ -328,6 +403,15 @@ func (b *DB) DeleteBucket(path []string, key string) error { | ||||
| // RefreshDB makes sure that the DB is fresh with the server version | ||||
| func (b *DB) RefreshDB() error { | ||||
| 	var err error | ||||
| 	/* | ||||
| 		if !b.isOpen { | ||||
| 			err = b.Open() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			defer b.Close() | ||||
| 		} | ||||
| 	*/ | ||||
| 	if b.online { | ||||
| 		// TODO: Compare latest change here with lates on server | ||||
| 		// Then sync, if needed | ||||
|   | ||||
		Reference in New Issue
	
	Block a user