2024-04-16 14:26:06 +03:00
package disks
import (
"context"
2026-08-28 16:36:41 +03:00
"encoding/json"
2024-04-16 14:26:06 +03:00
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ReplicationStartRequest struct to starts replication between two chosen disks
type ReplicationStartRequest struct {
// Id of the disk to replicate. Primary disk in replication
// Required: true
DiskID uint64 ` url:"diskId" json:"diskId" validate:"required" `
// ID of target disk. Secondary disk in replication
// Required: true
TargetDiskID uint64 ` url:"targetDiskId" json:"targetDiskId" validate:"required" `
}
2026-08-28 16:36:41 +03:00
type wrapperReplicationStartRequest struct {
ReplicationStartRequest
AsyncMode bool ` url:"async_mode" json:"async_mode" `
}
2024-04-16 14:26:06 +03:00
// ReplicationStart starts replication between two chosen disks. It's required for both disks to have same size to avoid replication conflicts
// Note: Source disk's SEP and target SEP supported only of TATLIN type.
func ( d Disks ) ReplicationStart ( ctx context . Context , req ReplicationStartRequest ) ( bool , error ) {
err := validators . ValidateRequest ( req )
if err != nil {
return false , validators . ValidationErrors ( validators . GetErrors ( err ) )
}
url := "/cloudapi/disks/replicationStart"
2026-08-28 16:36:41 +03:00
wrappedReq := wrapperReplicationStartRequest {
ReplicationStartRequest : req ,
AsyncMode : false ,
}
res , err := d . client . DecortApiCall ( ctx , http . MethodPost , url , wrappedReq )
2024-04-16 14:26:06 +03:00
if err != nil {
return false , err
}
result , err := strconv . ParseBool ( string ( res ) )
if err != nil {
return false , err
}
return result , nil
}
2026-08-28 16:36:41 +03:00
// ReplicationStartAsync starts replication between two chosen disks in async mode. It's required for both disks to have same size to avoid replication conflicts
// Note: Source disk's SEP and target SEP supported only of TATLIN type.
func ( d Disks ) ReplicationStartAsync ( ctx context . Context , req ReplicationStartRequest ) ( string , error ) {
err := validators . ValidateRequest ( req )
if err != nil {
return "" , validators . ValidationErrors ( validators . GetErrors ( err ) )
}
url := "/cloudapi/disks/replicationStart"
wrappedReq := wrapperReplicationStartRequest {
ReplicationStartRequest : req ,
AsyncMode : true ,
}
res , err := d . client . DecortApiCall ( ctx , http . MethodPost , url , wrappedReq )
if err != nil {
return "" , err
}
var result string
if err := json . Unmarshal ( res , & result ) ; err != nil {
return "" , err
}
return result , nil
}