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 | // Open opens the DB so things can be done | ||||||
| func (b *DB) Open() error { | func (b *DB) Open() error { | ||||||
| 	var err 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 | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
| // Close closes the DB | // Close closes the DB | ||||||
| func (b *DB) Close() error { | 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 | // Offline sets this DB to offline mode | ||||||
| @@ -61,8 +73,18 @@ func (b *DB) Offline() { | |||||||
|  |  | ||||||
| // MkBucketPath builds all buckets in the string slice | // MkBucketPath builds all buckets in the string slice | ||||||
| func (b *DB) MkBucketPath(path []string) error { | 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() | 	b.RefreshDB() | ||||||
| 	err := b.localDB.Update(func(tx *bolt.Tx) error { | 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||||
| 		var err error | 		var err error | ||||||
| 		bkt := tx.Bucket([]byte(path[0])) | 		bkt := tx.Bucket([]byte(path[0])) | ||||||
| 		if bkt == nil { | 		if bkt == nil { | ||||||
| @@ -98,6 +120,15 @@ func (b *DB) MkBucketPath(path []string) error { | |||||||
| func (b *DB) GetValue(path []string, key string) (string, error) { | func (b *DB) GetValue(path []string, key string) (string, error) { | ||||||
| 	var err error | 	var err error | ||||||
| 	var ret string | 	var ret string | ||||||
|  | 	/* | ||||||
|  | 		if !b.isOpen { | ||||||
|  | 			err = b.Open() | ||||||
|  | 			if err != nil { | ||||||
|  | 				return ret, err | ||||||
|  | 			} | ||||||
|  | 			defer b.Close() | ||||||
|  | 		} | ||||||
|  | 	*/ | ||||||
| 	b.RefreshDB() | 	b.RefreshDB() | ||||||
| 	b.localDB.View(func(tx *bolt.Tx) error { | 	b.localDB.View(func(tx *bolt.Tx) error { | ||||||
| 		bkt := tx.Bucket([]byte(path[0])) | 		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 | // SetValue sets the value at path to val | ||||||
| // path is a slice of tokens | // path is a slice of tokens | ||||||
| func (b *DB) SetValue(path []string, key, val string) error { | 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() | 	b.RefreshDB() | ||||||
| 	err := b.MkBucketPath(path) | 	err = b.MkBucketPath(path) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		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 | // GetBucketList returns a list of all sub-buckets at path | ||||||
| func (b *DB) GetBucketList(path []string) ([]string, error) { | func (b *DB) GetBucketList(path []string) ([]string, error) { | ||||||
| 	b.RefreshDB() |  | ||||||
|  |  | ||||||
| 	var err error | 	var err error | ||||||
| 	var ret []string | 	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 { | 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||||
| 		bkt := tx.Bucket([]byte(path[0])) | 		bkt := tx.Bucket([]byte(path[0])) | ||||||
| 		if bkt == nil { | 		if bkt == nil { | ||||||
| @@ -238,10 +287,18 @@ func (b *DB) GetBucketList(path []string) ([]string, error) { | |||||||
|  |  | ||||||
| // GetKeyList returns a list of all keys at path | // GetKeyList returns a list of all keys at path | ||||||
| func (b *DB) GetKeyList(path []string) ([]string, error) { | func (b *DB) GetKeyList(path []string) ([]string, error) { | ||||||
| 	b.RefreshDB() |  | ||||||
|  |  | ||||||
| 	var err error | 	var err error | ||||||
| 	var ret []string | 	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 { | 	err = b.localDB.Update(func(tx *bolt.Tx) error { | ||||||
| 		bkt := tx.Bucket([]byte(path[0])) | 		bkt := tx.Bucket([]byte(path[0])) | ||||||
| 		if bkt == nil { | 		if bkt == nil { | ||||||
| @@ -272,8 +329,17 @@ func (b *DB) GetKeyList(path []string) ([]string, error) { | |||||||
|  |  | ||||||
| // DeletePair deletes the pair with key at path | // DeletePair deletes the pair with key at path | ||||||
| func (b *DB) DeletePair(path []string, key string) error { | func (b *DB) DeletePair(path []string, key string) error { | ||||||
| 	b.RefreshDB() |  | ||||||
| 	var err 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 { | ||||||
| 		bkt := tx.Bucket([]byte(path[0])) | 		bkt := tx.Bucket([]byte(path[0])) | ||||||
| 		if bkt == nil { | 		if bkt == nil { | ||||||
| @@ -301,8 +367,17 @@ func (b *DB) DeletePair(path []string, key string) error { | |||||||
|  |  | ||||||
| // DeleteBucket deletes the bucket key at path | // DeleteBucket deletes the bucket key at path | ||||||
| func (b *DB) DeleteBucket(path []string, key string) error { | func (b *DB) DeleteBucket(path []string, key string) error { | ||||||
| 	b.RefreshDB() |  | ||||||
| 	var err 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 { | ||||||
| 		bkt := tx.Bucket([]byte(path[0])) | 		bkt := tx.Bucket([]byte(path[0])) | ||||||
| 		if bkt == nil { | 		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 | // RefreshDB makes sure that the DB is fresh with the server version | ||||||
| func (b *DB) RefreshDB() error { | func (b *DB) RefreshDB() error { | ||||||
| 	var err error | 	var err error | ||||||
|  | 	/* | ||||||
|  | 		if !b.isOpen { | ||||||
|  | 			err = b.Open() | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 			defer b.Close() | ||||||
|  | 		} | ||||||
|  | 	*/ | ||||||
| 	if b.online { | 	if b.online { | ||||||
| 		// TODO: Compare latest change here with lates on server | 		// TODO: Compare latest change here with lates on server | ||||||
| 		// Then sync, if needed | 		// Then sync, if needed | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user