diff --git a/changelog/unreleased/sciencemesh-gateway-selector.md b/changelog/unreleased/sciencemesh-gateway-selector.md new file mode 100644 index 0000000000..b47699eb0d --- /dev/null +++ b/changelog/unreleased/sciencemesh-gateway-selector.md @@ -0,0 +1,5 @@ +Bugfix: use gateway selector in sciencemesh + +We now use a selector to get fresh ip addresses when running ocis in a kubernetes clustern. + +https://github.com/cs3org/reva/pull/4851 diff --git a/internal/http/services/sciencemesh/apps.go b/internal/http/services/sciencemesh/apps.go index 2c4bf356c1..9fd746b2bf 100644 --- a/internal/http/services/sciencemesh/apps.go +++ b/internal/http/services/sciencemesh/apps.go @@ -35,13 +35,13 @@ import ( ) type appsHandler struct { - gatewayClient gateway.GatewayAPIClient - ocmMountPoint string + gatewaySelector *pool.Selector[gateway.GatewayAPIClient] + ocmMountPoint string } func (h *appsHandler) init(c *config) error { var err error - h.gatewayClient, err = pool.GetGatewayServiceClient(c.GatewaySvc) + h.gatewaySelector, err = pool.GatewaySelector(c.GatewaySvc) if err != nil { return err } @@ -99,7 +99,11 @@ func (h *appsHandler) OpenInApp(w http.ResponseWriter, r *http.Request) { } func (h *appsHandler) webappTemplate(ctx context.Context, id *ocmpb.ShareId) (string, error) { - res, err := h.gatewayClient.GetReceivedOCMShare(ctx, &ocmpb.GetReceivedOCMShareRequest{ + gc, err := h.gatewaySelector.Next() + if err != nil { + return "", err + } + res, err := gc.GetReceivedOCMShare(ctx, &ocmpb.GetReceivedOCMShareRequest{ Ref: &ocmpb.ShareReference{ Spec: &ocmpb.ShareReference_Id{ Id: id, diff --git a/internal/http/services/sciencemesh/providers.go b/internal/http/services/sciencemesh/providers.go index 72d8515d4a..38925081cf 100644 --- a/internal/http/services/sciencemesh/providers.go +++ b/internal/http/services/sciencemesh/providers.go @@ -32,12 +32,12 @@ import ( ) type providersHandler struct { - gatewayClient gateway.GatewayAPIClient + gatewaySelector *pool.Selector[gateway.GatewayAPIClient] } func (h *providersHandler) init(c *config) error { var err error - h.gatewayClient, err = pool.GetGatewayServiceClient(c.GatewaySvc) + h.gatewaySelector, err = pool.GatewaySelector(c.GatewaySvc) if err != nil { return err } @@ -55,7 +55,12 @@ func (h *providersHandler) ListProviders(w http.ResponseWriter, r *http.Request) ctx := r.Context() term := strings.ToLower(r.URL.Query().Get("search")) - listRes, err := h.gatewayClient.ListAllProviders(ctx, &providerpb.ListAllProvidersRequest{}) + gc, err := h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } + listRes, err := gc.ListAllProviders(ctx, &providerpb.ListAllProvidersRequest{}) if err != nil { reqres.WriteError(w, r, reqres.APIErrorServerError, "error listing all providers", err) return diff --git a/internal/http/services/sciencemesh/token.go b/internal/http/services/sciencemesh/token.go index 9e42b3d3fb..007c892d65 100644 --- a/internal/http/services/sciencemesh/token.go +++ b/internal/http/services/sciencemesh/token.go @@ -40,7 +40,7 @@ import ( ) type tokenHandler struct { - gatewayClient gateway.GatewayAPIClient + gatewaySelector *pool.Selector[gateway.GatewayAPIClient] meshDirectoryURL string providerDomain string eventStream events.Stream @@ -48,7 +48,7 @@ type tokenHandler struct { func (h *tokenHandler) init(c *config) error { var err error - h.gatewayClient, err = pool.GetGatewayServiceClient(c.GatewaySvc) + h.gatewaySelector, err = pool.GatewaySelector(c.GatewaySvc) if err != nil { return err } @@ -85,7 +85,12 @@ func (h *tokenHandler) Generate(w http.ResponseWriter, r *http.Request) { } ctx := r.Context() - genTokenRes, err := h.gatewayClient.GenerateInviteToken(ctx, &invitepb.GenerateInviteTokenRequest{ + gc, err := h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } + genTokenRes, err := gc.GenerateInviteToken(ctx, &invitepb.GenerateInviteTokenRequest{ Description: req.Description, }) switch { @@ -185,7 +190,12 @@ func (h *tokenHandler) AcceptInvite(w http.ResponseWriter, r *http.Request) { return } - providerInfo, err := h.gatewayClient.GetInfoByDomain(ctx, &ocmprovider.GetInfoByDomainRequest{ + gc, err := h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } + providerInfo, err := gc.GetInfoByDomain(ctx, &ocmprovider.GetInfoByDomainRequest{ Domain: req.ProviderDomain, }) if err != nil { @@ -197,13 +207,18 @@ func (h *tokenHandler) AcceptInvite(w http.ResponseWriter, r *http.Request) { return } + gc, err = h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } forwardInviteReq := &invitepb.ForwardInviteRequest{ InviteToken: &invitepb.InviteToken{ Token: req.Token, }, OriginSystemProvider: providerInfo.ProviderInfo, } - forwardInviteResponse, err := h.gatewayClient.ForwardInvite(ctx, forwardInviteReq) + forwardInviteResponse, err := gc.ForwardInvite(ctx, forwardInviteReq) if err != nil { reqres.WriteError(w, r, reqres.APIErrorServerError, "error sending a grpc forward invite request", err) return @@ -258,7 +273,12 @@ type remoteUser struct { func (h *tokenHandler) FindAccepted(w http.ResponseWriter, r *http.Request) { ctx := r.Context() - res, err := h.gatewayClient.FindAcceptedUsers(ctx, &invitepb.FindAcceptedUsersRequest{}) + gc, err := h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } + res, err := gc.FindAcceptedUsers(ctx, &invitepb.FindAcceptedUsersRequest{}) if err != nil { reqres.WriteError(w, r, reqres.APIErrorServerError, "error sending a grpc find accepted users request", err) return @@ -292,7 +312,12 @@ func (h *tokenHandler) DeleteAccepted(w http.ResponseWriter, r *http.Request) { return } - res, err := h.gatewayClient.DeleteAcceptedUser(ctx, &invitepb.DeleteAcceptedUserRequest{ + gc, err := h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } + res, err := gc.DeleteAcceptedUser(ctx, &invitepb.DeleteAcceptedUserRequest{ RemoteUserId: &userpb.UserId{ Idp: req.Idp, OpaqueId: req.UserID, @@ -331,7 +356,12 @@ func getDeleteAcceptedRequest(r *http.Request) (*deleteAcceptedRequest, error) { func (h *tokenHandler) ListInvite(w http.ResponseWriter, r *http.Request) { ctx := r.Context() - res, err := h.gatewayClient.ListInviteTokens(ctx, &invitepb.ListInviteTokensRequest{}) + gc, err := h.gatewaySelector.Next() + if err != nil { + reqres.WriteError(w, r, reqres.APIErrorServerError, "error selecting gateway client", err) + return + } + res, err := gc.ListInviteTokens(ctx, &invitepb.ListInviteTokensRequest{}) if err != nil { reqres.WriteError(w, r, reqres.APIErrorServerError, "error listing tokens", err) return