From 0ee56274e5b7fb4b96d78ebbe041bf967bc83e63 Mon Sep 17 00:00:00 2001 From: Injun Song Date: Mon, 29 Aug 2022 17:49:15 +0900 Subject: [PATCH] fix: set empty list to `logStreams` when it is null Resolves #88 --- bin/start_varlogsn.py | 4 ++- internal/admin/stats/repository.go | 9 +------ internal/varlogctl/storagenode/storagenode.go | 25 +++++++++++++++++-- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/bin/start_varlogsn.py b/bin/start_varlogsn.py index b7770378b..14fba1fcc 100755 --- a/bin/start_varlogsn.py +++ b/bin/start_varlogsn.py @@ -61,7 +61,9 @@ def get_data_dirs(admin: str, snid: int): f"--snid={snid}"] out = subprocess.check_output(cmd) snm = json.loads(out) - logstreams = snm.get("logStreams", []) + logstreams = snm.get("logStreams") + if not logstreams: + logstreams = [] return [logstream["path"] for logstream in logstreams] diff --git a/internal/admin/stats/repository.go b/internal/admin/stats/repository.go index fb0c24db7..a72f123c1 100644 --- a/internal/admin/stats/repository.go +++ b/internal/admin/stats/repository.go @@ -127,11 +127,7 @@ func (s *repository) GetStorageNode(snid types.StorageNodeID) (*vmspb.StorageNod if !ok { return nil, false } - copied := proto.Clone(snm).(*vmspb.StorageNodeMetadata) - if len(copied.LogStreamReplicas) == 0 { - copied.LogStreamReplicas = []snpb.LogStreamReplicaMetadataDescriptor{} - } - return copied, true + return proto.Clone(snm).(*vmspb.StorageNodeMetadata), true } func (s *repository) ListStorageNodes() []vmspb.StorageNodeMetadata { @@ -140,9 +136,6 @@ func (s *repository) ListStorageNodes() []vmspb.StorageNodeMetadata { snms := make([]vmspb.StorageNodeMetadata, 0, len(s.storageNodes)) for _, snm := range s.storageNodes { copied := *proto.Clone(snm).(*vmspb.StorageNodeMetadata) - if len(copied.LogStreamReplicas) == 0 { - copied.LogStreamReplicas = []snpb.LogStreamReplicaMetadataDescriptor{} - } snms = append(snms, copied) } sort.Slice(snms, func(i, j int) bool { diff --git a/internal/varlogctl/storagenode/storagenode.go b/internal/varlogctl/storagenode/storagenode.go index 3b4b5fe9f..026c4a9c3 100644 --- a/internal/varlogctl/storagenode/storagenode.go +++ b/internal/varlogctl/storagenode/storagenode.go @@ -8,14 +8,35 @@ import ( "github.com/kakao/varlog/internal/varlogctl" "github.com/kakao/varlog/pkg/types" "github.com/kakao/varlog/pkg/varlog" + "github.com/kakao/varlog/proto/snpb" + "github.com/kakao/varlog/proto/vmspb" ) func Describe(snid ...types.StorageNodeID) varlogctl.ExecuteFunc { return func(ctx context.Context, adm varlog.Admin) (any, error) { if len(snid) > 0 { - return adm.GetStorageNode(ctx, snid[0]) + snm, err := adm.GetStorageNode(ctx, snid[0]) + if err != nil { + return nil, err + } + ensureEmptyFields(snm) + return snm, nil + + } + snms, err := adm.ListStorageNodes(ctx) + if err != nil { + return nil, err + } + for idx := range snms { + ensureEmptyFields(&snms[idx]) } - return adm.ListStorageNodes(ctx) + return snms, nil + } +} + +func ensureEmptyFields(snm *vmspb.StorageNodeMetadata) { + if len(snm.LogStreamReplicas) == 0 { + snm.LogStreamReplicas = []snpb.LogStreamReplicaMetadataDescriptor{} } }