client

package
v0.8.2 Latest Latest
Warning

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

Go to latest
Published: Sep 18, 2018 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Overview

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2018 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2018 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2018 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2016 The Rook Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

View Source
const (
	AdminUsername = "client.admin"
	CephTool      = "ceph"
	RBDTool       = "rbd"
	Kubectl       = "kubectl"
	CrushTool     = "crushtool"
)
View Source
const (
	// CephHealthOK denotes the status of ceph cluster when healthy.
	CephHealthOK = "HEALTH_OK"

	// CephHealthWarn denotes the status of ceph cluster when unhealthy but recovering.
	CephHealthWarn = "HEALTH_WARN"

	// CephHealthErr denotes the status of ceph cluster when unhealthy but usually needs
	// manual intervention.
	CephHealthErr = "HEALTH_ERR"
)
View Source
const (
	ImageMinSize = uint64(1048576) // 1 MB
)
View Source
const (
	MultiFsEnv = "ROOK_ALLOW_MULTIPLE_FILESYSTEMS"
)

Variables

View Source
var RunAllCephCommandsInToolbox = false

When running the e2e tests, all ceph commands need to be run in the toolbox. Everywhere else, the ceph tools are assumed to be in the container where we can shell out.

Functions

func AuthAdd

func AuthAdd(context *clusterd.Context, clusterName, name, keyringPath string, caps []string) error

AuthAdd will create a new user with the given capabilities and using the already generated keyring found at the given keyring path. This should not be used when the user may already exist.

func AuthDelete

func AuthDelete(context *clusterd.Context, clusterName, name string) error

AuthDelete will delete the given user.

func AuthGetKey

func AuthGetKey(context *clusterd.Context, clusterName, name string) (string, error)

AuthGetKey gets the key for the given user.

func AuthGetOrCreate

func AuthGetOrCreate(context *clusterd.Context, clusterName, name, keyringPath string, caps []string) error

AuthGetOrCreate will either get or create a user with the given capabilities. The keyring for the user will be written to the given keyring path.

func AuthGetOrCreateKey

func AuthGetOrCreateKey(context *clusterd.Context, clusterName, name string, caps []string) (string, error)

AuthGetOrCreateKey gets or creates the key for the given user.

func CreateDefaultCrushMap

func CreateDefaultCrushMap(context *clusterd.Context, clusterName string) (string, error)

func CreateECPoolForApp added in v0.8.0

func CreateECPoolForApp(context *clusterd.Context, clusterName string, newPool CephStoragePoolDetails, appName string, enableECOverwrite bool, erasureCodedConfig model.ErasureCodedPoolConfig) error

func CreateErasureCodeProfile

func CreateErasureCodeProfile(context *clusterd.Context, clusterName string, config model.ErasureCodedPoolConfig, name, failureDomain, crushRoot string) error

func CreateFilesystem

func CreateFilesystem(context *clusterd.Context, clusterName, name, metadataPool string, dataPools []string, activeMDSCount int32) error

func CreatePoolWithProfile

func CreatePoolWithProfile(context *clusterd.Context, clusterName string, newPoolReq model.Pool, appName string) error

func CreateReplicatedPoolForApp added in v0.8.0

func CreateReplicatedPoolForApp(context *clusterd.Context, clusterName string, newPool CephStoragePoolDetails, appName string) error

func CrushRemove

func CrushRemove(context *clusterd.Context, clusterName, name string) (string, error)

func CrushReweight

func CrushReweight(context *clusterd.Context, clusterName string, id int, weight float64) (string, error)

func DeleteErasureCodeProfile

func DeleteErasureCodeProfile(context *clusterd.Context, clusterName string, erasureCodeProfile string) error

func DeleteImage

func DeleteImage(context *clusterd.Context, clusterName, name, poolName string) error

func DeletePool

func DeletePool(context *clusterd.Context, clusterName string, name string) error

func DisableScrubbing

func DisableScrubbing(context *clusterd.Context, clusterName string) (string, error)

func EnableScrubbing

func EnableScrubbing(context *clusterd.Context, clusterName string) (string, error)

func ExecuteCephCommand

func ExecuteCephCommand(context *clusterd.Context, clusterName string, args []string) ([]byte, error)

func ExecuteCephCommandPlain

func ExecuteCephCommandPlain(context *clusterd.Context, clusterName string, args []string) ([]byte, error)

func ExecuteCephCommandPlainNoOutputFile

func ExecuteCephCommandPlainNoOutputFile(context *clusterd.Context, clusterName string, args []string) ([]byte, error)

