Skip to content

Commit

Permalink
#35: Impliments loops for manager and block services
Browse files Browse the repository at this point in the history
  • Loading branch information
erikreinert committed Feb 3, 2021
1 parent fef4acc commit f5354a6
Show file tree
Hide file tree
Showing 16 changed files with 1,655 additions and 1,191 deletions.
25 changes: 0 additions & 25 deletions api/block.proto
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,11 @@ option go_package = "github.com/erkrnt/symphony/api";

package api;

import "api/status.proto";

// 0.0.0.0:15760
service Block {
rpc LvDisplay(RequestLv) returns (Lv) {}
rpc PvDisplay(RequestPv) returns (Pv) {}
rpc VgDisplay(RequestVg) returns (Vg) {}

rpc LvCreate(RequestLvCreate) returns (Lv) {}
rpc PvCreate(RequestPvCreate) returns (Pv) {}
rpc VgCreate(RequestVgCreate) returns (Vg) {}

rpc LvRemove(RequestLv) returns (ResponseStatus) {}
rpc PvRemove(RequestPv) returns (ResponseStatus) {}
rpc VgRemove(RequestVg) returns (ResponseStatus) {}
}

message Lv {
Expand Down Expand Up @@ -67,18 +57,3 @@ message RequestPv {
message RequestVg {
string ID = 1;
}

message RequestLvCreate {
string ID = 1;
int64 Size = 2;
string VolumeGroupID = 3;
}

message RequestPvCreate {
string DeviceName = 1;
}

message RequestVgCreate {
string DeviceName = 1;
string ID = 2;
}
36 changes: 32 additions & 4 deletions api/manager.proto
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,20 @@ service Manager {
rpc RemovePhysicalVolume(RequestPhysicalVolume) returns (ResponseStatus) {}
rpc RemoveService(RequestService) returns (ResponseStatus) {}
rpc RemoveVolumeGroup(RequestVolumeGroup) returns (ResponseStatus) {}

rpc UpdateLogicalVolume(RequestUpdateLogicalVolume) returns (LogicalVolume) {}
rpc UpdatePhysicalVolume(RequestUpdatePhysicalVolume) returns (PhysicalVolume) {}
rpc UpdateVolumeGroup(RequestUpdateVolumeGroup) returns (VolumeGroup) {}
}

message RequestLogicalVolume {
string ID = 1;
}

message RequestLogicalVolumes {}
message RequestLogicalVolumes {
string ServiceID = 1;
ResourceStatus Status = 2;
}

message ResponseLogicalVolumes {
repeated LogicalVolume Results = 1;
Expand Down Expand Up @@ -81,14 +88,17 @@ message RequestPhysicalVolume {
string ID = 1;
}

message RequestPhysicalVolumes {}
message RequestPhysicalVolumes {
string ServiceID = 1;
ResourceStatus Status = 2;
}

message ResponsePhysicalVolumes {
repeated PhysicalVolume Results = 1;
}

message RequestService {
string ServiceID = 1;
string ID = 1;
}

message RequestServices {}
Expand All @@ -97,11 +107,29 @@ message ResponseServices {
repeated Service Results = 1;
}

message RequestUpdateLogicalVolume {
string ID = 1;
ResourceStatus Status = 2;
}

message RequestUpdatePhysicalVolume {
string ID = 1;
ResourceStatus Status = 2;
}

message RequestUpdateVolumeGroup {
string ID = 1;
ResourceStatus Status = 2;
}

message RequestVolumeGroup {
string ID = 1;
}

message RequestVolumeGroups {}
message RequestVolumeGroups {
string ServiceID = 1;
ResourceStatus Status = 2;
}

message ResponseVolumeGroups {
repeated VolumeGroup Results = 1;
Expand Down
12 changes: 7 additions & 5 deletions api/resource.proto
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@ message Image {

message LogicalVolume {
string ID = 1;
int64 Size = 2;
ResourceStatus Status = 3;
string TargetAddr = 4;
string VolumeGroupID = 5;
string ServiceID = 2;
int64 Size = 3;
ResourceStatus Status = 4;
string TargetAddr = 5;
string VolumeGroupID = 6;
}

message PhysicalVolume {
Expand All @@ -48,5 +49,6 @@ message PhysicalVolume {
message VolumeGroup {
string ID = 1;
string PhysicalVolumeID = 2;
ResourceStatus Status = 3;
string ServiceID = 3;
ResourceStatus Status = 4;
}
4 changes: 4 additions & 0 deletions internal/block/control.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,9 @@ func (s *GRPCServerControl) ServiceNew(ctx context.Context, in *api.RequestServi
ServiceID: newService.ID,
}

go s.Block.watchLogicalVolumes()
go s.Block.watchPhysicalVolumes()
go s.Block.watchVolumeGroups()

return res, nil
}
184 changes: 0 additions & 184 deletions internal/block/grpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,187 +124,3 @@ func (b *GRPCServerBlock) VgDisplay(ctx context.Context, in *api.RequestVg) (*ap

return metadata, nil
}

// LvCreate : creates logical volume
func (b *GRPCServerBlock) LvCreate(ctx context.Context, in *api.RequestLvCreate) (*api.Lv, error) {
volumeGroupID, err := uuid.Parse(in.VolumeGroupID)

if err != nil {
st := status.New(codes.InvalidArgument, err.Error())

return nil, st.Err()
}

id, err := uuid.Parse(in.ID)

if err != nil {
st := status.New(codes.InvalidArgument, err.Error())

return nil, st.Err()
}

lv, err := newLv(volumeGroupID, id, in.Size)

if err != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

metadata := &api.Lv{
LvName: lv.LvName,
VgName: lv.VgName,
LvAttr: lv.LvAttr,
LvSize: lv.LvSize,
PoolLv: lv.PoolLv,
Origin: lv.Origin,
DataPercent: lv.DataPercent,
MetadataPercent: lv.MetadataPercent,
MovePv: lv.MovePv,
MirrorLog: lv.MirrorLog,
CopyPercent: lv.CopyPercent,
ConvertLv: lv.ConvertLv,
}

logFields := logrus.Fields{
"ID": id.String(),
"Size": in.Size,
"VolumeGroupID": volumeGroupID.String(),
}

logrus.WithFields(logFields).Info("NewLv")

return metadata, nil
}

// PvCreate : creates physical volume
func (b *GRPCServerBlock) PvCreate(ctx context.Context, in *api.RequestPvCreate) (*api.Pv, error) {
pv, err := newPv(in.DeviceName)

if err != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

metadata := &api.Pv{
PvName: pv.PvName,
VgName: pv.VgName,
PvFmt: pv.PvFmt,
PvAttr: pv.PvAttr,
PvSize: pv.PvSize,
PvFree: pv.PvFree,
}

logrus.WithFields(logrus.Fields{"DeviceName": in.DeviceName}).Info("NewPv")

return metadata, nil
}

// VgCreate : creates volume group
func (b *GRPCServerBlock) VgCreate(ctx context.Context, in *api.RequestVgCreate) (*api.Vg, error) {
id, err := uuid.Parse(in.ID)

if err != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

vg, err := newVg(in.DeviceName, id)

if err != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

metadata := &api.Vg{
VgName: vg.VgName,
PvCount: vg.PvCount,
LvCount: vg.LvCount,
SnapCount: vg.SnapCount,
VgAttr: vg.VgAttr,
VgSize: vg.VgSize,
VgFree: vg.VgFree,
}

logrus.WithFields(logrus.Fields{"ID": id.String()}).Info("NewVg")

return metadata, nil
}

// LvRemove : removes logical volume
func (b *GRPCServerBlock) LvRemove(ctx context.Context, in *api.RequestLv) (*api.ResponseStatus, error) {
volumeGroupID, err := uuid.Parse(in.VolumeGroupID)

if err != nil {
st := status.New(codes.InvalidArgument, err.Error())

return nil, st.Err()
}

id, err := uuid.Parse(in.ID)

if err != nil {
st := status.New(codes.InvalidArgument, err.Error())

return nil, st.Err()
}

rmErr := removeLv(volumeGroupID, id)

if rmErr != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

status := &api.ResponseStatus{SUCCESS: true}

logrus.WithFields(logrus.Fields{"SUCCESS": status.SUCCESS}).Info("RemoveLv")

return status, nil
}

// PvRemove : removes physical volume
func (b *GRPCServerBlock) PvRemove(ctx context.Context, in *api.RequestPv) (*api.ResponseStatus, error) {
err := removePv(in.DeviceName)

if err != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

status := &api.ResponseStatus{SUCCESS: true}

logrus.WithFields(logrus.Fields{"SUCCESS": status.SUCCESS}).Info("RemovePv")

return status, nil
}

// VgRemove : removes volume group
func (b *GRPCServerBlock) VgRemove(ctx context.Context, in *api.RequestVg) (*api.ResponseStatus, error) {
id, err := uuid.Parse(in.ID)

if err != nil {
st := status.New(codes.InvalidArgument, err.Error())

return nil, st.Err()
}

rmErr := removeVg(id)

if rmErr != nil {
st := status.New(codes.Internal, err.Error())

return nil, st.Err()
}

status := &api.ResponseStatus{SUCCESS: true}

logrus.WithFields(logrus.Fields{"SUCCESS": status.SUCCESS}).Info("RemoveVg")

return status, nil
}
Loading

0 comments on commit f5354a6

Please sign in to comment.