LCOV - code coverage report
Current view: top level - pebble/objstorage/objstorageprovider - remote_obj_name.go (source / functions) Hit Total Coverage
Test: 2024-03-26 08:15Z 9c2da6d2 - tests only.lcov Lines: 41 46 89.1 %
Date: 2024-03-26 08:16:12 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2023 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 objstorageprovider
       6             : 
       7             : import (
       8             :         "fmt"
       9             : 
      10             :         "github.com/cockroachdb/pebble/internal/base"
      11             :         "github.com/cockroachdb/pebble/objstorage"
      12             : )
      13             : 
      14             : // remoteObjectName returns the name of an object on remote storage.
      15             : //
      16             : // For sstables, the format is: <hash>-<creator-id>-<file-num>.sst
      17             : // For example: 1a3f-2-000001.sst
      18           1 : func remoteObjectName(meta objstorage.ObjectMetadata) string {
      19           1 :         if meta.Remote.CustomObjectName != "" {
      20           1 :                 return meta.Remote.CustomObjectName
      21           1 :         }
      22           1 :         switch meta.FileType {
      23           1 :         case base.FileTypeTable:
      24           1 :                 return fmt.Sprintf(
      25           1 :                         "%04x-%d-%06d.sst",
      26           1 :                         objHash(meta), meta.Remote.CreatorID, meta.Remote.CreatorFileNum,
      27           1 :                 )
      28             :         }
      29           0 :         panic("unknown FileType")
      30             : }
      31             : 
      32             : // sharedObjectRefName returns the name of the object's ref marker associated
      33             : // with a given referencing provider. This name is the object's name concatenated with
      34             : // ".ref.<ref-creator-id>.<local-file-num>".
      35             : //
      36             : // For example: 1a3f-2-000001.sst.ref.5.000008
      37             : func sharedObjectRefName(
      38             :         meta objstorage.ObjectMetadata, refCreatorID objstorage.CreatorID, refFileNum base.DiskFileNum,
      39           1 : ) string {
      40           1 :         if meta.Remote.CleanupMethod != objstorage.SharedRefTracking {
      41           0 :                 panic("ref object used when ref tracking disabled")
      42             :         }
      43           1 :         if meta.Remote.CustomObjectName != "" {
      44           1 :                 return fmt.Sprintf(
      45           1 :                         "%s.ref.%d.%06d", meta.Remote.CustomObjectName, refCreatorID, refFileNum,
      46           1 :                 )
      47           1 :         }
      48           1 :         switch meta.FileType {
      49           1 :         case base.FileTypeTable:
      50           1 :                 return fmt.Sprintf(
      51           1 :                         "%04x-%d-%06d.sst.ref.%d.%06d",
      52           1 :                         objHash(meta), meta.Remote.CreatorID, meta.Remote.CreatorFileNum, refCreatorID, refFileNum,
      53           1 :                 )
      54             :         }
      55           0 :         panic("unknown FileType")
      56             : }
      57             : 
      58           1 : func sharedObjectRefPrefix(meta objstorage.ObjectMetadata) string {
      59           1 :         if meta.Remote.CustomObjectName != "" {
      60           1 :                 return meta.Remote.CustomObjectName + ".ref."
      61           1 :         }
      62           1 :         switch meta.FileType {
      63           1 :         case base.FileTypeTable:
      64           1 :                 return fmt.Sprintf(
      65           1 :                         "%04x-%d-%06d.sst.ref.",
      66           1 :                         objHash(meta), meta.Remote.CreatorID, meta.Remote.CreatorFileNum,
      67           1 :                 )
      68             :         }
      69           0 :         panic("unknown FileType")
      70             : }
      71             : 
      72             : // sharedObjectRefName returns the name of the object's ref marker associated
      73             : // with this provider. This name is the object's name concatenated with
      74             : // ".ref.<creator-id>.<local-file-num>".
      75             : //
      76             : // For example: 1a3f-2-000001.sst.ref.5.000008
      77           1 : func (p *provider) sharedObjectRefName(meta objstorage.ObjectMetadata) string {
      78           1 :         if meta.Remote.CleanupMethod != objstorage.SharedRefTracking {
      79           0 :                 panic("ref object used when ref tracking disabled")
      80             :         }
      81           1 :         return sharedObjectRefName(meta, p.remote.shared.creatorID, meta.DiskFileNum)
      82             : }
      83             : 
      84             : // objHash returns a 16-bit hash value derived from the creator ID and creator
      85             : // file num. We prepend this value to object names to ensure balanced
      86             : // partitioning with AWS (and likely other blob storage providers).
      87           1 : func objHash(meta objstorage.ObjectMetadata) uint16 {
      88           1 :         const prime1 = 7459
      89           1 :         const prime2 = 17539
      90           1 :         return uint16(uint64(meta.Remote.CreatorID)*prime1 + uint64(meta.Remote.CreatorFileNum)*prime2)
      91           1 : }

Generated by: LCOV version 1.14