metanode

package
v2.2.1+incompatible Latest Latest
Warning

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

Go to latest
Published: Sep 7, 2020 License: Apache-2.0 Imports: 37 Imported by: 3

Documentation

Index

Constants

View Source
const (
	KB = 1 << (10 * iota)
	MB
	GB
)
View Source
const (
	ForceClosedConnect = true
	NoClosedConnect    = false
)
View Source
const (
	UpdateNodeInfoTicket     = 1 * time.Minute
	DefaultDeleteBatchCounts = 128
)
View Source
const (
	AsyncDeleteInterval           = 10 * time.Second
	UpdateVolTicket               = 2 * time.Minute
	BatchCounts                   = 128
	OpenRWAppendOpt               = os.O_CREATE | os.O_RDWR | os.O_APPEND
	TempFileValidTime             = 86400 //units: sec
	DeleteInodeFileExtension      = "INODE_DEL"
	DeleteWorkerCnt               = 10
	InodeNLink0DelayDeleteSeconds = 24 * 3600
)
View Source
const (
	MinDeleteBatchCounts = 100
	MaxSleepCnt          = 10
)
View Source
const (
	DeleteMarkFlag = 1 << 0
)
View Source
const ExpiredPartitionPrefix = "expired_"
View Source
const (
	MaxUsedMemFactor = 1.1
)
View Source
const (
	SnapshotSign = ".sign"
)

Variables

View Source
var (
	ErrNoLeader   = errors.New("no leader")
	ErrNotALeader = errors.New("not a leader")
)
View Source
var (
	ErrIllegalHeartbeatAddress = errors.New("illegal heartbeat address")
	ErrIllegalReplicateAddress = errors.New("illegal replicate address")
)
View Source
var (
	ErrInodeIDOutOfRange = errors.New("inode ID out of range")
)

Errors

View Source
var Now = NewNowTime()

Now

Functions

func DeleteBatchCount

func DeleteBatchCount() uint64

func DeleteWorkerSleepMs

func DeleteWorkerSleepMs()

Types

type APIResponse

type APIResponse struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data,omitempty"`
}

APIResponse defines the structure of the response to an HTTP request

func NewAPIResponse

func NewAPIResponse(code int, msg string) *APIResponse

NewAPIResponse returns a new API response.

func (*APIResponse) Marshal

func (api *APIResponse) Marshal() ([]byte, error)

Marshal is a wrapper function of json.Marshal

type BTree

type BTree struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

BTree is the wrapper of Google's btree.

func NewBtree

func NewBtree() *BTree

NewBtree creates a new btree.

func (*BTree) Ascend

func (b *BTree) Ascend(fn func(i BtreeItem) bool)

Ascend is the wrapper of the google's btree Ascend. This function scans the entire btree. When the data is huge, it is not recommended to use this function online. Instead, it is recommended to call GetTree to obtain the snapshot of the current btree, and then do the scan on the snapshot.

func (*BTree) AscendGreaterOrEqual

func (b *BTree) AscendGreaterOrEqual(pivot BtreeItem, iterator func(i BtreeItem) bool)

AscendGreaterOrEqual is the wrapper of the google's btree AscendGreaterOrEqual

func (*BTree) AscendRange

func (b *BTree) AscendRange(greaterOrEqual, lessThan BtreeItem, iterator func(i BtreeItem) bool)

AscendRange is the wrapper of the google's btree AscendRange.

func (*BTree) CopyFind

func (b *BTree) CopyFind(key BtreeItem, fn func(i BtreeItem))

func (*BTree) CopyGet

func (b *BTree) CopyGet(key BtreeItem) (item BtreeItem)

func (*BTree) Delete

func (b *BTree) Delete(key BtreeItem) (item BtreeItem)

Delete deletes the object by the given key.

func (*BTree) Execute

func (b *BTree) Execute(fn func(tree *btree.BTree) interface{}) interface{}

func (*BTree) Find

func (b *BTree) Find(key BtreeItem, fn func(i BtreeItem))

Find searches for the given key in the btree.

func (*BTree) Get

func (b *BTree) Get(key BtreeItem) (item BtreeItem)

Get returns the object of the given key in the btree.

