github.com/openebs/api@v1.12.0/pkg/internalapis/apis/cstor/cstorvolumereplica.go (about) 1 /* 2 Copyright 2020 The OpenEBS Authors 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package cstor 18 19 import ( 20 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 21 ) 22 23 // CVRKey represents the properties of a cstorvolumereplica 24 type CVRKey string 25 26 const ( 27 // CloneEnableKEY is used to enable/disable cloning for a cstorvolumereplica 28 CloneEnableKEY CVRKey = "openebs.io/cloned" 29 30 // SourceVolumeKey stores the name of source volume whose snapshot is used to 31 // create this cvr 32 SourceVolumeKey CVRKey = "openebs.io/source-volume" 33 34 // SnapshotNameKey stores the name of the snapshot being used to restore this replica 35 SnapshotNameKey CVRKey = "openebs.io/snapshot" 36 ) 37 38 // +genclient 39 // +genclient:noStatus 40 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 41 // +resource:path=cstorvolumereplica 42 43 // CStorVolumeReplica describes a cstor volume resource created as custom resource 44 type CStorVolumeReplica struct { 45 metav1.TypeMeta `json:",inline"` 46 metav1.ObjectMeta `json:"metadata,omitempty"` 47 Spec CStorVolumeReplicaSpec `json:"spec"` 48 Status CStorVolumeReplicaStatus `json:"status"` 49 VersionDetails VersionDetails `json:"versionDetails"` 50 } 51 52 // CStorVolumeReplicaSpec is the spec for a CStorVolumeReplica resource 53 type CStorVolumeReplicaSpec struct { 54 // TargetIP represents iscsi target IP through which replica cummunicates 55 // IO workloads and other volume operations like snapshot and resize requests 56 TargetIP string `json:"targetIP"` 57 //Represents the actual capacity of the underlying volume 58 Capacity string `json:"capacity"` 59 // ZvolWorkers represents number of threads that executes client IOs 60 ZvolWorkers string `json:"zvolWorkers"` 61 // ReplicaID is unique number to identify the replica 62 ReplicaID string `json:"replicaid"` 63 // Controls the compression algorithm used for this volumes 64 // examples: on|off|gzip|gzip-N|lz4|lzjb|zle 65 Compression string `json:"compression"` 66 // BlockSize is the logical block size in multiple of 512 bytes 67 // BlockSize specifies the block size of the volume. The blocksize 68 // cannot be changed once the volume has been written, so it should be 69 // set at volume creation time. The default blocksize for volumes is 4 Kbytes. 70 // Any power of 2 from 512 bytes to 128 Kbytes is valid. 71 BlockSize uint32 `json:"blockSize"` 72 } 73 74 // CStorVolumeReplicaPhase is to hold result of action. 75 type CStorVolumeReplicaPhase string 76 77 // Status written onto CStorVolumeReplica objects. 78 const ( 79 80 // CVRStatusEmpty describes CVR resource is created but not yet monitored by 81 // controller(i.e resource is just created) 82 CVRStatusEmpty CStorVolumeReplicaPhase = "" 83 84 // CVRStatusOnline describes volume replica is Healthy and data existing on 85 // the healthy replica is up to date 86 CVRStatusOnline CStorVolumeReplicaPhase = "Healthy" 87 88 // CVRStatusOffline describes volume replica is created but not yet connected 89 // to the target 90 CVRStatusOffline CStorVolumeReplicaPhase = "Offline" 91 92 // CVRStatusDegraded describes volume replica is connected to the target and 93 // rebuilding from other replicas is not yet started but ready for serving 94 // IO's 95 CVRStatusDegraded CStorVolumeReplicaPhase = "Degraded" 96 97 // CVRStatusNewReplicaDegraded describes replica is recreated (due to pool 98 // recreation[underlying disk got changed]/volume replica scaleup cases) and 99 // just connected to the target. Volume replica has to start reconstructing 100 // entier data from another available healthy replica. Until volume replica 101 // becomes healthy whatever data written to it is lost(NewReplica also not part 102 // of any quorum decision) 103 CVRStatusNewReplicaDegraded CStorVolumeReplicaPhase = "NewReplicaDegraded" 104 105 // CVRStatusRebuilding describes volume replica has missing data and it 106 // started rebuilding missing data from other replicas 107 CVRStatusRebuilding CStorVolumeReplicaPhase = "Rebuilding" 108 109 // CVRStatusReconstructingNewReplica describes volume replica is recreated 110 // and it started reconstructing entier data from other healthy replica 111 CVRStatusReconstructingNewReplica CStorVolumeReplicaPhase = "ReconstructingNewReplica" 112 113 // CVRStatusError describes either volume replica is not exist in cstor pool 114 CVRStatusError CStorVolumeReplicaPhase = "Error" 115 116 // CVRStatusDeletionFailed describes volume replica deletion is failed 117 CVRStatusDeletionFailed CStorVolumeReplicaPhase = "DeletionFailed" 118 119 // CVRStatusInvalid ensures invalid resource(currently not honoring) 120 CVRStatusInvalid CStorVolumeReplicaPhase = "Invalid" 121 122 // CVRStatusInit describes CVR resource is newly created but it is not yet 123 // created zfs dataset 124 CVRStatusInit CStorVolumeReplicaPhase = "Init" 125 126 // CVRStatusRecreate describes the volume replica is recreated due to pool 127 // recreation/scaleup 128 CVRStatusRecreate CStorVolumeReplicaPhase = "Recreate" 129 ) 130 131 // CStorVolumeReplicaStatus is for handling status of cvr. 132 type CStorVolumeReplicaStatus struct { 133 // CStorVolumeReplicaPhase is to holds different phases of replica 134 Phase CStorVolumeReplicaPhase `json:"phase"` 135 // CStorVolumeCapacityDetails represents capacity info of replica 136 Capacity CStorVolumeReplicaCapacityDetails `json:"capacity"` 137 // LastTransitionTime refers to the time when the phase changes 138 LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` 139 // The last updated time 140 LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"` 141 // A human readable message indicating details about the transition. 142 Message string `json:"message,omitempty"` 143 144 // Snapshots contains list of snapshots, and their properties, 145 // created on CVR 146 Snapshots map[string]CStorSnapshotInfo `json:"snapshots,omitempty"` 147 148 // PendingSnapshots contains list of pending snapshots that are not yet 149 // available on this replica 150 PendingSnapshots map[string]CStorSnapshotInfo `json:"pendingSnapshots,omitempty"` 151 } 152 153 // CStorSnapshotInfo represents the snapshot information related to particular 154 // snapshot 155 type CStorSnapshotInfo struct { 156 // LogicalReferenced describes the amount of space that is "logically" 157 // accessable by this snapshot. This logical space ignores the 158 // effect of the compression and copies properties, giving a quantity 159 // closer to the amount of data that application see. It also includes 160 // space consumed by metadata. 161 LogicalReferenced uint64 `json:"logicalReferenced"` 162 163 // TODO: We will revisit when we are working on rebuild estimates 164 165 // Used is the used bytes for given snapshot 166 // Used uint64 `json:"used"` 167 } 168 169 // CStorVolumeCapacityDetails represents capacity information releated to volume 170 // replica 171 type CStorVolumeReplicaCapacityDetails struct { 172 // The amount of space consumed by this volume replica and all its descendents 173 Total string `json:"total"` 174 // The amount of space that is "logically" accessible by this dataset. The logical 175 // space ignores the effect of the compression and copies properties, giving a 176 // quantity closer to the amount of data that applications see. However, it does 177 // include space consumed by metadata 178 Used string `json:"used"` 179 } 180 181 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 182 // +resource:path=cstorvolumereplicas 183 184 // CStorVolumeReplicaList is a list of CStorVolumeReplica resources 185 type CStorVolumeReplicaList struct { 186 metav1.TypeMeta `json:",inline"` 187 metav1.ListMeta `json:"metadata"` 188 189 Items []CStorVolumeReplica `json:"items"` 190 }