github.com/cockroachdb/pebble@v0.0.0-20231214172447-ab4952c5f87b/filenames.go (about)

     1  // Copyright 2012 The LevelDB-Go and Pebble Authors. All rights reserved. Use
     2  // of this source code is governed by a BSD-style license that can be found in
     3  // the LICENSE file.
     4  
     5  package pebble
     6  
     7  import (
     8  	"fmt"
     9  
    10  	"github.com/cockroachdb/pebble/internal/base"
    11  	"github.com/cockroachdb/pebble/vfs"
    12  )
    13  
    14  type fileType = base.FileType
    15  
    16  // FileNum is an identifier for a file within a database.
    17  type FileNum = base.FileNum
    18  
    19  const (
    20  	fileTypeLog      = base.FileTypeLog
    21  	fileTypeLock     = base.FileTypeLock
    22  	fileTypeTable    = base.FileTypeTable
    23  	fileTypeManifest = base.FileTypeManifest
    24  	fileTypeCurrent  = base.FileTypeCurrent
    25  	fileTypeOptions  = base.FileTypeOptions
    26  	fileTypeTemp     = base.FileTypeTemp
    27  	fileTypeOldTemp  = base.FileTypeOldTemp
    28  )
    29  
    30  // setCurrentFile sets the CURRENT file to point to the manifest with
    31  // provided file number.
    32  //
    33  // NB: This is a low-level routine and typically not what you want to
    34  // use. Newer versions of Pebble running newer format major versions do
    35  // not use the CURRENT file. See setCurrentFunc in version_set.go.
    36  func setCurrentFile(dirname string, fs vfs.FS, fileNum base.DiskFileNum) error {
    37  	newFilename := base.MakeFilepath(fs, dirname, fileTypeCurrent, fileNum)
    38  	oldFilename := base.MakeFilepath(fs, dirname, fileTypeTemp, fileNum)
    39  	fs.Remove(oldFilename)
    40  	f, err := fs.Create(oldFilename)
    41  	if err != nil {
    42  		return err
    43  	}
    44  	if _, err := fmt.Fprintf(f, "MANIFEST-%s\n", fileNum); err != nil {
    45  		return err
    46  	}
    47  	if err := f.Sync(); err != nil {
    48  		return err
    49  	}
    50  	if err := f.Close(); err != nil {
    51  		return err
    52  	}
    53  	return fs.Rename(oldFilename, newFilename)
    54  }