func (*BTree) GetTree

func (b *BTree) GetTree() *BTree

GetTree returns the snapshot of a btree.

func (*BTree) Has

func (b *BTree) Has(key BtreeItem) (ok bool)

Has checks if the key exists in the btree.

func (*BTree) Len

func (b *BTree) Len() (size int)

Len returns the total number of items in the btree.

func (*BTree) MaxItem

func (b *BTree) MaxItem() BtreeItem

MaxItem returns the largest item in the btree.

func (*BTree) ReplaceOrInsert

func (b *BTree) ReplaceOrInsert(key BtreeItem, replace bool) (item BtreeItem, ok bool)

ReplaceOrInsert is the wrapper of google's btree ReplaceOrInsert.

func (*BTree) Reset

func (b *BTree) Reset()

Reset resets the current btree.

type BatchDeleteDentryReq

type BatchDeleteDentryReq = proto.BatchDeleteDentryRequest

Client -> MetaNode delete Dentry request

type BatchDeleteDentryResp

type BatchDeleteDentryResp = proto.BatchDeleteDentryResponse

MetaNode -> Client batch delete Dentry response

type BatchEvictInodeReq

type BatchEvictInodeReq = proto.BatchEvictInodeRequest

Client -> MetaNode

type BatchUnlinkInoReq

type BatchUnlinkInoReq = proto.BatchUnlinkInodeRequest

Client -> MetaNode delete Inode request struct

type BatchUnlinkInoResp

type BatchUnlinkInoResp = proto.BatchUnlinkInodeResponse

MetaNode -> Client delete batch Inode response

type BtreeItem

type BtreeItem = btree.Item

BtreeItem type alias google btree Item

type CreateDentryReq

type CreateDentryReq = proto.CreateDentryRequest

Client -> MetaNode create Dentry request struct

type CreateInoReq

type CreateInoReq = proto.CreateInodeRequest

Client -> MetaNode create Inode request

type CreateInoResp

type CreateInoResp = proto.CreateInodeResponse

MetaNode -> Client create Inode response

type CreateMetaRangeReq

type CreateMetaRangeReq = proto.CreateMetaPartitionRequest

Master -> MetaNode create metaPartition request

type CreateMetaRangeResp

type CreateMetaRangeResp = proto.CreateMetaPartitionResponse

MetaNode -> Master create metaPartition response

type DataPartition

type DataPartition struct {
	PartitionID   uint64
	Status        int8
	ReplicaNum    uint8
	PartitionType string
	Hosts         []string
}

DataPartition defines the struct of data partition that will be used on the meta node.

func (*DataPartition) GetAllAddrs

func (dp *DataPartition) GetAllAddrs() (m string)

GetAllAddrs returns all addresses of the data partition.

type DataPartitionsView

type DataPartitionsView struct {
	DataPartitions []*DataPartition
}

DataPartitionsView defines the view of the data node.

func NewDataPartitionsView

func NewDataPartitionsView() *DataPartitionsView

type DeleteDentryReq

type DeleteDentryReq = proto.DeleteDentryRequest

Client -> MetaNode delete Dentry request

type DeleteDentryResp

type DeleteDentryResp = proto.DeleteDentryResponse

MetaNode -> Client delete Dentry response

type Dentry

type Dentry struct {
	ParentId uint64 // FileID value of the parent inode.
	Name     string // Name of the current dentry.
	Inode    uint64 // FileID value of the current inode.
	Type     uint32
}

Dentry wraps necessary properties of the `dentry` information in file system. Marshal exporterKey:

+-------+----------+------+
| item  | ParentId | Name |
+-------+----------+------+
| bytes |    8     | rest |
+-------+----------+------+

Marshal value:

+-------+-------+------+
| item  | Inode | Type |
+-------+-------+------+
| bytes |   8   |   4  |
+-------+-------+------+

Marshal entity:

+-------+-----------+--------------+-----------+--------------+
| item  | KeyLength | MarshaledKey | ValLength | MarshaledVal |
+-------+-----------+--------------+-----------+--------------+
| bytes |     4     |   KeyLength  |     4     |   ValLength  |
+-------+-----------+--------------+-----------+--------------+