func ExecuteRBDCommand

func ExecuteRBDCommand(context *clusterd.Context, clusterName string, args []string) ([]byte, error)

func ExecuteRBDCommandNoFormat

func ExecuteRBDCommandNoFormat(context *clusterd.Context, clusterName string, args []string) ([]byte, error)

func ExecuteRBDCommandWithTimeout

func ExecuteRBDCommandWithTimeout(context *clusterd.Context, clusterName string, args []string) (string, error)

func FailMDS

func FailMDS(context *clusterd.Context, clusterName string, gid int) error

func FinalizeCephCommandArgs added in v0.8.0

func FinalizeCephCommandArgs(command string, args []string, configDir, clusterName string) (string, []string)

func FormatLocation

func FormatLocation(location, hostName string) ([]string, error)

func GetCrushHostName

func GetCrushHostName(context *clusterd.Context, clusterName string, osdID int) (string, error)

func GetErasureCodeProfileForPool

func GetErasureCodeProfileForPool(poolName string) string

func GetPoolNamesByID

func GetPoolNamesByID(context *clusterd.Context, clusterName string) (map[int]string, error)

func GetPools

func GetPools(context *clusterd.Context, clusterName string) ([]model.Pool, error)

func IsClusterClean

func IsClusterClean(context *clusterd.Context, clusterName string) error

IsClusterClean returns a value indicating if the cluster is fully clean yet (i.e., all placement groups are in the active+clean state).

func IsMultiFSEnabled added in v0.8.0

func IsMultiFSEnabled() bool

func ListErasureCodeProfiles

func ListErasureCodeProfiles(context *clusterd.Context, clusterName string) ([]string, error)

func MapImage

func MapImage(context *clusterd.Context, imageName, poolName, clusterName, keyring, monitors string) error

MapImage maps an RBD image using admin cephfx and returns the device path

func MarkFilesystemAsDown

func MarkFilesystemAsDown(context *clusterd.Context, clusterName string, fsName string) error

func MgrDisableModule added in v0.8.0

func MgrDisableModule(context *clusterd.Context, clusterName, name string) error

MgrDisableModule disables a mgr module

func MgrEnableModule

func MgrEnableModule(context *clusterd.Context, clusterName, name string, force bool) error

MgrEnableModule enables a mgr module

func OSDOut

func OSDOut(context *clusterd.Context, clusterName string, osdID int) (string, error)

func OSDRemove

func OSDRemove(context *clusterd.Context, clusterName string, osdID int) (string, error)

func RemoveFilesystem

func RemoveFilesystem(context *clusterd.Context, clusterName, fsName string) error

func SetCrushMap

func SetCrushMap(context *clusterd.Context, clusterName, compiledMap string) (string, error)

func SetCrushTunables

func SetCrushTunables(context *clusterd.Context, clusterName, profile string) (string, error)

func SetPoolProperty

func SetPoolProperty(context *clusterd.Context, clusterName, name, propName string, propVal string) error

func UnMapImage

func UnMapImage(context *clusterd.Context, imageName, poolName, clusterName, keyring, monitors string, force bool) error

UnMapImage unmap an RBD image from the node

Types

type CephBlockImage

type CephBlockImage struct {
	Name   string `json:"image"`
	Size   uint64 `json:"size"`
	Format int    `json:"format"`
}

func CreateImage

func CreateImage(context *clusterd.Context, clusterName, name, poolName string, size uint64) (*CephBlockImage, error)

func ListImages

func ListImages(context *clusterd.Context, clusterName, poolName string) ([]CephBlockImage, error)

type CephErasureCodeProfile

type CephErasureCodeProfile struct {
	DataChunkCount   uint   `json:"k,string"`
	CodingChunkCount uint   `json:"m,string"`
	Plugin           string `json:"plugin"`
	Technique        string `json:"technique"`
	FailureDomain    string `json:"crush-failure-domain"`
	CrushRoot        string `json:"crush-root"`
}

func GetErasureCodeProfileDetails

func GetErasureCodeProfileDetails(context *clusterd.Context, clusterName, name string) (CephErasureCodeProfile, error)

type CephFilesystem

type CephFilesystem struct {
	Name           string   `json:"name"`
	MetadataPool   string   `json:"metadata_pool"`
	MetadataPoolID int      `json:"metadata_pool_id"`
	DataPools      []string `json:"data_pools"`
	DataPoolIDs    []int    `json:"data_pool_ids"`
}

func ListFilesystems

func ListFilesystems(context *clusterd.Context, clusterName string) ([]CephFilesystem, error)

