diff options
Diffstat (limited to 'go/storage')
| -rw-r--r-- | go/storage/cdb_map.go | 4 | ||||
| -rw-r--r-- | go/storage/needle_map.go | 5 | ||||
| -rw-r--r-- | go/storage/store.go | 14 | ||||
| -rw-r--r-- | go/storage/volume.go | 15 |
4 files changed, 38 insertions, 0 deletions
diff --git a/go/storage/cdb_map.go b/go/storage/cdb_map.go index 0d790cc0f..8be302111 100644 --- a/go/storage/cdb_map.go +++ b/go/storage/cdb_map.go @@ -64,6 +64,10 @@ func (m *cdbMap) Close() { } } +func (m *cdbMap) Destroy() error { + return errors.New("Can not delete readonly volumes") +} + func (m cdbMap) ContentSize() uint64 { return m.FileByteCounter } diff --git a/go/storage/needle_map.go b/go/storage/needle_map.go index 29b71ae52..ef7d3d6fd 100644 --- a/go/storage/needle_map.go +++ b/go/storage/needle_map.go @@ -14,6 +14,7 @@ type NeedleMapper interface { Get(key uint64) (element *NeedleValue, ok bool) Delete(key uint64) error Close() + Destroy() error ContentSize() uint64 DeletedSize() uint64 FileCount() int @@ -155,6 +156,10 @@ func (nm *NeedleMap) Delete(key uint64) error { func (nm *NeedleMap) Close() { _ = nm.indexFile.Close() } +func (nm *NeedleMap) Destroy() error { + nm.Close() + return os.Remove(nm.indexFile.Name()) +} func (nm NeedleMap) ContentSize() uint64 { return nm.FileByteCounter } diff --git a/go/storage/store.go b/go/storage/store.go index 2df0e6cb7..e1babd1e5 100644 --- a/go/storage/store.go +++ b/go/storage/store.go @@ -111,6 +111,20 @@ func (s *Store) AddVolume(volumeListString string, collection string, replicaPla } return e } +func (s *Store) DeleteCollection(collection string) (e error) { + for _, location := range s.locations { + for k, v := range location.volumes { + if v.Collection == collection { + e = v.Destroy() + if e != nil { + return + } + delete(location.volumes, k) + } + } + } + return +} func (s *Store) findVolume(vid VolumeId) *Volume { for _, location := range s.locations { if v, found := location.volumes[vid]; found { diff --git a/go/storage/volume.go b/go/storage/volume.go index 69817a6d4..0301d7968 100644 --- a/go/storage/volume.go +++ b/go/storage/volume.go @@ -197,6 +197,21 @@ func (v *Volume) isFileUnchanged(n *Needle) bool { } return false } + +func (v *Volume) Destroy() (err error) { + if v.readOnly { + err = fmt.Errorf("%s is read-only", v.dataFile) + return + } + v.Close() + err = os.Remove(v.dataFile.Name()) + if err != nil { + return + } + err = v.nm.Destroy() + return +} + func (v *Volume) write(n *Needle) (size uint32, err error) { if v.readOnly { err = fmt.Errorf("%s is read-only", v.dataFile) |