func (*Dentry) Copy

func (d *Dentry) Copy() BtreeItem

func (*Dentry) Less

func (d *Dentry) Less(than BtreeItem) (less bool)

Less tests whether the current dentry is less than the given one. This method is necessary fot B-Tree item implementation.

func (*Dentry) Marshal

func (d *Dentry) Marshal() (result []byte, err error)

Marshal marshals a dentry into a byte array.

func (*Dentry) MarshalKey

func (d *Dentry) MarshalKey() (k []byte)

MarshalKey is the bytes version of the MarshalKey method which returns the byte slice result.

func (*Dentry) MarshalValue

func (d *Dentry) MarshalValue() (k []byte)

MarshalValue marshals the exporterKey to bytes.

func (*Dentry) Unmarshal

func (d *Dentry) Unmarshal(raw []byte) (err error)

Unmarshal unmarshals the dentry from a byte array.

func (*Dentry) UnmarshalKey

func (d *Dentry) UnmarshalKey(k []byte) (err error)

UnmarshalKey unmarshals the exporterKey from bytes.

func (*Dentry) UnmarshalValue

func (d *Dentry) UnmarshalValue(val []byte) (err error)

UnmarshalValue unmarshals the value from bytes.

type DentryBatch

type DentryBatch []*Dentry

func DentryBatchUnmarshal

func DentryBatchUnmarshal(raw []byte) (DentryBatch, error)

Unmarshal unmarshals the dentryBatch.

func (DentryBatch) Marshal

func (d DentryBatch) Marshal() ([]byte, error)

Marshal marshals the dentryBatch into a byte array.

type DentryResponse

type DentryResponse struct {
	Status uint8
	Msg    *Dentry
}

func NewDentryResponse

func NewDentryResponse() *DentryResponse

type EvictInodeReq

type EvictInodeReq = proto.EvictInodeRequest

Client -> MetaNode

type Extend added in v1.5.0

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

func NewExtend added in v1.5.0

func NewExtend(inode uint64) *Extend

func NewExtendFromBytes added in v1.5.0

func NewExtendFromBytes(raw []byte) (*Extend, error)

func (*Extend) Bytes added in v1.5.0

func (e *Extend) Bytes() ([]byte, error)

func (*Extend) Copy added in v1.5.0

func (e *Extend) Copy() btree.Item

func (*Extend) Get added in v1.5.0

func (e *Extend) Get(key []byte) (value []byte, exist bool)

func (*Extend) Less added in v1.5.0

func (e *Extend) Less(than btree.Item) bool

func (*Extend) Merge added in v1.5.0

func (e *Extend) Merge(o *Extend, override bool)

func (*Extend) Put added in v1.5.0

func (e *Extend) Put(key, value []byte)

func (*Extend) Range added in v1.5.0

func (e *Extend) Range(visitor func(key, value []byte) bool)

func (*Extend) Remove added in v1.5.0

func (e *Extend) Remove(key []byte)

type ExtendOpResult added in v1.5.0

type ExtendOpResult struct {
	Status uint8
	Extend *Extend
}

type ExtentsTruncateReq

type ExtentsTruncateReq = proto.TruncateRequest

Client -> MetaNode

type Inode

type Inode struct {
	sync.RWMutex
	Inode      uint64 // Inode ID
	Type       uint32
	Uid        uint32
	Gid        uint32
	Size       uint64
	Generation uint64
	CreateTime int64
	AccessTime int64
	ModifyTime int64
	LinkTarget []byte // SymLink target name
	NLink      uint32 // NodeLink counts
	Flag       int32
	Reserved   uint64 // reserved space
	//Extents    *ExtentsTree
	Extents *SortedExtents
}

Inode wraps necessary properties of `Inode` information in the file system. Marshal exporterKey:

+-------+-------+
| item  | Inode |
+-------+-------+
| bytes |   8   |
+-------+-------+

Marshal value:

+-------+------+------+-----+----+----+----+--------+------------------+
| item  | Type | Size | Gen | CT | AT | MT | ExtLen | MarshaledExtents |
+-------+------+------+-----+----+----+----+--------+------------------+
| bytes |  4   |  8   |  8  | 8  | 8  | 8  |   4    |      ExtLen      |
+-------+------+------+-----+----+----+----+--------+------------------+

