[#2210] services/tree: Drop messages not in queue
Currently, under high load clients are blocked on channel send and the number of goroutines can increase indefinitely. In this commit we drop replication messages if send/recv queue is full and rely on a background synchronization. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
25d5995cef
commit
67c97c6804
2 changed files with 5 additions and 2 deletions
|
@ -148,7 +148,7 @@ func (s *Service) pushToQueue(cid cidSDK.ID, treeID string, op *pilorama.LogMove
|
||||||
treeID: treeID,
|
treeID: treeID,
|
||||||
op: op,
|
op: op,
|
||||||
}:
|
}:
|
||||||
case <-s.closeCh:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -485,7 +485,8 @@ func (s *Service) Apply(_ context.Context, req *ApplyRequest) (*ApplyResponse, e
|
||||||
return nil, fmt.Errorf("can't parse meta-information: %w", err)
|
return nil, fmt.Errorf("can't parse meta-information: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
s.replicateLocalCh <- applyOp{
|
select {
|
||||||
|
case s.replicateLocalCh <- applyOp{
|
||||||
treeID: req.GetBody().GetTreeId(),
|
treeID: req.GetBody().GetTreeId(),
|
||||||
CIDDescriptor: pilorama.CIDDescriptor{CID: cid, Position: pos, Size: size},
|
CIDDescriptor: pilorama.CIDDescriptor{CID: cid, Position: pos, Size: size},
|
||||||
Move: pilorama.Move{
|
Move: pilorama.Move{
|
||||||
|
@ -493,6 +494,8 @@ func (s *Service) Apply(_ context.Context, req *ApplyRequest) (*ApplyResponse, e
|
||||||
Child: op.GetChildId(),
|
Child: op.GetChildId(),
|
||||||
Meta: meta,
|
Meta: meta,
|
||||||
},
|
},
|
||||||
|
}:
|
||||||
|
default:
|
||||||
}
|
}
|
||||||
return &ApplyResponse{Body: &ApplyResponse_Body{}, Signature: &Signature{}}, nil
|
return &ApplyResponse{Body: &ApplyResponse_Body{}, Signature: &Signature{}}, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue