mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 07:14:50 +00:00
NOISSUE - Remove redundant retry logic (#293)
* remove redundant logic Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix test Signed-off-by: Sammy Oina <sammyoina@gmail.com> * remove line Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix internal tests Signed-off-by: Sammy Oina <sammyoina@gmail.com> * add test cases Signed-off-by: Sammy Oina <sammyoina@gmail.com> * all pb files Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com>
This commit is contained in:
committed by
GitHub
parent
69b8dfa3ea
commit
534ad91623
+10
-62
@@ -5,42 +5,28 @@ package events
|
||||
import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
)
|
||||
|
||||
const retryInterval = 5 * time.Second
|
||||
|
||||
type service struct {
|
||||
service string
|
||||
computationID string
|
||||
conn io.Writer
|
||||
cachedMessages [][]byte
|
||||
mutex sync.Mutex
|
||||
stopRetry chan struct{}
|
||||
service string
|
||||
computationID string
|
||||
conn io.Writer
|
||||
}
|
||||
|
||||
//go:generate mockery --name Service --output=./mocks --filename events.go --quiet --note "Copyright (c) Ultraviolet \n // SPDX-License-Identifier: Apache-2.0"
|
||||
type Service interface {
|
||||
SendEvent(event, status string, details json.RawMessage) error
|
||||
Close()
|
||||
}
|
||||
|
||||
func New(svc, computationID string, conn io.Writer) (Service, error) {
|
||||
s := &service{
|
||||
service: svc,
|
||||
computationID: computationID,
|
||||
conn: conn,
|
||||
cachedMessages: make([][]byte, 0),
|
||||
stopRetry: make(chan struct{}),
|
||||
}
|
||||
|
||||
go s.periodicRetry()
|
||||
|
||||
return s, nil
|
||||
return &service{
|
||||
service: svc,
|
||||
computationID: computationID,
|
||||
conn: conn,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *service) SendEvent(event, status string, details json.RawMessage) error {
|
||||
@@ -56,44 +42,6 @@ func (s *service) SendEvent(event, status string, details json.RawMessage) error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.mutex.Lock()
|
||||
defer s.mutex.Unlock()
|
||||
|
||||
if _, err := s.conn.Write(protoBody); err != nil {
|
||||
s.cachedMessages = append(s.cachedMessages, protoBody)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *service) periodicRetry() {
|
||||
ticker := time.NewTicker(retryInterval)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
s.retrySendCachedMessages()
|
||||
case <-s.stopRetry:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *service) retrySendCachedMessages() {
|
||||
s.mutex.Lock()
|
||||
defer s.mutex.Unlock()
|
||||
tmp := [][]byte{}
|
||||
for _, msg := range s.cachedMessages {
|
||||
if _, err := s.conn.Write(msg); err != nil {
|
||||
tmp = append(tmp, msg)
|
||||
}
|
||||
}
|
||||
s.cachedMessages = tmp
|
||||
}
|
||||
|
||||
func (s *service) Close() {
|
||||
close(s.stopRetry)
|
||||
_, err = s.conn.Write(protoBody)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -61,21 +61,4 @@ func TestSendEventFailure(t *testing.T) {
|
||||
err = svc.SendEvent("test_event", "failure", details)
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "write error", err.Error())
|
||||
|
||||
assert.Len(t, svc.(*service).cachedMessages, 1)
|
||||
}
|
||||
|
||||
func TestClose(t *testing.T) {
|
||||
mockConnection := &mockConn{}
|
||||
|
||||
svc, err := New("test_service", "12345", mockConnection)
|
||||
assert.NoError(t, err)
|
||||
|
||||
svc.Close()
|
||||
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
details := json.RawMessage(`{"key": "value"}`)
|
||||
err = svc.SendEvent("test_event", "success", details)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user