glusterfs

package
v3.1.0+incompatible Latest Latest
Warning

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

Go to latest
Published: Nov 18, 2016 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ASYNC_ROUTE           = "/queue"
	BOLTDB_BUCKET_CLUSTER = "CLUSTER"
	BOLTDB_BUCKET_NODE    = "NODE"
	BOLTDB_BUCKET_VOLUME  = "VOLUME"
	BOLTDB_BUCKET_DEVICE  = "DEVICE"
	BOLTDB_BUCKET_BRICK   = "BRICK"
)
View Source
const (

	// Byte values in KB
	KB = 1
	MB = KB * 1024
	GB = MB * 1024
	TB = GB * 1024

	// Default values
	DEFAULT_REPLICA               = 2
	DEFAULT_EC_DATA               = 4
	DEFAULT_EC_REDUNDANCY         = 2
	DEFAULT_THINP_SNAPSHOT_FACTOR = 1.5
)
View Source
const (
	VOLUME_CREATE_MAX_SNAPSHOT_FACTOR = 100
)

Variables

View Source
var (
	ErrNoSpace          = errors.New("No space")
	ErrNotFound         = errors.New("Id not found")
	ErrConflict         = errors.New("The target exists, contains other items, or is in use.")
	ErrMaxBricks        = errors.New("Maximum number of bricks reached.")
	ErrMinimumBrickSize = errors.New("Minimum brick size limit reached.  Out of space.")
	ErrDbAccess         = errors.New("Unable to access db")
	ErrAccessList       = errors.New("Unable to access list")
	ErrKeyExists        = errors.New("Key already exists in the database")
)
View Source
var (
	// Default limits
	BrickMinSize = uint64(4 * GB)
	BrickMaxSize = uint64(4 * TB)
	BrickMaxNum  = 32
)

Functions

func BrickList

func BrickList(tx *bolt.Tx) ([]string, error)

func ClusterList

func ClusterList(tx *bolt.Tx) ([]string, error)

func CreateBricks

func CreateBricks(db *bolt.DB, executor executors.Executor, brick_entries []*BrickEntry) error

func DestroyBricks

func DestroyBricks(db *bolt.DB, executor executors.Executor, brick_entries []*BrickEntry) error

func DeviceList

func DeviceList(tx *bolt.Tx) ([]string, error)

func EntryDelete

func EntryDelete(tx *bolt.Tx, entry DbEntry, key string) error

func EntryKeys

func EntryKeys(tx *bolt.Tx, bucket string) []string

func EntryLoad

func EntryLoad(tx *bolt.Tx, entry DbEntry, key string) error

func EntryRegister

func EntryRegister(tx *bolt.Tx, entry DbEntry, key string, value []byte) ([]byte, error)

Checks if the key already exists in the database. If it does not exist, then it will save the key value pair in the datababucket se

func EntrySave

func EntrySave(tx *bolt.Tx, entry DbEntry, key string) error

func VolumeList

func VolumeList(tx *bolt.Tx) ([]string, error)

Types

type Allocator

type Allocator interface {

	// Inform the brick allocator to include device
	AddDevice(c *ClusterEntry, n *NodeEntry, d *DeviceEntry) error

	// Inform the brick allocator to not use the specified device
	RemoveDevice(c *ClusterEntry, n *NodeEntry, d *DeviceEntry) error

	// Remove cluster information from allocator
	RemoveCluster(clusterId string) error

	// Returns a generator, done, and error channel.
	// The generator returns the location for the brick, then the possible locations
	// of its replicas. The caller must close() the done channel when it no longer
	// needs to read from the generator.
	GetNodes(clusterId, brickId string) (<-chan string,
		chan<- struct{}, <-chan error)
}

type App

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

func NewApp

func NewApp(configIo io.Reader) *App

func NewTestApp

func NewTestApp(dbfile string) *App

func (*App) Auth

func (a *App) Auth(w http.ResponseWriter, r *http.Request, next http.HandlerFunc)

Middleware function

func (*App) Backup

func (a *App) Backup(w http.ResponseWriter, r *http.Request)