Marshal entity:

+-------+-----------+--------------+-----------+--------------+
| item  | KeyLength | MarshaledKey | ValLength | MarshaledVal |
+-------+-----------+--------------+-----------+--------------+
| bytes |     4     |   KeyLength  |     4     |   ValLength  |
+-------+-----------+--------------+-----------+--------------+

func NewInode

func NewInode(ino uint64, t uint32) *Inode

NewInode returns a new Inode instance with specified Inode ID, name and type. The AccessTime and ModifyTime will be set to the current time.

func (*Inode) AppendExtents

func (i *Inode) AppendExtents(eks []proto.ExtentKey, ct int64) (delExtents []proto.ExtentKey)

AppendExtents append the extent to the btree.

func (*Inode) Copy

func (i *Inode) Copy() BtreeItem

Copy returns a copy of the inode.

func (i *Inode) DecNLink()

DecNLink decreases the nLink value by one.

func (*Inode) DoReadFunc

func (i *Inode) DoReadFunc(fn func())

DoFunc executes the given function.

func (*Inode) DoWriteFunc

func (i *Inode) DoWriteFunc(fn func())

func (*Inode) ExtentsTruncate

func (i *Inode) ExtentsTruncate(length uint64, ct int64) (delExtents []proto.ExtentKey)
func (i *Inode) GetNLink() uint32

GetNLink returns the nLink value.

func (i *Inode) IncNLink()

IncNLink increases the nLink value by one.

func (*Inode) IsEmptyDir

func (i *Inode) IsEmptyDir() bool

func (*Inode) IsTempFile

func (i *Inode) IsTempFile() bool

func (*Inode) Less

func (i *Inode) Less(than BtreeItem) bool

Less tests whether the current Inode item is less than the given one. This method is necessary fot B-Tree item implementation.

func (*Inode) Marshal

func (i *Inode) Marshal() (result []byte, err error)

Marshal marshals the inode into a byte array.

func (*Inode) MarshalKey

func (i *Inode) MarshalKey() (k []byte)

MarshalKey marshals the exporterKey to bytes.

func (*Inode) MarshalToJSON

func (i *Inode) MarshalToJSON() ([]byte, error)

MarshalToJSON is the wrapper of json.Marshal.

func (*Inode) MarshalValue

func (i *Inode) MarshalValue() (val []byte)

MarshalValue marshals the value to bytes.

func (*Inode) SetAttr

func (i *Inode) SetAttr(req *SetattrRequest)

SetAttr sets the attributes of the inode.

func (*Inode) SetDeleteMark

func (i *Inode) SetDeleteMark()

SetDeleteMark set the deleteMark flag. TODO markDelete or deleteMark? markDelete has been used in datanode.

func (*Inode) ShouldDelayDelete

func (i *Inode) ShouldDelayDelete() (ok bool)

inode should delay remove if as 3 conditions: 1. DeleteMarkFlag is unset 2. NLink == 0 3. AccessTime is 7 days ago

func (*Inode) ShouldDelete

func (i *Inode) ShouldDelete() (ok bool)

ShouldDelete returns if the inode has been marked as deleted.

func (*Inode) String

func (i *Inode) String() string

String returns the string format of the inode.

func (*Inode) Unmarshal

func (i *Inode) Unmarshal(raw []byte) (err error)

Unmarshal unmarshals the inode.

func (*Inode) UnmarshalKey

func (i *Inode) UnmarshalKey(k []byte) (err error)

UnmarshalKey unmarshals the exporterKey from bytes.

func (*Inode) UnmarshalValue

func (i *Inode) UnmarshalValue(val []byte) (err error)

UnmarshalValue unmarshals the value from bytes.

type InodeBatch

type InodeBatch []*Inode

func InodeBatchUnmarshal

func InodeBatchUnmarshal(raw []byte) (InodeBatch, error)

Unmarshal unmarshals the inodeBatch.

func (InodeBatch) Marshal

func (i InodeBatch) Marshal() ([]byte, error)

Marshal marshals the inodeBatch into a byte array.

type InodeGetReq

