func()

in cmd/core_plugin/snapshot/snapshot_linux.go [149:197]


func (s *snapshotClient) listen(ctx context.Context) error {
	galog.Infof("Starting to listen for snapshot requests.")

	for context.Cause(ctx) == nil {
		galog.Debugf("Attempting to connect to snapshot service at %q via %q.", s.options.address, s.options.protocol)

		creds := grpc.WithTransportCredentials(insecure.NewCredentials())
		conn, err := grpc.NewClient(s.options.fullAddress(), creds)
		if err != nil {
			return fmt.Errorf("failed to connect to snapshot service: %w", err)
		}

		defer func() {
			if err := conn.Close(); err != nil {
				galog.Errorf("Failed to close main connection to snapshot service: %v.", err)
			}
		}()

		c := sspb.NewSnapshotServiceClient(conn)

		guestReady := sspb.GuestReady{
			RequestServerInfo: false,
		}

		r, err := c.CreateConnection(ctx, &guestReady)
		if err != nil {
			if !errors.Is(err, context.Canceled) {
				galog.Errorf("Error creating connection with snapshot service: %v.", err)
			}
			continue
		}

		for {
			request, err := r.Recv()
			if err != nil {
				galog.Errorf("Error reading snapshot request: %v.", err)
				break
			}

			go func() {
				if err := s.handleRequest(ctx, request.GetSnapshotRequest()); err != nil {
					galog.Errorf("Failed to handle snapshot request: %v.", err)
				}
			}()
		}
	}

	return nil
}