Skip to content

Commit

Permalink
SSTPrefix better formatting(no breaking changes), TestOpen additions
Browse files Browse the repository at this point in the history
  • Loading branch information
guycipher committed Jan 22, 2025
1 parent 0d06c64 commit 5f88415
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
13 changes: 7 additions & 6 deletions starskey.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ var (
KLogExtension = ".klog" // key log extension
LogExtension = ".log" // debug log extension
BloomFilterExtension = ".bf" // bloom filter extension
SSTPrefix = "sst" // SSTable prefix
SSTPrefix = "sst_" // SSTable prefix
LevelPrefix = "l" // Level prefix
PageSize = 128 // Page size, smaller is better. The pager handles overflowing in sequence. 1024, or 1024 will cause VERY large files.
SyncInterval = time.Millisecond * 512 // File sync interval
Expand Down Expand Up @@ -998,13 +998,14 @@ func (skey *Starskey) run() error {

ti := time.Now()
// Create a new key log
klog, err := pager.Open(fmt.Sprintf("%sl1%s%s_%d%s", skey.config.Directory, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), KLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
// i.e db_directory/l1/sst_1612345678.klog
klog, err := pager.Open(fmt.Sprintf("%sl1%s%s%d%s", skey.config.Directory, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), KLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
if err != nil {
return err
}

// Create a new value log
vlog, err := pager.Open(fmt.Sprintf("%sl1%s%s_%d%s", skey.config.Directory, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), VLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
vlog, err := pager.Open(fmt.Sprintf("%sl1%s%s%d%s", skey.config.Directory, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), VLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
if err != nil {
_ = klog.Close()
_ = os.Remove(klog.Name())
Expand All @@ -1015,7 +1016,7 @@ func (skey *Starskey) run() error {

// If bloom is enabled we create bloom filter and write it to page 0 on klog
if skey.config.BloomFilter {
bloomFilterFile, err = os.OpenFile(fmt.Sprintf("%sl1%s%s_%d%s", skey.config.Directory, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), BloomFilterExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission)
bloomFilterFile, err = os.OpenFile(fmt.Sprintf("%sl1%s%s%d%s", skey.config.Directory, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), BloomFilterExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission)
if err != nil {
_ = klog.Close()
_ = vlog.Close()
Expand Down Expand Up @@ -1283,13 +1284,13 @@ func (skey *Starskey) mergeTables(tables []*SSTable, level int) *SSTable {
ti := time.Now()

// Create a new key log
klog, err := pager.Open(fmt.Sprintf("%sl%d%s%s_%d%s", skey.config.Directory, level+1, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), KLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
klog, err := pager.Open(fmt.Sprintf("%sl%d%s%s%d%s", skey.config.Directory, level+1, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), KLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
if err != nil {
return nil
}

// Create a new value log
vlog, err := pager.Open(fmt.Sprintf("%sl%d%s%s_%d%s", skey.config.Directory, level+1, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), VLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
vlog, err := pager.Open(fmt.Sprintf("%sl%d%s%s%d%s", skey.config.Directory, level+1, string(os.PathSeparator), SSTPrefix, ti.UnixMicro(), VLogExtension), os.O_CREATE|os.O_RDWR, skey.config.Permission, PageSize, true, SyncInterval)
if err != nil {
_ = klog.Close()
_ = os.Remove(klog.Name())
Expand Down
13 changes: 13 additions & 0 deletions starskey_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,19 @@ func TestOpen(t *testing.T) {
t.Fatalf("Failed to open starskey: %v", err)
}

// We verify the db directory is created with configured levels within
for i := uint64(0); i < config.MaxLevel; i++ {
if _, err := os.Stat(fmt.Sprintf("%s%sl%d", config.Directory, string(os.PathSeparator), i+1)); os.IsNotExist(err) {
t.Fatalf("Failed to create directory for level %d", i)
}

}

// Check if WAL exists
if _, err := os.Stat(fmt.Sprintf("%s%s%s", config.Directory, string(os.PathSeparator), WALExtension)); os.IsNotExist(err) {
t.Fatalf("Failed to create WAL file")
}

// Close starskey
if err := starskey.Close(); err != nil {
t.Fatalf("Failed to close starskey: %v", err)
Expand Down

0 comments on commit 5f88415

Please sign in to comment.