func (*App) Close

func (a *App) Close()

func (*App) ClusterCreate

func (a *App) ClusterCreate(w http.ResponseWriter, r *http.Request)

func (*App) ClusterDelete

func (a *App) ClusterDelete(w http.ResponseWriter, r *http.Request)

func (*App) ClusterInfo

func (a *App) ClusterInfo(w http.ResponseWriter, r *http.Request)

func (*App) ClusterList

func (a *App) ClusterList(w http.ResponseWriter, r *http.Request)

func (*App) DeviceAdd

func (a *App) DeviceAdd(w http.ResponseWriter, r *http.Request)

func (*App) DeviceDelete

func (a *App) DeviceDelete(w http.ResponseWriter, r *http.Request)

func (*App) DeviceInfo

func (a *App) DeviceInfo(w http.ResponseWriter, r *http.Request)

func (*App) DeviceSetState

func (a *App) DeviceSetState(w http.ResponseWriter, r *http.Request)

func (*App) NodeAdd

func (a *App) NodeAdd(w http.ResponseWriter, r *http.Request)

func (*App) NodeDelete

func (a *App) NodeDelete(w http.ResponseWriter, r *http.Request)

func (*App) NodeInfo

func (a *App) NodeInfo(w http.ResponseWriter, r *http.Request)

func (*App) NodeSetState

func (a *App) NodeSetState(w http.ResponseWriter, r *http.Request)

func (*App) NotFoundHandler

func (a *App) NotFoundHandler(w http.ResponseWriter, r *http.Request)

func (*App) SetRoutes

func (a *App) SetRoutes(router *mux.Router) error

Register Routes

func (*App) VolumeCreate

func (a *App) VolumeCreate(w http.ResponseWriter, r *http.Request)

func (*App) VolumeDelete

func (a *App) VolumeDelete(w http.ResponseWriter, r *http.Request)

func (*App) VolumeExpand

func (a *App) VolumeExpand(w http.ResponseWriter, r *http.Request)

func (*App) VolumeInfo

func (a *App) VolumeInfo(w http.ResponseWriter, r *http.Request)

func (*App) VolumeList

func (a *App) VolumeList(w http.ResponseWriter, r *http.Request)

type BrickEntry

type BrickEntry struct {
	Info             api.BrickInfo
	TpSize           uint64
	PoolMetadataSize uint64
	// contains filtered or unexported fields
}

func NewBrickEntry

func NewBrickEntry(size, tpsize, poolMetadataSize uint64,
	deviceid, nodeid string, gid int64) *BrickEntry

func NewBrickEntryFromId

func NewBrickEntryFromId(tx *bolt.Tx, id string) (*BrickEntry, error)

func (*BrickEntry) BucketName

func (b *BrickEntry) BucketName() string

func (*BrickEntry) Create

func (b *BrickEntry) Create(db *bolt.DB, executor executors.Executor) error

func (*BrickEntry) Delete

func (b *BrickEntry) Delete(tx *bolt.Tx) error

func (*BrickEntry) Destroy

func (b *BrickEntry) Destroy(db *bolt.DB, executor executors.Executor) error

func (*BrickEntry) DestroyCheck

func (b *BrickEntry) DestroyCheck(db *bolt.DB, executor executors.Executor) error

func (*BrickEntry) Id

func (b *BrickEntry) Id() string

func (*BrickEntry) Marshal

func (b *BrickEntry) Marshal() ([]byte, error)

func (*BrickEntry) NewInfoResponse

func (b *BrickEntry) NewInfoResponse(tx *bolt.Tx) (*api.BrickInfo, error)

func (*BrickEntry) Save

func (b *BrickEntry) Save(tx *bolt.Tx) error

func (*BrickEntry) SetId

func (b *BrickEntry) SetId(id string)

func (*BrickEntry) TotalSize

func (b *BrickEntry) TotalSize() uint64

Size consumed on device

func (*BrickEntry) Unmarshal

func (b *BrickEntry) Unmarshal(buffer []byte) error

type ClusterEntry

