fix: reduce lock msg transfer (#1308)

* fix: reduce lock msg transfer

Signed-off-by: rfyiamcool <rfyiamcool@163.com>

* fix: reduce lock msg transfer

Signed-off-by: rfyiamcool <rfyiamcool@163.com>

---------

Signed-off-by: rfyiamcool <rfyiamcool@163.com>
pull/1348/head
fengyun.rui 1 year ago committed by GitHub
parent 69eb24f702
commit fd42c6dced
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -21,14 +21,13 @@ import (
"net/http" "net/http"
"sync" "sync"
"github.com/OpenIMSDK/tools/mw"
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/client_golang/prometheus/collectors"
"github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/client_golang/prometheus/promhttp"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"github.com/OpenIMSDK/tools/mw"
"github.com/openimsdk/open-im-server/v3/pkg/common/config" "github.com/openimsdk/open-im-server/v3/pkg/common/config"
"github.com/openimsdk/open-im-server/v3/pkg/common/db/cache" "github.com/openimsdk/open-im-server/v3/pkg/common/db/cache"
"github.com/openimsdk/open-im-server/v3/pkg/common/db/controller" "github.com/openimsdk/open-im-server/v3/pkg/common/db/controller"

@ -427,49 +427,62 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(
break break
} }
} }
rwLock := new(sync.RWMutex)
log.ZDebug(context.Background(), "online new session msg come", "highWaterMarkOffset", log.ZDebug(context.Background(), "online new session msg come", "highWaterMarkOffset",
claim.HighWaterMarkOffset(), "topic", claim.Topic(), "partition", claim.Partition()) claim.HighWaterMarkOffset(), "topic", claim.Topic(), "partition", claim.Partition())
cMsg := make([]*sarama.ConsumerMessage, 0, 1000)
t := time.NewTicker(time.Millisecond * 100) split := 1000
rwLock := new(sync.RWMutex)
messages := make([]*sarama.ConsumerMessage, 0, 1000)
ticker := time.NewTicker(time.Millisecond * 100)
go func() { go func() {
for { for {
select { select {
case <-t.C: case <-ticker.C:
if len(cMsg) > 0 { if len(messages) == 0 {
rwLock.Lock() continue
ccMsg := make([]*sarama.ConsumerMessage, 0, 1000) }
for _, v := range cMsg {
ccMsg = append(ccMsg, v) rwLock.Lock()
} buffer := make([]*sarama.ConsumerMessage, 0, len(messages))
cMsg = make([]*sarama.ConsumerMessage, 0, 1000) buffer = append(buffer, messages...)
rwLock.Unlock()
split := 1000 // reuse slice, set cap to 0
ctx := mcontext.WithTriggerIDContext(context.Background(), utils.OperationIDGenerator()) messages = messages[:0]
log.ZDebug(ctx, "timer trigger msg consumer start", "length", len(ccMsg)) rwLock.Unlock()
for i := 0; i < len(ccMsg)/split; i++ {
// log.Debug() start := time.Now()
och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ ctx := mcontext.WithTriggerIDContext(context.Background(), utils.OperationIDGenerator())
ctx: ctx, cMsgList: ccMsg[i*split : (i+1)*split], log.ZDebug(ctx, "timer trigger msg consumer start", "length", len(buffer))
}} for i := 0; i < len(buffer)/split; i++ {
} och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{
if (len(ccMsg) % split) > 0 { ctx: ctx, cMsgList: buffer[i*split : (i+1)*split],
och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ }}
ctx: ctx, cMsgList: ccMsg[split*(len(ccMsg)/split):], }
}} if (len(buffer) % split) > 0 {
} och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{
log.ZDebug(ctx, "timer trigger msg consumer end", "length", len(ccMsg)) ctx: ctx, cMsgList: buffer[split*(len(buffer)/split):],
}}
} }
log.ZDebug(ctx, "timer trigger msg consumer end",
"length", len(buffer), "time_cost", time.Since(start),
)
} }
} }
}() }()
for msg := range claim.Messages() { for msg := range claim.Messages() {
rwLock.Lock() if len(msg.Value) == 0 {
if len(msg.Value) != 0 { continue
cMsg = append(cMsg, msg)
} }
rwLock.Lock()
messages = append(messages, msg)
rwLock.Unlock() rwLock.Unlock()
sess.MarkMessage(msg, "") sess.MarkMessage(msg, "")
} }
return nil return nil
} }

Loading…
Cancel
Save