Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 21 additions & 5 deletions pkg/scd/store/raftstore/availability.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,33 @@ package raftstore

import (
"context"
"encoding/json"

dsserr "github.com/interuss/dss/pkg/errors"
dssmodels "github.com/interuss/dss/pkg/models"
"github.com/interuss/dss/pkg/raftstore/consensus"
scdmodels "github.com/interuss/dss/pkg/scd/models"
"github.com/interuss/stacktrace"
)

func (r *repo) GetUssAvailability(_ context.Context, id dssmodels.Manager) (*scdmodels.UssAvailabilityStatus, error) {
return nil, stacktrace.NewErrorWithCode(dsserr.NotImplemented, "GetUssAvailability not implemented for raftstore")
const (
getUssAvailability consensus.RequestType[*scdmodels.UssAvailabilityStatus] = "getUssAvailability"
upsertUssAvailability consensus.RequestType[*scdmodels.UssAvailabilityStatus] = "upsertUssAvailability"
)

func (r *repo) GetUssAvailability(ctx context.Context, id dssmodels.Manager) (*scdmodels.UssAvailabilityStatus, error) {
buf, err := json.Marshal(id)
if err != nil {
return nil, stacktrace.Propagate(err, "failed to marshal payload")
}

return r.consensus.HandleClientRequest(ctx, getUssAvailability, buf, true)
}

func (r *repo) UpsertUssAvailability(_ context.Context, ussa *scdmodels.UssAvailabilityStatus) (*scdmodels.UssAvailabilityStatus, error) {
return nil, stacktrace.NewErrorWithCode(dsserr.NotImplemented, "UpsertUssAvailability not implemented for raftstore")
func (r *repo) UpsertUssAvailability(ctx context.Context, ussa *scdmodels.UssAvailabilityStatus) (*scdmodels.UssAvailabilityStatus, error) {
buf, err := json.Marshal(ussa)
if err != nil {
return nil, stacktrace.Propagate(err, "failed to marshal payload")
}

return r.consensus.HandleClientRequest(ctx, upsertUssAvailability, buf, false)
}
16 changes: 16 additions & 0 deletions pkg/scd/store/raftstore/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,22 @@ func (r *repo) Apply(ctx context.Context, proposal consensus.Proposal) (any, err
case string(countOperationalIntents):
return r.Store.GetRepo().CountOperationalIntents(ctx)

// USS Availability

case string(getUssAvailability):
var manager dssmodels.Manager
if err := json.Unmarshal(proposal.Value, &manager); err != nil {
return nil, stacktrace.Propagate(err, "failed to unmarshal %s payload", getUssAvailability)
}
return r.Store.GetRepo().GetUssAvailability(ctx, manager)

case string(upsertUssAvailability):
var ussa scdmodels.UssAvailabilityStatus
if err := json.Unmarshal(proposal.Value, &ussa); err != nil {
return nil, stacktrace.Propagate(err, "failed to unmarshal %s payload", upsertUssAvailability)
}
return r.Store.GetRepo().UpsertUssAvailability(ctx, &ussa)

// Operations registry (transactions)
default:
handler, ok := operations.Registry[proposal.RequestType]
Expand Down
Loading