mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-14 02:43:36 +00:00
rbd: read clusterID and PoolID from mapping
Whenever Ceph-CSI receives a CSI/Replication request it will first decode the volumeHandle and try to get the required OMAP details if it is not able to retrieve, receives a `Not Found` error message and Ceph-CSI will check for the clusterID mapping. If the old volumeID `0001-00013-site1-storage-0000000000000001 -b0285c97-a0ce-11eb-8c66-0242ac110002` contains the `site1-storage` as the clusterID, now Ceph-CSI will look for the corresponding clusterID `site2-storage` from the above configmap. If the clusterID mapping is found now Ceph-CSI will look for the poolID mapping ie mapping between `1` and `2`. Example:- pool with name exists on both the clusters with different ID's Replicapool with ID `1` on site1 and Replicapool with ID `2` on site2. After getting the required mapping Ceph-CSI has the required information to get more details from the rados OMAP. If we have multiple clusterID mapping it will loop through all the mapping and checks the corresponding pool to get the OMAP data. If the clusterID mapping does not exist Ceph-CSI will return an `Not Found` error message to the caller. Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
committed by
mergify[bot]
parent
ac11d71e19
commit
92ad2ceec9
@ -137,3 +137,55 @@ func TestValidateImageFeatures(t *testing.T) {
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetMappedID(t *testing.T) {
|
||||
t.Parallel()
|
||||
type args struct {
|
||||
key string
|
||||
value string
|
||||
id string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "test for matching key",
|
||||
args: args{
|
||||
key: "cluster1",
|
||||
value: "cluster2",
|
||||
id: "cluster1",
|
||||
},
|
||||
expected: "cluster2",
|
||||
},
|
||||
{
|
||||
name: "test for matching value",
|
||||
args: args{
|
||||
key: "cluster1",
|
||||
value: "cluster2",
|
||||
id: "cluster2",
|
||||
},
|
||||
expected: "cluster1",
|
||||
},
|
||||
{
|
||||
name: "test for invalid match",
|
||||
args: args{
|
||||
key: "cluster1",
|
||||
value: "cluster2",
|
||||
id: "cluster3",
|
||||
},
|
||||
expected: "",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
val := getMappedID(tt.args.key, tt.args.value, tt.args.id)
|
||||
if val != tt.expected {
|
||||
t.Errorf("getMappedID() got = %v, expected %v", val, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user