aboutsummaryrefslogtreecommitdiff
path: root/go/storage
diff options
context:
space:
mode:
Diffstat (limited to 'go/storage')
-rw-r--r--go/storage/cdb_map.go4
-rw-r--r--go/storage/needle_map.go5
-rw-r--r--go/storage/store.go14
-rw-r--r--go/storage/volume.go15
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)