Skip to content

Commit 0dfe4f3

Browse files
committed
[FAB-7048] Move deliver from orderer to fabric/common
This CR moves deliver from the orderer to fabric/common. This is being done to support the future implementation of deliver on the peer. Change-Id: If077f2c05b5a10fdeb4e6ac315111495304e4c5e Signed-off-by: Will Lahti <wtlahti@us.ibm.com>
1 parent 0c5fa00 commit 0dfe4f3

32 files changed

+167
-163
lines changed

orderer/common/deliver/deliver.go renamed to common/deliver/deliver.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@ package deliver
1919
import (
2020
"io"
2121

22-
"github.com/golang/protobuf/proto"
2322
"github.com/hyperledger/fabric/common/flogging"
23+
"github.com/hyperledger/fabric/common/ledger/blockledger"
2424
"github.com/hyperledger/fabric/common/policies"
2525
"github.com/hyperledger/fabric/common/util"
26-
"github.com/hyperledger/fabric/orderer/common/ledger"
27-
"github.com/hyperledger/fabric/orderer/common/msgprocessor"
2826
cb "github.com/hyperledger/fabric/protos/common"
2927
ab "github.com/hyperledger/fabric/protos/orderer"
3028
"github.com/hyperledger/fabric/protos/utils"
29+
30+
"github.com/golang/protobuf/proto"
3131
"github.com/op/go-logging"
3232
)
3333

34-
const pkgLogID = "orderer/common/deliver"
34+
const pkgLogID = "common/deliver"
3535

3636
var logger *logging.Logger
3737

