core

package
v1.3.22 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 25, 2024 License: MIT Imports: 30 Imported by: 2

Documentation

Overview

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2023, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Package core provides core metadata and in-cluster API

  • Copyright (c) 2018-2024, NVIDIA CORPORATION. All rights reserved.

Index

Constants

View Source
const (
	RemoteDeletedDelCount = "remote.deleted.del.n"

	// lcache stats
	LcacheCollisionCount = "lcache.collision.n"
	LcacheEvictedCount   = "lcache.evicted.n"
	LcacheFlushColdCount = "lcache.flush.cold.n"
)

core stats

View Source
const (
	XattrLOM = "user.ais.lom" // on-disk xattr name

	DumpLomEnvVar = "AIS_DUMP_LOM"
)
View Source
const (
	Targets = iota // 0 (core.Targets) used as default value for NewStreamBundle
	Proxies
	AllNodes
	SelectedNodes
)
View Source
const (
	UponTerm     = Upon(1 << iota) // success or fail is separately provided via error
	UponProgress                   // periodic (BytesCount, ObjCount)
)

enum: when to notify

View Source
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
)

Variables

This section is empty.

Functions

func FreeCOI

func FreeCOI(a *CopyParams)

func FreeLOM

func FreeLOM(lom *LOM)

func FreePutParams

func FreePutParams(a *PutParams)

func HrwFQN

func HrwFQN(bck *cmn.Bck, contentType, objName string) (fqn string, digest uint64, err error)

func InMaintOrDecomm

func InMaintOrDecomm(smap *meta.Smap, tsi *meta.Snode, xact Xact) (err error)

func ParseObjLoc

func ParseObjLoc(loc string) (tname, mpname string)

func Pinit

func Pinit()

func ResolveFQN

func ResolveFQN(fqn string) (parsedFQN fs.ParsedFQN, hrwFQN string, err error)

func Term

func Term()

func Tinit

func Tinit(t Target, tstats cos.StatsUpdater, runHK bool)

func UncacheBck

func UncacheBck(b *meta.Bck)

func UncacheMountpath

func UncacheMountpath(mi *fs.Mountpath)

NOTE: watch https://github.com/golang/go/pull/61702 for `sync.Map.Clear`, likely Go 22

Types

type AllRunningInOut

type AllRunningInOut struct {
	Kind    string
	Running []string
	Idle    []string // NOTE: returning only when not nil
}

type BackendProvider

type BackendProvider interface {
	Provider() string

	CreateBucket(bck *meta.Bck) (errCode int, err error)
	ListObjects(bck *meta.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, extraArgs *ExtraArgsPut) (errCode int, err error)
	DeleteObj(lom *LOM) (errCode int, err error)

	// head
	HeadBucket(ctx context.Context, bck *meta.Bck) (bckProps cos.StrKVs, errCode int, err error)
	HeadObj(ctx context.Context, lom *LOM) (objAttrs *cmn.ObjAttrs, errCode int, err error)

	// get
	GetObj(ctx context.Context, lom *LOM, owt cmn.OWT) (errCode int, err error) // calls GetObjReader
	GetObjReader(ctx context.Context, lom *LOM, offset, length int64) GetReaderResult
}

type CRMD

type CRMD struct {
	Err      error
	ObjAttrs *cmn.ObjAttrs
	ErrCode  int
	Eq       bool
}

type CT

type CT struct {
	// contains filtered or unexported fields
}

func NewCTFromBO

func NewCTFromBO(bck *cmn.Bck, objName string, b meta.Bowner, ctType ...string) (ct *CT, err error)

func NewCTFromFQN

func NewCTFromFQN(fqn string, b meta.Bowner) (ct *CT, err error)

func NewCTFromLOM

func NewCTFromLOM(lom *LOM, ctType string) *CT

Construct CT from LOM and change ContentType and FQN

func (*CT) Bck

func (ct *CT) Bck() *meta.Bck

func (*CT) Bucket

func (ct *CT) Bucket() *cmn.Bck

func (*CT) CacheIdx

