Added file extensions

This commit is contained in:
Eduard Urbach 2023-07-07 14:23:44 +02:00
parent 038b6fa31f
commit bb3a571b01
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
2 changed files with 33 additions and 11 deletions

View File

@ -5,6 +5,7 @@ import (
"os"
"path/filepath"
"reflect"
"strings"
"sync"
)
@ -133,18 +134,19 @@ func (c *collection[T]) Clear() {
// keyFile returns the file path for the given key.
func (c *collection[T]) keyFile(key string) string {
return filepath.Join(c.directory, key)
return filepath.Join(c.directory, key+".json")
}
// loadFromDisk loads the collection data from the disk.
func (c *collection[T]) loadFromDisk() error {
file, err := os.Open(c.directory)
dir, err := os.Open(c.directory)
if err != nil {
return err
}
files, err := file.Readdirnames(0)
defer dir.Close()
files, err := dir.Readdirnames(0)
for _, key := range files {
fileError := c.loadFileFromDisk(key)
@ -154,16 +156,12 @@ func (c *collection[T]) loadFromDisk() error {
}
}
if err != nil {
return err
}
return file.Close()
}
// loadFileFromDisk loads a single file from the disk.
func (c *collection[T]) loadFileFromDisk(key string) error {
file, err := os.Open(filepath.Join(c.directory, key))
func (c *collection[T]) loadFileFromDisk(fileName string) error {
file, err := os.Open(filepath.Join(c.directory, fileName))
if err != nil {
return err
@ -178,6 +176,7 @@ func (c *collection[T]) loadFileFromDisk(key string) error {
return err
}
key := strings.TrimSuffix(fileName, ".json")
c.data.Store(key, value)
return file.Close()
}
@ -185,7 +184,7 @@ func (c *collection[T]) loadFileFromDisk(key string) error {
// writeFileToDisk writes the value for the key to disk as a JSON file.
func (c *collection[T]) writeFileToDisk(key string, value *T) error {
fileName := c.keyFile(key)
file, err := os.Create(fileName)
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0600)
if err != nil {
return err

View File

@ -1,6 +1,8 @@
package ocean_test
import (
"fmt"
"strconv"
"sync"
"testing"
@ -196,3 +198,24 @@ func BenchmarkDelete(b *testing.B) {
b.StopTimer()
}
func BenchmarkColdStart100Files(b *testing.B) {
users, err := ocean.New[User]("test")
assert.Nil(b, err)
defer users.Clear()
for i := 0; i < 100; i++ {
users.Set(strconv.Itoa(i), &User{Name: fmt.Sprintf("User %d", i)})
}
b.ReportAllocs()
b.ResetTimer()
for n := 0; n < b.N; n++ {
again, err := ocean.New[User]("test")
assert.Nil(b, err)
assert.NotNil(b, again)
}
b.StopTimer()
}