forked from TrueCloudLab/frostfs-node
87d83174d9
Implement `handleSetEACL` method similar to other handling methods in Container processor. To begin with, the validation logic is skipped, and all tables will be sent to the contract. In the future, the necessary checks will be implemented. Listening for events in the IR node will also be added. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
124 lines
3.4 KiB
Go
124 lines
3.4 KiB
Go
package container
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
|
"github.com/nspcc-dev/neofs-node/pkg/innerring/config"
|
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
|
"github.com/nspcc-dev/neofs-node/pkg/morph/client/container/wrapper"
|
|
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
|
containerEvent "github.com/nspcc-dev/neofs-node/pkg/morph/event/container"
|
|
"github.com/panjf2000/ants/v2"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
type (
|
|
// AlphabetState is a callback interface for inner ring global state.
|
|
AlphabetState interface {
|
|
IsAlphabet() bool
|
|
}
|
|
|
|
// Processor of events produced by container contract in morph chain.
|
|
Processor struct {
|
|
log *zap.Logger
|
|
pool *ants.Pool
|
|
containerContract util.Uint160
|
|
morphClient *client.Client
|
|
alphabetState AlphabetState
|
|
feeProvider *config.FeeConfig
|
|
cnrClient *wrapper.Wrapper
|
|
}
|
|
|
|
// Params of the processor constructor.
|
|
Params struct {
|
|
Log *zap.Logger
|
|
PoolSize int
|
|
ContainerContract util.Uint160
|
|
MorphClient *client.Client
|
|
AlphabetState AlphabetState
|
|
FeeProvider *config.FeeConfig
|
|
}
|
|
)
|
|
|
|
const (
|
|
putNotification = "containerPut"
|
|
deleteNotification = "containerDelete"
|
|
)
|
|
|
|
// New creates container contract processor instance.
|
|
func New(p *Params) (*Processor, error) {
|
|
switch {
|
|
case p.Log == nil:
|
|
return nil, errors.New("ir/container: logger is not set")
|
|
case p.MorphClient == nil:
|
|
return nil, errors.New("ir/container: neo:morph client is not set")
|
|
case p.AlphabetState == nil:
|
|
return nil, errors.New("ir/container: global state is not set")
|
|
case p.FeeProvider == nil:
|
|
return nil, errors.New("ir/container: fee provider is not set")
|
|
}
|
|
|
|
p.Log.Debug("container worker pool", zap.Int("size", p.PoolSize))
|
|
|
|
pool, err := ants.NewPool(p.PoolSize, ants.WithNonblocking(true))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("ir/container: can't create worker pool: %w", err)
|
|
}
|
|
|
|
return &Processor{
|
|
log: p.Log,
|
|
pool: pool,
|
|
containerContract: p.ContainerContract,
|
|
morphClient: p.MorphClient,
|
|
alphabetState: p.AlphabetState,
|
|
feeProvider: p.FeeProvider,
|
|
}, nil
|
|
}
|
|
|
|
// ListenerParsers for the 'event.Listener' event producer.
|
|
func (cp *Processor) ListenerParsers() []event.ParserInfo {
|
|
var parsers []event.ParserInfo
|
|
|
|
// container put event
|
|
put := event.ParserInfo{}
|
|
put.SetType(putNotification)
|
|
put.SetScriptHash(cp.containerContract)
|
|
put.SetParser(containerEvent.ParsePut)
|
|
parsers = append(parsers, put)
|
|
|
|
// container del event
|
|
del := event.ParserInfo{}
|
|
del.SetType(deleteNotification)
|
|
del.SetScriptHash(cp.containerContract)
|
|
del.SetParser(containerEvent.ParseDelete)
|
|
parsers = append(parsers, del)
|
|
|
|
return parsers
|
|
}
|
|
|
|
// ListenerHandlers for the 'event.Listener' event producer.
|
|
func (cp *Processor) ListenerHandlers() []event.HandlerInfo {
|
|
var handlers []event.HandlerInfo
|
|
|
|
// container put handler
|
|
put := event.HandlerInfo{}
|
|
put.SetType(putNotification)
|
|
put.SetScriptHash(cp.containerContract)
|
|
put.SetHandler(cp.handlePut)
|
|
handlers = append(handlers, put)
|
|
|
|
del := event.HandlerInfo{}
|
|
del.SetType(deleteNotification)
|
|
del.SetScriptHash(cp.containerContract)
|
|
del.SetHandler(cp.handleDelete)
|
|
handlers = append(handlers, del)
|
|
|
|
return handlers
|
|
}
|
|
|
|
// TimersHandlers for the 'Timers' event producer.
|
|
func (cp *Processor) TimersHandlers() []event.HandlerInfo {
|
|
return nil
|
|
}
|