func()

in sessions/sessions.go [203:239]


func (s *collection) insertWithLock(unifiedID string, sess *resources.Session) (*resources.Session, error) {
	var backend *backends.Backend
	var backendK *resources.Kernel
	var err error
	if sess.Kernel != nil {
		backend, backendK, err = kernels.BackendView(sess.Kernel, []*backends.Backend{s.localBackend, s.remoteBackend})
		if err != nil {
			return nil, fmt.Errorf("failure converting the kernel: %w", err)
		}
	}
	// Pass through create session but return mapped session ID
	sess.Kernel = backendK
	sessBytes, err := json.Marshal(sess)
	if err != nil {
		return nil, fmt.Errorf("failure marshalling session request: %w", err)
	}
	sessionRespBytes, err := backend.Create(APIPath, sessBytes)
	if err != nil {
		// Don't wrap the error from a backend; just report it exactly.
		return nil, err
	}
	var newSess resources.Session
	if err = json.Unmarshal(sessionRespBytes, &newSess); err != nil {
		return nil, fmt.Errorf("failure unmarshalling local session response: %w", err)
	}
	record := &sessionRecord{
		backend:     backend,
		backendView: &newSess,
	}
	if unifiedID == "" {
		// The unified ID of a session matches it's original backend session ID
		unifiedID = newSess.ID
	}
	s.sessionsMap[unifiedID] = record
	s.sessionUnifiedIDs[newSess.ID] = unifiedID
	return record.UnifiedView(unifiedID), nil
}