Skip to content

Commit

Permalink
apiserver: fix hanging stream updates
Browse files Browse the repository at this point in the history
  • Loading branch information
birdayz committed May 1, 2019
1 parent 98246ea commit e13b5d0
Show file tree
Hide file tree
Showing 15 changed files with 94 additions and 971 deletions.
4 changes: 2 additions & 2 deletions cmd/apiserver/shadow.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ func (s *shadowAPI) StreamReportedStateChanges(request *shadowpb.StreamReportedS
return status.Error(codes.Unauthenticated, "Unauthenticated")
}

resp, err := s.accountClient.IsAuthorized(context.TODO(), &nodepb.IsAuthorizedRequest{
resp, err := s.accountClient.IsAuthorized(srv.Context(), &nodepb.IsAuthorizedRequest{
Node: request.Id,
Account: account,
Action: nodepb.Action_READ,
Expand All @@ -76,7 +76,7 @@ func (s *shadowAPI) StreamReportedStateChanges(request *shadowpb.StreamReportedS
return status.Error(codes.PermissionDenied, "Permission denied")
}

c, err := s.client.StreamReportedStateChanges(context.Background(), request)
c, err := s.client.StreamReportedStateChanges(srv.Context(), request)
if err != nil {
return err
}
Expand Down
42 changes: 37 additions & 5 deletions pkg/shadow/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ func (s *Server) PatchDesiredState(context context.Context, req *shadowpb.PatchD
}

func (s *Server) StreamReportedStateChanges(request *shadowpb.StreamReportedStateChangesRequest, srv shadowpb.Shadows_StreamReportedStateChangesServer) (err error) {
fmt.Println("only", request.OnlyDelta)
// TODO validate request/Id

var subPathReported string
Expand All @@ -118,8 +117,22 @@ func (s *Server) StreamReportedStateChanges(request *shadowpb.StreamReportedStat
subPathReported = "/reported/full"
}

events := s.PubSub.Sub(request.Id + subPathReported)
defer s.PubSub.Unsub(events)
topicEvents := request.Id + subPathReported
events := s.PubSub.Sub(topicEvents)
defer func() {
fmt.Println("Dferer")
go func() {
s.PubSub.Unsub(events)
}()

// Drain

for range events {

}

fmt.Println("Drained channel")
}()

var subPathDesired string
if request.OnlyDelta {
Expand All @@ -128,11 +141,26 @@ func (s *Server) StreamReportedStateChanges(request *shadowpb.StreamReportedStat
subPathDesired = "/desired/full"
}

eventsDesired := s.PubSub.Sub(request.Id + subPathDesired)
defer s.PubSub.Unsub(eventsDesired)
topicEventsDesired := request.Id + subPathDesired
eventsDesired := s.PubSub.Sub(topicEventsDesired)
defer func() {
fmt.Println("defer2")
go func() {
s.PubSub.Unsub(eventsDesired)
}()

// Drain

for range eventsDesired {

}

fmt.Println("Drained channel")
}()
outer:
for {

fmt.Println("Vor select")
select {
case reportedEvent := <-events:
value, err := toProto(reportedEvent)
Expand Down Expand Up @@ -162,6 +190,10 @@ outer:
fmt.Println(err)
break outer
}
case <-srv.Context().Done():
fmt.Println("DONE")
break outer

}

}
Expand Down
30 changes: 4 additions & 26 deletions vendor/github.com/cskr/pubsub/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions vendor/github.com/cskr/pubsub/go.mod

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

58 changes: 46 additions & 12 deletions vendor/github.com/cskr/pubsub/pubsub.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 0 additions & 33 deletions vendor/github.com/imdario/mergo/.gitignore

This file was deleted.

7 changes: 0 additions & 7 deletions vendor/github.com/imdario/mergo/.travis.yml

This file was deleted.

46 changes: 0 additions & 46 deletions vendor/github.com/imdario/mergo/CODE_OF_CONDUCT.md

This file was deleted.

28 changes: 0 additions & 28 deletions vendor/github.com/imdario/mergo/LICENSE

This file was deleted.

Loading

0 comments on commit e13b5d0

Please sign in to comment.