Documentation
¶
Overview ¶
Package cluster provides local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides common interfaces and local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Package cluster provides local access to cluster-level metadata
- Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
Package cluster provides local access to cluster-level metadata
- Copyright (c) 2018-2021, NVIDIA CORPORATION. All rights reserved.
Index ¶
- Constants
- func EvictLomCache(b *Bck)
- func FreeCpObjParams(a *CopyObjectParams)
- func FreeLOM(lom *LOM)
- func FreeNodes(nodes Nodes)
- func FreePutObjParams(a *PutObjectParams)
- func HrwFQN(bck *cmn.Bck, contentType, objName string) (fqn string, digest uint64, err error)
- func HrwMpath(uname string) (mi *fs.MountpathInfo, digest uint64, err error)
- func Init(t Target)
- func MaxBcastParallel() int
- func N2ID(name string) string
- func ParseObjLoc(loc string) (tname, mpname string)
- func Pname(pid string) string
- func RegLomCacheWithHK(t Target)
- func ResolveFQN(fqn string) (parsedFQN fs.ParsedFQN, hrwFQN string, err error)
- func Tname(tid string) string
- type BMD
- func (m *BMD) Add(bck *Bck)
- func (m *BMD) Del(bck *Bck) (deleted bool)
- func (m *BMD) Exists(bck *Bck, bckID uint64) (exists bool)
- func (m *BMD) Get(bck *Bck) (p *cmn.BucketProps, present bool)
- func (m *BMD) IsECUsed() (yes bool)
- func (*BMD) JspOpts() jsp.Options
- func (m *BMD) Range(providerQuery *string, nsQuery *cmn.Ns, callback func(*Bck) bool)
- func (m *BMD) Select(qbck *cmn.QueryBcks) cmn.Bcks
- func (m *BMD) Set(bck *Bck, p *cmn.BucketProps)
- func (m *BMD) String() string
- func (m *BMD) StringEx() string
- type BackendProvider
- type Bck
- func (b *Bck) AddToQuery(q url.Values) url.Values
- func (b *Bck) AddUnameToQuery(q url.Values, uparam string) url.Values
- func (b *Bck) Allow(bit apc.AccessAttrs) error
- func (b *Bck) Backend() *Bck
- func (b *Bck) Bucket() *cmn.Bck
- func (b *Bck) CksumConf() (conf *cmn.CksumConf)
- func (b *Bck) Clone() cmn.Bck
- func (b *Bck) Equal(other *Bck, sameID, sameBackend bool) bool
- func (b *Bck) GetNameLockPair() (nlp *NameLockPair)
- func (b *Bck) HasProvider() bool
- func (b *Bck) Init(bowner Bowner) (err error)
- func (b *Bck) InitNoBackend(bowner Bowner) error
- func (b *Bck) IsAIS() bool
- func (b *Bck) IsCloud() bool
- func (b *Bck) IsEmpty() bool
- func (b *Bck) IsHDFS() bool
- func (b *Bck) IsHTTP() bool
- func (b *Bck) IsQuery() bool
- func (b *Bck) IsRemote() bool
- func (b *Bck) IsRemoteAIS() bool
- func (b *Bck) MakeUname(name string) string
- func (b *Bck) MaskBID(i int64) uint64
- func (b *Bck) RemoteBck() *cmn.Bck
- func (b *Bck) String() string
- func (b *Bck) Validate() error
- func (b *Bck) VersionConf() cmn.VersionConf
- type Bowner
- type Buckets
- type CT
- func (ct *CT) Bck() *Bck
- func (ct *CT) Bucket() *cmn.Bck
- func (ct *CT) CacheIdx() int
- func (ct *CT) Clone(ctType string) *CT
- func (ct *CT) ContentType() string
- func (ct *CT) FQN() string
- func (ct *CT) LoadFromFS() error
- func (ct *CT) Lock(exclusive bool)
- func (ct *CT) Make(toType string, pref ...string) string
- func (ct *CT) MpathInfo() *fs.MountpathInfo
- func (ct *CT) MtimeUnix() int64
- func (ct *CT) ObjectName() string
- func (ct *CT) SizeBytes() int64
- func (ct *CT) Uname() string
- func (ct *CT) Unlock(exclusive bool)
- func (ct *CT) Write(t Target, reader io.Reader, size int64, workFQN ...string) (err error)
- type CopyObjectParams
- type DP
- type DataMover
- type LDP
- type LIF
- type LOM
- func (lom *LOM) AcquireAtimefs() error
- func (lom *LOM) AddCopy(copyFQN string, mpi *fs.MountpathInfo) error
- func (lom *LOM) AllowDisconnectedBackend(loaded bool) (err error)
- func (lom *LOM) Atime() time.Time
- func (lom *LOM) AtimeUnix() int64
- func (lom *LOM) Bck() *Bck
- func (lom *LOM) Bprops() *cmn.BucketProps
- func (lom *LOM) Bucket() *cmn.Bck
- func (lom *LOM) CacheIdx() int
- func (lom *LOM) Checksum() *cos.Cksum
- func (lom *LOM) CksumConf() *cmn.CksumConf
- func (lom *LOM) CksumType() string
- func (lom *LOM) CloneMD(fqn string) *LOM
- func (lom *LOM) ComputeCksum(cksumType string) (cksum *cos.CksumHash, err error)
- func (lom *LOM) ComputeSetCksum() (*cos.Cksum, error)
- func (lom *LOM) Copy(mi *fs.MountpathInfo, buf []byte) (err error)
- func (lom *LOM) Copy2FQN(dstFQN string, buf []byte) (dst *LOM, err error)
- func (lom *LOM) CopyAttrs(oah cmn.ObjAttrsHolder, skipCksum bool)
- func (lom *LOM) CreateFile(fqn string) (fh *os.File, err error)
- func (lom *LOM) DelAllCopies() (err error)
- func (lom *LOM) DelCopies(copiesFQN ...string) (err error)
- func (lom *LOM) DelExtraCopies(fqn ...string) (removed bool, err error)
- func (lom *LOM) DowngradeLock()
- func (lom *LOM) ECEnabled() bool
- func (lom *LOM) EqCksum(cksum *cos.Cksum) bool
- func (lom *LOM) Equal(rem cmn.ObjAttrsHolder) (equal bool)
- func (lom *LOM) FromFS() error
- func (lom *LOM) FullName() string
- func (lom *LOM) GetCopies() fs.MPI
- func (lom *LOM) GetCustomKey(key string) (string, bool)
- func (lom *LOM) GetCustomMD() cos.StrKVs
- func (lom *LOM) HasCopies() bool
- func (lom *LOM) HrwTarget(smap *Smap) (tsi *Snode, local bool, err error)
- func (lom *LOM) IncVersion() error
- func (lom *LOM) InitBck(bck *cmn.Bck) (err error)
- func (lom *LOM) InitCT(ct *CT)
- func (lom *LOM) InitFQN(fqn string, expbck *cmn.Bck) (err error)
- func (lom *LOM) IsCopy() bool
- func (lom *LOM) IsHRW() bool
- func (lom *LOM) IsLocked() (int, bool)
- func (lom *LOM) LBGet() (fqn string)
- func (lom *LOM) LIF() (lif LIF)
- func (lom *LOM) LeastUtilNoCopy() (mi *fs.MountpathInfo)
- func (lom *LOM) Load(cacheit, locked bool) (err error)
- func (lom *LOM) LoadMetaFromFS() error
- func (lom *LOM) Location() string
- func (lom *LOM) Lock(exclusive bool)
- func (lom *LOM) MirrorConf() *cmn.MirrorConf
- func (lom *LOM) MpathInfo() *fs.MountpathInfo
- func (lom *LOM) NewDeferROC() (cos.ReadOpenCloser, error)
- func (lom *LOM) NumCopies() int
- func (lom *LOM) ObjAttrs() *cmn.ObjAttrs
- func (lom *LOM) ObjectName() string
- func (lom *LOM) Persist() (err error)
- func (lom *LOM) PersistMain() (err error)
- func (lom *LOM) Recache()
- func (lom *LOM) Remove(force ...bool) (err error)
- func (lom *LOM) RenameFile(workfqn string) error
- func (lom *LOM) RestoreToLocation() (exists bool)
- func (lom *LOM) SetAtimeUnix(tu int64)
- func (lom *LOM) SetCksum(cksum *cos.Cksum)
- func (lom *LOM) SetCustomKey(key, value string)
- func (lom *LOM) SetCustomMD(md cos.StrKVs)
- func (lom *LOM) SetSize(size int64)
- func (lom *LOM) SetVersion(ver string)
- func (lom *LOM) SizeBytes(special ...bool) int64
- func (lom *LOM) String() string
- func (lom *LOM) StringEx() string
- func (lom *LOM) ToMpath() (mi *fs.MountpathInfo, isHrw bool)
- func (lom *LOM) TryLock(exclusive bool) bool
- func (lom *LOM) Uname() string
- func (lom *LOM) Uncache(delDirty bool)
- func (lom *LOM) Unlock(exclusive bool)
- func (lom *LOM) UpgradeLock() (finished bool)
- func (lom *LOM) ValidateContentChecksum() (err error)
- func (lom *LOM) ValidateMetaChecksum() error
- func (lom *LOM) Version(special ...bool) string
- func (lom *LOM) VersionConf() cmn.VersionConf
- func (lom *LOM) WritePolicy() (p apc.WritePolicy)
- type NameLockPair
- type Namespaces
- type NetInfo
- type Node
- type NodeMap
- type Nodes
- type Notif
- type NotifMsg
- type OnFinishObj
- type PromoteArgs
- type PromoteParams
- type Providers
- type PutObjectParams
- type QuiCB
- type QuiRes
- type RMD
- type RemAis
- type Remotes
- type Slistener
- type Smap
- func (m *Smap) Compare(other *Smap) (uuid string, sameOrigin, sameVersion, eq bool)
- func (m *Smap) CompareTargets(other *Smap) (equal bool)
- func (m *Smap) Count() int
- func (m *Smap) CountActiveProxies() (count int)
- func (m *Smap) CountActiveTargets() (count int)
- func (m *Smap) CountNonElectable() (count int)
- func (m *Smap) CountProxies() int
- func (m *Smap) CountTargets() int
- func (*Smap) DefaultICSize() int
- func (m *Smap) GetNode(id string) *Snode
- func (m *Smap) GetNodeNotMaint(sid string) (si *Snode)
- func (m *Smap) GetProxy(pid string) *Snode
- func (m *Smap) GetRandProxy(excludePrimary bool) (si *Snode, err error)
- func (m *Smap) GetRandTarget() (tsi *Snode, err error)
- func (m *Smap) GetTarget(sid string) *Snode
- func (m *Smap) ICCount() int
- func (m *Smap) InitDigests()
- func (m *Smap) IsDuplicate(nsi *Snode) (osi *Snode, err error)
- func (m *Smap) IsIC(psi *Snode) (ok bool)
- func (m *Smap) IsPrimary(si *Snode) bool
- func (*Smap) JspOpts() jsp.Options
- func (m *Smap) NewTmap(tids []string) (tmap NodeMap, err error)
- func (m *Smap) NonElectable(psi *Snode) (ok bool)
- func (m *Smap) PresentInMaint(si *Snode) (ok bool)
- func (m *Smap) StrIC(node *Snode) string
- func (m *Smap) String() string
- func (m *Smap) StringEx() string
- type SmapListeners
- type Snode
- func HrwIC(smap *Smap, uuid string) (pi *Snode, err error)
- func HrwProxy(smap *Smap, idToSkip string) (pi *Snode, err error)
- func HrwTarget(uname string, smap *Smap) (si *Snode, err error)
- func HrwTargetAll(uname string, smap *Smap) (si *Snode, err error)
- func HrwTargetTask(uuid string, smap *Smap) (si *Snode, err error)
- func NewSnode(id, daeType string, publicNet, intraControlNet, intraDataNet NetInfo) (snode *Snode)
- func (d *Snode) Clone() *Snode
- func (d *Snode) Digest() uint64
- func (d *Snode) Equals(o *Snode) (eq bool)
- func (d *Snode) ID() string
- func (d *Snode) Init(id, daeType string)
- func (d *Snode) IsAnySet(flags cos.BitFlags) bool
- func (d *Snode) IsProxy() bool
- func (d *Snode) IsTarget() bool
- func (d *Snode) Name() string
- func (d *Snode) SetName()
- func (d *Snode) String() string
- func (d *Snode) StringEx() string
- func (d *Snode) Type() string
- func (d *Snode) URL(network string) string
- func (d *Snode) Validate() error
- type Sowner
- type Target
- type Upon
- type Xact
- type XactSnap
Constants ¶
const ( XattrLOM = "user.ais.lom" // on-disk xattr name DumpLomEnvVar = "AIS_DUMP_LOM" )
const ( Targets = iota // 0 (cluster.Targets) used as default value for NewStreamBundle Proxies AllNodes )
const ( SnodeNonElectable cos.BitFlags = 1 << iota SnodeIC NodeFlagMaint NodeFlagDecomm )
enum Snode.Flags
const ( PnamePrefix = "p[" TnamePrefix = "t[" SnameSuffix = "]" )
const ( UponTerm = Upon(1 << iota) // success or fail is separately provided via error UponProgress // periodic (BytesCount, ObjCount) )
enum: when to notify
const ( QuiInactiveCB = QuiRes(iota) // e.g., no pending requests (NOTE: used exclusively by `quicb` callbacks) QuiActive // active (e.g., receiving data) QuiActiveRet // active that immediately breaks waiting for quiecscence QuiDone // all done QuiAborted // aborted QuiTimeout // timeout Quiescent // idle => quiescent )
const MaxBcastMultiplier = 2
number of broadcasting goroutines <= cmn.NumCPU() * MaxBcastMultiplier
const NodeFlagsMaintDecomm = NodeFlagMaint | NodeFlagDecomm
Variables ¶
This section is empty.
Functions ¶
func EvictLomCache ¶
func EvictLomCache(b *Bck)
func FreeCpObjParams ¶
func FreeCpObjParams(a *CopyObjectParams)
func FreePutObjParams ¶
func FreePutObjParams(a *PutObjectParams)
func MaxBcastParallel ¶
func MaxBcastParallel() int
func ParseObjLoc ¶
func RegLomCacheWithHK ¶
func RegLomCacheWithHK(t Target)
Types ¶
type BMD ¶
type BMD struct {
Ext any `json:"ext,omitempty"` // within meta-version extensions
Providers Providers `json:"providers"` // (provider, namespace, bucket) hierarchy
UUID string `json:"uuid"` // unique & immutable
Version int64 `json:"version,string"` // gets incremented on every update
}
- BMD is the root of the (providers, namespaces, buckets) hierarchy - BMD (instance) can be obtained via Bowner.Get() - BMD is immutable and versioned - BMD versioning is monotonic and incremental
type BackendProvider ¶
type BackendProvider interface {
Provider() string
MaxPageSize() uint
CreateBucket(bck *Bck) (errCode int, err error)
ListObjects(bck *Bck, msg *apc.LsoMsg, lst *cmn.LsoResult) (errCode int, err error)
ListBuckets(qbck cmn.QueryBcks) (bcks cmn.Bcks, errCode int, err error)
PutObj(r io.ReadCloser, lom *LOM) (errCode int, err error)
DeleteObj(lom *LOM) (errCode int, err error)
// with context
HeadBucket(ctx context.Context, bck *Bck) (bckProps cos.StrKVs, errCode int, err error)
HeadObj(ctx context.Context, lom *LOM) (objAttrs *cmn.ObjAttrs, errCode int, err error)
GetObj(ctx context.Context, lom *LOM, owt cmn.OWT) (errCode int, err error)
GetObjReader(ctx context.Context, lom *LOM) (r io.ReadCloser, expectedCksum *cos.Cksum, errCode int, err error)
}
type Bck ¶
func InitByNameOnly ¶
to support s3 clients: find an already existing bucket by name (and nothing else) returns an error when name cannot be unambiguously resolved to a single bucket
func (*Bck) GetNameLockPair ¶
func (b *Bck) GetNameLockPair() (nlp *NameLockPair)
func (*Bck) HasProvider ¶
func (*Bck) Init ¶
when the bucket is not present in the BMD: - always returns the corresponding *DoesNotExist error - Cloud bucket: fills in the props with defaults from config - AIS bucket: sets the props to nil - Remote (Cloud or Remote AIS) bucket: caller can type-cast err.(*cmn.ErrRemoteBckNotFound) and proceed
func (*Bck) InitNoBackend ¶
func (*Bck) IsRemoteAIS ¶
func (*Bck) VersionConf ¶
func (b *Bck) VersionConf() cmn.VersionConf
type Bowner ¶
type Bowner interface {
Get() (bmd *BMD)
}
interface to Get current BMD instance (for implementation, see ais/bucketmeta.go)
type Buckets ¶
type Buckets map[string]*cmn.BucketProps
interface to Get current BMD instance (for implementation, see ais/bucketmeta.go)
type CT ¶
type CT struct {
// contains filtered or unexported fields
}
func NewCTFromBO ¶
func NewCTFromLOM ¶
Construct CT from LOM and change ContentType and FQN
func (*CT) ContentType ¶
func (*CT) LoadFromFS ¶
func (*CT) MpathInfo ¶
func (ct *CT) MpathInfo() *fs.MountpathInfo
func (*CT) ObjectName ¶
type CopyObjectParams ¶
type CopyObjectParams struct {
DM DataMover
DP DP // Data Provider (optional; see Transform/Copy Bucket (TCB))
Xact Xact
BckTo *Bck
ObjNameTo string
Buf []byte
}
data path: control structures and types
func AllocCpObjParams ¶
func AllocCpObjParams() (a *CopyObjectParams)
type DP ¶
type DP interface {
Reader(lom *LOM) (reader cos.ReadOpenCloser, objMeta cmn.ObjAttrsHolder, err error)
}
data provider
type DataMover ¶
type DataMover interface {
RegRecv() error
GetXact() Xact
Open()
Close(err error)
UnregRecv()
Send(obj *transport.Obj, roc cos.ReadOpenCloser, tsi *Snode) error
ACK(hdr transport.ObjHdr, cb transport.ObjSentCB, tsi *Snode) error
OWT() cmn.OWT
}
data path: control structures and types
type LDP ¶
type LDP struct{}
func (*LDP) Reader ¶
func (*LDP) Reader(lom *LOM) (cos.ReadOpenCloser, cmn.ObjAttrsHolder, error)
compare with etl/dp.go
type LOM ¶
type LOM struct {
ObjName string
FQN string
HrwFQN string // (=> main replica)
// contains filtered or unexported fields
}
func AllocLomFromHdr ¶
lom <= transport.ObjHdr (NOTE: caller must call freeLOM)
func (*LOM) AddCopy ¶
func (lom *LOM) AddCopy(copyFQN string, mpi *fs.MountpathInfo) error
NOTE: used only in tests
func (*LOM) AllowDisconnectedBackend ¶
permission to overwrite objects that were previously read from: a) any remote backend that is currently not configured as the bucket's backend b) HTPP ("ht://") since it's not writable
func (*LOM) Bprops ¶
func (lom *LOM) Bprops() *cmn.BucketProps
func (*LOM) ComputeCksum ¶
func (*LOM) Copy ¶
func (lom *LOM) Copy(mi *fs.MountpathInfo, buf []byte) (err error)
increment the object's num copies by (well) copying the former (compare with lom.Copy2FQN below)
func (*LOM) Copy2FQN ¶
copy object => any local destination recommended for copying between different buckets (compare with lom.Copy() above) NOTE: `lom` source must be w-locked
func (*LOM) CreateFile ¶
(compare with cos.CreateFile)
func (*LOM) DelAllCopies ¶
func (*LOM) DelExtraCopies ¶
DelExtraCopies deletes obj replicas that are not part of the lom.md.copies metadata (cleanup)
func (*LOM) DowngradeLock ¶
func (lom *LOM) DowngradeLock()
func (*LOM) Equal ¶
func (lom *LOM) Equal(rem cmn.ObjAttrsHolder) (equal bool)
LOM == remote-object equality check
func (*LOM) GetCopies ¶
GetCopies returns all copies (NOTE that copies include self) NOTE: caller must take a lock
func (*LOM) IncVersion ¶
func (*LOM) IsCopy ¶
given an existing (on-disk) object, determines whether it is a _copy_ (compare with isMirror below)
func (*LOM) LeastUtilNoCopy ¶
func (lom *LOM) LeastUtilNoCopy() (mi *fs.MountpathInfo)
returns the least utilized mountpath that does _not_ have a copy of this `lom` yet (compare with leastUtilCopy())
func (*LOM) Load ¶
- locked: is locked by the immediate caller (or otherwise is known to be locked); if false, try Rlock temporarily *if and only when* reading from FS
func (*LOM) LoadMetaFromFS ¶
NOTE: used in tests, ignores `dirty`
func (*LOM) MirrorConf ¶
func (lom *LOM) MirrorConf() *cmn.MirrorConf
func (*LOM) MpathInfo ¶
func (lom *LOM) MpathInfo() *fs.MountpathInfo
func (*LOM) NewDeferROC ¶
func (lom *LOM) NewDeferROC() (cos.ReadOpenCloser, error)
is called under rlock
func (*LOM) PersistMain ¶
(copy/paste tradeoff on purpose)
func (*LOM) RestoreToLocation ¶
RestoreObjectFromAny tries to restore the object at its default location. Returns true if object exists, false otherwise TODO: locking vs concurrent restore: consider (read-lock object + write-lock meta) split
func (*LOM) SetAtimeUnix ¶
func (*LOM) SetCustomKey ¶
func (*LOM) SetCustomMD ¶
func (*LOM) SetVersion ¶
func (*LOM) ToMpath ¶
func (lom *LOM) ToMpath() (mi *fs.MountpathInfo, isHrw bool)
must be called under w-lock returns mountpath destination to copy this object, or nil if no copying is required - checks hrw location first, and - checks copies (if any) against the current configuation and available mountpaths; - does not check `fstat` in either case (TODO: configurable or scrub);
func (*LOM) UpgradeLock ¶
func (*LOM) ValidateContentChecksum ¶
ValidateDiskChecksum validates if checksum stored in lom's in-memory metadata matches object's content checksum. Use lom.ValidateMetaChecksum() to check lom's checksum vs on-disk metadata.
func (*LOM) ValidateMetaChecksum ¶
ValidateMetaChecksum validates whether checksum stored in lom's in-memory metadata matches checksum stored on disk. Use lom.ValidateContentChecksum() to recompute and check object's content checksum.
func (*LOM) VersionConf ¶
func (lom *LOM) VersionConf() cmn.VersionConf
func (*LOM) WritePolicy ¶
func (lom *LOM) WritePolicy() (p apc.WritePolicy)
type NameLockPair ¶
type NameLockPair struct {
// contains filtered or unexported fields
}
func (*NameLockPair) Lock ¶
func (nlp *NameLockPair) Lock()
func (*NameLockPair) TryRLock ¶
func (nlp *NameLockPair) TryRLock(timeout time.Duration) (ok bool)
TODO: ensure single-time usage (no ref counting!)
func (*NameLockPair) Unlock ¶
func (nlp *NameLockPair) Unlock()
type Namespaces ¶
interface to Get current BMD instance (for implementation, see ais/bucketmeta.go)
type NetInfo ¶
type NetInfo struct {
Hostname string `json:"node_ip_addr"`
Port string `json:"daemon_port"`
URL string `json:"direct_url"`
// contains filtered or unexported fields
}
Snode's networking info
func NewNetInfo ¶
func (*NetInfo) TCPEndpoint ¶
type NodeMap ¶
func NodeMapDelta ¶
helper to find out NodeMap "delta" or "diff"
func (NodeMap) ActiveNodes ¶
type Nodes ¶
type Nodes []*Snode // slice of Snodes
func AllocNodes ¶
func HrwTargetList ¶
Sorts all targets in a cluster by their respective HRW (weights) in a descending order; returns resulting subset (aka slice) that has the requested length = count. Returns error if the cluster does not have enough targets. If count == length of Smap.Tmap, the function returns as many targets as possible.
type Notif ¶
type Notif interface {
OnFinishedCB() func(Notif, error)
OnProgressCB() func(Notif)
NotifyInterval() time.Duration // notify interval in secs
LastNotifTime() int64 // time last notified
SetLastNotified(now int64)
Upon(u Upon) bool
Subscribers() []string
ToNotifMsg() NotifMsg
}
intra-cluster notification interface
type NotifMsg ¶
type OnFinishObj ¶
data path: control structures and types
type PromoteArgs ¶
type PromoteArgs struct {
DaemonID string `json:"tid,omitempty"` // target ID
SrcFQN string `json:"src,omitempty"` // source file or directory (must be absolute pathname)
ObjName string `json:"obj,omitempty"` // destination object name
Recursive bool `json:"rcr,omitempty"` // recursively promote nested dirs
// once successfully promoted:
OverwriteDst bool `json:"ovw,omitempty"` // overwrite destination
DeleteSrc bool `json:"dls,omitempty"` // remove source when (and after) successfully promoting
// and _not_ to try to auto-detect if it is;
// (auto-detection takes time, etc.)
SrcIsNotFshare bool `json:"notshr,omitempty"` // the source is not a file share equally accessible by all targets
}
common part that's used in `api.PromoteArgs` and `PromoteParams`(server side), both
type PromoteParams ¶
type PromoteParams struct {
Bck *Bck // destination bucket
Cksum *cos.Cksum // checksum to validate
Xact Xact // responsible xaction
PromoteArgs // all of the above
}
data path: control structures and types
type Providers ¶
type Providers map[string]Namespaces
interface to Get current BMD instance (for implementation, see ais/bucketmeta.go)
type PutObjectParams ¶
type PutObjectParams struct {
Reader io.ReadCloser
Cksum *cos.Cksum // checksum to check
Atime time.Time
Xact Xact
WorkTag string // (=> work fqn)
OWT cmn.OWT
SkipEncode bool // don't run erasure-code when finalizing
}
data path: control structures and types
func AllocPutObjParams ¶
func AllocPutObjParams() (a *PutObjectParams)
type RMD ¶
type RMD struct {
Ext any `json:"ext,omitempty"` // within meta-version extensions
Resilver string `json:"resilver,omitempty"`
TargetIDs []string `json:"target_ids,omitempty"`
Version int64 `json:"version"`
}
RMD aka "rebalance metadata" is used to distribute information for the next rebalance.
type Slistener ¶
type Slistener interface {
String() string
ListenSmapChanged()
}
Smap on-change listeners
type Smap ¶
type Smap struct {
Ext any `json:"ext,omitempty"`
Pmap NodeMap `json:"pmap"` // [pid => Snode]
Primary *Snode `json:"proxy_si"`
Tmap NodeMap `json:"tmap"` // [tid => Snode]
UUID string `json:"uuid"` // assigned once at creation time and never change
CreationTime string `json:"creation_time"` // creation timestamp
Version int64 `json:"version,string"`
}
func (*Smap) CompareTargets ¶
func (*Smap) CountActiveProxies ¶
func (*Smap) CountActiveTargets ¶
func (*Smap) CountNonElectable ¶
func (*Smap) CountProxies ¶
func (*Smap) CountTargets ¶
func (*Smap) DefaultICSize ¶
func (*Smap) GetNodeNotMaint ¶
not nil when present and _not_ in maintenance (compare w/ PresentInMaint)
func (*Smap) GetRandTarget ¶
func (*Smap) InitDigests ¶
func (m *Smap) InitDigests()
func (*Smap) NonElectable ¶
func (*Smap) PresentInMaint ¶
true when present and in maintenance (compare w/ GetNodeNotMaint)
type SmapListeners ¶
type Snode ¶
type Snode struct {
Ext any `json:"ext,omitempty"` // within meta-version extensions
LocalNet *net.IPNet `json:"-"`
PubNet NetInfo `json:"public_net"` // cmn.NetPublic
DataNet NetInfo `json:"intra_data_net"` // cmn.NetIntraData
ControlNet NetInfo `json:"intra_control_net"` // cmn.NetIntraControl
DaeType string `json:"daemon_type"` // "target" or "proxy"
DaeID string `json:"daemon_id"`
Flags cos.BitFlags `json:"flags"` // enum { SnodeNonElectable, SnodeIC, ... }
// contains filtered or unexported fields
}
Snode - a node (gateway or target) in a cluster
func HrwTargetAll ¶
Include targets in maintenance
func HrwTargetTask ¶
Returns a target for a given task. E.g. usage: list objects in a cloud bucket (we want only one target to do it).
type Sowner ¶
type Sowner interface {
Get() (smap *Smap)
Listeners() SmapListeners
}
interface to Get current cluster-map instance
type Target ¶
type Target interface {
Node
SID() string
String() string
// Memory allocators.
PageMM() *memsys.MMSA
ByteMM() *memsys.MMSA
// Backend provider(s) related functions.
Backend(*Bck) BackendProvider
CompareObjects(ctx context.Context, lom *LOM) (equal bool, errCode int, err error)
// Object related functions.
PutObject(lom *LOM, params *PutObjectParams) (err error)
FinalizeObj(lom *LOM, workFQN string, xctn Xact) (errCode int, err error)
EvictObject(lom *LOM) (errCode int, err error)
DeleteObject(lom *LOM, evict bool) (errCode int, err error)
CopyObject(lom *LOM, params *CopyObjectParams, dryRun bool) (int64, error)
GetCold(ctx context.Context, lom *LOM, owt cmn.OWT) (errCode int, err error)
Promote(params PromoteParams) (errCode int, err error)
HeadObjT2T(lom *LOM, si *Snode) bool
// File-system related functions.
FSHC(err error, path string)
OOS(*fs.CapStatus) fs.CapStatus
// Other.
BMDVersionFixup(r *http.Request, bck ...cmn.Bck)
RebalanceNamespace(si *Snode) (body []byte, errCode int, err error)
Health(si *Snode, timeout time.Duration, query url.Values) (body []byte, errCode int, err error)
}
For implementations, see `ais/tgtimpl.go` and `ais/htrun.go`.
var (
T Target
)
type Xact ¶
type Xact interface {
Run(*sync.WaitGroup)
ID() string
Kind() string
Bck() *Bck
FromTo() (*Bck, *Bck)
StartTime() time.Time
EndTime() time.Time
Finished() bool
Running() bool
IsAborted() bool
AbortErr() error
AbortedAfter(time.Duration) error
ChanAbort() <-chan error
Quiesce(time.Duration, QuiCB) QuiRes
Result() (any, error)
Snap() XactSnap
// reporting: log, err
String() string
Name() string
// modifiers
Finish(error)
Abort(error) bool
AddNotif(n Notif)
// common stats
Objs() int64
ObjsAdd(int, int64) // locally processed
OutObjsAdd(int, int64) // transmit
InObjsAdd(int, int64) // receive
InBytes() int64
OutBytes() int64
}