From fe165782a331a3764ca754e554312befae807481 Mon Sep 17 00:00:00 2001 From: Derek Su Date: Tue, 19 Nov 2024 09:46:20 +0800 Subject: [PATCH] feat(v2 upgrade): support engine live upgrade Longhorn 9104 Signed-off-by: Derek Su --- pkg/spdk/engine.go | 8 +++----- pkg/spdk/engine_test.go | 20 +++++++++++--------- pkg/spdk/server.go | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pkg/spdk/engine.go b/pkg/spdk/engine.go index 3b281508..2baadb91 100644 --- a/pkg/spdk/engine.go +++ b/pkg/spdk/engine.go @@ -126,7 +126,7 @@ func (e *Engine) checkInitiatorAndTargetCreationRequirements(podIP, initiatorIP, targetCreationRequired = true } } else { - err = fmt.Errorf("invalid initiator and target address for engine %s creation", e.Name) + err = fmt.Errorf("invalid initiator and target addresses for engine %s creation with initiator address %v and target address %v", e.Name, initiatorIP, targetIP) } } else if podIP == initiatorIP { e.log.Info("Creating an initiator instance") @@ -135,16 +135,15 @@ func (e *Engine) checkInitiatorAndTargetCreationRequirements(podIP, initiatorIP, e.log.Info("Creating a target instance") targetCreationRequired = true } else { - err = fmt.Errorf("invalid initiator and target address for engine %s creation", e.Name) + err = fmt.Errorf("invalid initiator and target addresses for engine %s creation with initiator address %v and target address %v", e.Name, initiatorIP, targetIP) } return initiatorCreationRequired, targetCreationRequired, err } -func (e *Engine) Create(spdkClient *spdkclient.Client, replicaAddressMap map[string]string, portCount int32, superiorPortAllocator *commonbitmap.Bitmap, initiatorAddress, targetAddress string, upgradeRequired, salvageRequested bool) (ret *spdkrpc.Engine, err error) { +func (e *Engine) Create(spdkClient *spdkclient.Client, replicaAddressMap map[string]string, portCount int32, superiorPortAllocator *commonbitmap.Bitmap, initiatorAddress, targetAddress string, salvageRequested bool) (ret *spdkrpc.Engine, err error) { logrus.WithFields(logrus.Fields{ "portCount": portCount, - "upgradeRequired": upgradeRequired, "replicaAddressMap": replicaAddressMap, "initiatorAddress": initiatorAddress, "targetAddress": targetAddress, @@ -306,7 +305,6 @@ func (e *Engine) Create(spdkClient *spdkclient.Client, replicaAddressMap map[str log := e.log.WithFields(logrus.Fields{ "initiatorCreationRequired": initiatorCreationRequired, "targetCreationRequired": targetCreationRequired, - "upgradeRequired": upgradeRequired, "initiatorAddress": initiatorAddress, "targetAddress": targetAddress, }) diff --git a/pkg/spdk/engine_test.go b/pkg/spdk/engine_test.go index c9e303aa..f4cba3bf 100644 --- a/pkg/spdk/engine_test.go +++ b/pkg/spdk/engine_test.go @@ -34,7 +34,7 @@ func (s *TestSuite) TestCheckInitiatorAndTargetCreationRequirements(c *C) { expectedError: nil, }, { - name: "Create local target instance only", + name: "Create local target instance on the node with initiator instance", podIP: "192.168.1.1", initiatorIP: "192.168.1.1", targetIP: "192.168.1.1", @@ -58,7 +58,7 @@ func (s *TestSuite) TestCheckInitiatorAndTargetCreationRequirements(c *C) { expectedError: nil, }, { - name: "Create remote target instance only", + name: "Create local target instance on the node without initiator instance", podIP: "192.168.1.2", initiatorIP: "192.168.1.1", targetIP: "192.168.1.2", @@ -70,7 +70,7 @@ func (s *TestSuite) TestCheckInitiatorAndTargetCreationRequirements(c *C) { expectedError: nil, }, { - name: "Invalid initiator and target address", + name: "Invalid initiator and target addresses", podIP: "192.168.1.1", initiatorIP: "192.168.1.2", targetIP: "192.168.1.3", @@ -79,7 +79,7 @@ func (s *TestSuite) TestCheckInitiatorAndTargetCreationRequirements(c *C) { standbyTargetPort: 0, expectedInitiatorCreationRequired: false, expectedTargetCreationRequired: false, - expectedError: fmt.Errorf("invalid initiator and target address for engine %s creation", "test-engine"), + expectedError: fmt.Errorf("invalid initiator and target addresses for engine test-engine creation with initiator address 192.168.1.2 and target address 192.168.1.3"), }, { name: "Standby target instance is already created", @@ -94,9 +94,8 @@ func (s *TestSuite) TestCheckInitiatorAndTargetCreationRequirements(c *C) { expectedError: nil, }, } - for testName, testCase := range testCases { - c.Logf("testing TestCheckInitiatorAndTargetCreationRequirements.%v", testName) + c.Logf("testing checkInitiatorAndTargetCreationRequirements.%v", testName) engine := &Engine{ Port: testCase.port, @@ -108,8 +107,11 @@ func (s *TestSuite) TestCheckInitiatorAndTargetCreationRequirements(c *C) { initiatorCreationRequired, targetCreationRequired, err := engine.checkInitiatorAndTargetCreationRequirements(testCase.podIP, testCase.initiatorIP, testCase.targetIP) - c.Assert(initiatorCreationRequired, Equals, testCase.expectedInitiatorCreationRequired) - c.Assert(targetCreationRequired, Equals, testCase.expectedTargetCreationRequired) - c.Assert(err, DeepEquals, testCase.expectedError) + c.Assert(initiatorCreationRequired, Equals, testCase.expectedInitiatorCreationRequired, + Commentf("Test case '%s': unexpected initiator creation requirement", testCase.name)) + c.Assert(targetCreationRequired, Equals, testCase.expectedTargetCreationRequired, + Commentf("Test case '%s': unexpected target creation requirement", testCase.name)) + c.Assert(err, DeepEquals, testCase.expectedError, + Commentf("Test case '%s': unexpected error result", testCase.name)) } } diff --git a/pkg/spdk/server.go b/pkg/spdk/server.go index 24222192..a855837f 100644 --- a/pkg/spdk/server.go +++ b/pkg/spdk/server.go @@ -876,7 +876,7 @@ func (s *Server) EngineCreate(ctx context.Context, req *spdkrpc.EngineCreateRequ spdkClient := s.spdkClient s.Unlock() - return e.Create(spdkClient, req.ReplicaAddressMap, req.PortCount, s.portAllocator, req.InitiatorAddress, req.TargetAddress, req.UpgradeRequired, req.SalvageRequested) + return e.Create(spdkClient, req.ReplicaAddressMap, req.PortCount, s.portAllocator, req.InitiatorAddress, req.TargetAddress, req.SalvageRequested) } func localTargetExists(e *Engine) bool {