Files
my-rook-config/pkg/operator/ceph/cluster/osd/labels.go
T
Santosh Pillai 8602b9c116 ceph: osd pdb reconciler changes
-creates a single PDB (max-unavailable=1) for all OSDs.  This PDB allows one OSD to go down at a given time.
-When a drain is detected, blocking PDBs (max-unavailable=0) will be created for each failure domain that is not being drained and the main PDB (max-unavilable=1) will be deleted. This will allow all the OSDs in the currently drained failure domain to be removed while blocking the deletion  of OSDs in other failure domains.
-Once the PGs are healthy again, the blocking PDBs will be deleted and the main PDB will be restored.
-Add PG healthcheck timeout
-Delete any legacy node drain pods and blocking OSD PDBs

Signed-off-by: Santosh Pillai <sapillai@redhat.com>
2020-11-18 18:25:07 +05:30

71 lines
2.4 KiB
Go

/*
Copyright 2020 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.
*/
package osd
import (
"fmt"
"strconv"
"strings"
"github.com/rook/rook/pkg/operator/ceph/controller"
)
const (
// CephDeviceSetLabelKey is the Rook device set label key
CephDeviceSetLabelKey = "ceph.rook.io/DeviceSet"
// CephSetIndexLabelKey is the Rook label key index
CephSetIndexLabelKey = "ceph.rook.io/setIndex"
// CephDeviceSetPVCIDLabelKey is the Rook PVC ID label key
CephDeviceSetPVCIDLabelKey = "ceph.rook.io/DeviceSetPVCId"
// OSDOverPVCLabelKey is the Rook PVC label key
OSDOverPVCLabelKey = "ceph.rook.io/pvc"
// TopologyLocationLabel is the crush location label added to OSD deployments
TopologyLocationLabel = "topology-location-%s"
)
func makeStorageClassDeviceSetPVCLabel(storageClassDeviceSetName, pvcStorageClassDeviceSetPVCId string, setIndex int) map[string]string {
return map[string]string{
CephDeviceSetLabelKey: storageClassDeviceSetName,
CephSetIndexLabelKey: fmt.Sprintf("%d", setIndex),
CephDeviceSetPVCIDLabelKey: pvcStorageClassDeviceSetPVCId,
}
}
func (c *Cluster) getOSDLabels(osd OSDInfo, failureDomainValue string, portable bool) map[string]string {
stringID := fmt.Sprintf("%d", osd.ID)
labels := controller.CephDaemonAppLabels(AppName, c.clusterInfo.Namespace, "osd", stringID, true)
labels[OsdIdLabelKey] = stringID
labels[FailureDomainKey] = failureDomainValue
labels[portableKey] = strconv.FormatBool(portable)
for k, v := range getOSDTopologyLocationLabels(osd.Location) {
labels[k] = v
}
return labels
}
func getOSDTopologyLocationLabels(topologyLocation string) map[string]string {
labels := map[string]string{}
locations := strings.Split(topologyLocation, " ")
for _, location := range locations {
loc := strings.Split(location, "=")
if len(loc) == 2 {
labels[fmt.Sprintf(TopologyLocationLabel, loc[0])] = loc[1]
}
}
return labels
}