Skip to content

Commit 1b5d378

Browse files
author
Jason Yellick
committed
[FAB-798] Abstract out the solo deliver handler
As the next step of consolidating the common logic of the atomicbroadcast api between components, this changeset pulls out the logic which is not solo specific and moves it into the common/deliver package. SBFT was already dependent on this functionality, so this is a natural move. This continues, but does not satisfy FAB-798. Change-Id: I02c5ef5b03f9e1a17fd188e3df7b6fb42aa126b5 Signed-off-by: Jason Yellick <[email protected]>
1 parent 73c501c commit 1b5d378

File tree

4 files changed

+50
-25
lines changed

4 files changed

+50
-25
lines changed

orderer/solo/deliver.go orderer/common/deliver/deliver.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,39 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package solo
17+
package deliver
1818

1919
import (
2020
"github.com/hyperledger/fabric/orderer/rawledger"
2121
cb "github.com/hyperledger/fabric/protos/common"
2222
ab "github.com/hyperledger/fabric/protos/orderer"
23+
24+
"github.com/op/go-logging"
2325
)
2426

27+
var logger = logging.MustGetLogger("orderer/common/deliver")
28+
29+
func init() {
30+
logging.SetLevel(logging.DEBUG, "")
31+
}
32+
33+
type Handler interface {
34+
Handle(srv ab.AtomicBroadcast_DeliverServer) error
35+
}
36+
2537
type DeliverServer struct {
2638
rl rawledger.Reader
2739
maxWindow int
2840
}
2941

30-
func NewDeliverServer(rl rawledger.Reader, maxWindow int) *DeliverServer {
42+
func NewHandlerImpl(rl rawledger.Reader, maxWindow int) Handler {
3143
return &DeliverServer{
3244
rl: rl,
3345
maxWindow: maxWindow,
3446
}
3547
}
3648

37-
func (ds *DeliverServer) HandleDeliver(srv ab.AtomicBroadcast_DeliverServer) error {
49+
func (ds *DeliverServer) Handle(srv ab.AtomicBroadcast_DeliverServer) error {
3850
logger.Debugf("Starting new Deliver loop")
3951
d := newDeliverer(ds, srv)
4052
return d.recv()

orderer/solo/deliver_test.go orderer/common/deliver/deliver_test.go

+27-15
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,32 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package solo
17+
package deliver
1818

1919
import (
2020
"fmt"
2121
"testing"
2222
"time"
2323

24-
"google.golang.org/grpc"
25-
24+
"github.com/hyperledger/fabric/orderer/common/bootstrap/static"
2625
"github.com/hyperledger/fabric/orderer/rawledger/ramledger"
2726
cb "github.com/hyperledger/fabric/protos/common"
2827
ab "github.com/hyperledger/fabric/protos/orderer"
28+
29+
"google.golang.org/grpc"
2930
)
3031

32+
var genesisBlock *cb.Block
33+
34+
func init() {
35+
bootstrapper := static.New()
36+
var err error
37+
genesisBlock, err = bootstrapper.GenesisBlock()
38+
if err != nil {
39+
panic("Error intializing static bootstrap genesis block")
40+
}
41+
}
42+
3143
// MagicLargestWindow is used as the default max window size for initializing the deliver service
3244
const MagicLargestWindow int = 1000
3345

@@ -66,9 +78,9 @@ func TestOldestSeek(t *testing.T) {
6678

6779
m := newMockD()
6880
defer close(m.recvChan)
69-
ds := NewDeliverServer(rl, MagicLargestWindow)
81+
ds := NewHandlerImpl(rl, MagicLargestWindow)
7082

71-
go ds.HandleDeliver(m)
83+
go ds.Handle(m)
7284

7385
m.recvChan <- &ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{WindowSize: uint64(MagicLargestWindow), Start: ab.SeekInfo_OLDEST}}}
7486

@@ -98,9 +110,9 @@ func TestNewestSeek(t *testing.T) {
98110

99111
m := newMockD()
100112
defer close(m.recvChan)
101-
ds := NewDeliverServer(rl, MagicLargestWindow)
113+
ds := NewHandlerImpl(rl, MagicLargestWindow)
102114

103-
go ds.HandleDeliver(m)
115+
go ds.Handle(m)
104116

105117
m.recvChan <- &ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{WindowSize: uint64(MagicLargestWindow), Start: ab.SeekInfo_NEWEST}}}
106118

@@ -126,9 +138,9 @@ func TestSpecificSeek(t *testing.T) {
126138
}
127139

128140
m := newMockD()
129-
ds := NewDeliverServer(rl, MagicLargestWindow)
141+
ds := NewHandlerImpl(rl, MagicLargestWindow)
130142

131-
go ds.HandleDeliver(m)
143+
go ds.Handle(m)
132144

133145
m.recvChan <- &ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{WindowSize: uint64(MagicLargestWindow), Start: ab.SeekInfo_SPECIFIED, SpecifiedNumber: uint64(ledgerSize - 1)}}}
134146