type ClusterEntry struct {
	Info api.ClusterInfoResponse
}

func NewClusterEntry

func NewClusterEntry() *ClusterEntry

func NewClusterEntryFromId

func NewClusterEntryFromId(tx *bolt.Tx, id string) (*ClusterEntry, error)

func NewClusterEntryFromRequest

func NewClusterEntryFromRequest() *ClusterEntry

func (*ClusterEntry) BucketName

func (c *ClusterEntry) BucketName() string

func (*ClusterEntry) ConflictString

func (c *ClusterEntry) ConflictString() string

func (*ClusterEntry) Delete

func (c *ClusterEntry) Delete(tx *bolt.Tx) error

func (*ClusterEntry) Marshal

func (c *ClusterEntry) Marshal() ([]byte, error)

func (*ClusterEntry) NewClusterInfoResponse

func (c *ClusterEntry) NewClusterInfoResponse(tx *bolt.Tx) (*api.ClusterInfoResponse, error)

func (*ClusterEntry) NodeAdd

func (c *ClusterEntry) NodeAdd(id string)

func (*ClusterEntry) NodeDelete

func (c *ClusterEntry) NodeDelete(id string)

func (*ClusterEntry) NodeEntryFromClusterIndex

func (c *ClusterEntry) NodeEntryFromClusterIndex(tx *bolt.Tx, index int) (*NodeEntry, error)

func (*ClusterEntry) Save

func (c *ClusterEntry) Save(tx *bolt.Tx) error

func (*ClusterEntry) Unmarshal

func (c *ClusterEntry) Unmarshal(buffer []byte) error

func (*ClusterEntry) VolumeAdd

func (c *ClusterEntry) VolumeAdd(id string)

func (*ClusterEntry) VolumeDelete

func (c *ClusterEntry) VolumeDelete(id string)

type ConfigFile

type ConfigFile struct {
	GlusterFS GlusterFSConfig `json:"glusterfs"`
}

type CreateType

type CreateType int
const (
	CREATOR_CREATE CreateType = iota
	CREATOR_DESTROY
)

type DbEntry

type DbEntry interface {
	BucketName() string
	Marshal() ([]byte, error)
	Unmarshal(buffer []byte) error
}

type DeviceEntry

type DeviceEntry struct {
	Entry

	Info       api.DeviceInfo
	Bricks     sort.StringSlice
	NodeId     string
	ExtentSize uint64
}

func NewDeviceEntry

func NewDeviceEntry() *DeviceEntry

func NewDeviceEntryFromId

func NewDeviceEntryFromId(tx *bolt.Tx, id string) (*DeviceEntry, error)

func NewDeviceEntryFromRequest

func NewDeviceEntryFromRequest(req *api.DeviceAddRequest) *DeviceEntry

func (*DeviceEntry) BrickAdd

func (d *DeviceEntry) BrickAdd(id string)

func (*DeviceEntry) BrickDelete

func (d *DeviceEntry) BrickDelete(id string)

func (*DeviceEntry) BucketName

func (d *DeviceEntry) BucketName() string

func (*DeviceEntry) ConflictString

func (d *DeviceEntry) ConflictString() string

func (*DeviceEntry) Delete

func (d *DeviceEntry) Delete(tx *bolt.Tx) error

func (*DeviceEntry) Deregister

func (d *DeviceEntry) Deregister(tx *bolt.Tx) error

func (*DeviceEntry) Id

func (d *DeviceEntry) Id() string

func (*DeviceEntry) IsDeleteOk

func (d *DeviceEntry) IsDeleteOk() bool

func (*DeviceEntry) Marshal

func (d *DeviceEntry) Marshal() ([]byte, error)

func (*DeviceEntry) NewBrickEntry

func (d *DeviceEntry) NewBrickEntry(amount uint64, snapFactor float64, gid int64) *BrickEntry

Allocates a new brick if the space is available. It will automatically reserve the storage amount required from the device's used storage, but it will not add the brick id to the brick list. The caller is responsabile for adding the brick id to the list.

func (*DeviceEntry) NewInfoResponse

