You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
917 B

  1. package agent
  2. import (
  3. "fmt"
  4. "github.com/seaweedfs/seaweedfs/weed/pb/mq_agent_pb"
  5. )
  6. func (a *MessageQueueAgent) PublishRecord(stream mq_agent_pb.SeaweedMessagingAgent_PublishRecordServer) error {
  7. m, err := stream.Recv()
  8. if err != nil {
  9. return err
  10. }
  11. sessionId := SessionId(m.SessionId)
  12. a.publishersLock.RLock()
  13. publisherEntry, found := a.publishers[sessionId]
  14. a.publishersLock.RUnlock()
  15. if !found {
  16. return fmt.Errorf("publish session id %d not found", sessionId)
  17. }
  18. defer func() {
  19. a.publishersLock.Lock()
  20. delete(a.publishers, sessionId)
  21. a.publishersLock.Unlock()
  22. }()
  23. if m.Value != nil {
  24. if err := publisherEntry.entry.PublishRecord(m.Key, m.Value); err != nil {
  25. return err
  26. }
  27. }
  28. for {
  29. m, err = stream.Recv()
  30. if err != nil {
  31. return err
  32. }
  33. if m.Value == nil {
  34. continue
  35. }
  36. if err := publisherEntry.entry.PublishRecord(m.Key, m.Value); err != nil {
  37. return err
  38. }
  39. }
  40. }