You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

149 lines
5.5 KiB

//
// DISCLAIMER
//
// Copyright 2017 ArangoDB GmbH, Cologne, Germany
//
// 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.
//
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
// Author Lars Maier
//
package driver
import (
"context"
"time"
)
// BackupMeta provides meta data of a backup
type BackupMeta struct {
ID BackupID `json:"id,omitempty"`
Version string `json:"version,omitempty"`
DateTime time.Time `json:"datetime,omitempty"`
NumberOfFiles uint `json:"nrFiles,omitempty"`
NumberOfDBServers uint `json:"nrDBServers,omitempty"`
SizeInBytes uint64 `json:"sizeInBytes,omitempty"`
PotentiallyInconsistent bool `json:"potentiallyInconsistent,omitempty"`
Available bool `json:"available,omitempty"`
NumberOfPiecesPresent uint `json:"nrPiecesPresent,omitempty"`
Keys []BackupMetaSha256 `json:"keys,omitempty"`
}
// BackupMetaSha256 backup sha details
type BackupMetaSha256 struct {
SHA256 string `json:"sha256"`
}
// BackupRestoreOptions provides options for Restore
type BackupRestoreOptions struct {
// do not version check when doing a restore (expert only)
IgnoreVersion bool `json:"ignoreVersion,omitempty"`
}
// BackupListOptions provides options for List
type BackupListOptions struct {
// Only receive meta data about a specific id
ID BackupID `json:"id,omitempty"`
}
// BackupCreateOptions provides options for Create
type BackupCreateOptions struct {
Label string `json:"label,omitempty"`
AllowInconsistent bool `json:"allowInconsistent,omitempty"`
Timeout time.Duration `json:"timeout,omitempty"`
}
// BackupTransferStatus represents all possible states a transfer job can be in
type BackupTransferStatus string
const (
TransferAcknowledged BackupTransferStatus = "ACK"
TransferStarted BackupTransferStatus = "STARTED"
TransferCompleted BackupTransferStatus = "COMPLETED"
TransferFailed BackupTransferStatus = "FAILED"
TransferCancelled BackupTransferStatus = "CANCELLED"
)
// BackupTransferReport provides progress information of a backup transfer job for a single dbserver
type BackupTransferReport struct {
Status BackupTransferStatus `json:"Status,omitempty"`
Error int `json:"Error,omitempty"`
ErrorMessage string `json:"ErrorMessage,omitempty"`
Progress struct {
Total int `json:"Total,omitempty"`
Done int `json:"Done,omitempty"`
Timestamp string `json:"Timestamp,omitempty"`
} `json:"Progress,omitempty"`
}
// BackupTransferProgressReport provides progress information for a backup transfer job
type BackupTransferProgressReport struct {
BackupID BackupID `json:"BackupID,omitempty"`
Cancelled bool `json:"Cancelled,omitempty"`
Timestamp string `json:"Timestamp,omitempty"`
DBServers map[string]BackupTransferReport `json:"DBServers,omitempty"`
}
// BackupTransferJobID represents a Transfer (upload/download) job
type BackupTransferJobID string
// BackupID identifies a backup
type BackupID string
// ClientAdminBackup provides access to the Backup API via the Client interface
type ClientAdminBackup interface {
Backup() ClientBackup
}
// BackupCreateResponse contains information about a newly created backup
type BackupCreateResponse struct {
NumberOfFiles uint
NumberOfDBServers uint
SizeInBytes uint64
PotentiallyInconsistent bool
CreationTime time.Time
}
// ClientBackup provides access to server/cluster backup functions of an arangodb database server
// or an entire cluster of arangodb servers.
type ClientBackup interface {
// Create creates a new backup and returns its id
Create(ctx context.Context, opt *BackupCreateOptions) (BackupID, BackupCreateResponse, error)
// Delete deletes the backup with given id
Delete(ctx context.Context, id BackupID) error
// Restore restores the backup with given id
Restore(ctx context.Context, id BackupID, opt *BackupRestoreOptions) error
// List returns meta data about some/all backups available
List(ctx context.Context, opt *BackupListOptions) (map[BackupID]BackupMeta, error)
// only enterprise version
// Upload triggers an upload to the remote repository of backup with id using the given config
// and returns the job id.
Upload(ctx context.Context, id BackupID, remoteRepository string, config interface{}) (BackupTransferJobID, error)
// Download triggers an download to the remote repository of backup with id using the given config
// and returns the job id.
Download(ctx context.Context, id BackupID, remoteRepository string, config interface{}) (BackupTransferJobID, error)
// Progress returns the progress state of the given Transfer job
Progress(ctx context.Context, job BackupTransferJobID) (BackupTransferProgressReport, error)
// Abort aborts the Transfer job if possible
Abort(ctx context.Context, job BackupTransferJobID) error
}