func (d *DeviceEntry) NewInfoResponse(tx *bolt.Tx) (*api.DeviceInfoResponse, error)

func (*DeviceEntry) Register

func (d *DeviceEntry) Register(tx *bolt.Tx) error

func (*DeviceEntry) Save

func (d *DeviceEntry) Save(tx *bolt.Tx) error

func (*DeviceEntry) SetExtentSize

func (d *DeviceEntry) SetExtentSize(amount uint64)

func (*DeviceEntry) SetId

func (d *DeviceEntry) SetId(id string)

func (*DeviceEntry) SetState

func (d *DeviceEntry) SetState(tx *bolt.Tx,
	a Allocator,
	s api.EntryState) error

func (*DeviceEntry) StorageAllocate

func (d *DeviceEntry) StorageAllocate(amount uint64)

func (*DeviceEntry) StorageCheck

func (d *DeviceEntry) StorageCheck(amount uint64) bool

func (*DeviceEntry) StorageFree

func (d *DeviceEntry) StorageFree(amount uint64)

func (*DeviceEntry) StorageSet

func (d *DeviceEntry) StorageSet(amount uint64)

func (*DeviceEntry) Unmarshal

func (d *DeviceEntry) Unmarshal(buffer []byte) error

type Entry

type Entry struct {
	State api.EntryState
}

func (*Entry) SetOnline

func (e *Entry) SetOnline()

type GlusterFSConfig

type GlusterFSConfig struct {
	DBfile     string              `json:"db"`
	Executor   string              `json:"executor"`
	Allocator  string              `json:"allocator"`
	SshConfig  sshexec.SshConfig   `json:"sshexec"`
	KubeConfig kubeexec.KubeConfig `json:"kubeexec"`
	Loglevel   string              `json:"loglevel"`

	// advanced settings
	BrickMaxSize int `json:"brick_max_size_gb"`
	BrickMinSize int `json:"brick_min_size_gb"`
	BrickMaxNum  int `json:"max_bricks_per_volume"`
}

type MockAllocator

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

func NewMockAllocator

func NewMockAllocator(db *bolt.DB) *MockAllocator

func (*MockAllocator) AddDevice

func (d *MockAllocator) AddDevice(cluster *ClusterEntry,
	node *NodeEntry,
	device *DeviceEntry) error

func (*MockAllocator) GetNodes

func (d *MockAllocator) GetNodes(clusterId, brickId string) (<-chan string,
	chan<- struct{}, <-chan error)

func (*MockAllocator) RemoveCluster

func (d *MockAllocator) RemoveCluster(clusterId string) error

func (*MockAllocator) RemoveDevice

func (d *MockAllocator) RemoveDevice(cluster *ClusterEntry,
	node *NodeEntry,
	device *DeviceEntry) error

type NodeEntry

type NodeEntry struct {
	Entry

	Info    api.NodeInfo
	Devices sort.StringSlice
}

func NewNodeEntry

func NewNodeEntry() *NodeEntry

func NewNodeEntryFromId

func NewNodeEntryFromId(tx *bolt.Tx, id string) (*NodeEntry, error)

func NewNodeEntryFromRequest

func NewNodeEntryFromRequest(req *api.NodeAddRequest) *NodeEntry

func (*NodeEntry) BucketName

func (n *NodeEntry) BucketName() string

func (*NodeEntry) ConflictString

func (n *NodeEntry) ConflictString() string

func (*NodeEntry) Delete

func (n *NodeEntry) Delete(tx *bolt.Tx) error

func (*NodeEntry) Deregister

func (n *NodeEntry) Deregister(tx *bolt.Tx) error

func (*NodeEntry) DeviceAdd

func (n *NodeEntry) DeviceAdd(id string)

func (*NodeEntry) DeviceDelete

func (n *NodeEntry) DeviceDelete(id string)

func (*NodeEntry) IsDeleteOk

func (n *NodeEntry) IsDeleteOk() bool

func (*NodeEntry) ManageHostName

func (n *NodeEntry) ManageHostName() string

