This is an automated email from the ASF dual-hosted git repository.
jiacai2050 pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-horaedb-meta.git
The following commit(s) were added to refs/heads/dev by this push:
new ce995e2 refactor: remove useless procedure persist (#300)
ce995e2 is described below
commit ce995e2422010d9096c9c6a95eb2f6293198404f
Author: CooooolFrog <[email protected]>
AuthorDate: Thu Jan 11 15:38:59 2024 +0800
refactor: remove useless procedure persist (#300)
## Rationale
Currently, the `TransferLeader` procedure will be persisted every time
it is executed, but they actually have no effect. When the cluster runs
for a long time, some garbage data will be generated to occupy ETCD's
storage space.
## Detailed Changes
* Remove useless procedure persist in `transfer_leader`.
## Test Plan
Pass CI.
---
.../operation/transferleader/transfer_leader.go | 70 +---------------------
1 file changed, 2 insertions(+), 68 deletions(-)
diff --git
a/server/coordinator/procedure/operation/transferleader/transfer_leader.go
b/server/coordinator/procedure/operation/transferleader/transfer_leader.go
index 050c68a..db5917a 100644
--- a/server/coordinator/procedure/operation/transferleader/transfer_leader.go
+++ b/server/coordinator/procedure/operation/transferleader/transfer_leader.go
@@ -18,7 +18,6 @@ package transferleader
import (
"context"
- "encoding/json"
"sync"
"github.com/CeresDB/ceresmeta/pkg/log"
@@ -58,6 +57,8 @@ var (
}
)
+// Procedure will not persist.
+// TODO: After supporting the expiration cleanup mechanism of Procedure, we
can consider persisting it to facilitate tracing historical information.
type Procedure struct {
fsm *fsm.FSM
params ProcedureParams
@@ -69,18 +70,6 @@ type Procedure struct {
state procedure.State
}
-// rawData used for storage, procedure will be converted to persist raw data
before saved in storage.
-type rawData struct {
- ID uint64
- FsmState string
- State procedure.State
-
- snapshot metadata.Snapshot
- ShardID storage.ShardID
- OldLeaderNodeName string
- NewLeaderNodeName string
-}
-
// callbackRequest is fsm callbacks param.
type callbackRequest struct {
ctx context.Context
@@ -194,25 +183,16 @@ func (p *Procedure) Start(ctx context.Context) error {
for {
switch p.fsm.Current() {
case stateBegin:
- if err := p.persist(ctx); err != nil {
- return errors.WithMessage(err, "transferLeader
procedure persist")
- }
if err := p.fsm.Event(eventCloseOldLeader,
transferLeaderRequest); err != nil {
p.updateStateWithLock(procedure.StateFailed)
return errors.WithMessage(err, "transferLeader
procedure close old leader")
}
case stateCloseOldLeader:
- if err := p.persist(ctx); err != nil {
- return errors.WithMessage(err, "transferLeader
procedure persist")
- }
if err := p.fsm.Event(eventOpenNewLeader,
transferLeaderRequest); err != nil {
p.updateStateWithLock(procedure.StateFailed)
return errors.WithMessage(err, "transferLeader
procedure open new leader")
}
case stateOpenNewLeader:
- if err := p.persist(ctx); err != nil {
- return errors.WithMessage(err, "transferLeader
procedure persist")
- }
if err := p.fsm.Event(eventFinish,
transferLeaderRequest); err != nil {
p.updateStateWithLock(procedure.StateFailed)
return errors.WithMessage(err, "transferLeader
procedure finish")
@@ -220,26 +200,11 @@ func (p *Procedure) Start(ctx context.Context) error {
case stateFinish:
// TODO: The state update sequence here is inconsistent
with the previous one. Consider reconstructing the state update logic of the
state machine.
p.updateStateWithLock(procedure.StateFinished)
- if err := p.persist(ctx); err != nil {
- return errors.WithMessage(err, "transferLeader
procedure persist")
- }
return nil
}
}
}
-func (p *Procedure) persist(ctx context.Context) error {
- meta, err := p.convertToMeta()
- if err != nil {
- return errors.WithMessage(err, "convert to meta")
- }
- err = p.params.Storage.CreateOrUpdate(ctx, meta)
- if err != nil {
- return errors.WithMessage(err, "createOrUpdate procedure
storage")
- }
- return nil
-}
-
func (p *Procedure) Cancel(_ context.Context) error {
p.updateStateWithLock(procedure.StateCancelled)
return nil
@@ -325,34 +290,3 @@ func (p *Procedure) updateStateWithLock(state
procedure.State) {
p.state = state
}
-
-// TODO: Consider refactor meta procedure convertor function, encapsulate as a
tool function.
-func (p *Procedure) convertToMeta() (procedure.Meta, error) {
- p.lock.RLock()
- defer p.lock.RUnlock()
-
- rawData := rawData{
- ID: p.params.ID,
- FsmState: p.fsm.Current(),
- ShardID: p.params.ShardID,
- snapshot: p.params.ClusterSnapshot,
- OldLeaderNodeName: p.params.OldLeaderNodeName,
- NewLeaderNodeName: p.params.NewLeaderNodeName,
- State: p.state,
- }
- rawDataBytes, err := json.Marshal(rawData)
- if err != nil {
- var emptyMeta procedure.Meta
- return emptyMeta,
procedure.ErrEncodeRawData.WithCausef("marshal raw data, procedureID:%v,
err:%v", p.params.ShardID, err)
- }
-
- meta := procedure.Meta{
- ID: p.params.ID,
- Kind: procedure.TransferLeader,
- State: p.state,
-
- RawData: rawDataBytes,
- }
-
- return meta, nil
-}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]