type CephFilesystemDetails

type CephFilesystemDetails struct {
	ID     int    `json:"id"`
	MDSMap MDSMap `json:"mdsmap"`
}

func GetFilesystem

func GetFilesystem(context *clusterd.Context, clusterName string, fsName string) (*CephFilesystemDetails, error)

type CephStatus

type CephStatus struct {
	Health        HealthStatus `json:"health"`
	FSID          string       `json:"fsid"`
	ElectionEpoch int          `json:"election_epoch"`
	Quorum        []int        `json:"quorum"`
	QuorumNames   []string     `json:"quorum_names"`
	MonMap        MonMap       `json:"monmap"`
	OsdMap        struct {
		OsdMap OsdMap `json:"osdmap"`
	} `json:"osdmap"`
	PgMap  PgMap  `json:"pgmap"`
	MgrMap MgrMap `json:"mgrmap"`
}

func Status

func Status(context *clusterd.Context, clusterName string) (CephStatus, error)

type CephStoragePoolDetails

type CephStoragePoolDetails struct {
	Name               string `json:"pool"`
	Number             int    `json:"pool_id"`
	Size               uint   `json:"size"`
	ErasureCodeProfile string `json:"erasure_code_profile"`
	FailureDomain      string `json:"failureDomain"`
	CrushRoot          string `json:"crushRoot"`
}

func GetPoolDetails

func GetPoolDetails(context *clusterd.Context, clusterName, name string) (CephStoragePoolDetails, error)

func ModelPoolToCephPool

func ModelPoolToCephPool(modelPool model.Pool) CephStoragePoolDetails

type CephStoragePoolStats

type CephStoragePoolStats struct {
	Pools []struct {
		Name  string `json:"name"`
		ID    int    `json:"id"`
		Stats struct {
			BytesUsed    float64 `json:"bytes_used"`
			RawBytesUsed float64 `json:"raw_bytes_used"`
			MaxAvail     float64 `json:"max_avail"`
			Objects      float64 `json:"objects"`
			DirtyObjects float64 `json:"dirty"`
			ReadIO       float64 `json:"rd"`
			ReadBytes    float64 `json:"rd_bytes"`
			WriteIO      float64 `json:"wr"`
			WriteBytes   float64 `json:"wr_bytes"`
		} `json:"stats"`
	} `json:"pools"`
}

func GetPoolStats

func GetPoolStats(context *clusterd.Context, clusterName string) (*CephStoragePoolStats, error)

type CephStoragePoolSummary

type CephStoragePoolSummary struct {
	Name   string `json:"poolname"`
	Number int    `json:"poolnum"`
}

func ListPoolSummaries

func ListPoolSummaries(context *clusterd.Context, clusterName string) ([]CephStoragePoolSummary, error)

type CephUsage

type CephUsage struct {
	Stats struct {
		TotalBytes      json.Number `json:"total_bytes"`
		TotalUsedBytes  json.Number `json:"total_used_bytes"`
		TotalAvailBytes json.Number `json:"total_avail_bytes"`
		TotalObjects    json.Number `json:"total_objects"`
	} `json:"stats"`
}

func Usage

func Usage(context *clusterd.Context, clusterName string) (*CephUsage, error)

type CheckMessage

type CheckMessage struct {
	Severity string `json:"severity"`
	Summary  struct {
		Message string `json:"message"`
	} `json:"summary"`
}

type CrushFindResult

type CrushFindResult struct {
	ID       int    `json:"osd"`
	IP       string `json:"ip"`
	Location struct {
		// add more crush location fields if needed
		Root string `json:"root"`
		Host string `json:"host"`
	} `json:"crush_location"`
}

func FindOSDInCrushMap

func FindOSDInCrushMap(context *clusterd.Context, clusterName string, osdID int) (*CrushFindResult, error)

type CrushMap

type CrushMap struct {
	Devices []struct {
		ID    int    `json:"id"`
		Name  string `json:"name"`
		Class string `json:"class"`
	} `json:"devices"`
	Types []struct {
		ID   int    `json:"type_id"`
		Name string `json:"name"`
	} `json:"types"`
	Buckets []struct {
		ID       int    `json:"id"`
		Name     string `json:"name"`
		TypeID   int    `json:"type_id"`
		TypeName string `json:"type_name"`
		Weight   int    `json:"weight"`
		Alg      string `json:"alg"`
		Hash     string `json:"hash"`
		Items    []struct {
			ID     int `json:"id"`
			Weight int `json:"weight"`
			Pos    int `json:"pos"`
		} `json:"items"`
	} `json:"buckets"`
	Rules []struct {
		ID      int    `json:"rule_id"`
		Name    string `json:"rule_name"`
		Ruleset int    `json:"ruleset"`
		Type    int    `json:"type"`
		MinSize int    `json:"min_size"`
		MaxSize int    `json:"max_size"`
		Steps   []struct {
			Operation string `json:"op"`
			Number    int    `json:"num"`
			Item      int    `json:"item"`
			ItemName  string `json:"item_name"`
			Type      string `json:"type"`
		} `json:"steps"`
	} `json:"rules"`
	Tunables struct {
	} `json:"tunables"`
}