func (*NodeEntry) Marshal

func (n *NodeEntry) Marshal() ([]byte, error)

func (*NodeEntry) NewInfoReponse

func (n *NodeEntry) NewInfoReponse(tx *bolt.Tx) (*api.NodeInfoResponse, error)

func (*NodeEntry) Register

func (n *NodeEntry) Register(tx *bolt.Tx) error

func (*NodeEntry) Save

func (n *NodeEntry) Save(tx *bolt.Tx) error

func (*NodeEntry) SetState

func (n *NodeEntry) SetState(tx *bolt.Tx,
	a Allocator,
	s api.EntryState) error

func (*NodeEntry) StorageHostName

func (n *NodeEntry) StorageHostName() string

func (*NodeEntry) Unmarshal

func (n *NodeEntry) Unmarshal(buffer []byte) error

type NoneDurability

type NoneDurability struct {
	VolumeReplicaDurability
}

func NewNoneDurability

func NewNoneDurability() *NoneDurability

func (*NoneDurability) BricksInSet

func (n *NoneDurability) BricksInSet() int

func (*NoneDurability) SetDurability

func (n *NoneDurability) SetDurability()

func (*NoneDurability) SetExecutorVolumeRequest

func (n *NoneDurability) SetExecutorVolumeRequest(v *executors.VolumeRequest)

type SimpleAllocator

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

Simple allocator contains a map to rings of clusters

func NewSimpleAllocator

func NewSimpleAllocator() *SimpleAllocator

Create a new simple allocator

func NewSimpleAllocatorFromDb

func NewSimpleAllocatorFromDb(db *bolt.DB) *SimpleAllocator

Create a new simple allocator and initialize it with data from the db

func (*SimpleAllocator) AddDevice

func (s *SimpleAllocator) AddDevice(cluster *ClusterEntry,
	node *NodeEntry,
	device *DeviceEntry) error

func (*SimpleAllocator) GetNodes

func (s *SimpleAllocator) GetNodes(clusterId, brickId string) (<-chan string,
	chan<- struct{}, <-chan error)

func (*SimpleAllocator) RemoveCluster

func (s *SimpleAllocator) RemoveCluster(clusterId string) error

func (*SimpleAllocator) RemoveDevice

func (s *SimpleAllocator) RemoveDevice(cluster *ClusterEntry,
	node *NodeEntry,
	device *DeviceEntry) error

type SimpleAllocatorRing

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

The allocation ring will contain a map composed of all the devices available in the cluster. Call Rebalance() for it to create a balanced list.

func NewSimpleAllocatorRing

func NewSimpleAllocatorRing() *SimpleAllocatorRing

Create a new simple ring

func (*SimpleAllocatorRing) Add

func (s *SimpleAllocatorRing) Add(d *SimpleDevice)

Add a device to the ring map

func (*SimpleAllocatorRing) GetDeviceList

func (s *SimpleAllocatorRing) GetDeviceList(uuid string) SimpleDevices

Use a uuid to point at a position in the ring. Return a list of devices from that point in the ring.

func (*SimpleAllocatorRing) Rebalance

func (s *SimpleAllocatorRing) Rebalance()

Rebalance the ring and place the rebalanced list into balancedList. The idea is to setup an array/slice where each continguous SimpleDevice is from either a different zone, or node.

func (*SimpleAllocatorRing) Remove

func (s *SimpleAllocatorRing) Remove(d *SimpleDevice)

Remove device from the ring map

type SimpleDevice

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

Elements in the balanced list

func (*SimpleDevice) String

func (s *SimpleDevice) String() string

Pretty pring a SimpleDevice

type SimpleDevices

type SimpleDevices []SimpleDevice

Simple Devices so that we have no pointers and no race conditions

type SimpleNode

type SimpleNode []*SimpleDevice

A node is a collection of devices

type SimpleZone

type SimpleZone []SimpleNode

A zone is a collection of nodes

type VolumeDisperseDurability

type VolumeDisperseDurability struct {
	api.DisperseDurability
}

func (*VolumeDisperseDurability) BrickSizeGenerator

