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
}