@@ -155,9 +167,9 @@ func TestBadSeek(t *testing.T) {
155167

156168
m := newMockD()
157169
defer close(m.recvChan)
158-
ds := NewDeliverServer(rl, MagicLargestWindow)
170+
ds := NewHandlerImpl(rl, MagicLargestWindow)
159171

160-
go ds.HandleDeliver(m)
172+
go ds.Handle(m)
161173

162174
m.recvChan <- &ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{WindowSize: uint64(MagicLargestWindow), Start: ab.SeekInfo_SPECIFIED, SpecifiedNumber: uint64(ledgerSize - 1)}}}
163175

@@ -188,9 +200,9 @@ func TestBadWindow(t *testing.T) {
188200

189201
m := newMockD()
190202
defer close(m.recvChan)
191-
ds := NewDeliverServer(rl, MagicLargestWindow)
203+
ds := NewHandlerImpl(rl, MagicLargestWindow)
192204

193-
go ds.HandleDeliver(m)
205+
go ds.Handle(m)
194206

195207
m.recvChan <- &ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{WindowSize: uint64(MagicLargestWindow) * 2, Start: ab.SeekInfo_OLDEST}}}
196208

@@ -214,9 +226,9 @@ func TestAck(t *testing.T) {
214226

215227
m := newMockD()
216228
defer close(m.recvChan)
217-
ds := NewDeliverServer(rl, MagicLargestWindow)
229+
ds := NewHandlerImpl(rl, MagicLargestWindow)
218230

219-
go ds.HandleDeliver(m)
231+
go ds.Handle(m)
220232

221233
m.recvChan <- &ab.DeliverUpdate{Type: &ab.DeliverUpdate_Seek{Seek: &ab.SeekInfo{WindowSize: windowSize, Start: ab.SeekInfo_OLDEST}}}
222234

orderer/sbft/backend/backendab.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@ package backend
1818

1919
import (
2020
"github.com/golang/protobuf/proto"
21-
"github.com/hyperledger/fabric/orderer/solo"
21+
"github.com/hyperledger/fabric/orderer/common/deliver"
2222
cb "github.com/hyperledger/fabric/protos/common"
2323
ab "github.com/hyperledger/fabric/protos/orderer"
2424
)
2525

2626
type BackendAB struct {
2727
backend *Backend
28-
deliverserver *solo.DeliverServer
28+
deliverserver deliver.Handler
2929
}
3030

3131
func NewBackendAB(backend *Backend) *BackendAB {
3232
bab := &BackendAB{
3333
backend: backend,
34-
deliverserver: solo.NewDeliverServer(backend.ledger, 1000),
34+
deliverserver: deliver.NewHandlerImpl(backend.ledger, 1000),
3535
}
3636
return bab
3737
}
@@ -64,5 +64,5 @@ func (b *BackendAB) Broadcast(srv ab.AtomicBroadcast_BroadcastServer) error {
6464

6565
// Deliver sends a stream of blocks to a client after ordering
6666
func (b *BackendAB) Deliver(srv ab.AtomicBroadcast_DeliverServer) error {
67-
return b.deliverserver.HandleDeliver(srv)
67+
return b.deliverserver.Handle(srv)
6868
}

orderer/solo/solo.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/hyperledger/fabric/orderer/common/broadcast"
2323
"github.com/hyperledger/fabric/orderer/common/broadcastfilter"
2424
"github.com/hyperledger/fabric/orderer/common/configtx"
25+
"github.com/hyperledger/fabric/orderer/common/deliver"
2526
"github.com/hyperledger/fabric/orderer/rawledger"
2627
ab "github.com/hyperledger/fabric/protos/orderer"
2728

@@ -38,14 +39,14 @@ func init() {
3839
type server struct {
3940
bh broadcast.Handler
4041
bs *broadcastServer
41-
ds *DeliverServer
42+
ds deliver.Handler
4243
}
4344

4445
// New creates a ab.AtomicBroadcastServer based on the solo orderer implementation
4546
func New(queueSize, batchSize, maxWindowSize int, batchTimeout time.Duration, rl rawledger.ReadWriter, grpcServer *grpc.Server, filters *broadcastfilter.RuleSet, configManager configtx.Manager) ab.AtomicBroadcastServer {
4647
logger.Infof("Starting solo with queueSize=%d, batchSize=%d batchTimeout=%v and ledger=%T", queueSize, batchSize, batchTimeout, rl)
4748
bs := newBroadcastServer(batchSize, batchTimeout, rl, filters, configManager)
48-
ds := NewDeliverServer(rl, maxWindowSize)
49+
ds := deliver.NewHandlerImpl(rl, maxWindowSize)
4950
bh := broadcast.NewHandlerImpl(queueSize, bs, filters, configManager)
5051

5152
s := &server{
@@ -65,5 +66,5 @@ func (s *server) Broadcast(srv ab.AtomicBroadcast_BroadcastServer) error {
6566
// Deliver sends a stream of blocks to a client after ordering
6667
func (s *server) Deliver(srv ab.AtomicBroadcast_DeliverServer) error {
6768
logger.Debugf("Starting new Deliver loop")
68-
return s.ds.HandleDeliver(srv)
69+
return s.ds.Handle(srv)
6970
}

0 commit comments

Comments
 (0)