Skip to main content
Wings supports live server transfers between nodes, allowing servers to be migrated without manual intervention.

Transfer Architecture

Transfer Structure

Source: server/transfer/transfer.go:43-56

Transfer States

Source: server/transfer/transfer.go:23-40

Transfer Process

Initiation (Source Node)

Transfers are initiated via API:
Source: router/router.go:85

Transfer Instance Creation

Source: server/transfer/transfer.go:59-69

Archive Creation

Archive Structure

Source: server/transfer/archive.go:29-42

Getting Archive Instance

Source: server/transfer/archive.go:14-27

Streaming Archive

Features:
  • Streams files directly to writer
  • No intermediate disk storage required
  • Progress tracking built-in
  • Context cancellation support
Source: server/transfer/archive.go:45-47

Pushing to Target Node

Push Method

Source: server/transfer/source.go:19-166

Progress Reporting

Progress is sent to websocket every 5 seconds:
Example Output:
Source: server/transfer/source.go:37-48

Transfer Authentication

Token Header

Transfers use bearer token authentication:
Token Format: Provided by Panel during transfer initialization Source: server/transfer/source.go:58

Multipart Form

Archive sent as multipart form data:
Fields:
  • archive - The tar.gz file
  • checksum - SHA256 hash of archive
Source: server/transfer/source.go:61-114

Receiving Transfers (Target Node)

Endpoint

Target node receives:
  • Multipart form with archive file
  • SHA256 checksum for validation
  • Server configuration from Panel
Source: router/router.go:55

Transfer Cancellation

Cancel Method

Source: server/transfer/transfer.go:77-92

API Endpoint

Cancels an in-progress transfer from source node. Source: router/router.go:86

Deleting Transfer (Target)

Cancels/removes transfer on target node. Source: router/router.go:64

Status Management

Getting Status

Source: server/transfer/transfer.go:95-97

Setting Status

Websocket Event: transfer status Source: server/transfer/transfer.go:100-106

Transfer Messages

Sending Messages

Example Message:
Source: server/transfer/transfer.go:109-114

Error Logging

Source: server/transfer/transfer.go:117-120

Logging

Transfer Logger

Log Fields:
  • server - Server UUID
  • subsystem - “transfer”
Source: server/transfer/transfer.go:123-129

Transfer Context

Context Management

Transfer context:
  • Cancellable via Cancel() method
  • Inherits from server context
  • Cancels all ongoing operations when triggered
Source: server/transfer/transfer.go:72-74

Websocket Events

Status Events

Event Name: transfer status Payload: Status string (pending, processing, completed, etc.)

Log Events

Event Name: transfer logs Payload: Formatted log message with timestamp

Server State During Transfer

Transfer Flag

Source: server/install.go:146-152

Blocked Operations

Power actions are blocked during transfers:
Source: server/power.go:57-64

HTTP Configuration

Client Settings

Timeout: Unlimited (0) - transfers can take hours Source: server/transfer/source.go:129

Request Headers

Checksum Validation

SHA256 Calculation

Algorithm: SHA256 Format: Hexadecimal string Source: server/transfer/source.go:77-114

Error Handling

Common Transfer Errors

Error Conditions:
  • Failed to get server disk usage
  • Failed to create archive
  • Failed to stream archive
  • HTTP errors from target node
  • Context cancellation
  • Checksum validation failure
Source: server/transfer/source.go:135-161

Best Practices

Pre-Transfer

  1. Ensure sufficient disk space on target node
  2. Verify network connectivity between nodes
  3. Stop server before transfer (optional but recommended)
  4. Check server isn’t installing/restoring

During Transfer

  1. Monitor websocket events for progress
  2. Don’t attempt power actions
  3. Don’t delete server on either node
  4. Ensure stable network connection

Post-Transfer

  1. Verify server files on target node
  2. Start server to test functionality
  3. Clean up source node (handled by Panel)
  4. Update DNS/proxy configurations if needed