mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-01-18 02:39:30 +00:00
Merge pull request #136 from ceph/devel
Sync downstream devel with upstream devel
This commit is contained in:
commit
b01e71d0ef
2
.github/workflows/stale.yaml
vendored
2
.github/workflows/stale.yaml
vendored
@ -18,7 +18,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.repository == 'ceph/ceph-csi'
|
if: github.repository == 'ceph/ceph-csi'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v5
|
- uses: actions/stale@v6
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
days-before-issue-stale: 30
|
days-before-issue-stale: 30
|
||||||
|
@ -27,7 +27,7 @@ GOLANGCI_VERSION=v1.47.3
|
|||||||
|
|
||||||
# external snapshotter version
|
# external snapshotter version
|
||||||
# Refer: https://github.com/kubernetes-csi/external-snapshotter/releases
|
# Refer: https://github.com/kubernetes-csi/external-snapshotter/releases
|
||||||
SNAPSHOT_VERSION=v6.0.1
|
SNAPSHOT_VERSION=v6.1.0
|
||||||
|
|
||||||
# "go test" configuration
|
# "go test" configuration
|
||||||
# set to stdout or html to enable coverage reporting, disabled by default
|
# set to stdout or html to enable coverage reporting, disabled by default
|
||||||
@ -49,9 +49,9 @@ ROOK_CEPH_CLUSTER_IMAGE=quay.io/ceph/ceph:v17
|
|||||||
|
|
||||||
# CSI sidecar version
|
# CSI sidecar version
|
||||||
CSI_ATTACHER_VERSION=v4.0.0
|
CSI_ATTACHER_VERSION=v4.0.0
|
||||||
CSI_SNAPSHOTTER_VERSION=v6.0.1
|
CSI_SNAPSHOTTER_VERSION=v6.1.0
|
||||||
CSI_RESIZER_VERSION=v1.6.0
|
CSI_RESIZER_VERSION=v1.6.0
|
||||||
CSI_PROVISIONER_VERSION=v3.2.1
|
CSI_PROVISIONER_VERSION=v3.3.0
|
||||||
CSI_NODE_DRIVER_REGISTRAR_VERSION=v2.5.1
|
CSI_NODE_DRIVER_REGISTRAR_VERSION=v2.5.1
|
||||||
|
|
||||||
# e2e settings
|
# e2e settings
|
||||||
|
@ -112,7 +112,7 @@ charts and their default values.
|
|||||||
| `provisioner.enableHostNetwork` | Specifies whether hostNetwork is enabled for provisioner pod. | `false` |
|
| `provisioner.enableHostNetwork` | Specifies whether hostNetwork is enabled for provisioner pod. | `false` |
|
||||||
| `provisioner.profiling.enabled` | Specifies whether profiling should be enabled | `false` |
|
| `provisioner.profiling.enabled` | Specifies whether profiling should be enabled | `false` |
|
||||||
| `provisioner.provisioner.image.repository` | Specifies the csi-provisioner image repository URL | `registry.k8s.io/sig-storage/csi-provisioner` |
|
| `provisioner.provisioner.image.repository` | Specifies the csi-provisioner image repository URL | `registry.k8s.io/sig-storage/csi-provisioner` |
|
||||||
| `provisioner.provisioner.image.tag` | Specifies image tag | `v3.2.1` |
|
| `provisioner.provisioner.image.tag` | Specifies image tag | `v3.3.0` |
|
||||||
| `provisioner.provisioner.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
| `provisioner.provisioner.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
||||||
| `provisioner.resizer.image.repository` | Specifies the csi-resizer image repository URL | `registry.k8s.io/sig-storage/csi-resizer` |
|
| `provisioner.resizer.image.repository` | Specifies the csi-resizer image repository URL | `registry.k8s.io/sig-storage/csi-resizer` |
|
||||||
| `provisioner.resizer.image.tag` | Specifies image tag | `v1.6.0` |
|
| `provisioner.resizer.image.tag` | Specifies image tag | `v1.6.0` |
|
||||||
@ -120,7 +120,7 @@ charts and their default values.
|
|||||||
| `provisioner.resizer.name` | Specifies the name of csi-resizer sidecar | `resizer` |
|
| `provisioner.resizer.name` | Specifies the name of csi-resizer sidecar | `resizer` |
|
||||||
| `provisioner.resizer.enabled` | Specifies whether resizer sidecar is enabled | `true` |
|
| `provisioner.resizer.enabled` | Specifies whether resizer sidecar is enabled | `true` |
|
||||||
| `provisioner.snapshotter.image.repository` | Specifies the csi-snapshotter image repository URL | `registry.k8s.io/sig-storage/csi-snapshotter` |
|
| `provisioner.snapshotter.image.repository` | Specifies the csi-snapshotter image repository URL | `registry.k8s.io/sig-storage/csi-snapshotter` |
|
||||||
| `provisioner.snapshotter.image.tag` | Specifies image tag | `v6.0.1` |
|
| `provisioner.snapshotter.image.tag` | Specifies image tag | `v6.1.0` |
|
||||||
| `provisioner.snapshotter.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
| `provisioner.snapshotter.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
||||||
| `provisioner.nodeSelector` | Specifies the node selector for provisioner deployment | `{}` |
|
| `provisioner.nodeSelector` | Specifies the node selector for provisioner deployment | `{}` |
|
||||||
| `provisioner.tolerations` | Specifies the tolerations for provisioner deployment | `{}` |
|
| `provisioner.tolerations` | Specifies the tolerations for provisioner deployment | `{}` |
|
||||||
|
@ -171,7 +171,7 @@ provisioner:
|
|||||||
provisioner:
|
provisioner:
|
||||||
image:
|
image:
|
||||||
repository: registry.k8s.io/sig-storage/csi-provisioner
|
repository: registry.k8s.io/sig-storage/csi-provisioner
|
||||||
tag: v3.2.1
|
tag: v3.3.0
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
resources: {}
|
resources: {}
|
||||||
|
|
||||||
@ -190,7 +190,7 @@ provisioner:
|
|||||||
snapshotter:
|
snapshotter:
|
||||||
image:
|
image:
|
||||||
repository: registry.k8s.io/sig-storage/csi-snapshotter
|
repository: registry.k8s.io/sig-storage/csi-snapshotter
|
||||||
tag: v6.0.1
|
tag: v6.1.0
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
resources: {}
|
resources: {}
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ charts and their default values.
|
|||||||
| `provisioner.enableHostNetwork` | Specifies whether hostNetwork is enabled for provisioner pod. | `false` |
|
| `provisioner.enableHostNetwork` | Specifies whether hostNetwork is enabled for provisioner pod. | `false` |
|
||||||
| `provisioner.profiling.enabled` | Specifies whether profiling should be enabled | `false` |
|
| `provisioner.profiling.enabled` | Specifies whether profiling should be enabled | `false` |
|
||||||
| `provisioner.provisioner.image.repository` | Specifies the csi-provisioner image repository URL | `registry.k8s.io/sig-storage/csi-provisioner` |
|
| `provisioner.provisioner.image.repository` | Specifies the csi-provisioner image repository URL | `registry.k8s.io/sig-storage/csi-provisioner` |
|
||||||
| `provisioner.provisioner.image.tag` | Specifies image tag | `v3.2.1` |
|
| `provisioner.provisioner.image.tag` | Specifies image tag | `v3.3.0` |
|
||||||
| `provisioner.provisioner.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
| `provisioner.provisioner.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
||||||
| `provisioner.attacher.image.repository` | Specifies the csi-attacher image repository URL | `registry.k8s.io/sig-storage/csi-attacher` |
|
| `provisioner.attacher.image.repository` | Specifies the csi-attacher image repository URL | `registry.k8s.io/sig-storage/csi-attacher` |
|
||||||
| `provisioner.attacher.image.tag` | Specifies image tag | `v4.0.0` |
|
| `provisioner.attacher.image.tag` | Specifies image tag | `v4.0.0` |
|
||||||
@ -131,7 +131,7 @@ charts and their default values.
|
|||||||
| `provisioner.resizer.name` | Specifies the name of csi-resizer sidecar | `resizer` |
|
| `provisioner.resizer.name` | Specifies the name of csi-resizer sidecar | `resizer` |
|
||||||
| `provisioner.resizer.enabled` | Specifies whether resizer sidecar is enabled | `true` |
|
| `provisioner.resizer.enabled` | Specifies whether resizer sidecar is enabled | `true` |
|
||||||
| `provisioner.snapshotter.image.repository` | Specifies the csi-snapshotter image repository URL | `registry.k8s.io/sig-storage/csi-snapshotter` |
|
| `provisioner.snapshotter.image.repository` | Specifies the csi-snapshotter image repository URL | `registry.k8s.io/sig-storage/csi-snapshotter` |
|
||||||
| `provisioner.snapshotter.image.tag` | Specifies image tag | `v6.0.1` |
|
| `provisioner.snapshotter.image.tag` | Specifies image tag | `v6.1.0` |
|
||||||
| `provisioner.snapshotter.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
| `provisioner.snapshotter.image.pullPolicy` | Specifies pull policy | `IfNotPresent` |
|
||||||
| `provisioner.nodeSelector` | Specifies the node selector for provisioner deployment | `{}` |
|
| `provisioner.nodeSelector` | Specifies the node selector for provisioner deployment | `{}` |
|
||||||
| `provisioner.tolerations` | Specifies the tolerations for provisioner deployment | `{}` |
|
| `provisioner.tolerations` | Specifies the tolerations for provisioner deployment | `{}` |
|
||||||
|
@ -204,7 +204,7 @@ provisioner:
|
|||||||
provisioner:
|
provisioner:
|
||||||
image:
|
image:
|
||||||
repository: gcr.io/k8s-staging-sig-storage/csi-provisioner
|
repository: gcr.io/k8s-staging-sig-storage/csi-provisioner
|
||||||
tag: v3.2.1
|
tag: v3.3.0
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
resources: {}
|
resources: {}
|
||||||
|
|
||||||
@ -232,7 +232,7 @@ provisioner:
|
|||||||
snapshotter:
|
snapshotter:
|
||||||
image:
|
image:
|
||||||
repository: registry.k8s.io/sig-storage/csi-snapshotter
|
repository: registry.k8s.io/sig-storage/csi-snapshotter
|
||||||
tag: v6.0.1
|
tag: v6.1.0
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
resources: {}
|
resources: {}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ spec:
|
|||||||
priorityClassName: system-cluster-critical
|
priorityClassName: system-cluster-critical
|
||||||
containers:
|
containers:
|
||||||
- name: csi-provisioner
|
- name: csi-provisioner
|
||||||
image: registry.k8s.io/sig-storage/csi-provisioner:v3.2.1
|
image: registry.k8s.io/sig-storage/csi-provisioner:v3.3.0
|
||||||
args:
|
args:
|
||||||
- "--csi-address=$(ADDRESS)"
|
- "--csi-address=$(ADDRESS)"
|
||||||
- "--v=1"
|
- "--v=1"
|
||||||
@ -79,7 +79,7 @@ spec:
|
|||||||
- name: socket-dir
|
- name: socket-dir
|
||||||
mountPath: /csi
|
mountPath: /csi
|
||||||
- name: csi-snapshotter
|
- name: csi-snapshotter
|
||||||
image: registry.k8s.io/sig-storage/csi-snapshotter:v6.0.1
|
image: registry.k8s.io/sig-storage/csi-snapshotter:v6.1.0
|
||||||
args:
|
args:
|
||||||
- "--csi-address=$(ADDRESS)"
|
- "--csi-address=$(ADDRESS)"
|
||||||
- "--v=1"
|
- "--v=1"
|
||||||
|
@ -40,7 +40,7 @@ spec:
|
|||||||
topologyKey: "kubernetes.io/hostname"
|
topologyKey: "kubernetes.io/hostname"
|
||||||
containers:
|
containers:
|
||||||
- name: csi-provisioner
|
- name: csi-provisioner
|
||||||
image: registry.k8s.io/sig-storage/csi-provisioner:v3.2.1
|
image: registry.k8s.io/sig-storage/csi-provisioner:v3.3.0
|
||||||
args:
|
args:
|
||||||
- "--csi-address=$(ADDRESS)"
|
- "--csi-address=$(ADDRESS)"
|
||||||
- "--v=1"
|
- "--v=1"
|
||||||
@ -73,7 +73,7 @@ spec:
|
|||||||
- name: socket-dir
|
- name: socket-dir
|
||||||
mountPath: /csi
|
mountPath: /csi
|
||||||
- name: csi-snapshotter
|
- name: csi-snapshotter
|
||||||
image: registry.k8s.io/sig-storage/csi-snapshotter:v6.0.1
|
image: registry.k8s.io/sig-storage/csi-snapshotter:v6.1.0
|
||||||
args:
|
args:
|
||||||
- "--csi-address=$(ADDRESS)"
|
- "--csi-address=$(ADDRESS)"
|
||||||
- "--v=1"
|
- "--v=1"
|
||||||
|
@ -47,7 +47,7 @@ spec:
|
|||||||
priorityClassName: system-cluster-critical
|
priorityClassName: system-cluster-critical
|
||||||
containers:
|
containers:
|
||||||
- name: csi-provisioner
|
- name: csi-provisioner
|
||||||
image: k8s.gcr.io/sig-storage/csi-provisioner:v3.2.1
|
image: registry.k8s.io/sig-storage/csi-provisioner:v3.3.0
|
||||||
args:
|
args:
|
||||||
- "--csi-address=$(ADDRESS)"
|
- "--csi-address=$(ADDRESS)"
|
||||||
- "--v=1"
|
- "--v=1"
|
||||||
@ -69,7 +69,7 @@ spec:
|
|||||||
- name: socket-dir
|
- name: socket-dir
|
||||||
mountPath: /csi
|
mountPath: /csi
|
||||||
- name: csi-snapshotter
|
- name: csi-snapshotter
|
||||||
image: registry.k8s.io/sig-storage/csi-snapshotter:v6.0.1
|
image: registry.k8s.io/sig-storage/csi-snapshotter:v6.1.0
|
||||||
args:
|
args:
|
||||||
- "--csi-address=$(ADDRESS)"
|
- "--csi-address=$(ADDRESS)"
|
||||||
- "--v=1"
|
- "--v=1"
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ceph/ceph-csi/internal/util"
|
"github.com/ceph/ceph-csi/internal/util"
|
||||||
@ -70,18 +69,6 @@ const (
|
|||||||
schedulingStartTimeKey = "schedulingStartTime"
|
schedulingStartTimeKey = "schedulingStartTime"
|
||||||
)
|
)
|
||||||
|
|
||||||
type operation string
|
|
||||||
|
|
||||||
var (
|
|
||||||
// pool+"/"+key to check dummy image is created.
|
|
||||||
dummyImageCreated operation = "dummyImageCreated"
|
|
||||||
// Read write lock to ensure that only one operation is happening at a time.
|
|
||||||
operationLock = sync.Map{}
|
|
||||||
|
|
||||||
// Lock to serialize operations on the dummy image to tickle RBD snapshot schedule.
|
|
||||||
dummyImageOpsLock sync.Mutex
|
|
||||||
)
|
|
||||||
|
|
||||||
// ReplicationServer struct of rbd CSI driver with supported methods of Replication
|
// ReplicationServer struct of rbd CSI driver with supported methods of Replication
|
||||||
// controller server spec.
|
// controller server spec.
|
||||||
type ReplicationServer struct {
|
type ReplicationServer struct {
|
||||||
@ -269,11 +256,6 @@ func (rs *ReplicationServer) EnableVolumeReplication(ctx context.Context,
|
|||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
err = createDummyImage(ctx, rbdVol)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "failed to create dummy image %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
if mirroringInfo.State != librbd.MirrorImageEnabled {
|
if mirroringInfo.State != librbd.MirrorImageEnabled {
|
||||||
err = rbdVol.enableImageMirroring(mirroringMode)
|
err = rbdVol.enableImageMirroring(mirroringMode)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -286,117 +268,6 @@ func (rs *ReplicationServer) EnableVolumeReplication(ctx context.Context,
|
|||||||
return &replication.EnableVolumeReplicationResponse{}, nil
|
return &replication.EnableVolumeReplicationResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getDummyImageName returns the csi-vol-dummy+cluster FSID as the image name.
|
|
||||||
// each cluster should have a unique dummy image created. choosing the cluster
|
|
||||||
// FSID for the same reason.
|
|
||||||
func getDummyImageName(conn *util.ClusterConnection) (string, error) {
|
|
||||||
id, err := conn.GetFSID()
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Sprintf("csi-vol-dummy-%s", id), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// getOperationName returns the operation name for the given operation type
|
|
||||||
// combined with the pool name.
|
|
||||||
func getOperationName(poolName string, optName operation) string {
|
|
||||||
return fmt.Sprintf("%s/%s", poolName, optName)
|
|
||||||
}
|
|
||||||
|
|
||||||
// createDummyImage creates a dummy image as a workaround for the rbd
|
|
||||||
// scheduling problem.
|
|
||||||
func createDummyImage(ctx context.Context, rbdVol *rbdVolume) error {
|
|
||||||
var err error
|
|
||||||
var imgName string
|
|
||||||
|
|
||||||
dummyImageOpsLock.Lock()
|
|
||||||
defer dummyImageOpsLock.Unlock()
|
|
||||||
optName := getOperationName(rbdVol.Pool, dummyImageCreated)
|
|
||||||
if _, ok := operationLock.Load(optName); !ok {
|
|
||||||
// create a dummy image
|
|
||||||
imgName, err = getDummyImageName(rbdVol.conn)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
dummyVol := *rbdVol
|
|
||||||
dummyVol.RbdImageName = imgName
|
|
||||||
// dummyVol holds rbdVol details, reset ImageID or else dummy image cannot be
|
|
||||||
// deleted from trash during repair operation.
|
|
||||||
dummyVol.ImageID = ""
|
|
||||||
f := []string{
|
|
||||||
librbd.FeatureNameLayering,
|
|
||||||
librbd.FeatureNameObjectMap,
|
|
||||||
librbd.FeatureNameExclusiveLock,
|
|
||||||
librbd.FeatureNameFastDiff,
|
|
||||||
}
|
|
||||||
features := librbd.FeatureSetFromNames(f)
|
|
||||||
dummyVol.ImageFeatureSet = features
|
|
||||||
// create 1MiB dummy image. 1MiB=1048576 bytes
|
|
||||||
dummyVol.VolSize = 1048576
|
|
||||||
err = createImage(ctx, &dummyVol, dummyVol.conn.Creds)
|
|
||||||
if err != nil {
|
|
||||||
if strings.Contains(err.Error(), "File exists") {
|
|
||||||
err = repairDummyImage(ctx, &dummyVol)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
operationLock.Store(optName, true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// repairDummyImage deletes and recreates the dummy image.
|
|
||||||
func repairDummyImage(ctx context.Context, dummyVol *rbdVolume) error {
|
|
||||||
// instead of checking the images features and than adding missing image
|
|
||||||
// features, updating the image size to 1Mib. We will delete the image
|
|
||||||
// and recreate it.
|
|
||||||
|
|
||||||
// deleting and recreating the dummy image will not impact anything as its
|
|
||||||
// a workaround to fix the scheduling problem.
|
|
||||||
err := dummyVol.deleteImage(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return createImage(ctx, dummyVol, dummyVol.conn.Creds)
|
|
||||||
}
|
|
||||||
|
|
||||||
// tickleMirroringOnDummyImage disables and reenables mirroring on the dummy image, and sets a
|
|
||||||
// schedule of a minute for the dummy image, to force a schedule refresh for other mirrored images
|
|
||||||
// within a minute.
|
|
||||||
func tickleMirroringOnDummyImage(rbdVol *rbdVolume, mirroringMode librbd.ImageMirrorMode) error {
|
|
||||||
imgName, err := getDummyImageName(rbdVol.conn)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
dummyVol := *rbdVol
|
|
||||||
dummyVol.RbdImageName = imgName
|
|
||||||
|
|
||||||
dummyImageOpsLock.Lock()
|
|
||||||
defer dummyImageOpsLock.Unlock()
|
|
||||||
err = dummyVol.disableImageMirroring(false)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = dummyVol.enableImageMirroring(mirroringMode)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if mirroringMode == librbd.ImageMirrorModeSnapshot {
|
|
||||||
err = dummyVol.addSnapshotScheduling(admin.Interval("1m"), admin.NoStartTime)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DisableVolumeReplication extracts the RBD volume information from the
|
// DisableVolumeReplication extracts the RBD volume information from the
|
||||||
// volumeID, If the image is present and the mirroring is enabled on the RBD
|
// volumeID, If the image is present and the mirroring is enabled on the RBD
|
||||||
// image it will disable the mirroring.
|
// image it will disable the mirroring.
|
||||||
@ -588,12 +459,6 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var mode librbd.ImageMirrorMode
|
|
||||||
mode, err = getMirroringMode(ctx, req.GetParameters())
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get mirroring mode %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
interval, startTime := getSchedulingDetails(req.GetParameters())
|
interval, startTime := getSchedulingDetails(req.GetParameters())
|
||||||
if interval != admin.NoInterval {
|
if interval != admin.NoInterval {
|
||||||
err = rbdVol.addSnapshotScheduling(interval, startTime)
|
err = rbdVol.addSnapshotScheduling(interval, startTime)
|
||||||
@ -608,12 +473,6 @@ func (rs *ReplicationServer) PromoteVolume(ctx context.Context,
|
|||||||
rbdVol)
|
rbdVol)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.DebugLog(ctx, "attempting to tickle dummy image for restarting RBD schedules")
|
|
||||||
err = tickleMirroringOnDummyImage(rbdVol, mode)
|
|
||||||
if err != nil {
|
|
||||||
return nil, status.Errorf(codes.Internal, "failed to enable mirroring on dummy image %s", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
return &replication.PromoteVolumeResponse{}, nil
|
return &replication.PromoteVolumeResponse{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user