05d148aeb5
refactor storage node server refactor upload and download protocol
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package orders
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"storj.io/storj/pkg/identity"
|
|
"storj.io/storj/pkg/kademlia"
|
|
"storj.io/storj/pkg/pb"
|
|
"storj.io/storj/pkg/transport"
|
|
)
|
|
|
|
// Info contains full information about an order.
|
|
type Info struct {
|
|
Limit *pb.OrderLimit2
|
|
Order *pb.Order2
|
|
Uplink *identity.PeerIdentity
|
|
}
|
|
|
|
// DB implements storing orders for sending to the satellite.
|
|
type DB interface {
|
|
// Enqueue inserts order to the list of orders needing to be sent to the satellite.
|
|
Enqueue(ctx context.Context, info *Info) error
|
|
// ListUnsent returns orders that haven't been sent yet.
|
|
ListUnsent(ctx context.Context, limit int) ([]*Info, error)
|
|
}
|
|
|
|
// SenderConfig defines configuration for sending orders.
|
|
type SenderConfig struct {
|
|
Interval time.Duration
|
|
}
|
|
|
|
// Sender sends every interval unsent orders to the satellite.
|
|
type Sender struct {
|
|
log *zap.Logger
|
|
config SenderConfig
|
|
|
|
client transport.Client
|
|
kademlia *kademlia.Kademlia
|
|
orders DB
|
|
}
|
|
|
|
// NewSender creates an order sender.
|
|
func NewSender(log *zap.Logger, client transport.Client, kademlia *kademlia.Kademlia, orders DB, config SenderConfig) *Sender {
|
|
return &Sender{
|
|
log: log,
|
|
config: config,
|
|
client: client,
|
|
kademlia: kademlia,
|
|
orders: orders,
|
|
}
|
|
}
|