@@ -58,7 +58,7 @@ type Support interface {
5858
PolicyManager() policies.Manager
5959

6060
// Reader returns the chain Reader for the chain
61-
Reader() ledger.Reader
61+
Reader() blockledger.Reader
6262

6363
// Errored returns a channel which closes when the backing consenter has errored
6464
Errored() <-chan struct{}
@@ -137,7 +137,7 @@ func (ds *deliverServer) deliverBlocks(srv ab.AtomicBroadcast_DeliverServer, env
137137

138138
lastConfigSequence := chain.Sequence()
139139

140-
sf := msgprocessor.NewSigFilter(policies.ChannelReaders, chain)
140+
sf := NewSigFilter(policies.ChannelReaders, chain)
141141
if err := sf.Apply(envelope); err != nil {
142142
logger.Warningf("[channel: %s] Received unauthorized deliver request from %s: %s", chdr.ChannelId, addr, err)
143143
return sendStatusReply(srv, cb.Status_FORBIDDEN)

orderer/common/deliver/deliver_test.go renamed to common/deliver/deliver_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ import (
2323
"time"
2424

2525
"github.com/hyperledger/fabric/common/flogging"
26+
"github.com/hyperledger/fabric/common/ledger/blockledger"
27+
ramledger "github.com/hyperledger/fabric/common/ledger/blockledger/ram"
2628
mockpolicies "github.com/hyperledger/fabric/common/mocks/policies"
2729
"github.com/hyperledger/fabric/common/policies"
2830
genesisconfig "github.com/hyperledger/fabric/common/tools/configtxgen/localconfig"
29-
"github.com/hyperledger/fabric/orderer/common/ledger"
30-
ramledger "github.com/hyperledger/fabric/orderer/common/ledger/ram"
3131
cb "github.com/hyperledger/fabric/protos/common"
3232
ab "github.com/hyperledger/fabric/protos/orderer"
3333
"github.com/hyperledger/fabric/protos/utils"
@@ -120,7 +120,7 @@ func (mm *mockSupportManager) GetChain(chainID string) (Support, bool) {
120120
}
121121

122122
type mockSupport struct {
123-
ledger ledger.ReadWriter
123+
ledger blockledger.ReadWriter
124124
policyManager *mockpolicies.Manager
125125
erroredChan chan struct{}
126126
configSeq uint64
@@ -138,11 +138,11 @@ func (mcs *mockSupport) PolicyManager() policies.Manager {
138138
return mcs.policyManager
139139
}
140140

141-
func (mcs *mockSupport) Reader() ledger.Reader {
141+
func (mcs *mockSupport) Reader() blockledger.Reader {
142142
return mcs.ledger
143143
}
144144

145-
func NewRAMLedger() ledger.ReadWriter {
145+
func NewRAMLedger() blockledger.ReadWriter {
146146
rlf := ramledger.New(ledgerSize + 1)
147147
rl, _ := rlf.GetOrCreate(genesisconfig.TestChainID)
148148
rl.Append(genesisBlock)
@@ -153,7 +153,7 @@ func initializeDeliverHandler() Handler {
153153
mm := newMockMultichainManager()
154154
for i := 1; i < ledgerSize; i++ {
155155
l := mm.chains[systemChainID].ledger
156-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
156+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
157157
}
158158

159159
return NewHandlerImpl(mm)
@@ -282,7 +282,7 @@ func TestUnauthorizedSeek(t *testing.T) {
282282
mm := newMockMultichainManager()
283283
for i := 1; i < ledgerSize; i++ {
284284
l := mm.chains[systemChainID].ledger
285-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
285+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
286286
}
287287
mm.chains[systemChainID].policyManager.Policy.Err = fmt.Errorf("Fail to evaluate policy")
288288

@@ -308,7 +308,7 @@ func TestRevokedAuthorizationSeek(t *testing.T) {
308308
mm := newMockMultichainManager()
309309
for i := 1; i < ledgerSize; i++ {
310310
l := mm.chains[systemChainID].ledger
311-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
311+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
312312
}
313313

314314
m := newMockD()
@@ -329,7 +329,7 @@ func TestRevokedAuthorizationSeek(t *testing.T) {
329329
mm.chains[systemChainID].policyManager.Policy.Err = fmt.Errorf("Fail to evaluate policy")
330330
mm.chains[systemChainID].configSeq++
331331
l := mm.chains[systemChainID].ledger
332-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", ledgerSize+1))}}))
332+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", ledgerSize+1))}}))
333333

334334
select {
335335
case deliverReply := <-m.sendChan:
@@ -391,7 +391,7 @@ func TestBlockingSeek(t *testing.T) {
391391
mm := newMockMultichainManager()
392392
for i := 1; i < ledgerSize; i++ {
393393
l := mm.chains[systemChainID].ledger
394-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
394+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
395395
}
396396

397397
m := newMockD()
@@ -418,7 +418,7 @@ func TestBlockingSeek(t *testing.T) {
418418
}
419419

420420
l := mm.chains[systemChainID].ledger
421-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", ledgerSize+1))}}))
421+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", ledgerSize+1))}}))
422422

423423
select {
424424
case deliverReply := <-m.sendChan:
@@ -445,7 +445,7 @@ func TestErroredSeek(t *testing.T) {
445445
l := ms.ledger
446446
close(ms.erroredChan)
447447
for i := 1; i < ledgerSize; i++ {
448-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
448+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
449449
}
450450

451451
m := newMockD()
@@ -469,7 +469,7 @@ func TestErroredBlockingSeek(t *testing.T) {
469469
ms := mm.chains[systemChainID]
470470
l := ms.ledger
471471
for i := 1; i < ledgerSize; i++ {
472-
l.Append(ledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
472+
l.Append(blockledger.CreateNextBlock(l, []*cb.Envelope{{Payload: []byte(fmt.Sprintf("%d", i))}}))
473473
}
474474

475475
m := newMockD()

orderer/common/msgprocessor/sigfilter.go renamed to common/deliver/sigfilter.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Copyright IBM Corp. All Rights Reserved.
44
SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
package msgprocessor
7+
package deliver
88

99
import (
1010
"fmt"
@@ -15,28 +15,34 @@ import (
1515
"github.com/pkg/errors"
1616
)
1717

18+
// ErrPermissionDenied is returned by errors which are caused by transactions
19+
// which are not permitted due to an authorization failure.
20+
var ErrPermissionDenied = errors.New("permission denied")
21+
1822
// SigFilterSupport provides the resources required for the signature filter
1923
type SigFilterSupport interface {
2024
// PolicyManager returns a reference to the current policy manager
2125
PolicyManager() policies.Manager
2226
}
2327

24-
type sigFilter struct {
28+
// SigFilter stores the name of the policy to apply to deliver requests to
29+
// determine whether a client is authorized
30+
type SigFilter struct {
2531
policyName string
2632
support SigFilterSupport
2733
}
2834

2935
// NewSigFilter creates a new signature filter, at every evaluation, the policy manager is called
3036
// to retrieve the latest version of the policy
31-
func NewSigFilter(policyName string, support SigFilterSupport) Rule {
32-
return &sigFilter{
37+
func NewSigFilter(policyName string, support SigFilterSupport) *SigFilter {
38+
return &SigFilter{
3339
policyName: policyName,
3440
support: support,
3541
}
3642
}
3743

3844
// Apply applies the policy given, resulting in Reject or Forward, never Accept
39-
func (sf *sigFilter) Apply(message *cb.Envelope) error {
45+
func (sf *SigFilter) Apply(message *cb.Envelope) error {
4046
signedData, err := message.AsSignedData()
4147

4248
if err != nil {

orderer/common/msgprocessor/sigfilter_test.go renamed to common/deliver/sigfilter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Copyright IBM Corp. All Rights Reserved.
44
SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
package msgprocessor
7+
package deliver
88

99
import (
1010
"fmt"

orderer/common/ledger/blackbox_test.go renamed to common/ledger/blockledger/blackbox_test.go

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,15 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package ledger_test
17+
package blockledger_test
1818

1919
import (
2020
"bytes"
2121
"reflect"
2222
"testing"
2323

24-
. "github.com/hyperledger/fabric/orderer/common/ledger"
24+
"github.com/hyperledger/fabric/common/ledger/blockledger"
25+
2526
cb "github.com/hyperledger/fabric/protos/common"
2627
ab "github.com/hyperledger/fabric/protos/orderer"
2728
)
@@ -32,7 +33,7 @@ type ledgerTestable interface {
3233
}
3334

3435
type ledgerTestFactory interface {
35-
New() (Factory, ReadWriter)
36+
New() (blockledger.Factory, blockledger.ReadWriter)
3637
Destroy() error
3738
Persistent() bool
3839
}
@@ -69,7 +70,7 @@ func testInitialization(lf ledgerTestFactory, t *testing.T) {
6970
if li.Height() != 1 {
7071
t.Fatalf("Block height should be 1")
7172
}
72-
block := GetBlock(li, 0)
73+
block := blockledger.GetBlock(li, 0)
7374
if block == nil {
7475
t.Fatalf("Error retrieving genesis block")
7576
}
@@ -86,7 +87,7 @@ func testReinitialization(lf ledgerTestFactory, t *testing.T) {
8687
return
8788
}
8889
olf, oli := lf.New()
89-
aBlock := CreateNextBlock(oli, []*cb.Envelope{{Payload: []byte("My Data")}})
90+
aBlock := blockledger.CreateNextBlock(oli, []*cb.Envelope{{Payload: []byte("My Data")}})
9091
err := oli.Append(aBlock)
9192
if err != nil {
9293
t.Fatalf("Error appending block: %s", err)
@@ -97,7 +98,7 @@ func testReinitialization(lf ledgerTestFactory, t *testing.T) {
9798
if li.Height() != 2 {
9899
t.Fatalf("Block height should be 2")
99100
}
100-
block := GetBlock(li, 1)
101+
block := blockledger.GetBlock(li, 1)
101102
if block == nil {
102103
t.Fatalf("Error retrieving block 1")
103104
}
@@ -112,17 +113,17 @@ func TestAddition(t *testing.T) {
112113

113114
func testAddition(lf ledgerTestFactory, t *testing.T) {
114115
_, li := lf.New()
115-
genesis := GetBlock(li, 0)
116+
genesis := blockledger.GetBlock(li, 0)
116117
if genesis == nil {
117118
t.Fatalf("Could not retrieve genesis block")
118119
}
119120
prevHash := genesis.Header.Hash()
120121

121-
li.Append(CreateNextBlock(li, []*cb.Envelope{{Payload: []byte("My Data")}}))
122+
li.Append(blockledger.CreateNextBlock(li, []*cb.Envelope{{Payload: []byte("My Data")}}))
122123
if li.Height() != 2 {
123124
t.Fatalf("Block height should be 2")
124125
}
125-
block := GetBlock(li, 1)
126+
block := blockledger.GetBlock(li, 1)
126127
if block == nil {
127128
t.Fatalf("Error retrieving genesis block")
128129
}
@@ -137,7 +138,7 @@ func TestRetrieval(t *testing.T) {
137138

138139
func testRetrieval(lf ledgerTestFactory, t *testing.T) {
139140
_, li := lf.New()
140-
li.Append(CreateNextBlock(li, []*cb.Envelope{{Payload: []byte("My Data")}}))
141+
li.Append(blockledger.CreateNextBlock(li, []*cb.Envelope{{Payload: []byte("My Data")}}))
141142
it, num := li.Iterator(&ab.SeekPosition{Type: &ab.SeekPosition_Oldest{}})
142143
defer it.Close()
143144
if num != 0 {
@@ -188,7 +189,7 @@ func testBlockedRetrieval(lf ledgerTestFactory, t *testing.T) {
188189
t.Fatalf("Should not be ready for block read")
189190
default:
190191
}
191-
li.Append(CreateNextBlock(li, []*cb.Envelope{{Payload: []byte("My Data")}}))
192+
li.Append(blockledger.CreateNextBlock(li, []*cb.Envelope{{Payload: []byte("My Data")}}))
192193
select {
193194
case <-signal:
194195
default:
@@ -222,8 +223,8 @@ func testMultichain(lf ledgerTestFactory, t *testing.T) {
222223
t.Fatalf("Error creating chain1: %s", err)
223224
}
224225

225-
c1.Append(CreateNextBlock(c1, []*cb.Envelope{{Payload: c1p1}}))
226-
c1b1 := CreateNextBlock(c1, []*cb.Envelope{{Payload: c1p2}})
226+
c1.Append(blockledger.CreateNextBlock(c1, []*cb.Envelope{{Payload: c1p1}}))
227+
c1b1 := blockledger.CreateNextBlock(c1, []*cb.Envelope{{Payload: c1p2}})
227228
c1.Append(c1b1)
228229

229230
if c1.Height() != 2 {
@@ -234,7 +235,7 @@ func testMultichain(lf ledgerTestFactory, t *testing.T) {
234235
if err != nil {
235236
t.Fatalf("Error creating chain2: %s", err)
236237
}
237-
c2b0 := c2.Append(CreateNextBlock(c2, []*cb.Envelope{{Payload: c2p1}}))
238+
c2b0 := c2.Append(blockledger.CreateNextBlock(c2, []*cb.Envelope{{Payload: c2p1}}))
238239

239240
if c2.Height() != 1 {
240241
t.Fatalf("Block height for c2 should be 1")
@@ -245,7 +246,7 @@ func testMultichain(lf ledgerTestFactory, t *testing.T) {
245246
t.Fatalf("Error retrieving chain1: %s", err)
246247
}
247248

248-
if b := GetBlock(c1, 1); !reflect.DeepEqual(c1b1, b) {
249+
if b := blockledger.GetBlock(c1, 1); !reflect.DeepEqual(c1b1, b) {
249250
t.Fatalf("Did not properly store block 1 on chain 1:")
250251
}
251252

@@ -254,7 +255,7 @@ func testMultichain(lf ledgerTestFactory, t *testing.T) {
254255
t.Fatalf("Error retrieving chain2: %s", err)
255256
}
256257

257-
if b := GetBlock(c2, 0); reflect.DeepEqual(c2b0, b) {
258+
if b := blockledger.GetBlock(c2, 0); reflect.DeepEqual(c2b0, b) {
258259
t.Fatalf("Did not properly store block 1 on chain 1")
259260
}
260261
}

orderer/common/ledger/file/factory.go renamed to common/ledger/blockledger/file/factory.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ import (
2121

2222
"github.com/hyperledger/fabric/common/ledger/blkstorage"
2323
"github.com/hyperledger/fabric/common/ledger/blkstorage/fsblkstorage"
24-
"github.com/hyperledger/fabric/orderer/common/ledger"
24+
"github.com/hyperledger/fabric/common/ledger/blockledger"
2525
)
2626

2727
type fileLedgerFactory struct {
2828
blkstorageProvider blkstorage.BlockStoreProvider
29-
ledgers map[string]ledger.ReadWriter
29+
ledgers map[string]blockledger.ReadWriter
3030
mutex sync.Mutex
3131
}
3232

3333
// GetOrCreate gets an existing ledger (if it exists) or creates it if it does not
34-
func (flf *fileLedgerFactory) GetOrCreate(chainID string) (ledger.ReadWriter, error) {
34+
func (flf *fileLedgerFactory) GetOrCreate(chainID string) (blockledger.ReadWriter, error) {
3535
flf.mutex.Lock()
3636
defer flf.mutex.Unlock()
3737

@@ -66,13 +66,13 @@ func (flf *fileLedgerFactory) Close() {
6666
}
6767

6868
// New creates a new ledger factory
69-
func New(directory string) ledger.Factory {
69+
func New(directory string) blockledger.Factory {
7070
return &fileLedgerFactory{
7171
blkstorageProvider: fsblkstorage.NewProvider(
7272
fsblkstorage.NewConf(directory, -1),
7373
&blkstorage.IndexConfig{
7474
AttrsToIndex: []blkstorage.IndexableAttr{blkstorage.IndexableAttrBlockNum}},
7575
),
76-
ledgers: make(map[string]ledger.ReadWriter),
76+
ledgers: make(map[string]blockledger.ReadWriter),
7777
}
7878
}

orderer/common/ledger/file/factory_test.go renamed to common/ledger/blockledger/file/factory_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import (
2222
"testing"
2323

2424
"github.com/hyperledger/fabric/common/ledger/blkstorage"
25+
"github.com/hyperledger/fabric/common/ledger/blockledger"
2526
genesisconfig "github.com/hyperledger/fabric/common/tools/configtxgen/localconfig"
26-
"github.com/hyperledger/fabric/orderer/common/ledger"
2727
"github.com/stretchr/testify/assert"
2828
)
2929

@@ -56,7 +56,7 @@ func (mbsp *mockBlockStoreProvider) Close() {
5656
func TestBlockstoreProviderError(t *testing.T) {
5757
flf := &fileLedgerFactory{
5858
blkstorageProvider: &mockBlockStoreProvider{error: fmt.Errorf("blockstorage provider error")},
59-
ledgers: make(map[string]ledger.ReadWriter),
59+
ledgers: make(map[string]blockledger.ReadWriter),
6060
}
6161
assert.Panics(
6262
t,

0 commit comments

Comments
 (0)