From f31ac1a8f7da01f70bc7143e0e1292fa4f47d627 Mon Sep 17 00:00:00 2001 From: Gabriel mermelstein Date: Thu, 10 Apr 2025 14:33:17 +0300 Subject: [PATCH] adding reset function --- sds/sds.go | 40 ++++++++++++++++++++++++++++++++++++---- sds/sds_test.go | 15 ++++++++++++++- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/sds/sds.go b/sds/sds.go index 17bae21..65be925 100644 --- a/sds/sds.go +++ b/sds/sds.go @@ -81,6 +81,10 @@ package sds static void cGoCleanupReliabilityManager(void* rmCtx, void* resp) { CleanupReliabilityManager(rmCtx, (SdsCallBack) GoCallback, resp); } + + static void cGoResetReliabilityManager(void* rmCtx, void* resp) { + ResetReliabilityManager(rmCtx, (SdsCallBack) GoCallback, resp); + } */ import "C" import ( @@ -210,11 +214,11 @@ func (rm *ReliabilityManager) OnEvent(eventStr string) { func (rm *ReliabilityManager) Cleanup() error { if rm == nil { err := errors.New("reliability manager is nil") - Error("Failed to destroy %v", err) + Error("Failed to cleanup %v", err) return err } - Debug("Destroying %v", rm.name) + Debug("Cleaning up %v", rm.name) wg := sync.WaitGroup{} var resp = C.allocResp(unsafe.Pointer(&wg)) @@ -226,12 +230,40 @@ func (rm *ReliabilityManager) Cleanup() error { if C.getRet(resp) == C.RET_OK { unregisterReliabilityManager(rm) - Debug("Successfully destroyed %s", rm.name) + Debug("Successfully cleaned up %s", rm.name) return nil } errMsg := "error CleanupReliabilityManager: " + C.GoStringN(C.getMyCharPtr(resp), C.int(C.getMyCharLen(resp))) - Error("Failed to destroy %v: %v", rm.name, errMsg) + Error("Failed to cleanup %v: %v", rm.name, errMsg) + + return errors.New(errMsg) +} + +func (rm *ReliabilityManager) Reset() error { + if rm == nil { + err := errors.New("reliability manager is nil") + Error("Failed to reset %v", err) + return err + } + + Debug("Resetting %v", rm.name) + + wg := sync.WaitGroup{} + var resp = C.allocResp(unsafe.Pointer(&wg)) + defer C.freeResp(resp) + + wg.Add(1) + C.cGoResetReliabilityManager(rm.rmCtx, resp) + wg.Wait() + + if C.getRet(resp) == C.RET_OK { + Debug("Successfully resetted %s", rm.name) + return nil + } + + errMsg := "error ResetReliabilityManager: " + C.GoStringN(C.getMyCharPtr(resp), C.int(C.getMyCharLen(resp))) + Error("Failed to reset %v: %v", rm.name, errMsg) return errors.New(errMsg) } diff --git a/sds/sds_test.go b/sds/sds_test.go index 8158de8..e71e53e 100644 --- a/sds/sds_test.go +++ b/sds/sds_test.go @@ -8,7 +8,7 @@ import ( func TestCreateAndCleanup(t *testing.T) { - rm1, err := NewReliabilityManager("my-channel-id", "rm1") + rm1, err := NewReliabilityManager("my-channel-id-1", "rm1") require.NoError(t, err) rm2, err := NewReliabilityManager("my-channel-id-2", "rm2") @@ -20,3 +20,16 @@ func TestCreateAndCleanup(t *testing.T) { err = rm2.Cleanup() require.NoError(t, err) } + +func TestReset(t *testing.T) { + + rm, err := NewReliabilityManager("my-channel-id", "rm") + require.NoError(t, err) + + err = rm.Reset() + require.NoError(t, err) + + err = rm.Cleanup() + require.NoError(t, err) + +}