From 0da77e00450dde71b08b4543cf1fd5d8bbb75447 Mon Sep 17 00:00:00 2001 From: Geoffrey Ragot Date: Wed, 29 Jan 2025 16:59:45 +0100 Subject: [PATCH] fix: race --- .../api/bulking/mocks_ledger_controller_test.go | 3 +++ .../api/common/mocks_ledger_controller_test.go | 3 +++ .../api/common/mocks_system_controller_test.go | 3 +++ internal/api/v1/mocks_ledger_controller_test.go | 3 +++ internal/api/v1/mocks_system_controller_test.go | 3 +++ internal/api/v2/mocks_ledger_controller_test.go | 3 +++ internal/api/v2/mocks_system_controller_test.go | 3 +++ .../controller/ledger/controller_generated_test.go | 3 +++ ...with_too_many_client_handling_generated_test.go | 3 +++ .../controller/ledger/listener_generated_test.go | 3 +++ .../ledger/numscript_parser_generated_test.go | 3 +++ .../ledger/numscript_runtime_generated_test.go | 3 +++ internal/controller/ledger/store_generated_test.go | 5 +++++ internal/leadership/context.go | 14 ++++++++++++-- internal/storage/driver/buckets_generated_test.go | 4 ++++ internal/storage/driver/ledger_generated_test.go | 3 +++ internal/storage/driver/system_generated_test.go | 3 +++ 17 files changed, 63 insertions(+), 2 deletions(-) diff --git a/internal/api/bulking/mocks_ledger_controller_test.go b/internal/api/bulking/mocks_ledger_controller_test.go index 2cede2100..cbf90fc33 100644 --- a/internal/api/bulking/mocks_ledger_controller_test.go +++ b/internal/api/bulking/mocks_ledger_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/ledger/controller.go -destination mocks_ledger_controller_test.go -package bulking --mock_names Controller=LedgerController . Controller +// + package bulking import ( @@ -21,6 +23,7 @@ import ( type LedgerController struct { ctrl *gomock.Controller recorder *LedgerControllerMockRecorder + isgomock struct{} } // LedgerControllerMockRecorder is the mock recorder for LedgerController. diff --git a/internal/api/common/mocks_ledger_controller_test.go b/internal/api/common/mocks_ledger_controller_test.go index c263cfa1f..01e775d3f 100644 --- a/internal/api/common/mocks_ledger_controller_test.go +++ b/internal/api/common/mocks_ledger_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/ledger/controller.go -destination mocks_ledger_controller_test.go -package common --mock_names Controller=LedgerController . Controller +// + package common import ( @@ -21,6 +23,7 @@ import ( type LedgerController struct { ctrl *gomock.Controller recorder *LedgerControllerMockRecorder + isgomock struct{} } // LedgerControllerMockRecorder is the mock recorder for LedgerController. diff --git a/internal/api/common/mocks_system_controller_test.go b/internal/api/common/mocks_system_controller_test.go index b0fbeaea8..0c85dc246 100644 --- a/internal/api/common/mocks_system_controller_test.go +++ b/internal/api/common/mocks_system_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/system/controller.go -destination mocks_system_controller_test.go -package common --mock_names Controller=SystemController . Controller +// + package common import ( @@ -19,6 +21,7 @@ import ( type SystemController struct { ctrl *gomock.Controller recorder *SystemControllerMockRecorder + isgomock struct{} } // SystemControllerMockRecorder is the mock recorder for SystemController. diff --git a/internal/api/v1/mocks_ledger_controller_test.go b/internal/api/v1/mocks_ledger_controller_test.go index f89439826..2f3a686e1 100644 --- a/internal/api/v1/mocks_ledger_controller_test.go +++ b/internal/api/v1/mocks_ledger_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/ledger/controller.go -destination mocks_ledger_controller_test.go -package v1 --mock_names Controller=LedgerController . Controller +// + package v1 import ( @@ -21,6 +23,7 @@ import ( type LedgerController struct { ctrl *gomock.Controller recorder *LedgerControllerMockRecorder + isgomock struct{} } // LedgerControllerMockRecorder is the mock recorder for LedgerController. diff --git a/internal/api/v1/mocks_system_controller_test.go b/internal/api/v1/mocks_system_controller_test.go index 1ad57614e..f3f19b232 100644 --- a/internal/api/v1/mocks_system_controller_test.go +++ b/internal/api/v1/mocks_system_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/system/controller.go -destination mocks_system_controller_test.go -package v1 --mock_names Controller=SystemController . Controller +// + package v1 import ( @@ -19,6 +21,7 @@ import ( type SystemController struct { ctrl *gomock.Controller recorder *SystemControllerMockRecorder + isgomock struct{} } // SystemControllerMockRecorder is the mock recorder for SystemController. diff --git a/internal/api/v2/mocks_ledger_controller_test.go b/internal/api/v2/mocks_ledger_controller_test.go index 2cbbfee4a..a0d043ca4 100644 --- a/internal/api/v2/mocks_ledger_controller_test.go +++ b/internal/api/v2/mocks_ledger_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/ledger/controller.go -destination mocks_ledger_controller_test.go -package v2 --mock_names Controller=LedgerController . Controller +// + package v2 import ( @@ -21,6 +23,7 @@ import ( type LedgerController struct { ctrl *gomock.Controller recorder *LedgerControllerMockRecorder + isgomock struct{} } // LedgerControllerMockRecorder is the mock recorder for LedgerController. diff --git a/internal/api/v2/mocks_system_controller_test.go b/internal/api/v2/mocks_system_controller_test.go index 45d1eaaa5..c4d8c215a 100644 --- a/internal/api/v2/mocks_system_controller_test.go +++ b/internal/api/v2/mocks_system_controller_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../../controller/system/controller.go -destination mocks_system_controller_test.go -package v2 --mock_names Controller=SystemController . Controller +// + package v2 import ( @@ -19,6 +21,7 @@ import ( type SystemController struct { ctrl *gomock.Controller recorder *SystemControllerMockRecorder + isgomock struct{} } // SystemControllerMockRecorder is the mock recorder for SystemController. diff --git a/internal/controller/ledger/controller_generated_test.go b/internal/controller/ledger/controller_generated_test.go index 7e6601231..1495b8c74 100644 --- a/internal/controller/ledger/controller_generated_test.go +++ b/internal/controller/ledger/controller_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source controller.go -destination controller_generated_test.go -package ledger . Controller +// + package ledger import ( @@ -20,6 +22,7 @@ import ( type MockController struct { ctrl *gomock.Controller recorder *MockControllerMockRecorder + isgomock struct{} } // MockControllerMockRecorder is the mock recorder for MockController. diff --git a/internal/controller/ledger/controller_with_too_many_client_handling_generated_test.go b/internal/controller/ledger/controller_with_too_many_client_handling_generated_test.go index 2f0c421cb..9f397752e 100644 --- a/internal/controller/ledger/controller_with_too_many_client_handling_generated_test.go +++ b/internal/controller/ledger/controller_with_too_many_client_handling_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source controller_with_too_many_client_handling.go -destination controller_with_too_many_client_handling_generated_test.go -package ledger . DelayCalculator -typed +// + package ledger import ( @@ -16,6 +18,7 @@ import ( type MockDelayCalculator struct { ctrl *gomock.Controller recorder *MockDelayCalculatorMockRecorder + isgomock struct{} } // MockDelayCalculatorMockRecorder is the mock recorder for MockDelayCalculator. diff --git a/internal/controller/ledger/listener_generated_test.go b/internal/controller/ledger/listener_generated_test.go index 44df6a6a7..e0e7e584c 100644 --- a/internal/controller/ledger/listener_generated_test.go +++ b/internal/controller/ledger/listener_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source listener.go -destination listener_generated_test.go -package ledger . Listener +// + package ledger import ( @@ -18,6 +20,7 @@ import ( type MockListener struct { ctrl *gomock.Controller recorder *MockListenerMockRecorder + isgomock struct{} } // MockListenerMockRecorder is the mock recorder for MockListener. diff --git a/internal/controller/ledger/numscript_parser_generated_test.go b/internal/controller/ledger/numscript_parser_generated_test.go index f319d367d..5219a92e2 100644 --- a/internal/controller/ledger/numscript_parser_generated_test.go +++ b/internal/controller/ledger/numscript_parser_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source numscript_parser.go -destination numscript_parser_generated_test.go -package ledger . NumscriptParser +// + package ledger import ( @@ -15,6 +17,7 @@ import ( type MockNumscriptParser struct { ctrl *gomock.Controller recorder *MockNumscriptParserMockRecorder + isgomock struct{} } // MockNumscriptParserMockRecorder is the mock recorder for MockNumscriptParser. diff --git a/internal/controller/ledger/numscript_runtime_generated_test.go b/internal/controller/ledger/numscript_runtime_generated_test.go index 254a78556..8a6343843 100644 --- a/internal/controller/ledger/numscript_runtime_generated_test.go +++ b/internal/controller/ledger/numscript_runtime_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source numscript_runtime.go -destination numscript_runtime_generated_test.go -package ledger . NumscriptRuntime +// + package ledger import ( @@ -16,6 +18,7 @@ import ( type MockNumscriptRuntime struct { ctrl *gomock.Controller recorder *MockNumscriptRuntimeMockRecorder + isgomock struct{} } // MockNumscriptRuntimeMockRecorder is the mock recorder for MockNumscriptRuntime. diff --git a/internal/controller/ledger/store_generated_test.go b/internal/controller/ledger/store_generated_test.go index 7a677d58e..accb45087 100644 --- a/internal/controller/ledger/store_generated_test.go +++ b/internal/controller/ledger/store_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source store.go -destination store_generated_test.go -package ledger . PaginatedResource +// + package ledger import ( @@ -23,6 +25,7 @@ import ( type MockStore struct { ctrl *gomock.Controller recorder *MockStoreMockRecorder + isgomock struct{} } // MockStoreMockRecorder is the mock recorder for MockStore. @@ -370,6 +373,7 @@ func (mr *MockStoreMockRecorder) Volumes() *gomock.Call { type MockResource[ResourceType any, OptionsType any] struct { ctrl *gomock.Controller recorder *MockResourceMockRecorder[ResourceType, OptionsType] + isgomock struct{} } // MockResourceMockRecorder is the mock recorder for MockResource. @@ -423,6 +427,7 @@ func (mr *MockResourceMockRecorder[ResourceType, OptionsType]) GetOne(ctx, query type MockPaginatedResource[ResourceType any, OptionsType any, PaginationQueryType PaginatedQuery[OptionsType]] struct { ctrl *gomock.Controller recorder *MockPaginatedResourceMockRecorder[ResourceType, OptionsType, PaginationQueryType] + isgomock struct{} } // MockPaginatedResourceMockRecorder is the mock recorder for MockPaginatedResource. diff --git a/internal/leadership/context.go b/internal/leadership/context.go index 4311b2b63..a79bdb450 100644 --- a/internal/leadership/context.go +++ b/internal/leadership/context.go @@ -2,6 +2,7 @@ package leadership import ( "context" + "sync" ) type contextKey string @@ -17,7 +18,11 @@ func IsLeader(ctx context.Context) bool { if h == nil { return false } - return h.(*holder).isLeader + holder := h.(*holder) + holder.Lock() + defer holder.Unlock() + + return holder.isLeader } func setIsLeader(ctx context.Context, isLeader bool) { @@ -25,9 +30,14 @@ func setIsLeader(ctx context.Context, isLeader bool) { if h == nil { return } - h.(*holder).isLeader = isLeader + holder := h.(*holder) + holder.Lock() + defer holder.Unlock() + + holder.isLeader = isLeader } type holder struct { + sync.Mutex isLeader bool } diff --git a/internal/storage/driver/buckets_generated_test.go b/internal/storage/driver/buckets_generated_test.go index b71780813..61635f327 100644 --- a/internal/storage/driver/buckets_generated_test.go +++ b/internal/storage/driver/buckets_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../bucket/bucket.go -destination buckets_generated_test.go -package driver --mock_names Factory=BucketFactory . Factory +// + package driver import ( @@ -19,6 +21,7 @@ import ( type MockBucket struct { ctrl *gomock.Controller recorder *MockBucketMockRecorder + isgomock struct{} } // MockBucketMockRecorder is the mock recorder for MockBucket. @@ -135,6 +138,7 @@ func (mr *MockBucketMockRecorder) Migrate(ctx any, opts ...any) *gomock.Call { type BucketFactory struct { ctrl *gomock.Controller recorder *BucketFactoryMockRecorder + isgomock struct{} } // BucketFactoryMockRecorder is the mock recorder for BucketFactory. diff --git a/internal/storage/driver/ledger_generated_test.go b/internal/storage/driver/ledger_generated_test.go index fb2f8a6ab..b940e41b3 100644 --- a/internal/storage/driver/ledger_generated_test.go +++ b/internal/storage/driver/ledger_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../ledger/factory.go -destination ledger_generated_test.go -package driver --mock_names Factory=LedgerStoreFactory . Factory +// + package driver import ( @@ -18,6 +20,7 @@ import ( type LedgerStoreFactory struct { ctrl *gomock.Controller recorder *LedgerStoreFactoryMockRecorder + isgomock struct{} } // LedgerStoreFactoryMockRecorder is the mock recorder for LedgerStoreFactory. diff --git a/internal/storage/driver/system_generated_test.go b/internal/storage/driver/system_generated_test.go index d6afce573..6ce339a3f 100644 --- a/internal/storage/driver/system_generated_test.go +++ b/internal/storage/driver/system_generated_test.go @@ -3,6 +3,8 @@ // Generated by this command: // // mockgen -write_source_comment=false -write_package_comment=false -source ../system/store.go -destination system_generated_test.go -package driver --mock_names Store=SystemStore . Store +// + package driver import ( @@ -21,6 +23,7 @@ import ( type SystemStore struct { ctrl *gomock.Controller recorder *SystemStoreMockRecorder + isgomock struct{} } // SystemStoreMockRecorder is the mock recorder for SystemStore.