mirror of
				https://github.com/go-micro/go-micro.git
				synced 2025-10-30 23:27:41 +02:00 
			
		
		
		
	add Store Close method (#1500)
* add Store Close method * Update sync store build failure
This commit is contained in:
		
							
								
								
									
										4
									
								
								store/cache/cache.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								store/cache/cache.go
									
									
									
									
										vendored
									
									
								
							| @@ -23,6 +23,10 @@ func NewCache(stores ...store.Store) store.Store { | ||||
| 	return c | ||||
| } | ||||
|  | ||||
| func (c *cache) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (c *cache) Init(...store.Option) error { | ||||
| 	if len(c.stores) < 2 { | ||||
| 		return errors.New("cache requires at least 2 stores") | ||||
|   | ||||
| @@ -101,6 +101,10 @@ func validateOptions(account, token, namespace string) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (w *workersKV) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (w *workersKV) Init(opts ...store.Option) error { | ||||
| 	for _, o := range opts { | ||||
| 		o(&w.options) | ||||
|   | ||||
| @@ -36,6 +36,13 @@ type sqlStore struct { | ||||
| 	options store.Options | ||||
| } | ||||
|  | ||||
| func (s *sqlStore) Close() error { | ||||
| 	if s.db != nil { | ||||
| 		return s.db.Close() | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (s *sqlStore) Init(opts ...store.Option) error { | ||||
| 	for _, o := range opts { | ||||
| 		o(&s.options) | ||||
|   | ||||
| @@ -32,6 +32,10 @@ func NewStore(opts ...store.Option) store.Store { | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func (e *etcdStore) Close() error { | ||||
| 	return e.client.Close() | ||||
| } | ||||
|  | ||||
| func (e *etcdStore) Init(opts ...store.Option) error { | ||||
| 	for _, o := range opts { | ||||
| 		o(&e.options) | ||||
|   | ||||
| @@ -72,13 +72,13 @@ func (m *fileStore) init(opts ...store.Option) error { | ||||
| 	} | ||||
|  | ||||
| 	// create a directory /tmp/micro | ||||
| 	dir := filepath.Join(DefaultDir, "micro") | ||||
| 	dir := filepath.Join(DefaultDir, m.options.Database) | ||||
| 	// create the database handle | ||||
| 	fname := m.options.Database + ".db" | ||||
| 	fname := m.options.Table + ".db" | ||||
| 	// Ignoring this as the folder might exist. | ||||
| 	// Reads/Writes updates will return with sensible error messages | ||||
| 	// about the dir not existing in case this cannot create the path anyway | ||||
| 	_ = os.Mkdir(dir, 0700) | ||||
| 	os.MkdirAll(dir, 0700) | ||||
|  | ||||
| 	m.dir = dir | ||||
| 	m.fileName = fname | ||||
| @@ -223,6 +223,13 @@ func (m *fileStore) set(r *store.Record) error { | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (m *fileStore) Close() error { | ||||
| 	if m.db != nil { | ||||
| 		return m.db.Close() | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *fileStore) Init(opts ...store.Option) error { | ||||
| 	return m.init(opts...) | ||||
| } | ||||
|   | ||||
| @@ -13,14 +13,15 @@ import ( | ||||
| 	"github.com/micro/go-micro/v2/store" | ||||
| ) | ||||
|  | ||||
| func cleanup() { | ||||
| 	dir := filepath.Join(DefaultDir, "micro/") | ||||
| func cleanup(db string, s store.Store) { | ||||
| 	s.Close() | ||||
| 	dir := filepath.Join(DefaultDir, db + "/") | ||||
| 	os.RemoveAll(dir) | ||||
| } | ||||
|  | ||||
| func TestFileStoreReInit(t *testing.T) { | ||||
| 	defer cleanup() | ||||
| 	s := NewStore(store.Table("aaa")) | ||||
| 	defer cleanup(DefaultDatabase, s) | ||||
| 	s.Init(store.Table("bbb")) | ||||
| 	if s.Options().Table != "bbb" { | ||||
| 		t.Error("Init didn't reinitialise the store") | ||||
| @@ -28,26 +29,26 @@ func TestFileStoreReInit(t *testing.T) { | ||||
| } | ||||
|  | ||||
| func TestFileStoreBasic(t *testing.T) { | ||||
| 	defer cleanup() | ||||
| 	s := NewStore() | ||||
| 	defer cleanup(DefaultDatabase, s) | ||||
| 	fileTest(s, t) | ||||
| } | ||||
|  | ||||
| func TestFileStoreTable(t *testing.T) { | ||||
| 	defer cleanup() | ||||
| 	s := NewStore(store.Table("testTable")) | ||||
| 	defer cleanup(DefaultDatabase, s) | ||||
| 	fileTest(s, t) | ||||
| } | ||||
|  | ||||
| func TestFileStoreDatabase(t *testing.T) { | ||||
| 	defer cleanup() | ||||
| 	s := NewStore(store.Database("testdb")) | ||||
| 	defer cleanup("testdb", s) | ||||
| 	fileTest(s, t) | ||||
| } | ||||
|  | ||||
| func TestFileStoreDatabaseTable(t *testing.T) { | ||||
| 	defer cleanup() | ||||
| 	s := NewStore(store.Table("testTable"), store.Database("testdb")) | ||||
| 	defer cleanup("testdb", s) | ||||
| 	fileTest(s, t) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -30,6 +30,11 @@ type memoryStore struct { | ||||
| 	store *cache.Cache | ||||
| } | ||||
|  | ||||
| func (m *memoryStore) Close() error { | ||||
| 	m.store.Flush() | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *memoryStore) Init(opts ...store.Option) error { | ||||
| 	m.store.Flush() | ||||
| 	for _, o := range opts { | ||||
|   | ||||
| @@ -29,3 +29,7 @@ func (n *noopStore) Delete(key string, opts ...DeleteOption) error { | ||||
| func (n *noopStore) List(opts ...ListOption) ([]string, error) { | ||||
| 	return []string{}, nil | ||||
| } | ||||
|  | ||||
| func (n *noopStore) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -32,6 +32,10 @@ type serviceStore struct { | ||||
| 	Client pb.StoreService | ||||
| } | ||||
|  | ||||
| func (s *serviceStore) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (s *serviceStore) Init(opts ...store.Option) error { | ||||
| 	for _, o := range opts { | ||||
| 		o(&s.options) | ||||
|   | ||||
| @@ -28,6 +28,8 @@ type Store interface { | ||||
| 	Delete(key string, opts ...DeleteOption) error | ||||
| 	// List returns any keys that match, or an empty list with no error if none matched. | ||||
| 	List(opts ...ListOption) ([]string, error) | ||||
| 	// Close the store | ||||
| 	Close() error | ||||
| 	// String returns the name of the implementation. | ||||
| 	String() string | ||||
| } | ||||
|   | ||||
| @@ -41,6 +41,10 @@ func NewCache(opts ...Option) Cache { | ||||
| 	return c | ||||
| } | ||||
|  | ||||
| func (c *cache) Close() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Init initialises the storeOptions | ||||
| func (c *cache) Init(opts ...store.Option) error { | ||||
| 	for _, o := range opts { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user