@@ -22,15 +22,15 @@ import (
2222 "sync/atomic"
2323 "time"
2424
25- "github.com/linkall-labs/vanus/observability/tracing"
26- "go.opentelemetry.io/otel/trace"
27-
25+ // third-party libraries
2826 ce "github.com/cloudevents/sdk-go/v2"
27+ "go.opentelemetry.io/otel/trace"
2928 "google.golang.org/grpc"
3029
3130 // first-party libraries
32-
33- // third-party libraries
31+ "github.com/linkall-labs/vanus/observability/log"
32+ "github.com/linkall-labs/vanus/observability/tracing"
33+ "github.com/linkall-labs/vanus/pkg/errors"
3434 cepb "github.com/linkall-labs/vanus/proto/pkg/cloudevents"
3535 errpb "github.com/linkall-labs/vanus/proto/pkg/errors"
3636 segpb "github.com/linkall-labs/vanus/proto/pkg/segment"
@@ -40,8 +40,6 @@ import (
4040 "github.com/linkall-labs/vanus/client/internal/vanus/net/rpc"
4141 "github.com/linkall-labs/vanus/client/internal/vanus/net/rpc/bare"
4242 "github.com/linkall-labs/vanus/client/pkg/primitive"
43- "github.com/linkall-labs/vanus/observability/log"
44- "github.com/linkall-labs/vanus/pkg/errors"
4543)
4644
4745func newBlockStore (endpoint string ) (* BlockStore , error ) {
@@ -53,13 +51,20 @@ func newBlockStore(endpoint string) (*BlockStore, error) {
5351 })),
5452 tracer : tracing .NewTracer ("internal.store.BlockStore" , trace .SpanKindClient ),
5553 }
54+ // TODO(jiangkai): delay creating streams to reduce invalid overhead.
5655 _ , err = s .connectAppendStream (context .Background ())
5756 if err != nil {
57+ // close client
58+ s .client .Close ()
5859 // TODO: check error
5960 return nil , err
6061 }
6162 _ , err = s .connectReadStream (context .Background ())
6263 if err != nil {
64+ // close append stream
65+ s .append .releaseStream ()
66+ // close client
67+ s .client .Close ()
6368 // TODO: check error
6469 return nil , err
6570 }
@@ -333,7 +338,7 @@ func (s *BlockStore) AppendManyStream(ctx context.Context, block uint64, events
333338 }
334339
335340 // generate unique opaqueID
336- atomic .AddUint64 (& append .opaqueID , 1 )
341+ opaqueID := atomic .AddUint64 (& append .opaqueID , 1 )
337342
338343 //TODO(jiangkai): delete the reference of CloudEvents/v2 in Vanus
339344 eventpbs := make ([]* cepb.CloudEvent , len (events ))
@@ -346,13 +351,13 @@ func (s *BlockStore) AppendManyStream(ctx context.Context, block uint64, events
346351 }
347352
348353 donec := make (chan struct {})
349- append .callbacks .Store (append . opaqueID , appendCallback (func (res * segpb.AppendToBlockStreamResponse ) {
354+ append .callbacks .Store (opaqueID , appendCallback (func (res * segpb.AppendToBlockStreamResponse ) {
350355 resp = res
351356 close (donec )
352357 }))
353358
354359 req := & segpb.AppendToBlockStreamRequest {
355- Id : append . opaqueID ,
360+ Id : opaqueID ,
356361 BlockId : block ,
357362 Events : & cepb.CloudEventBatch {
358363 Events : eventpbs ,
@@ -367,10 +372,10 @@ func (s *BlockStore) AppendManyStream(ctx context.Context, block uint64, events
367372 append .releaseStream ()
368373 // reset new stream connections
369374 s .connectAppendStream (ctx )
370- c , _ := append .callbacks .LoadAndDelete (append . opaqueID )
375+ c , _ := append .callbacks .LoadAndDelete (opaqueID )
371376 if c != nil {
372377 c .(appendCallback )(& segpb.AppendToBlockStreamResponse {
373- Id : append . opaqueID ,
378+ Id : opaqueID ,
374379 ResponseCode : errpb .ErrorCode_CLOSED ,
375380 ResponseMsg : "append stream closed" ,
376381 Offsets : []int64 {},
@@ -382,10 +387,10 @@ func (s *BlockStore) AppendManyStream(ctx context.Context, block uint64, events
382387 select {
383388 case <- donec :
384389 case <- _ctx .Done ():
385- c , _ := append .callbacks .LoadAndDelete (append . opaqueID )
390+ c , _ := append .callbacks .LoadAndDelete (opaqueID )
386391 if c != nil {
387392 c .(appendCallback )(& segpb.AppendToBlockStreamResponse {
388- Id : append . opaqueID ,
393+ Id : opaqueID ,
389394 ResponseCode : errpb .ErrorCode_CONTEXT_CANCELED ,
390395 ResponseMsg : "append stream context canceled" ,
391396 Offsets : []int64 {},
@@ -463,15 +468,16 @@ func (s *BlockStore) ReadStream(
463468 }
464469
465470 // generate unique RequestId
466- atomic .AddUint64 (& read .opaqueID , 1 )
471+ opaqueID := atomic .AddUint64 (& read .opaqueID , 1 )
467472
468473 donec := make (chan struct {})
469- read .callbacks .Store (read . opaqueID , readCallback (func (res * segpb.ReadFromBlockStreamResponse ) {
474+ read .callbacks .Store (opaqueID , readCallback (func (res * segpb.ReadFromBlockStreamResponse ) {
470475 resp = res
471476 close (donec )
472477 }))
473478
474479 req := & segpb.ReadFromBlockStreamRequest {
480+ Id : opaqueID ,
475481 BlockId : block ,
476482 Offset : offset ,
477483 Number : int64 (size ),
@@ -484,10 +490,10 @@ func (s *BlockStore) ReadStream(
484490 })
485491 read .releaseStream ()
486492 s .connectReadStream (ctx )
487- c , _ := read .callbacks .LoadAndDelete (read . opaqueID )
493+ c , _ := read .callbacks .LoadAndDelete (opaqueID )
488494 if c != nil {
489495 c .(readCallback )(& segpb.ReadFromBlockStreamResponse {
490- Id : read . opaqueID ,
496+ Id : opaqueID ,
491497 ResponseCode : errpb .ErrorCode_CLOSED ,
492498 ResponseMsg : "read stream closed" ,
493499 Events : & cepb.CloudEventBatch {
@@ -501,10 +507,10 @@ func (s *BlockStore) ReadStream(
501507 select {
502508 case <- donec :
503509 case <- _ctx .Done ():
504- c , _ := read .callbacks .LoadAndDelete (read . opaqueID )
510+ c , _ := read .callbacks .LoadAndDelete (opaqueID )
505511 if c != nil {
506512 c .(readCallback )(& segpb.ReadFromBlockStreamResponse {
507- Id : read . opaqueID ,
513+ Id : opaqueID ,
508514 ResponseCode : errpb .ErrorCode_CONTEXT_CANCELED ,
509515 ResponseMsg : "read stream context canceled" ,
510516 Events : & cepb.CloudEventBatch {
0 commit comments