119 lines
4.8 KiB
Go
119 lines
4.8 KiB
Go
package influxdb
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/influxdata/influxdb/v2/kit/platform"
|
|
"github.com/influxdata/influxdb/v2/kit/platform/errors"
|
|
)
|
|
|
|
const (
|
|
MinReplicationMaxQueueSizeBytes int64 = 33554430 // 32 MiB
|
|
DefaultReplicationMaxQueueSizeBytes = 2 * MinReplicationMaxQueueSizeBytes
|
|
DefaultReplicationMaxAge int64 = 604800 // 1 week, in seconds
|
|
)
|
|
|
|
var ErrMaxQueueSizeTooSmall = errors.Error{
|
|
Code: errors.EInvalid,
|
|
Msg: fmt.Sprintf("maxQueueSize too small, must be at least %d", MinReplicationMaxQueueSizeBytes),
|
|
}
|
|
|
|
// Replication contains all info about a replication that should be returned to users.
|
|
type Replication struct {
|
|
ID platform.ID `json:"id" db:"id"`
|
|
OrgID platform.ID `json:"orgID" db:"org_id"`
|
|
Name string `json:"name" db:"name"`
|
|
Description *string `json:"description,omitempty" db:"description"`
|
|
RemoteID platform.ID `json:"remoteID" db:"remote_id"`
|
|
LocalBucketID platform.ID `json:"localBucketID" db:"local_bucket_id"`
|
|
RemoteBucketID *platform.ID `json:"remoteBucketID" db:"remote_bucket_id"`
|
|
RemoteBucketName string `json:"RemoteBucketName" db:"remote_bucket_name"`
|
|
MaxQueueSizeBytes int64 `json:"maxQueueSizeBytes" db:"max_queue_size_bytes"`
|
|
CurrentQueueSizeBytes int64 `json:"currentQueueSizeBytes"`
|
|
RemainingBytesToBeSynced int64 `json:"remainingBytesToBeSynced"`
|
|
LatestResponseCode *int32 `json:"latestResponseCode,omitempty" db:"latest_response_code"`
|
|
LatestErrorMessage *string `json:"latestErrorMessage,omitempty" db:"latest_error_message"`
|
|
DropNonRetryableData bool `json:"dropNonRetryableData" db:"drop_non_retryable_data"`
|
|
MaxAgeSeconds int64 `json:"maxAgeSeconds" db:"max_age_seconds"`
|
|
}
|
|
|
|
// ReplicationListFilter is a selection filter for listing replications.
|
|
type ReplicationListFilter struct {
|
|
OrgID platform.ID
|
|
Name *string
|
|
RemoteID *platform.ID
|
|
LocalBucketID *platform.ID
|
|
}
|
|
|
|
// Replications is a collection of metadata about replications.
|
|
type Replications struct {
|
|
Replications []Replication `json:"replications"`
|
|
}
|
|
|
|
// TrackedReplication defines a replication stream which is currently being tracked via sqlite.
|
|
type TrackedReplication struct {
|
|
MaxQueueSizeBytes int64
|
|
MaxAgeSeconds int64
|
|
OrgID platform.ID
|
|
LocalBucketID platform.ID
|
|
}
|
|
|
|
// CreateReplicationRequest contains all info needed to establish a new replication
|
|
// to a remote InfluxDB bucket.
|
|
type CreateReplicationRequest struct {
|
|
OrgID platform.ID `json:"orgID"`
|
|
Name string `json:"name"`
|
|
Description *string `json:"description,omitempty"`
|
|
RemoteID platform.ID `json:"remoteID"`
|
|
LocalBucketID platform.ID `json:"localBucketID"`
|
|
RemoteBucketID platform.ID `json:"remoteBucketID"`
|
|
RemoteBucketName string `json:"remoteBucketName"`
|
|
MaxQueueSizeBytes int64 `json:"maxQueueSizeBytes,omitempty"`
|
|
DropNonRetryableData bool `json:"dropNonRetryableData,omitempty"`
|
|
MaxAgeSeconds int64 `json:"maxAgeSeconds,omitempty"`
|
|
}
|
|
|
|
func (r *CreateReplicationRequest) OK() error {
|
|
if r.MaxQueueSizeBytes < MinReplicationMaxQueueSizeBytes {
|
|
return &ErrMaxQueueSizeTooSmall
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// UpdateReplicationRequest contains a partial update to existing info about a replication.
|
|
type UpdateReplicationRequest struct {
|
|
Name *string `json:"name,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
RemoteID *platform.ID `json:"remoteID,omitempty"`
|
|
RemoteBucketID *platform.ID `json:"remoteBucketID,omitempty"`
|
|
RemoteBucketName *string `json:"remoteBucketName,omitempty"`
|
|
MaxQueueSizeBytes *int64 `json:"maxQueueSizeBytes,omitempty"`
|
|
DropNonRetryableData *bool `json:"dropNonRetryableData,omitempty"`
|
|
MaxAgeSeconds *int64 `json:"maxAgeSeconds,omitempty"`
|
|
}
|
|
|
|
func (r *UpdateReplicationRequest) OK() error {
|
|
if r.MaxQueueSizeBytes == nil {
|
|
return nil
|
|
}
|
|
|
|
if *r.MaxQueueSizeBytes < MinReplicationMaxQueueSizeBytes {
|
|
return &ErrMaxQueueSizeTooSmall
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// ReplicationHTTPConfig contains all info needed by a client to make HTTP requests against the
|
|
// remote bucket targeted by a replication.
|
|
type ReplicationHTTPConfig struct {
|
|
RemoteURL string `db:"remote_url"`
|
|
RemoteToken string `db:"remote_api_token"`
|
|
RemoteOrgID *platform.ID `db:"remote_org_id"`
|
|
AllowInsecureTLS bool `db:"allow_insecure_tls"`
|
|
RemoteBucketID *platform.ID `db:"remote_bucket_id"`
|
|
RemoteBucketName string `db:"remote_bucket_name"`
|
|
DropNonRetryableData bool `db:"drop_non_retryable_data"`
|
|
}
|