multi dataset
This commit is contained in:
@@ -38,7 +38,13 @@ func New(config *Config) *Client {
|
||||
// It automatically detects if this is a full or incremental backup:
|
||||
// - If no bookmark exists, does a full backup
|
||||
// - If bookmark exists, does an incremental backup from the bookmark
|
||||
func (c *Client) CreateAndSend() (*SnapshotResult, error) {
|
||||
// If targetDataset is provided, it overrides the configured dataset.
|
||||
func (c *Client) CreateAndSend(targetDataset string) (*SnapshotResult, error) {
|
||||
// Use provided dataset or fall back to config
|
||||
if targetDataset == "" {
|
||||
targetDataset = c.config.LocalDataset
|
||||
}
|
||||
|
||||
// Check for existing bookmark to determine backup type
|
||||
lastBookmark, err := c.GetLastBookmark()
|
||||
if err != nil {
|
||||
@@ -46,7 +52,7 @@ func (c *Client) CreateAndSend() (*SnapshotResult, error) {
|
||||
}
|
||||
|
||||
// Create new snapshot
|
||||
snapshot, err := c.CreateSnapshot()
|
||||
snapshot, err := c.CreateSnapshot(targetDataset)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create snapshot: %v", err)
|
||||
}
|
||||
@@ -55,13 +61,13 @@ func (c *Client) CreateAndSend() (*SnapshotResult, error) {
|
||||
if isFullBackup {
|
||||
fmt.Println("→ No previous backup found, doing FULL backup...")
|
||||
// Send as full (no base)
|
||||
if err := c.SendIncrementalHTTP(snapshot, ""); err != nil {
|
||||
if err := c.SendIncrementalHTTP(snapshot, targetDataset, ""); err != nil {
|
||||
return nil, fmt.Errorf("failed to send snapshot: %v", err)
|
||||
}
|
||||
} else {
|
||||
fmt.Printf("→ Found previous backup, doing INCREMENTAL from %s...\n", lastBookmark)
|
||||
// Send as incremental from bookmark
|
||||
if err := c.SendIncrementalHTTP(snapshot, lastBookmark); err != nil {
|
||||
if err := c.SendIncrementalHTTP(snapshot, targetDataset, lastBookmark); err != nil {
|
||||
return nil, fmt.Errorf("failed to send incremental: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -78,8 +84,8 @@ func (c *Client) CreateAndSend() (*SnapshotResult, error) {
|
||||
}
|
||||
|
||||
// CreateSnapshot creates a local ZFS snapshot of the configured dataset.
|
||||
func (c *Client) CreateSnapshot() (*zfs.Dataset, error) {
|
||||
ds, err := zfs.GetDataset(c.config.LocalDataset)
|
||||
func (c *Client) CreateSnapshot(dataset string) (*zfs.Dataset, error) {
|
||||
ds, err := zfs.GetDataset(dataset)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get dataset: %v", err)
|
||||
}
|
||||
@@ -105,7 +111,8 @@ func (c *Client) GetSnapshotSize(snapshot *zfs.Dataset) int64 {
|
||||
|
||||
// SendIncrementalHTTP sends a snapshot to the server via HTTP.
|
||||
// The server then handles storage (S3 or local ZFS).
|
||||
func (c *Client) SendIncrementalHTTP(snapshot *zfs.Dataset, base string) error {
|
||||
// datasetName should be the ZFS dataset being backed up (e.g., "tank/data")
|
||||
func (c *Client) SendIncrementalHTTP(snapshot *zfs.Dataset, datasetName, base string) error {
|
||||
estimatedSize := c.GetSnapshotSize(snapshot)
|
||||
|
||||
// Determine if this is incremental or full
|
||||
@@ -115,7 +122,7 @@ func (c *Client) SendIncrementalHTTP(snapshot *zfs.Dataset, base string) error {
|
||||
uploadReq := map[string]interface{}{
|
||||
"client_id": c.config.ClientID,
|
||||
"api_key": c.config.APIKey,
|
||||
"dataset_name": c.config.LocalDataset,
|
||||
"dataset_name": datasetName,
|
||||
"timestamp": time.Now().Format(time.RFC3339),
|
||||
"compressed": c.config.Compress,
|
||||
"estimated_size": estimatedSize,
|
||||
|
||||
@@ -72,6 +72,6 @@ func (c *Client) GetLastSnapshot() (*zfs.Dataset, error) {
|
||||
}
|
||||
|
||||
// SendIncremental is kept for API compatibility - now just calls HTTP version
|
||||
func (c *Client) SendIncremental(snapshot *zfs.Dataset, base string) error {
|
||||
return c.SendIncrementalHTTP(snapshot, base)
|
||||
func (c *Client) SendIncremental(snapshot *zfs.Dataset, datasetName, base string) error {
|
||||
return c.SendIncrementalHTTP(snapshot, datasetName, base)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user