func GetCrushMap

func GetCrushMap(context *clusterd.Context, clusterName string) (CrushMap, error)

type HealthStatus

type HealthStatus struct {
	Status string                  `json:"status"`
	Checks map[string]CheckMessage `json:"checks"`
}

type MDSInfo

type MDSInfo struct {
	GID     int    `json:"gid"`
	Name    string `json:"name"`
	Rank    int    `json:"rank"`
	State   string `json:"state"`
	Address string `json:"addr"`
}

type MDSMap

type MDSMap struct {
	FilesystemName string             `json:"fs_name"`
	Enabled        bool               `json:"enabled"`
	Root           int                `json:"root"`
	TableServer    int                `json:"tableserver"`
	MaxMDS         int                `json:"max_mds"`
	In             []int              `json:"in"`
	Up             map[string]int     `json:"up"`
	MetadataPool   int                `json:"metadata_pool"`
	DataPools      []int              `json:"data_pools"`
	Failed         []int              `json:"failed"`
	Damaged        []int              `json:"damaged"`
	Stopped        []int              `json:"stopped"`
	Info           map[string]MDSInfo `json:"info"`
}

type MgrMap

type MgrMap struct {
	Epoch      int          `json:"epoch"`
	ActiveGID  int          `json:"active_gid"`
	ActiveName string       `json:"active_name"`
	ActiveAddr string       `json:"active_addr"`
	Available  bool         `json:"available"`
	Standbys   []MgrStandby `json:"standbys"`
}

type MgrStandby

type MgrStandby struct {
	GID  int    `json:"gid"`
	Name string `json:"name"`
}

type MonMap

type MonMap struct {
	Epoch        int           `json:"epoch"`
	FSID         string        `json:"fsid"`
	CreatedTime  string        `json:"created"`
	ModifiedTime string        `json:"modified"`
	Mons         []MonMapEntry `json:"mons"`
}

type MonMapEntry

type MonMapEntry struct {
	Name    string `json:"name"`
	Rank    int    `json:"rank"`
	Address string `json:"addr"`
}

represents an entry in the monitor map

type MonStats

type MonStats struct {
	Health struct {
		Status string                  `json:"status"`
		Checks map[string]CheckMessage `json:"checks"`
	} `json:"health"`
	Quorum []int `json:"quorum"`
}

MonStats is a subset of fields on the response from the mon command "status". These fields are focused on monitor stats.

func GetMonStats

func GetMonStats(context *clusterd.Context, clusterName string) (*MonStats, error)

type MonStatusRequest

type MonStatusRequest struct {
	Prefix string   `json:"prefix"`
	Format string   `json:"format"`
	ID     int      `json:"id"`
	Weight float32  `json:"weight"`
	Pool   string   `json:"pool"`
	Var    string   `json:"var"`
	Args   []string `json:"args"`
}

request to simplify deserialization of a test request

type MonStatusResponse

type MonStatusResponse struct {
	Quorum []int `json:"quorum"`
	MonMap struct {
		Mons []MonMapEntry `json:"mons"`
	} `json:"monmap"`
}

represents the response from a mon_status mon_command (subset of all available fields, only marshal ones we care about)

func GetMonStatus

func GetMonStatus(context *clusterd.Context, clusterName string, debug bool) (MonStatusResponse, error)

GetMonStatus calls mon_status mon_command

type MonTimeSkewStatus

type MonTimeSkewStatus struct {
	Skew    json.Number `json:"skew"`
	Latency json.Number `json:"latency"`
	Health  string      `json:"health"`
}

type MonTimeStatus

type MonTimeStatus struct {
	Skew   map[string]MonTimeSkewStatus `json:"time_skew_status"`
	Checks struct {
		Epoch       int    `json:"epoch"`
		Round       int    `json:"round"`
		RoundStatus string `json:"round_status"`
	} `json:"timechecks"`
}

func GetMonTimeStatus

