From fb708b3a2d5d3744a1b4b49e163e70a011b05f82 Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Wed, 17 May 2023 15:43:56 +0300 Subject: [PATCH] [#338] ir: Drop container notaryless code Signed-off-by: Dmitrii Stepanov --- pkg/innerring/initialization.go | 2 +- .../processors/container/handlers_test.go | 84 +++++++++---------- .../processors/container/process_container.go | 40 +-------- .../processors/container/process_eacl.go | 18 +--- .../processors/container/processor.go | 43 +++++----- 5 files changed, 66 insertions(+), 121 deletions(-) diff --git a/pkg/innerring/initialization.go b/pkg/innerring/initialization.go index 89269d50d..6eb67ae7d 100644 --- a/pkg/innerring/initialization.go +++ b/pkg/innerring/initialization.go @@ -263,9 +263,9 @@ func (s *Server) initContainerProcessor(cfg *viper.Viper, cnrClient *container.C PoolSize: cfg.GetInt("workers.container"), AlphabetState: s, ContainerClient: cnrClient, + MorphClient: cnrClient.Morph(), FrostFSIDClient: frostfsIDClient, NetworkState: s.netmapClient, - NotaryDisabled: s.sideNotaryConfig.disabled, }) if err != nil { return err diff --git a/pkg/innerring/processors/container/handlers_test.go b/pkg/innerring/processors/container/handlers_test.go index 6075ff577..1e518f474 100644 --- a/pkg/innerring/processors/container/handlers_test.go +++ b/pkg/innerring/processors/container/handlers_test.go @@ -7,7 +7,6 @@ import ( "time" containercore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container" - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" cntClient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/container" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/frostfsid" containerEvent "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/event/container" @@ -22,6 +21,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version" + "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/network/payload" "github.com/nspcc-dev/neo-go/pkg/util" @@ -34,18 +34,16 @@ func TestPutEvent(t *testing.T) { homHashDisabled: true, epoch: 100, } - cc := &testContainerClient{ - get: make(map[string]*containercore.Container), - } + mc := &testMorphClient{} proc, err := New(&Params{ Log: test.NewLogger(t, true), PoolSize: 2, AlphabetState: &testAlphabetState{isAlphabet: true}, FrostFSIDClient: &testIDClient{}, - NotaryDisabled: true, NetworkState: nst, - ContainerClient: cc, + ContainerClient: &testContainerClient{}, + MorphClient: mc, }) require.NoError(t, err, "failed to create processor") @@ -64,10 +62,15 @@ func TestPutEvent(t *testing.T) { cnr.SetBasicACL(acl.Private) containerSDK.DisableHomomorphicHashing(&cnr) + nr := &payload.P2PNotaryRequest{ + MainTransaction: &transaction.Transaction{}, + } + event := &testPutEvent{ cnr: &cnr, pk: p, st: nil, + nr: nr, } proc.handlePut(event) @@ -76,13 +79,7 @@ func TestPutEvent(t *testing.T) { time.Sleep(10 * time.Millisecond) } - var expectedPut cntClient.PutPrm - expectedPut.SetContainer(cnr.Marshal()) - expectedPut.SetKey(p.PublicKey().Bytes()) - expectedPut.SetSignature(p.Sign(cnr.Marshal())) - expectedPut.SetZone("container") - - require.EqualValues(t, []cntClient.PutPrm{expectedPut}, cc.put, "invalid put requests") + require.EqualValues(t, []*transaction.Transaction{nr.MainTransaction}, mc.transactions, "invalid notary requests") } func TestDeleteEvent(t *testing.T) { @@ -103,15 +100,16 @@ func TestDeleteEvent(t *testing.T) { p.PublicKey(), }, } + mc := &testMorphClient{} proc, err := New(&Params{ Log: test.NewLogger(t, true), PoolSize: 2, AlphabetState: &testAlphabetState{isAlphabet: true}, FrostFSIDClient: idc, - NotaryDisabled: true, NetworkState: nst, ContainerClient: cc, + MorphClient: mc, }) require.NoError(t, err, "failed to create processor") @@ -133,9 +131,14 @@ func TestDeleteEvent(t *testing.T) { cidBin := make([]byte, 32) cid.Encode(cidBin) + nr := &payload.P2PNotaryRequest{ + MainTransaction: &transaction.Transaction{}, + } + ev := containerEvent.Delete{ - ContainerIDValue: cidBin, - SignatureValue: p.Sign(cidBin), + ContainerIDValue: cidBin, + SignatureValue: p.Sign(cidBin), + NotaryRequestValue: nr, } var signature frostfscrypto.Signature @@ -156,7 +159,7 @@ func TestDeleteEvent(t *testing.T) { expectedDelete.SetCID(ev.ContainerID()) expectedDelete.SetSignature(ev.Signature()) - require.EqualValues(t, []cntClient.DeletePrm{expectedDelete}, cc.delete, "invalid delete requests") + require.EqualValues(t, []*transaction.Transaction{nr.MainTransaction}, mc.transactions, "invalid notary requests") } func TestSetEACLEvent(t *testing.T) { @@ -168,15 +171,16 @@ func TestSetEACLEvent(t *testing.T) { cc := &testContainerClient{ get: make(map[string]*containercore.Container), } + mc := &testMorphClient{} proc, err := New(&Params{ Log: test.NewLogger(t, true), PoolSize: 2, AlphabetState: &testAlphabetState{isAlphabet: true}, FrostFSIDClient: &testIDClient{}, - NotaryDisabled: true, NetworkState: nst, ContainerClient: cc, + MorphClient: mc, }) require.NoError(t, err, "failed to create processor") @@ -219,10 +223,14 @@ func TestSetEACLEvent(t *testing.T) { table.AddRecord(r) + nr := &payload.P2PNotaryRequest{ + MainTransaction: &transaction.Transaction{}, + } event := containerEvent.SetEACL{ - TableValue: table.ToV2().StableMarshal(nil), - PublicKeyValue: p.PublicKey().Bytes(), - SignatureValue: p.Sign(table.ToV2().StableMarshal(nil)), + TableValue: table.ToV2().StableMarshal(nil), + PublicKeyValue: p.PublicKey().Bytes(), + SignatureValue: p.Sign(table.ToV2().StableMarshal(nil)), + NotaryRequestValue: nr, } proc.handleSetEACL(event) @@ -236,7 +244,7 @@ func TestSetEACLEvent(t *testing.T) { expectedPutEACL.SetKey(p.PublicKey().Bytes()) expectedPutEACL.SetSignature(p.Sign(table.ToV2().StableMarshal(nil))) - require.EqualValues(t, []cntClient.PutEACLPrm{expectedPutEACL}, cc.putEACL, "invalid set EACL requests") + require.EqualValues(t, []*transaction.Transaction{nr.MainTransaction}, mc.transactions, "invalid notary requests") } type testAlphabetState struct { @@ -262,25 +270,13 @@ func (s *testNetworkState) Epoch() (uint64, error) { type testContainerClient struct { contractAddress util.Uint160 - put []cntClient.PutPrm get map[string]*containercore.Container - delete []cntClient.DeletePrm - putEACL []cntClient.PutEACLPrm } func (c *testContainerClient) ContractAddress() util.Uint160 { return c.contractAddress } -func (c *testContainerClient) Morph() *client.Client { - return nil -} - -func (c *testContainerClient) Put(p cntClient.PutPrm) error { - c.put = append(c.put, p) - return nil -} - func (c *testContainerClient) Get(cid []byte) (*containercore.Container, error) { key := hex.EncodeToString(cid) if cont, found := c.get[key]; found { @@ -289,16 +285,6 @@ func (c *testContainerClient) Get(cid []byte) (*containercore.Container, error) return nil, apistatus.ContainerNotFound{} } -func (c *testContainerClient) Delete(p cntClient.DeletePrm) error { - c.delete = append(c.delete, p) - return nil -} - -func (c *testContainerClient) PutEACL(p cntClient.PutEACLPrm) error { - c.putEACL = append(c.putEACL, p) - return nil -} - type testIDClient struct { publicKeys keys.PublicKeys } @@ -313,6 +299,7 @@ type testPutEvent struct { cnr *containerSDK.Container pk *keys.PrivateKey st []byte + nr *payload.P2PNotaryRequest } func (e *testPutEvent) MorphEvent() {} @@ -333,5 +320,14 @@ func (e *testPutEvent) SessionToken() []byte { return e.st } func (e *testPutEvent) NotaryRequest() *payload.P2PNotaryRequest { + return e.nr +} + +type testMorphClient struct { + transactions []*transaction.Transaction +} + +func (c *testMorphClient) NotarySignAndInvokeTX(mainTx *transaction.Transaction) error { + c.transactions = append(c.transactions, mainTx) return nil } diff --git a/pkg/innerring/processors/container/process_container.go b/pkg/innerring/processors/container/process_container.go index 603ab86d1..3bee1c4d5 100644 --- a/pkg/innerring/processors/container/process_container.go +++ b/pkg/innerring/processors/container/process_container.go @@ -4,7 +4,6 @@ import ( "fmt" "git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs" - cntClient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/container" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/event" containerEvent "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/event/container" containerSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container" @@ -91,27 +90,7 @@ func (cp *Processor) checkPutContainer(ctx *putContainerContext) error { } func (cp *Processor) approvePutContainer(ctx *putContainerContext) { - e := ctx.e - - var err error - - prm := cntClient.PutPrm{} - - prm.SetContainer(e.Container()) - prm.SetKey(e.PublicKey()) - prm.SetSignature(e.Signature()) - prm.SetToken(e.SessionToken()) - prm.SetName(ctx.d.Name()) - prm.SetZone(ctx.d.Zone()) - - if nr := e.NotaryRequest(); nr != nil { - // put event was received via Notary service - err = cp.cnrClient.Morph().NotarySignAndInvokeTX(nr.MainTransaction) - } else { - // put event was received via notification service - err = cp.cnrClient.Put(prm) - } - if err != nil { + if err := cp.morphClient.NotarySignAndInvokeTX(ctx.e.NotaryRequest().MainTransaction); err != nil { cp.log.Error(logs.ContainerCouldNotApprovePutContainer, zap.String("error", err.Error()), ) @@ -171,22 +150,7 @@ func (cp *Processor) checkDeleteContainer(e containerEvent.Delete) error { } func (cp *Processor) approveDeleteContainer(e containerEvent.Delete) { - var err error - - prm := cntClient.DeletePrm{} - - prm.SetCID(e.ContainerID()) - prm.SetSignature(e.Signature()) - prm.SetToken(e.SessionToken()) - - if nr := e.NotaryRequest(); nr != nil { - // delete event was received via Notary service - err = cp.cnrClient.Morph().NotarySignAndInvokeTX(nr.MainTransaction) - } else { - // delete event was received via notification service - err = cp.cnrClient.Delete(prm) - } - if err != nil { + if err := cp.morphClient.NotarySignAndInvokeTX(e.NotaryRequest().MainTransaction); err != nil { cp.log.Error(logs.ContainerCouldNotApproveDeleteContainer, zap.String("error", err.Error()), ) diff --git a/pkg/innerring/processors/container/process_eacl.go b/pkg/innerring/processors/container/process_eacl.go index a8d880c8f..43a59e223 100644 --- a/pkg/innerring/processors/container/process_eacl.go +++ b/pkg/innerring/processors/container/process_eacl.go @@ -75,23 +75,7 @@ func (cp *Processor) checkSetEACL(e containerEvent.SetEACL) error { } func (cp *Processor) approveSetEACL(e containerEvent.SetEACL) { - var err error - - prm := cntClient.PutEACLPrm{} - - prm.SetTable(e.Table()) - prm.SetKey(e.PublicKey()) - prm.SetSignature(e.Signature()) - prm.SetToken(e.SessionToken()) - - if nr := e.NotaryRequest(); nr != nil { - // setEACL event was received via Notary service - err = cp.cnrClient.Morph().NotarySignAndInvokeTX(nr.MainTransaction) - } else { - // setEACL event was received via notification service - err = cp.cnrClient.PutEACL(prm) - } - if err != nil { + if err := cp.morphClient.NotarySignAndInvokeTX(e.NotaryRequest().MainTransaction); err != nil { cp.log.Error(logs.ContainerCouldNotApproveSetEACL, zap.String("error", err.Error()), ) diff --git a/pkg/innerring/processors/container/processor.go b/pkg/innerring/processors/container/processor.go index 2141b0764..ec82ace70 100644 --- a/pkg/innerring/processors/container/processor.go +++ b/pkg/innerring/processors/container/processor.go @@ -6,13 +6,12 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs" containercore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container" - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client" - cntClient "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/container" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/frostfsid" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/event" containerEvent "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/event/container" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" "github.com/nspcc-dev/neo-go/pkg/core/mempoolevent" + "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/panjf2000/ants/v2" @@ -27,11 +26,11 @@ type ( ContClient interface { ContractAddress() util.Uint160 - Morph() *client.Client - Put(p cntClient.PutPrm) error Get(cid []byte) (*containercore.Container, error) - Delete(p cntClient.DeletePrm) error - PutEACL(p cntClient.PutEACLPrm) error + } + + MorphClient interface { + NotarySignAndInvokeTX(mainTx *transaction.Transaction) error } IDClient interface { @@ -40,13 +39,13 @@ type ( // Processor of events produced by container contract in the sidechain. Processor struct { - log *logger.Logger - pool *ants.Pool - alphabetState AlphabetState - cnrClient ContClient // notary must be enabled - idClient IDClient - netState NetworkState - notaryDisabled bool + log *logger.Logger + pool *ants.Pool + alphabetState AlphabetState + cnrClient ContClient // notary must be enabled + morphClient MorphClient + idClient IDClient + netState NetworkState } // Params of the processor constructor. @@ -55,9 +54,9 @@ type ( PoolSize int AlphabetState AlphabetState ContainerClient ContClient + MorphClient MorphClient FrostFSIDClient IDClient NetworkState NetworkState - NotaryDisabled bool } ) @@ -88,6 +87,8 @@ func New(p *Params) (*Processor, error) { return nil, errors.New("ir/container: global state is not set") case p.ContainerClient == nil: return nil, errors.New("ir/container: Container client is not set") + case p.MorphClient == nil: + return nil, errors.New("ir/container: Morph client is not set") case p.FrostFSIDClient == nil: return nil, errors.New("ir/container: FrostFS ID client is not set") case p.NetworkState == nil: @@ -102,13 +103,13 @@ func New(p *Params) (*Processor, error) { } return &Processor{ - log: p.Log, - pool: pool, - alphabetState: p.AlphabetState, - cnrClient: p.ContainerClient, - idClient: p.FrostFSIDClient, - netState: p.NetworkState, - notaryDisabled: p.NotaryDisabled, + log: p.Log, + pool: pool, + alphabetState: p.AlphabetState, + cnrClient: p.ContainerClient, + idClient: p.FrostFSIDClient, + netState: p.NetworkState, + morphClient: p.MorphClient, }, nil }