func (d *VolumeDisperseDurability) BrickSizeGenerator(size uint64) func() (int, uint64, error)

func (*VolumeDisperseDurability) BricksInSet

func (d *VolumeDisperseDurability) BricksInSet() int

func (*VolumeDisperseDurability) MinVolumeSize

func (d *VolumeDisperseDurability) MinVolumeSize() uint64

func (*VolumeDisperseDurability) SetDurability

func (d *VolumeDisperseDurability) SetDurability()

func (*VolumeDisperseDurability) SetExecutorVolumeRequest

func (d *VolumeDisperseDurability) SetExecutorVolumeRequest(v *executors.VolumeRequest)

type VolumeDurability

type VolumeDurability interface {
	BrickSizeGenerator(size uint64) func() (int, uint64, error)
	MinVolumeSize() uint64
	BricksInSet() int
	SetDurability()
	SetExecutorVolumeRequest(v *executors.VolumeRequest)
}

type VolumeEntry

type VolumeEntry struct {
	Info       api.VolumeInfo
	Bricks     sort.StringSlice
	Durability VolumeDurability
	// contains filtered or unexported fields
}

func NewVolumeEntry

func NewVolumeEntry() *VolumeEntry

func NewVolumeEntryFromId

func NewVolumeEntryFromId(tx *bolt.Tx, id string) (*VolumeEntry, error)

func NewVolumeEntryFromRequest

func NewVolumeEntryFromRequest(req *api.VolumeCreateRequest) *VolumeEntry

func (*VolumeEntry) BrickAdd

func (v *VolumeEntry) BrickAdd(id string)

func (*VolumeEntry) BrickDelete

func (v *VolumeEntry) BrickDelete(id string)

func (*VolumeEntry) BricksIds

func (v *VolumeEntry) BricksIds() sort.StringSlice

func (*VolumeEntry) BucketName

func (v *VolumeEntry) BucketName() string

func (*VolumeEntry) Create

func (v *VolumeEntry) Create(db *bolt.DB,
	executor executors.Executor,
	allocator Allocator) (e error)

func (*VolumeEntry) Delete

func (v *VolumeEntry) Delete(tx *bolt.Tx) error

func (*VolumeEntry) Destroy

func (v *VolumeEntry) Destroy(db *bolt.DB, executor executors.Executor) error

func (*VolumeEntry) Expand

func (v *VolumeEntry) Expand(db *bolt.DB,
	executor executors.Executor,
	allocator Allocator,
	sizeGB int) (e error)

func (*VolumeEntry) Marshal

func (v *VolumeEntry) Marshal() ([]byte, error)

func (*VolumeEntry) NewInfoResponse

func (v *VolumeEntry) NewInfoResponse(tx *bolt.Tx) (*api.VolumeInfoResponse, error)

func (*VolumeEntry) Save

func (v *VolumeEntry) Save(tx *bolt.Tx) error

func (*VolumeEntry) Unmarshal

func (v *VolumeEntry) Unmarshal(buffer []byte) error

type VolumeReplicaDurability

type VolumeReplicaDurability struct {
	api.ReplicaDurability
}

func NewVolumeReplicaDurability

func NewVolumeReplicaDurability(r *api.ReplicaDurability) *VolumeReplicaDurability

func (*VolumeReplicaDurability) BrickSizeGenerator

func (r *VolumeReplicaDurability) BrickSizeGenerator(size uint64) func() (int, uint64, error)

func (*VolumeReplicaDurability) BricksInSet

func (r *VolumeReplicaDurability) BricksInSet() int

func (*VolumeReplicaDurability) MinVolumeSize

func (r *VolumeReplicaDurability) MinVolumeSize() uint64

func (*VolumeReplicaDurability) SetDurability

func (r *VolumeReplicaDurability) SetDurability()

func (*VolumeReplicaDurability) SetExecutorVolumeRequest

func (r *VolumeReplicaDurability) SetExecutorVolumeRequest(v *executors.VolumeRequest)

Jump to

Keyboard shortcuts

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