From 01088b562a89bc3731f50267ba82c393066da606 Mon Sep 17 00:00:00 2001 From: Boris Glimcher Date: Mon, 10 Apr 2023 22:04:31 +0300 Subject: [PATCH] List: generate NextPageToken Signed-off-by: Boris Glimcher --- go.mod | 1 + go.sum | 2 ++ pkg/backend/aio.go | 5 ++++- pkg/backend/null.go | 5 ++++- pkg/backend/nvme.go | 5 ++++- pkg/frontend/blk.go | 5 ++++- pkg/frontend/nvme.go | 12 +++++++++--- pkg/frontend/scsi.go | 9 +++++++-- pkg/middleend/middleend.go | 5 ++++- 9 files changed, 39 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index efb6baba..ad6d3498 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.19 require ( github.com/digitalocean/go-qemu v0.0.0-20221209210016-f035778c97f7 + github.com/google/uuid v1.3.0 github.com/opiproject/opi-api v0.0.0-20230404182329-b6f178ec8cfa github.com/ulule/deepcopier v0.0.0-20200430083143-45decc6639b6 google.golang.org/grpc v1.54.0 diff --git a/go.sum b/go.sum index 960b6b31..d573d23f 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/opiproject/opi-api v0.0.0-20230111150933-e4b3480e8ee9 h1:Y/0Ku5yIfnLEnLa9jzYCK/7l85CHQVefs0PnaXFX+v0= github.com/opiproject/opi-api v0.0.0-20230111150933-e4b3480e8ee9/go.mod h1:92pv4ulvvPMuxCJ9ND3aYbmBfEMLx0VCjpkiR7ZTqPY= github.com/opiproject/opi-api v0.0.0-20230123165122-10e47bafd42b h1:Ho6qkBoU1vfqERZbih+Hmn7Y1lsx14YtOiqMl4lzdF4= diff --git a/pkg/backend/aio.go b/pkg/backend/aio.go index b52ac389..e2fd797c 100644 --- a/pkg/backend/aio.go +++ b/pkg/backend/aio.go @@ -14,6 +14,7 @@ import ( pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go" "github.com/opiproject/opi-spdk-bridge/pkg/models" + "github.com/google/uuid" "github.com/ulule/deepcopier" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -148,16 +149,18 @@ func (s *Server) ListAioControllers(_ context.Context, in *pb.ListAioControllers return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.AioController, len(result)) for i := range result { r := &result[i] Blobarray[i] = &pb.AioController{Handle: &pc.ObjectKey{Value: r.Name}, BlockSize: r.BlockSize, BlocksCount: r.NumBlocks} } - return &pb.ListAioControllersResponse{AioControllers: Blobarray}, nil + return &pb.ListAioControllersResponse{AioControllers: Blobarray, NextPageToken: token}, nil } // GetAioController gets an Aio controller diff --git a/pkg/backend/null.go b/pkg/backend/null.go index e8f06c7a..fb6d90b0 100644 --- a/pkg/backend/null.go +++ b/pkg/backend/null.go @@ -14,6 +14,7 @@ import ( pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go" "github.com/opiproject/opi-spdk-bridge/pkg/models" + "github.com/google/uuid" "github.com/ulule/deepcopier" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -148,16 +149,18 @@ func (s *Server) ListNullDebugs(_ context.Context, in *pb.ListNullDebugsRequest) return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.NullDebug, len(result)) for i := range result { r := &result[i] Blobarray[i] = &pb.NullDebug{Handle: &pc.ObjectKey{Value: r.Name}, Uuid: &pc.Uuid{Value: r.UUID}, BlockSize: r.BlockSize, BlocksCount: r.NumBlocks} } - return &pb.ListNullDebugsResponse{NullDebugs: Blobarray}, nil + return &pb.ListNullDebugsResponse{NullDebugs: Blobarray, NextPageToken: token}, nil } // GetNullDebug gets a a Null Debug instance diff --git a/pkg/backend/nvme.go b/pkg/backend/nvme.go index 667cf181..81cad4ea 100644 --- a/pkg/backend/nvme.go +++ b/pkg/backend/nvme.go @@ -15,6 +15,7 @@ import ( pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go" "github.com/opiproject/opi-spdk-bridge/pkg/models" + "github.com/google/uuid" "github.com/ulule/deepcopier" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -110,9 +111,11 @@ func (s *Server) ListNVMfRemoteControllers(_ context.Context, in *pb.ListNVMfRem return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.NVMfRemoteController, len(result)) for i := range result { @@ -128,7 +131,7 @@ func (s *Server) ListNVMfRemoteControllers(_ context.Context, in *pb.ListNVMfRem Trsvcid: port, } } - return &pb.ListNVMfRemoteControllersResponse{NvMfRemoteControllers: Blobarray}, nil + return &pb.ListNVMfRemoteControllersResponse{NvMfRemoteControllers: Blobarray, NextPageToken: token}, nil } // GetNVMfRemoteController gets an NVMf remote controller diff --git a/pkg/frontend/blk.go b/pkg/frontend/blk.go index 8cb47902..ca600c22 100644 --- a/pkg/frontend/blk.go +++ b/pkg/frontend/blk.go @@ -10,6 +10,7 @@ import ( "fmt" "log" + "github.com/google/uuid" pc "github.com/opiproject/opi-api/common/v1/gen/go" pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go" "github.com/opiproject/opi-spdk-bridge/pkg/models" @@ -107,9 +108,11 @@ func (s *Server) ListVirtioBlks(_ context.Context, in *pb.ListVirtioBlksRequest) return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.VirtioBlk, len(result)) for i := range result { @@ -119,7 +122,7 @@ func (s *Server) ListVirtioBlks(_ context.Context, in *pb.ListVirtioBlksRequest) PcieId: &pb.PciEndpoint{PhysicalFunction: 1}, VolumeId: &pc.ObjectKey{Value: "TBD"}} } - return &pb.ListVirtioBlksResponse{VirtioBlks: Blobarray}, nil + return &pb.ListVirtioBlksResponse{VirtioBlks: Blobarray, NextPageToken: token}, nil } // GetVirtioBlk gets a Virtio block device diff --git a/pkg/frontend/nvme.go b/pkg/frontend/nvme.go index 6177f339..90d2f77f 100644 --- a/pkg/frontend/nvme.go +++ b/pkg/frontend/nvme.go @@ -15,6 +15,7 @@ import ( pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go" "github.com/opiproject/opi-spdk-bridge/pkg/models" + "github.com/google/uuid" "github.com/ulule/deepcopier" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -172,16 +173,18 @@ func (s *Server) ListNVMeSubsystems(_ context.Context, in *pb.ListNVMeSubsystems return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.NVMeSubsystem, len(result)) for i := range result { r := &result[i] Blobarray[i] = &pb.NVMeSubsystem{Spec: &pb.NVMeSubsystemSpec{Nqn: r.Nqn, SerialNumber: r.SerialNumber, ModelNumber: r.ModelNumber}} } - return &pb.ListNVMeSubsystemsResponse{NvMeSubsystems: Blobarray}, nil + return &pb.ListNVMeSubsystemsResponse{NvMeSubsystems: Blobarray, NextPageToken: token}, nil } // GetNVMeSubsystem gets NVMe Subsystems @@ -325,7 +328,8 @@ func (s *Server) ListNVMeControllers(_ context.Context, in *pb.ListNVMeControlle for _, controller := range s.Nvme.Controllers { Blobarray = append(Blobarray, controller) } - return &pb.ListNVMeControllersResponse{NvMeControllers: Blobarray}, nil + token := uuid.New().String() + return &pb.ListNVMeControllersResponse{NvMeControllers: Blobarray, NextPageToken: token}, nil } // GetNVMeController gets an NVMe controller @@ -474,6 +478,7 @@ func (s *Server) ListNVMeNamespaces(_ context.Context, in *pb.ListNVMeNamespaces return nil, err } log.Printf("Received from SPDK: %v", result) + var token string Blobarray := []*pb.NVMeNamespace{} for i := range result { rr := &result[i] @@ -489,7 +494,8 @@ func (s *Server) ListNVMeNamespaces(_ context.Context, in *pb.ListNVMeNamespaces } } if len(Blobarray) > 0 { - return &pb.ListNVMeNamespacesResponse{NvMeNamespaces: Blobarray}, nil + token = uuid.New().String() + return &pb.ListNVMeNamespacesResponse{NvMeNamespaces: Blobarray, NextPageToken: token}, nil } msg := fmt.Sprintf("Could not find any namespaces for NQN: %s", nqn) diff --git a/pkg/frontend/scsi.go b/pkg/frontend/scsi.go index 7c02d239..738f3fcf 100644 --- a/pkg/frontend/scsi.go +++ b/pkg/frontend/scsi.go @@ -14,6 +14,7 @@ import ( pb "github.com/opiproject/opi-api/storage/v1alpha1/gen/go" "github.com/opiproject/opi-spdk-bridge/pkg/models" + "github.com/google/uuid" "github.com/ulule/deepcopier" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -85,16 +86,18 @@ func (s *Server) ListVirtioScsiControllers(_ context.Context, in *pb.ListVirtioS return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.VirtioScsiController, len(result)) for i := range result { r := &result[i] Blobarray[i] = &pb.VirtioScsiController{Id: &pc.ObjectKey{Value: r.Ctrlr}} } - return &pb.ListVirtioScsiControllersResponse{VirtioScsiControllers: Blobarray}, nil + return &pb.ListVirtioScsiControllersResponse{VirtioScsiControllers: Blobarray, NextPageToken: token}, nil } // GetVirtioScsiController gets a Virtio SCSI controller @@ -190,16 +193,18 @@ func (s *Server) ListVirtioScsiLuns(_ context.Context, in *pb.ListVirtioScsiLuns return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.VirtioScsiLun, len(result)) for i := range result { r := &result[i] Blobarray[i] = &pb.VirtioScsiLun{VolumeId: &pc.ObjectKey{Value: r.Ctrlr}} } - return &pb.ListVirtioScsiLunsResponse{VirtioScsiLuns: Blobarray}, nil + return &pb.ListVirtioScsiLunsResponse{VirtioScsiLuns: Blobarray, NextPageToken: token}, nil } // GetVirtioScsiLun gets a Virtio SCSI LUN diff --git a/pkg/middleend/middleend.go b/pkg/middleend/middleend.go index a3680f0b..45d7dae9 100644 --- a/pkg/middleend/middleend.go +++ b/pkg/middleend/middleend.go @@ -17,6 +17,7 @@ import ( "github.com/opiproject/opi-spdk-bridge/pkg/models" "github.com/opiproject/opi-spdk-bridge/pkg/server" + "github.com/google/uuid" "github.com/ulule/deepcopier" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -219,16 +220,18 @@ func (s *Server) ListEncryptedVolumes(_ context.Context, in *pb.ListEncryptedVol return nil, err } log.Printf("Received from SPDK: %v", result) + var token string if in.PageSize > 0 && int(in.PageSize) < len(result) { log.Printf("Limiting result to: %d", in.PageSize) result = result[:in.PageSize] + token = uuid.New().String() } Blobarray := make([]*pb.EncryptedVolume, len(result)) for i := range result { r := &result[i] Blobarray[i] = &pb.EncryptedVolume{EncryptedVolumeId: &pc.ObjectKey{Value: r.Name}} } - return &pb.ListEncryptedVolumesResponse{EncryptedVolumes: Blobarray}, nil + return &pb.ListEncryptedVolumesResponse{EncryptedVolumes: Blobarray, NextPageToken: token}, nil } // GetEncryptedVolume gets an encrypted volume