github.com/weaviate/weaviate@v1.24.6/adapters/handlers/grpc/server.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package grpc 13 14 import ( 15 "fmt" 16 "net" 17 18 "github.com/weaviate/weaviate/adapters/handlers/rest/state" 19 pbv0 "github.com/weaviate/weaviate/grpc/generated/protocol/v0" 20 pbv1 "github.com/weaviate/weaviate/grpc/generated/protocol/v1" 21 "github.com/weaviate/weaviate/usecases/auth/authentication/composer" 22 "google.golang.org/grpc" 23 "google.golang.org/grpc/credentials" 24 _ "google.golang.org/grpc/encoding/gzip" // Install the gzip compressor 25 "google.golang.org/grpc/health/grpc_health_v1" 26 27 v0 "github.com/weaviate/weaviate/adapters/handlers/grpc/v0" 28 v1 "github.com/weaviate/weaviate/adapters/handlers/grpc/v1" 29 ) 30 31 const maxMsgSize = 104858000 // 10mb, needs to be synchronized with clients 32 33 func CreateGRPCServer(state *state.State) *GRPCServer { 34 o := []grpc.ServerOption{ 35 grpc.MaxRecvMsgSize(maxMsgSize), 36 grpc.MaxSendMsgSize(maxMsgSize), 37 } 38 39 // Add TLS creds for the GRPC connection, if defined. 40 if len(state.ServerConfig.Config.GRPC.CertFile) > 0 || len(state.ServerConfig.Config.GRPC.KeyFile) > 0 { 41 c, err := credentials.NewServerTLSFromFile(state.ServerConfig.Config.GRPC.CertFile, 42 state.ServerConfig.Config.GRPC.KeyFile) 43 if err != nil { 44 state.Logger.WithField("action", "grpc_startup"). 45 Fatalf("grpc server TLS credential error: %s", err) 46 } 47 o = append(o, grpc.Creds(c)) 48 } 49 50 s := grpc.NewServer(o...) 51 weaviateV0 := v0.NewService() 52 weaviateV1 := v1.NewService( 53 state.Traverser, 54 composer.New( 55 state.ServerConfig.Config.Authentication, 56 state.APIKey, state.OIDC), 57 state.ServerConfig.Config.Authentication.AnonymousAccess.Enabled, 58 state.SchemaManager, 59 state.BatchManager, 60 &state.ServerConfig.Config, 61 state.Logger, 62 ) 63 pbv0.RegisterWeaviateServer(s, weaviateV0) 64 pbv1.RegisterWeaviateServer(s, weaviateV1) 65 grpc_health_v1.RegisterHealthServer(s, weaviateV1) 66 67 return &GRPCServer{s} 68 } 69 70 func StartAndListen(s *GRPCServer, state *state.State) error { 71 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 72 state.ServerConfig.Config.GRPC.Port)) 73 if err != nil { 74 return err 75 } 76 state.Logger.WithField("action", "grpc_startup"). 77 Infof("grpc server listening at %v", lis.Addr()) 78 if err := s.Serve(lis); err != nil { 79 return fmt.Errorf("failed to serve: %v", err) 80 } 81 82 return nil 83 } 84 85 type GRPCServer struct { 86 *grpc.Server 87 }