func (ct *CT) CacheIdx() int

func (*CT) Clone

func (ct *CT) Clone(ctType string) *CT

Clone CT and change ContentType and FQN

func (*CT) ContentType

func (ct *CT) ContentType() string

func (*CT) Digest

func (ct *CT) Digest() uint64

func (*CT) FQN

func (ct *CT) FQN() string

func (*CT) LoadFromFS

func (ct *CT) LoadFromFS() error

func (*CT) Lock

func (ct *CT) Lock(exclusive bool)

func (*CT) Make

func (ct *CT) Make(toType string, pref ...string) string

func (*CT) Mountpath

func (ct *CT) Mountpath() *fs.Mountpath

func (*CT) MtimeUnix

func (ct *CT) MtimeUnix() int64

func (*CT) ObjectName

func (ct *CT) ObjectName() string

func (*CT) SizeBytes

func (ct *CT) SizeBytes() int64

func (*CT) Uname

func (ct *CT) Uname() string

func (*CT) Unlock

func (ct *CT) Unlock(exclusive bool)

func (*CT) Write

func (ct *CT) Write(reader io.Reader, size int64, workFQN ...string) (err error)

Save CT to local drives. If workFQN is set, it saves in two steps: first, save to workFQN; second, rename workFQN to ct.FQN. If unset, it writes directly to ct.FQN

type CopyParams

type CopyParams struct {
	DP        DP // transform via: ext/etl/dp.go or core/ldp.go
	Xact      Xact
	Config    *cmn.Config
	BckTo     *meta.Bck
	ObjnameTo string
	Buf       []byte
	OWT       cmn.OWT
	Finalize  bool // copies and EC (as in poi.finalize())
	DryRun    bool
	LatestVer bool // can be used without changing bucket's 'versioning.validate_warm_get'; see also: QparamLatestVer
	Sync      bool // ditto -  bucket's 'versioning.synchronize'
}

intra-cluster data path: control structures and types

func AllocCOI

func AllocCOI() (a *CopyParams)

type DM

type DM interface {
	Send(obj *transport.Obj, roc cos.ReadOpenCloser, tsi *meta.Snode) error
}

intra-cluster data path: control structures and types

type DP

type DP interface {
	Reader(lom *LOM, latestVer, sync bool) (reader cos.ReadOpenCloser, oah cos.OAH, err error)
}

data provider

type ExtraArgsPut

type ExtraArgsPut struct {
	DataClient *http.Client
	Req        *http.Request
}

type GetReaderResult

type GetReaderResult struct {
	R        io.ReadCloser
	Err      error
	ExpCksum *cos.Cksum
	Size     int64
	ErrCode  int
}

type LDP

type LDP struct{}

func (*LDP) Reader

func (*LDP) Reader(lom *LOM, latestVer, sync bool) (cos.ReadOpenCloser, cos.OAH, error)

(compare with ext/etl/dp.go)

type LIF

type LIF struct {
	Uname string
	BID   uint64
	// contains filtered or unexported fields
}

LOM In Flight (LIF)

func (*LIF) CacheIdx

func (lif *LIF) CacheIdx() int

func (*LIF) LOM

func (lif *LIF) LOM() (lom *LOM, err error)

LIF => LOF with a check for bucket existence

func (*LIF) Unlock

func (lif *LIF) Unlock(exclusive bool)

type LOM

type LOM struct {
	ObjName string
	FQN     string
	HrwFQN  string // (=> main replica)
	// contains filtered or unexported fields
}

func AllocLOM

func AllocLOM(objName string) *LOM

func AllocLomFromHdr

func AllocLomFromHdr(hdr *transport.ObjHdr) (lom *LOM, err error)

lom <= transport.ObjHdr (NOTE: caller must call freeLOM)

func (*LOM) AcquireAtimefs

func (lom *LOM) AcquireAtimefs() error

used in tests

func (*LOM) AddCopy

func (lom *LOM) AddCopy(copyFQN string, mpi *fs.Mountpath) error

NOTE: used only in tests

func (*LOM) Atime

