Skip to content

Commit 28687ca

Browse files
committed
[FAB-2606] Enable deliver_stdout to seek
https://jira.hyperledger.org/browse/FAB-2606 The `deliver_stdout` client is useful for debugging. This changeset introduces a `seek` flag that allows us to seek to oldest or newest (using the convention in [1]), or extract a specific block. [1] https://godoc.org/github.com/Shopify/sarama#pkg-constants Change-Id: Iaf8d3c596cfc23768d2bfc257ee32ef9a4512c54 Signed-off-by: Kostas Christidis <[email protected]>
1 parent d4fa505 commit 28687ca

File tree

1 file changed

+32
-7
lines changed
  • orderer/sample_clients/deliver_stdout

1 file changed

+32
-7
lines changed

orderer/sample_clients/deliver_stdout/client.go

+32-7
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ import (
3030
"google.golang.org/grpc"
3131
)
3232

33+
var (
34+
oldest = &ab.SeekPosition{Type: &ab.SeekPosition_Oldest{Oldest: &ab.SeekOldest{}}}
35+
newest = &ab.SeekPosition{Type: &ab.SeekPosition_Newest{Newest: &ab.SeekNewest{}}}
36+
maxStop = &ab.SeekPosition{Type: &ab.SeekPosition_Specified{Specified: &ab.SeekSpecified{Number: math.MaxUint64}}}
37+
)
38+
3339
type deliverClient struct {
3440
client ab.AtomicBroadcast_DeliverClient
3541
chainID string
@@ -39,7 +45,7 @@ func newDeliverClient(client ab.AtomicBroadcast_DeliverClient, chainID string) *
3945
return &deliverClient{client: client, chainID: chainID}
4046
}
4147

42-
func seekHelper(chainID string, start *ab.SeekPosition) *cb.Envelope {
48+
func seekHelper(chainID string, start *ab.SeekPosition, stop *ab.SeekPosition) *cb.Envelope {
4349
return &cb.Envelope{
4450
Payload: utils.MarshalOrPanic(&cb.Payload{
4551
Header: &cb.Header{
@@ -51,23 +57,24 @@ func seekHelper(chainID string, start *ab.SeekPosition) *cb.Envelope {
5157

5258
Data: utils.MarshalOrPanic(&ab.SeekInfo{
5359
Start: start,
54-
Stop: &ab.SeekPosition{Type: &ab.SeekPosition_Specified{Specified: &ab.SeekSpecified{Number: math.MaxUint64}}},
60+
Stop: stop,
5561
Behavior: ab.SeekInfo_BLOCK_UNTIL_READY,
5662
}),
5763
}),
5864
}
5965
}
6066

6167
func (r *deliverClient) seekOldest() error {
62-
return r.client.Send(seekHelper(r.chainID, &ab.SeekPosition{Type: &ab.SeekPosition_Oldest{Oldest: &ab.SeekOldest{}}}))
68+
return r.client.Send(seekHelper(r.chainID, oldest, maxStop))
6369
}
6470

6571
func (r *deliverClient) seekNewest() error {
66-
return r.client.Send(seekHelper(r.chainID, &ab.SeekPosition{Type: &ab.SeekPosition_Newest{Newest: &ab.SeekNewest{}}}))
72+
return r.client.Send(seekHelper(r.chainID, newest, maxStop))
6773
}
6874

69-
func (r *deliverClient) seek(blockNumber uint64) error {
70-
return r.client.Send(seekHelper(r.chainID, &ab.SeekPosition{Type: &ab.SeekPosition_Specified{Specified: &ab.SeekSpecified{Number: blockNumber}}}))
75+
func (r *deliverClient) seekSingle(blockNumber uint64) error {
76+
specific := &ab.SeekPosition{Type: &ab.SeekPosition_Specified{Specified: &ab.SeekSpecified{Number: blockNumber}}}
77+
return r.client.Send(seekHelper(r.chainID, specific, specific))
7178
}
7279

7380
func (r *deliverClient) readUntilClose() {
@@ -93,11 +100,21 @@ func main() {
93100

94101
var chainID string
95102
var serverAddr string
103+
var seek int
96104

97105
flag.StringVar(&serverAddr, "server", fmt.Sprintf("%s:%d", config.General.ListenAddress, config.General.ListenPort), "The RPC server to connect to.")
98106
flag.StringVar(&chainID, "chainID", provisional.TestChainID, "The chain ID to deliver from.")
107+
flag.IntVar(&seek, "seek", -2, "Specify the range of requested blocks."+
108+
"Acceptable values:"+
109+
"-2 (or -1) to start from oldest (or newest) and keep at it indefinitely."+
110+
"N >= 0 to fetch block N only.")
99111
flag.Parse()
100112

113+
if seek < -2 {
114+
fmt.Println("Wrong seek value.")
115+
flag.PrintDefaults()
116+
}
117+
101118
conn, err := grpc.Dial(serverAddr, grpc.WithInsecure())
102119
if err != nil {
103120
fmt.Println("Error connecting:", err)
@@ -110,7 +127,15 @@ func main() {
110127
}
111128

112129
s := newDeliverClient(client, chainID)
113-
err = s.seekOldest()
130+
switch seek {
131+
case -2:
132+
err = s.seekOldest()
133+
case -1:
134+
err = s.seekNewest()
135+
default:
136+
err = s.seekSingle(uint64(seek))
137+
}
138+
114139
if err != nil {
115140
fmt.Println("Received error:", err)
116141
}

0 commit comments

Comments
 (0)