func GetMonTimeStatus(context *clusterd.Context, clusterName string) (*MonTimeStatus, error)

type OSDDump

type OSDDump struct {
	OSDs []struct {
		OSD json.Number `json:"osd"`
		Up  json.Number `json:"up"`
		In  json.Number `json:"in"`
	} `json:"osds"`
}

func GetOSDDump

func GetOSDDump(context *clusterd.Context, clusterName string) (*OSDDump, error)

func (*OSDDump) StatusByID

func (dump *OSDDump) StatusByID(id int64) (int64, int64, error)

StatusByID returns status and inCluster states for given OSD id

type OSDNodeUsage

type OSDNodeUsage struct {
	ID          int         `json:"id"`
	Name        string      `json:"name"`
	CrushWeight json.Number `json:"crush_weight"`
	Depth       json.Number `json:"depth"`
	Reweight    json.Number `json:"reweight"`
	KB          json.Number `json:"kb"`
	UsedKB      json.Number `json:"kb_used"`
	AvailKB     json.Number `json:"kb_avail"`
	Utilization json.Number `json:"utilization"`
	Variance    json.Number `json:"var"`
	Pgs         json.Number `json:"pgs"`
}

type OSDPerfStats

type OSDPerfStats struct {
	PerfInfo []struct {
		ID    json.Number `json:"id"`
		Stats struct {
			CommitLatency json.Number `json:"commit_latency_ms"`
			ApplyLatency  json.Number `json:"apply_latency_ms"`
		} `json:"perf_stats"`
	} `json:"osd_perf_infos"`
}

func GetOSDPerfStats

func GetOSDPerfStats(context *clusterd.Context, clusterName string) (*OSDPerfStats, error)

type OSDUsage

type OSDUsage struct {
	OSDNodes []OSDNodeUsage `json:"nodes"`
	Summary  struct {
		TotalKB      json.Number `json:"total_kb"`
		TotalUsedKB  json.Number `json:"total_kb_used"`
		TotalAvailKB json.Number `json:"total_kb_avail"`
		AverageUtil  json.Number `json:"average_utilization"`
	} `json:"summary"`
}

func GetOSDUsage

func GetOSDUsage(context *clusterd.Context, clusterName string) (*OSDUsage, error)

func (*OSDUsage) ByID

func (usage *OSDUsage) ByID(osdID int) *OSDNodeUsage

type OsdMap

type OsdMap struct {
	Epoch          int  `json:"epoch"`
	NumOsd         int  `json:"num_osds"`
	NumUpOsd       int  `json:"num_up_osds"`
	NumInOsd       int  `json:"num_in_osds"`
	Full           bool `json:"full"`
	NearFull       bool `json:"nearfull"`
	NumRemappedPgs int  `json:"num_remapped_pgs"`
}

type PGDumpBrief

type PGDumpBrief struct {
	ID              string `json:"pgid"`
	State           string `json:"state"`
	UpOsdIDs        []int  `json:"up"`
	UpPrimaryID     int    `json:"up_primary"`
	ActingOsdIDs    []int  `json:"acting"`
	ActingPrimaryID int    `json:"acting_primary"`
}

func GetPGDumpBrief

func GetPGDumpBrief(context *clusterd.Context, clusterName string) ([]PGDumpBrief, error)

type PgMap

type PgMap struct {
	PgsByState            []PgStateEntry `json:"pgs_by_state"`
	Version               int            `json:"version"`
	NumPgs                int            `json:"num_pgs"`
	DataBytes             uint64         `json:"data_bytes"`
	UsedBytes             uint64         `json:"bytes_used"`
	AvailableBytes        uint64         `json:"bytes_avail"`
	TotalBytes            uint64         `json:"bytes_total"`
	ReadBps               uint64         `json:"read_bytes_sec"`
	WriteBps              uint64         `json:"write_bytes_sec"`
	ReadOps               uint64         `json:"read_op_per_sec"`
	WriteOps              uint64         `json:"write_op_per_sec"`
	RecoveryBps           uint64         `json:"recovering_bytes_per_sec"`
	RecoveryObjectsPerSec uint64         `json:"recovering_objects_per_sec"`
	RecoveryKeysPerSec    uint64         `json:"recovering_keys_per_sec"`
	CacheFlushBps         uint64         `json:"flush_bytes_sec"`
	CacheEvictBps         uint64         `json:"evict_bytes_sec"`
	CachePromoteBps       uint64         `json:"promote_op_per_sec"`
}

type PgStateEntry

type PgStateEntry struct {
	StateName string `json:"state_name"`
	Count     int    `json:"count"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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