func (lom *LOM) Atime() time.Time

func (*LOM) AtimeUnix

func (lom *LOM) AtimeUnix() int64

func (*LOM) Bck

func (lom *LOM) Bck() *meta.Bck

func (*LOM) Bprops

func (lom *LOM) Bprops() *cmn.Bprops

func (*LOM) Bucket

func (lom *LOM) Bucket() *cmn.Bck

func (*LOM) CacheIdx

func (lom *LOM) CacheIdx() int

func (*LOM) CheckRemoteMD

func (lom *LOM) CheckRemoteMD(locked, sync bool) (res CRMD)

NOTE: - [PRECONDITION]: `versioning.validate_warm_get` || QparamLatestVer - [Sync] when Sync option is used (via bucket config and/or `sync` argument) caller MUST take wlock or rlock - [MAY] delete remotely-deleted (non-existing) object and increment associated stats counter

Returns NotFound also after having removed local replica (the Sync option)

func (*LOM) Checksum

func (lom *LOM) Checksum() *cos.Cksum

func (*LOM) CksumConf

func (lom *LOM) CksumConf() *cmn.CksumConf

func (*LOM) CksumType

func (lom *LOM) CksumType() string

func (*LOM) CloneMD

func (lom *LOM) CloneMD(fqn string) *LOM

allocates and copies metadata (in particular, atime and uname)

func (*LOM) Cname

func (lom *LOM) Cname() string

see also: transport.ObjHdr.Cname()

func (*LOM) ComputeCksum

func (lom *LOM) ComputeCksum(cksumType string) (cksum *cos.CksumHash, err error)

func (*LOM) ComputeSetCksum

func (lom *LOM) ComputeSetCksum() (*cos.Cksum, error)

func (*LOM) Copy

func (lom *LOM) Copy(mi *fs.Mountpath, buf []byte) (err error)

increment the object's num copies by (well) copying the former (compare with lom.Copy2FQN below)

func (*LOM) Copy2FQN

func (lom *LOM) Copy2FQN(dstFQN string, buf []byte) (dst *LOM, err error)

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) CopyAttrs

func (lom *LOM) CopyAttrs(oah cos.OAH, skipCksum bool)

func (*LOM) CreateFile

func (lom *LOM) CreateFile(fqn string) (fh *os.File, err error)

(compare with cos.CreateFile)

func (*LOM) CreateFileRW

func (lom *LOM) CreateFileRW(fqn string) (fh *os.File, err error)

func (*LOM) DelAllCopies

func (lom *LOM) DelAllCopies() (err error)

func (*LOM) DelCopies

func (lom *LOM) DelCopies(copiesFQN ...string) (err error)

func (*LOM) DelExtraCopies

func (lom *LOM) DelExtraCopies(fqn ...string) (removed bool, err error)

DelExtraCopies deletes obj replicas that are not part of the lom.md.copies metadata (cleanup)

func (*LOM) Digest

func (lom *LOM) Digest() uint64

func (*LOM) DowngradeLock

func (lom *LOM) DowngradeLock()

func (*LOM) ECEnabled

func (lom *LOM) ECEnabled() bool

func (*LOM) EqCksum

func (lom *LOM) EqCksum(cksum *cos.Cksum) bool

func (*LOM) Equal

func (lom *LOM) Equal(rem cos.OAH) bool

LOM == remote-object equality check

func (*LOM) FromFS

func (lom *LOM) FromFS() error

func (*LOM) GetCopies

func (lom *LOM) GetCopies() fs.MPI

GetCopies returns all copies NOTE: a) copies include lom.FQN aka "main repl.", and b) caller must take a lock

func (*LOM) GetCustomKey

func (lom *LOM) GetCustomKey(key string) (string, bool)

func (*LOM) GetCustomMD

func (lom *LOM) GetCustomMD() cos.StrKVs

custom metadata

func (*LOM) HasCopies

func (lom *LOM) HasCopies() bool

func (*LOM) HrwTarget

func (lom *LOM) HrwTarget(smap *meta.Smap) (tsi *meta.Snode, local bool, err error)