type InodeGetReq = proto.InodeGetRequest

Client -> MetaNode

type InodeGetReqBatch

type InodeGetReqBatch = proto.BatchInodeGetRequest

Client -> MetaNode

type InodeResponse

type InodeResponse struct {
	Status uint8
	Msg    *Inode
}

func NewInodeResponse

func NewInodeResponse() *InodeResponse

type LinkInodeReq

type LinkInodeReq = proto.LinkInodeRequest

Client -> MetaNode create Link Request

type LinkInodeResp

type LinkInodeResp = proto.LinkInodeResponse

MetaNode -> Client create Link Response

type LookupReq

type LookupReq = proto.LookupRequest

MetaNode -> Client lookup

type LookupResp

type LookupResp = proto.LookupResponse

Client -> MetaNode lookup

type MetaItem

type MetaItem struct {
	Op uint32 `json:"op"`
	K  []byte `json:"k"`
	V  []byte `json:"v"`
}

MetaItem defines the structure of the metadata operations.

func NewMetaItem

func NewMetaItem(op uint32, key, value []byte) *MetaItem

NewMetaItem returns a new MetaItem.

func (*MetaItem) MarshalBinary

func (s *MetaItem) MarshalBinary() (result []byte, err error)

MarshalBinary marshals MetaItem to binary data. Binary frame structure:

+------+----+------+------+------+------+
| Item | Op | LenK |   K  | LenV |   V  |
+------+----+------+------+------+------+
| byte | 4  |  4   | LenK |  4   | LenV |
+------+----+------+------+------+------+

func (*MetaItem) MarshalJson

func (s *MetaItem) MarshalJson() ([]byte, error)

MarshalJson

func (*MetaItem) UnmarshalBinary

func (s *MetaItem) UnmarshalBinary(raw []byte) (err error)

MarshalBinary unmarshal this MetaItem entity from binary data. Binary frame structure:

+------+----+------+------+------+------+
| Item | Op | LenK |   K  | LenV |   V  |
+------+----+------+------+------+------+
| byte | 4  |  4   | LenK |  4   | LenV |
+------+----+------+------+------+------+

func (*MetaItem) UnmarshalJson

func (s *MetaItem) UnmarshalJson(data []byte) error

UnmarshalJson unmarshals binary data to MetaItem.

type MetaItemIterator

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

MetaItemIterator defines the iterator of the MetaItem.

func (*MetaItemIterator) ApplyIndex

func (si *MetaItemIterator) ApplyIndex() uint64

ApplyIndex returns the applyID of the iterator.

func (*MetaItemIterator) Close

func (si *MetaItemIterator) Close()

Close closes the iterator.

func (*MetaItemIterator) Next

func (si *MetaItemIterator) Next() (data []byte, err error)

Next returns the next item.

type MetaNode

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

The MetaNode manages the dentry and inode information of the meta partitions on a meta node. The data consistency is ensured by Raft.

func NewServer

func NewServer() *MetaNode

NewServer creates a new meta node instance.

func (*MetaNode) Shutdown

func (m *MetaNode) Shutdown()

Shutdown stops the meta node.

func (*MetaNode) Start

func (m *MetaNode) Start(cfg *config.Config) (err error)

Start starts up the meta node with the specified configuration.

  1. Start and load each meta partition from the snapshot.
  2. Restore raftStore fsm of each meta node range.
  3. Start server and accept connection from the master and clients.

func (*MetaNode) Sync

func (m *MetaNode) Sync()

Sync blocks the invoker's goroutine until the meta node shuts down.

type MetaPartition

type MetaPartition interface {
	Start() error
	Stop()
	OpMeta
	LoadSnapshot(path string) error
	ForceSetMetaPartitionToLoadding()
	ForceSetMetaPartitionToFininshLoad()
}

MetaPartition defines the interface for the meta partition operations.

func NewMetaPartition

func NewMetaPartition(conf *MetaPartitionConfig, manager *metadataManager) MetaPartition

NewMetaPartition creates a new meta partition with the specified configuration.

type MetaPartitionConfig

