add function to apply mutations over grpc
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"time"
|
||||
|
||||
messages "git.k6n.net/go-cart-actor/pkg/messages"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"go.opentelemetry.io/contrib/bridges/otelslog"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
@@ -100,6 +101,79 @@ func (h *RemoteHost) Ping() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (h *RemoteHost) Apply(ctx context.Context, id uint64, mutation ...proto.Message) (bool, error) {
|
||||
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
toSend := make([]*messages.Mutation, len(mutation))
|
||||
for i, msg := range mutation {
|
||||
switch m := msg.(type) {
|
||||
case *messages.ClearCartRequest:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_ClearCart{ClearCart: m}}
|
||||
case *messages.AddItem:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_AddItem{AddItem: m}}
|
||||
case *messages.RemoveItem:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_RemoveItem{RemoveItem: m}}
|
||||
case *messages.ChangeQuantity:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_ChangeQuantity{ChangeQuantity: m}}
|
||||
case *messages.SetDelivery:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_SetDelivery{SetDelivery: m}}
|
||||
case *messages.SetPickupPoint:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_SetPickupPoint{SetPickupPoint: m}}
|
||||
case *messages.RemoveDelivery:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_RemoveDelivery{RemoveDelivery: m}}
|
||||
case *messages.SetUserId:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_SetUserId{SetUserId: m}}
|
||||
case *messages.LineItemMarking:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_LineItemMarking{LineItemMarking: m}}
|
||||
case *messages.RemoveLineItemMarking:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_RemoveLineItemMarking{RemoveLineItemMarking: m}}
|
||||
case *messages.SubscriptionAdded:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_SubscriptionAdded{SubscriptionAdded: m}}
|
||||
case *messages.PaymentDeclined:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_PaymentDeclined{PaymentDeclined: m}}
|
||||
case *messages.ConfirmationViewed:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_ConfirmationViewed{ConfirmationViewed: m}}
|
||||
case *messages.CreateCheckoutOrder:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_CreateCheckoutOrder{CreateCheckoutOrder: m}}
|
||||
case *messages.OrderCreated:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_OrderCreated{OrderCreated: m}}
|
||||
case *messages.Noop:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_Noop{Noop: m}}
|
||||
case *messages.InitializeCheckout:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_InitializeCheckout{InitializeCheckout: m}}
|
||||
case *messages.InventoryReserved:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_InventoryReserved{InventoryReserved: m}}
|
||||
case *messages.AddVoucher:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_AddVoucher{AddVoucher: m}}
|
||||
case *messages.RemoveVoucher:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_RemoveVoucher{RemoveVoucher: m}}
|
||||
case *messages.UpsertSubscriptionDetails:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_UpsertSubscriptionDetails{UpsertSubscriptionDetails: m}}
|
||||
case *messages.PreConditionFailed:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_PreConditionFailed{PreConditionFailed: m}}
|
||||
case *messages.AddGiftcard:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_AddGiftcard{AddGiftcard: m}}
|
||||
case *messages.RemoveGiftcard:
|
||||
toSend[i] = &messages.Mutation{Type: &messages.Mutation_RemoveGiftcard{RemoveGiftcard: m}}
|
||||
default:
|
||||
toSend[i] = nil
|
||||
}
|
||||
}
|
||||
|
||||
resp, err := h.controlClient.Apply(ctx, &messages.ApplyRequest{
|
||||
Id: id,
|
||||
Messages: toSend,
|
||||
})
|
||||
if err != nil {
|
||||
h.missedPings++
|
||||
log.Printf("Apply %s failed: %v", h.host, err)
|
||||
return false, err
|
||||
}
|
||||
h.missedPings = 0
|
||||
return resp.Accepted, nil
|
||||
}
|
||||
|
||||
func (h *RemoteHost) Negotiate(knownHosts []string) ([]string, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
Reference in New Issue
Block a user