func (*LOM) IncVersion

func (lom *LOM) IncVersion() error

func (*LOM) InitBck

func (lom *LOM) InitBck(bck *cmn.Bck) (err error)

func (*LOM) InitCT

func (lom *LOM) InitCT(ct *CT)

func (*LOM) InitFQN

func (lom *LOM) InitFQN(fqn string, expbck *cmn.Bck) (err error)

func (*LOM) IsCopy

func (lom *LOM) IsCopy() bool

given an existing (on-disk) object, determines whether it is a _copy_ (compare with isMirror below)

func (*LOM) IsHRW

func (lom *LOM) IsHRW() bool

func (*LOM) IsLocked

func (lom *LOM) IsLocked() (int, bool)

func (*LOM) LBGet

func (lom *LOM) LBGet() (fqn string)

load-balanced GET

func (*LOM) LIF

func (lom *LOM) LIF() (lif LIF)

constructor

func (*LOM) LeastUtilNoCopy

func (lom *LOM) LeastUtilNoCopy() (mi *fs.Mountpath)

returns the least utilized mountpath that does _not_ have a copy of this `lom` yet (compare with leastUtilCopy())

func (*LOM) Load

func (lom *LOM) Load(cacheit, locked bool) error

no lock is taken when locked by an immediate caller, or otherwise is known to be locked otherwise, try Rlock temporarily _if and only when_ reading from fs

(compare w/ LoadUnsafe() below)

func (*LOM) LoadLatest

func (lom *LOM) LoadLatest(latest bool) (oa *cmn.ObjAttrs, deleted bool, err error)

NOTE: must be locked; NOTE: Sync == false (ie., not deleting)

func (*LOM) LoadMetaFromFS

func (lom *LOM) LoadMetaFromFS() error

NOTE: used in tests, ignores `dirty`

func (*LOM) LoadUnsafe

func (lom *LOM) LoadUnsafe() (err error)

usage: fast (and unsafe) loading object metadata except atime - no locks compare with conventional Load() above

func (*LOM) Location

func (lom *LOM) Location() string

func (*LOM) Lock

func (lom *LOM) Lock(exclusive bool)

func (*LOM) MirrorConf

func (lom *LOM) MirrorConf() *cmn.MirrorConf

func (*LOM) Mountpath

func (lom *LOM) Mountpath() *fs.Mountpath

func (*LOM) NewDeferROC

func (lom *LOM) NewDeferROC() (cos.ReadOpenCloser, error)

is called under rlock; unlocks on fail

func (*LOM) NumCopies

func (lom *LOM) NumCopies() int

func (*LOM) ObjAttrs

func (lom *LOM) ObjAttrs() *cmn.ObjAttrs

func (*LOM) ObjectName

func (lom *LOM) ObjectName() string

as fs.PartsFQN

func (*LOM) Persist

func (lom *LOM) Persist() (err error)

(caller must set atime; compare with the above)

func (*LOM) PersistMain

func (lom *LOM) PersistMain() (err error)

func (*LOM) Recache

func (lom *LOM) Recache()

store new or refresh existing

func (*LOM) Remove

func (lom *LOM) Remove(force ...bool) (err error)

func (*LOM) RenameFrom

func (lom *LOM) RenameFrom(workfqn string) error

(compare with cos.Rename)

func (*LOM) RestoreToLocation

func (lom *LOM) RestoreToLocation() (exists bool)

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 *LOM) SetAtimeUnix(tu int64)

func (*LOM) SetCksum

func (lom *LOM) SetCksum(cksum *cos.Cksum)

func (*LOM) SetCustomKey

func (lom *LOM) SetCustomKey(key, value string)

func (*LOM) SetCustomMD

func (lom *LOM) SetCustomMD(md cos.StrKVs)

func (*LOM) SetSize

func (lom *LOM) SetSize(size int64)

func (*LOM) SetVersion

func (lom *LOM) SetVersion(ver string)

func (*LOM) SizeBytes