type MetaPartitionConfig struct {
	// Identity for raftStore group. RaftStore nodes in the same raftStore group must have the same groupID.
	PartitionId uint64              `json:"partition_id"`
	VolName     string              `json:"vol_name"`
	Start       uint64              `json:"start"` // Minimal Inode ID of this range. (Required during initialization)
	End         uint64              `json:"end"`   // Maximal Inode ID of this range. (Required during initialization)
	Peers       []proto.Peer        `json:"peers"` // Peers information of the raftStore
	Cursor      uint64              `json:"-"`     // Cursor ID of the inode that have been assigned
	NodeId      uint64              `json:"-"`
	RootDir     string              `json:"-"`
	BeforeStart func()              `json:"-"`
	AfterStart  func()              `json:"-"`
	BeforeStop  func()              `json:"-"`
	AfterStop   func()              `json:"-"`
	RaftStore   raftstore.RaftStore `json:"-"`
	ConnPool    *util.ConnectPool   `json:"-"`
}

MetaPartitionConfig is used to create a meta partition.

type MetadataManager

type MetadataManager interface {
	Start() error
	Stop()
	//CreatePartition(id string, start, end uint64, peers []proto.Peer) error
	HandleMetadataOperation(conn net.Conn, p *Packet, remoteAddr string) error
	GetPartition(id uint64) (MetaPartition, error)
}

MetadataManager manages all the meta partitions.

func NewMetadataManager

func NewMetadataManager(conf MetadataManagerConfig, metaNode *MetaNode) MetadataManager

NewMetadataManager returns a new metadata manager.

type MetadataManagerConfig

type MetadataManagerConfig struct {
	NodeID    uint64
	RootDir   string
	ZoneName  string
	RaftStore raftstore.RaftStore
}

MetadataManagerConfig defines the configures in the metadata manager.

type Multipart added in v1.5.0

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

Multipart defined necessary fields for multipart session management.

func MultipartFromBytes added in v1.5.0

func MultipartFromBytes(raw []byte) *Multipart

func (*Multipart) Bytes added in v1.5.0

func (m *Multipart) Bytes() ([]byte, error)

func (*Multipart) Copy added in v1.5.0

func (m *Multipart) Copy() btree.Item

func (*Multipart) ID added in v1.5.0

func (m *Multipart) ID() string

func (*Multipart) InsertPart added in v1.5.0

func (m *Multipart) InsertPart(part *Part, replace bool) (success bool)

Deprecated

func (*Multipart) Less added in v1.5.0

func (m *Multipart) Less(than btree.Item) bool

func (*Multipart) LoadOrStorePart

func (m *Multipart) LoadOrStorePart(part *Part) (actual *Part, stored bool)

func (*Multipart) Parts added in v1.5.0

func (m *Multipart) Parts() []*Part

type MultipartExtend

type MultipartExtend map[string]string

func MultipartExtendFromBytes

func MultipartExtendFromBytes(raw []byte) MultipartExtend

func NewMultipartExtend

func NewMultipartExtend() MultipartExtend

func (MultipartExtend) Bytes

func (me MultipartExtend) Bytes() ([]byte, error)

type NodeInfo

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

type NowTime

type NowTime struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

NowTime defines the current time.

func NewNowTime

func NewNowTime() *NowTime

NewNowTime returns a new NowTime.

func (*NowTime) GetCurrentTime

func (t *NowTime) GetCurrentTime() (now time.Time)

GetCurrentTime returns the current time.

func (*NowTime) UpdateTime

func (t *NowTime) UpdateTime(now time.Time)

UpdateTime updates the stored time.

type OpDentry

type OpDentry interface {
	CreateDentry(req *CreateDentryReq, p *Packet) (err error)
	DeleteDentry(req *DeleteDentryReq, p *Packet) (err error)
	DeleteDentryBatch(req *BatchDeleteDentryReq, p *Packet) (err error)
	UpdateDentry(req *UpdateDentryReq, p *Packet) (err error)
	ReadDir(req *ReadDirReq, p *Packet) (err error)
	Lookup(req *LookupReq, p *Packet) (err error)
	GetDentryTree() *BTree
}

OpDentry defines the interface for the dentry operations.

type OpExtend added in v1.5.0

