Open sczyh30 opened 1 year ago
Client-side error (Java SDK):
2023-01-18 09:52:07.674 ERROR 13375 --- [ault-executor-1] openSergoLogger : Fatal error occurred on OpenSergo gRPC ClientObserver
io.grpc.StatusRuntimeException: INTERNAL: transport: SendHeader called multiple times
at io.grpc.Status.asRuntimeException(Status.java:535) ~[grpc-api-1.42.1.jar:1.42.1]
at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:479) [grpc-stub-1.42.1.jar:1.42.1]
at io.grpc.internal.DelayedClientCall$DelayedListener$3.run(DelayedClientCall.java:463) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.DelayedClientCall$DelayedListener.delayOrExecute(DelayedClientCall.java:427) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.DelayedClientCall$DelayedListener.onClose(DelayedClientCall.java:460) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:562) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:743) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:722) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) [grpc-core-1.42.1.jar:1.42.1]
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) [grpc-core-1.42.1.jar:1.42.1]
Hello, this is my first experience with open source contributions. Would really appreciate it if you explained exactly what is needed to be done.
I would love to work on this issue.
Thanks in advance! :)
@sczyh30 This seems to be caused by too fast a send rate.
I think it can be fixed by adding a send interval or sync.Mutex
control_plane.go:96
const sendInterval = 100 * time.Millisecond
func (c *ControlPlane) sendMessageToStream(stream model.OpenSergoTransportStream, namespace, app, kind string, dataWithVersion *trpb.DataWithVersion, status *trpb.Status, respId string) error {
if stream == nil {
return nil
}
err := stream.SendMsg(&trpb.SubscribeResponse{
Status: status,
Ack: "",
Namespace: namespace,
App: app,
Kind: kind,
DataWithVersion: dataWithVersion,
ControlPlane: c.protoDesc,
ResponseId: respId,
})
if err != nil {
return err
}
time.Sleep(sendInterval)
return nil
}
or
func (c *ControlPlane) sendMessageToStream(stream model.OpenSergoTransportStream, namespace, app, kind string, dataWithVersion *trpb.DataWithVersion, status *trpb.Status, respId string) error {
if stream == nil {
return nil
}
c.mux.Lock()
defer c.mux.Unlock()
return stream.SendMsg(&trpb.SubscribeResponse{
Status: status,
Ack: "",
Namespace: namespace,
App: app,
Kind: kind,
DataWithVersion: dataWithVersion,
ControlPlane: c.protoDesc,
ResponseId: respId,
})
}
reference:
Issue Description
Type: bug report
Describe what happened
Error occurred when CRD changes received:
Tell us your environment
OpenSergo control plane v0.1.0
Anything else we need to know?
NONE