func (lom *LOM) SizeBytes(special ...bool) int64

special a) when a new version is being created b) for usage in unit tests

func (*LOM) String

func (lom *LOM) String() string

func (*LOM) ToMpath

func (lom *LOM) ToMpath() (mi *fs.Mountpath, 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) TryLock

func (lom *LOM) TryLock(exclusive bool) bool

func (*LOM) Uname

func (lom *LOM) Uname() string

func (*LOM) Uncache

func (lom *LOM) Uncache()

func (*LOM) UncacheUnless

func (lom *LOM) UncacheUnless()

remove from cache unless dirty

func (*LOM) Unlock

func (lom *LOM) Unlock(exclusive bool)

func (*LOM) UpgradeLock

func (lom *LOM) UpgradeLock() (finished bool)

func (*LOM) ValidateContentChecksum

func (lom *LOM) ValidateContentChecksum() (err error)

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

func (lom *LOM) ValidateMetaChecksum() error

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) ValidateWarmGet

func (lom *LOM) ValidateWarmGet(qparam string) bool

func (*LOM) Version

func (lom *LOM) Version(special ...bool) string

func (*LOM) VersionConf

func (lom *LOM) VersionConf() cmn.VersionConf

func (*LOM) WritePolicy

func (lom *LOM) WritePolicy() (p apc.WritePolicy)

type NLP

type NLP interface {
	Lock()
	TryLock(timeout time.Duration) bool
	TryRLock(timeout time.Duration) bool
	Unlock()
}

pair

func NewNLP

func NewNLP(name string) NLP

NOTE: currently, is only used to lock buckets

type Node

type Node interface {
	SID() string
	String() string
	Snode() *meta.Snode

	Bowner() meta.Bowner
	Sowner() meta.Sowner

	ClusterStarted() bool
	NodeStarted() bool
}

cluster node

type NodeMemCap

type NodeMemCap interface {
	Node

	// Memory allocators
	PageMM() *memsys.MMSA
	ByteMM() *memsys.MMSA

	// Space
	OOS(*fs.CapStatus) fs.CapStatus

	// xactions (jobs) now
	GetAllRunning(inout *AllRunningInOut, periodic bool)
}

type Notif

type Notif interface {
	OnFinishedCB() func(Notif, error, bool)
	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(aborted bool) NotifMsg
}

intra-cluster notification interface

type NotifMsg

type NotifMsg struct {
	UUID     string `json:"uuid"`    // xaction UUID
	NodeID   string `json:"node_id"` // notifier node ID
	Kind     string `json:"kind"`    // xaction `Kind`
	ErrMsg   string `json:"err"`     // error.Error()
	Data     []byte `json:"message"` // (e.g. usage: custom progress stats)
	AbortedX bool   `json:"aborted"` // true if aborted (see related: Snap.AbortedX)
}

intra-cluster notification message

func (*NotifMsg) String

func (msg *NotifMsg) String() (s string)

type OnFinishObj

type OnFinishObj = func(lom *LOM, err error)

intra-cluster data path: control structures and types

type PromoteParams

type PromoteParams struct {
	Bck             *meta.Bck   // destination bucket
	Cksum           *cos.Cksum  // checksum to validate
	Config          *cmn.Config // during xaction
	Xact            Xact        // responsible xaction
	apc.PromoteArgs             // all of the above
}

intra-cluster data path: control structures and types

type PutParams

type PutParams struct {
	Reader  io.ReadCloser
	Cksum   *cos.Cksum // checksum to check
	Atime   time.Time
	Xact    Xact
	WorkTag string // (=> work fqn)
	Size    int64
	OWT     cmn.OWT
	SkipEC  bool // don't erasure-code when finalizing
	ColdGET bool // this PUT is in fact a cold-GET
}

intra-cluster data path: control structures and types

func AllocPutParams

func AllocPutParams() (a *PutParams)

type QuiCB

type QuiCB func(elapsed time.Duration) QuiRes // see enum below

type QuiRes

type QuiRes int

type Snap