type OpExtend interface {
	SetXAttr(req *proto.SetXAttrRequest, p *Packet) (err error)
	GetXAttr(req *proto.GetXAttrRequest, p *Packet) (err error)
	BatchGetXAttr(req *proto.BatchGetXAttrRequest, p *Packet) (err error)
	RemoveXAttr(req *proto.RemoveXAttrRequest, p *Packet) (err error)
	ListXAttr(req *proto.ListXAttrRequest, p *Packet) (err error)
}

type OpExtent

type OpExtent interface {
	ExtentAppend(req *proto.AppendExtentKeyRequest, p *Packet) (err error)
	ExtentsList(req *proto.GetExtentsRequest, p *Packet) (err error)
	ExtentsTruncate(req *ExtentsTruncateReq, p *Packet) (err error)
	BatchExtentAppend(req *proto.AppendExtentKeysRequest, p *Packet) (err error)
}

OpExtent defines the interface for the extent operations.

type OpInode

type OpInode interface {
	CreateInode(req *CreateInoReq, p *Packet) (err error)
	UnlinkInode(req *UnlinkInoReq, p *Packet) (err error)
	UnlinkInodeBatch(req *BatchUnlinkInoReq, p *Packet) (err error)
	InodeGet(req *InodeGetReq, p *Packet) (err error)
	InodeGetBatch(req *InodeGetReqBatch, p *Packet) (err error)
	CreateInodeLink(req *LinkInodeReq, p *Packet) (err error)
	EvictInode(req *EvictInodeReq, p *Packet) (err error)
	EvictInodeBatch(req *BatchEvictInodeReq, p *Packet) (err error)
	SetAttr(reqData []byte, p *Packet) (err error)
	GetInodeTree() *BTree
	DeleteInode(req *proto.DeleteInodeRequest, p *Packet) (err error)
	DeleteInodeBatch(req *proto.DeleteInodeBatchRequest, p *Packet) (err error)
}

OpInode defines the interface for the inode operations.

type OpMeta

OpMeta defines the interface for the metadata operations.

type OpMultipart added in v1.5.0

type OpMultipart interface {
	GetMultipart(req *proto.GetMultipartRequest, p *Packet) (err error)
	CreateMultipart(req *proto.CreateMultipartRequest, p *Packet) (err error)
	AppendMultipart(req *proto.AddMultipartPartRequest, p *Packet) (err error)
	RemoveMultipart(req *proto.RemoveMultipartRequest, p *Packet) (err error)
	ListMultipart(req *proto.ListMultipartRequest, p *Packet) (err error)
}

type OpPartition

type OpPartition interface {
	IsLeader() (leaderAddr string, isLeader bool)
	GetCursor() uint64
	GetBaseConfig() MetaPartitionConfig
	ResponseLoadMetaPartition(p *Packet) (err error)
	PersistMetadata() (err error)
	ChangeMember(changeType raftproto.ConfChangeType, peer raftproto.Peer, context []byte) (resp interface{}, err error)
	Reset() (err error)
	UpdatePartition(req *UpdatePartitionReq, resp *UpdatePartitionResp) (err error)
	DeleteRaft() error
	IsExsitPeer(peer proto.Peer) bool
	TryToLeader(groupID uint64) error
	CanRemoveRaftMember(peer proto.Peer) error
	IsEquareCreateMetaPartitionRequst(request *proto.CreateMetaPartitionRequest) (err error)
}

OpPartition defines the interface for the partition operations.

type Packet

type Packet struct {
	proto.Packet
}

func NewPacketToBatchDeleteExtent

func NewPacketToBatchDeleteExtent(dp *DataPartition, exts []*proto.ExtentKey) *Packet

NewPacketToBatchDeleteExtent returns a new packet to batch delete the extent.

func NewPacketToDeleteExtent

func NewPacketToDeleteExtent(dp *DataPartition, ext *proto.ExtentKey) *Packet

NewPacketToDeleteExtent returns a new packet to delete the extent.

func NewPacketToFreeInodeOnRaftFollower

func NewPacketToFreeInodeOnRaftFollower(partitionID uint64, freeInodes []byte) *Packet

NewPacketToDeleteExtent returns a new packet to delete the extent.

type Part added in v1.5.0

type Part struct {
	ID         uint16
	UploadTime time.Time
	MD5        string
	Size       uint64
	Inode      uint64
}

Part defined necessary fields for multipart part management.

func PartFromBytes added in v1.5.0

func PartFromBytes(raw []byte) *Part

func (Part) Bytes added in v1.5.0

func (m Part) Bytes() ([]byte, error)

func (*Part) Equal

func (m *Part) Equal(o *Part) bool

type Parts added in v1.5.0

type Parts []*Part

func PartsFromBytes added in v1.5.0

func PartsFromBytes(raw []byte) Parts

func (Parts) Bytes added in v1.5.0

func (m Parts) Bytes() ([]byte, error)

func (*Parts) Hash added in v1.5.0

func (m *Parts) Hash(part *Part) (has bool)

func (*Parts) Insert added in v1.5.0

func (m *Parts) Insert(part *Part, replace bool) (success bool)

Deprecated

func (Parts) Len added in v1.5.0

func (m Parts) Len() int

func (*Parts) LoadOrStore

func (m *Parts) LoadOrStore(part *Part) (actual *Part, stored bool)

func (*Parts) Remove added in v1.5.0

func (m *Parts) Remove(id uint16)

func (Parts) Search added in v1.5.0

func (m Parts) Search(id uint16) (part *Part, found bool)

type ReadDirReq

type ReadDirReq = proto.ReadDirRequest

Client -> MetaNode read dir request

type ReadDirResp

type ReadDirResp = proto.ReadDirResponse

MetaNode -> Client read dir response

type SetattrRequest

type SetattrRequest = proto.SetAttrRequest

Client -> MetaNode

type SortedExtents

type SortedExtents struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewSortedExtents

func NewSortedExtents() *SortedExtents

func (*SortedExtents) Append

func (se *SortedExtents) Append(ek proto.ExtentKey) (deleteExtents []proto.ExtentKey)

func (*SortedExtents) Clone

func (se *SortedExtents) Clone() *SortedExtents

func (*SortedExtents) CopyExtents

func (se *SortedExtents) CopyExtents() []proto.ExtentKey

func (*SortedExtents) Len

func (se *SortedExtents) Len() int

func (*SortedExtents) MarshalBinary

func (se *SortedExtents) MarshalBinary() ([]byte, error)

func (*SortedExtents) Range

func (se *SortedExtents) Range(f func(ek proto.ExtentKey) bool)

func (*SortedExtents) Size

func (se *SortedExtents) Size() uint64

Returns the file size

func (*SortedExtents) String

func (se *SortedExtents) String() string

func (*SortedExtents) Truncate

func (se *SortedExtents) Truncate(offset uint64) (deleteExtents []proto.ExtentKey)

func (*SortedExtents) UnmarshalBinary

func (se *SortedExtents) UnmarshalBinary(data []byte) error

type UnlinkInoReq

type UnlinkInoReq = proto.UnlinkInodeRequest

Client -> MetaNode delete Inode request struct

type UnlinkInoResp

type UnlinkInoResp = proto.UnlinkInodeResponse

MetaNode -> Client delete Inode response

type UpdateDentryReq

type UpdateDentryReq = proto.UpdateDentryRequest

Client -> MetaNode updateDentry request

type UpdateDentryResp

type UpdateDentryResp = proto.UpdateDentryResponse

MetaNode -> Client updateDentry response

type UpdatePartitionReq

type UpdatePartitionReq = proto.UpdateMetaPartitionRequest

Master -> MetaNode

type UpdatePartitionResp

type UpdatePartitionResp = proto.UpdateMetaPartitionResponse

MetaNode -> Master

type Vol

type Vol struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

Vol defines the view of the data partition with the read/write lock.

func NewVol

func NewVol() *Vol

NewVol returns a new volume instance.

func (*Vol) GetPartition

func (v *Vol) GetPartition(partitionID uint64) *DataPartition

GetPartition returns the data partition based on the given partition ID.

func (*Vol) UpdatePartitions

func (v *Vol) UpdatePartitions(partitions *DataPartitionsView)

UpdatePartitions updates the data partition.

Jump to

Keyboard shortcuts

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