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
}