|
@ -7,8 +7,8 @@ import ( |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_agent_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_agent_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
"google.golang.org/protobuf/proto" |
|
|
"google.golang.org/protobuf/proto" |
|
|
"time" |
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
func (a *MessageQueueAgent) SubscribeRecord(stream mq_agent_pb.SeaweedMessagingAgent_SubscribeRecordServer) error { |
|
|
func (a *MessageQueueAgent) SubscribeRecord(stream mq_agent_pb.SeaweedMessagingAgent_SubscribeRecordServer) error { |
|
@ -26,12 +26,15 @@ func (a *MessageQueueAgent) SubscribeRecord(stream mq_agent_pb.SeaweedMessagingA |
|
|
return fmt.Errorf("subscribe session id %d not found", sessionId) |
|
|
return fmt.Errorf("subscribe session id %d not found", sessionId) |
|
|
} |
|
|
} |
|
|
defer func() { |
|
|
defer func() { |
|
|
subscriberEntry.lastActiveTsNs = time.Now().UnixNano() |
|
|
|
|
|
|
|
|
a.subscribersLock.Lock() |
|
|
|
|
|
delete(a.subscribers, sessionId) |
|
|
|
|
|
a.subscribersLock.Unlock() |
|
|
}() |
|
|
}() |
|
|
subscriberEntry.lastActiveTsNs = 0 |
|
|
|
|
|
|
|
|
|
|
|
var lastErr error |
|
|
var lastErr error |
|
|
|
|
|
executors := util.NewLimitedConcurrentExecutor(int(subscriberEntry.entry.SubscriberConfig.SlidingWindowSize)) |
|
|
subscriberEntry.entry.SetOnDataMessageFn(func(m *mq_pb.SubscribeMessageResponse_Data) { |
|
|
subscriberEntry.entry.SetOnDataMessageFn(func(m *mq_pb.SubscribeMessageResponse_Data) { |
|
|
|
|
|
executors.Execute(func() { |
|
|
record := &schema_pb.RecordValue{} |
|
|
record := &schema_pb.RecordValue{} |
|
|
err := proto.Unmarshal(m.Data.Value, record) |
|
|
err := proto.Unmarshal(m.Data.Value, record) |
|
|
if err != nil { |
|
|
if err != nil { |
|
@ -52,6 +55,7 @@ func (a *MessageQueueAgent) SubscribeRecord(stream mq_agent_pb.SeaweedMessagingA |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
go func() { |
|
|
go func() { |
|
|
subErr := subscriberEntry.entry.Subscribe() |
|
|
subErr := subscriberEntry.entry.Subscribe() |
|
|