type Snap struct {
	// xaction-specific stats counters
	Ext any `json:"ext"`

	// common static props
	StartTime time.Time `json:"start-time"`
	EndTime   time.Time `json:"end-time"`
	Bck       cmn.Bck   `json:"bck"`
	SrcBck    cmn.Bck   `json:"src-bck"`
	DstBck    cmn.Bck   `json:"dst-bck"`
	ID        string    `json:"id"`
	Kind      string    `json:"kind"`

	// extended error info
	AbortErr string `json:"abort-err"`
	Err      string `json:"err"`

	// rebalance-only
	RebID int64 `json:"glob.id,string"`

	// common runtime: stats counters (above) and state
	Stats    Stats `json:"stats"`
	AbortedX bool  `json:"aborted"`
	IdleX    bool  `json:"is_idle"`
}

func (*Snap) Finished

func (snp *Snap) Finished() bool

func (*Snap) IsAborted

func (snp *Snap) IsAborted() bool

func (*Snap) IsIdle

func (snp *Snap) IsIdle() bool

func (*Snap) Running

func (snp *Snap) Running() bool

func (*Snap) Started

func (snp *Snap) Started() bool

type Stats

type Stats struct {
	Objs     int64 `json:"loc-objs,string"`  // locally processed
	Bytes    int64 `json:"loc-bytes,string"` //
	OutObjs  int64 `json:"out-objs,string"`  // transmit
	OutBytes int64 `json:"out-bytes,string"` //
	InObjs   int64 `json:"in-objs,string"`   // receive
	InBytes  int64 `json:"in-bytes,string"`
}

type Target

type Target interface {
	TargetLoc

	// (for intra-cluster data-net comm - no streams)
	DataClient() *http.Client

	// core object (+ PutObject above)
	FinalizeObj(lom *LOM, workFQN string, xctn Xact, owt cmn.OWT) (errCode int, err error)
	EvictObject(lom *LOM) (errCode int, err error)
	DeleteObject(lom *LOM, evict bool) (errCode int, err error)

	GetCold(ctx context.Context, lom *LOM, owt cmn.OWT) (errCode int, err error)
	GetColdBlob(lom *LOM, oa *cmn.ObjAttrs) (xctn Xact, err error)

	CopyObject(lom *LOM, dm DM, coi *CopyParams) (int64, error)
	Promote(params *PromoteParams) (errCode int, err error)
	HeadObjT2T(lom *LOM, si *meta.Snode) bool

	BMDVersionFixup(r *http.Request, bck ...cmn.Bck)
}

all of the above; for implementations, see `ais/tgtimpl.go` and `ais/htrun.go`

var (
	T Target
)

target only

type TargetLoc

type TargetLoc interface {
	TargetPut

	// backend
	Backend(*meta.Bck) BackendProvider

	// FS health and Health
	FSHC(err error, path string)
	Health(si *meta.Snode, timeout time.Duration, query url.Values) (body []byte, errCode int, err error)
}

local target node

type TargetPut

type TargetPut interface {
	NodeMemCap

	// local PUT
	PutObject(lom *LOM, params *PutParams) (err error)
}

a node that can also write objects

type Upon

type Upon int

type Xact

type Xact interface {
	Run(*sync.WaitGroup)
	ID() string
	Kind() string
	Bck() *meta.Bck
	FromTo() (*meta.Bck, *meta.Bck)
	StartTime() time.Time
	EndTime() time.Time
	Finished() bool
	Running() bool
	Quiesce(time.Duration, QuiCB) QuiRes

	// abrt
	IsAborted() bool
	AbortErr() error
	AbortedAfter(time.Duration) error
	ChanAbort() <-chan error
	// err (info)
	AddErr(error, ...int)

	Snap() *Snap // (struct below)

	// reporting: log, err
	String() string
	Name() string
	Cname() string

	// modifiers
	Finish()
	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
}

Directories

Path Synopsis
Package meta: cluster-level metadata
Package meta: cluster-level metadata
Package mock provides a variety of mock implementations used for testing.
Package mock provides a variety of mock implementations used for testing.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL