| 362 | } |
| 363 | |
| 364 | func (m *Manager) trySetInvocationState(uid string, state invocationState, cancel context.CancelFunc, scheduleKey string) invocationAdmission { |
| 365 | if uid == "" { |
| 366 | return invocationAdmissionInvalid |
| 367 | } |
| 368 | |
| 369 | m.invStateMux.Lock() |
| 370 | defer m.invStateMux.Unlock() |
| 371 | |
| 372 | m.pruneExpiredTombstonesLocked(time.Now()) |
| 373 | |
| 374 | if _, ok := m.tombstones[uid]; ok { |
| 375 | return invocationAdmissionDuplicateTombstone |
| 376 | } |
| 377 | |
| 378 | if _, ok := m.invState[uid]; ok { |
| 379 | return invocationAdmissionDuplicateActive |
| 380 | } |
| 381 | m.invState[uid] = &invocationRecord{ |
| 382 | state: state, |
| 383 | cancel: cancel, |
| 384 | scheduleKey: scheduleKey, |
| 385 | } |
| 386 | m.observeInvocationsLocked() |
| 387 | return invocationAdmissionAccepted |
| 388 | } |
| 389 | |
| 390 | func (m *Manager) setAwaitingResultState(uid string, fnTimeout time.Duration) { |
| 391 | if uid == "" { |