(ctx context.Context, replicationID string, options ReplicationStatusOptions)
| 1434 | } |
| 1435 | |
| 1436 | func (m *sgReplicateManager) GetReplicationStatus(ctx context.Context, replicationID string, options ReplicationStatusOptions) (*ReplicationStatus, error) { |
| 1437 | |
| 1438 | // Check if replication is assigned locally |
| 1439 | m.activeReplicatorsLock.RLock() |
| 1440 | replication, isLocal := m.activeReplicators[replicationID] |
| 1441 | m.activeReplicatorsLock.RUnlock() |
| 1442 | |
| 1443 | if options.LocalOnly && !isLocal { |
| 1444 | return nil, nil |
| 1445 | } |
| 1446 | |
| 1447 | var status *ReplicationStatus |
| 1448 | var remoteCfg *ReplicationCfg |
| 1449 | if isLocal { |
| 1450 | status = replication.GetStatus(ctx) |
| 1451 | } else { |
| 1452 | // Attempt to retrieve persisted status |
| 1453 | var loadErr error |
| 1454 | status, loadErr = LoadReplicationStatus(m.loggingCtx, m.dbContext, replicationID) |
| 1455 | if loadErr != nil { |
| 1456 | // Unable to load persisted status. Create status stub based on config |
| 1457 | var err error |
| 1458 | remoteCfg, err = m.GetReplication(replicationID) |
| 1459 | if err != nil { |
| 1460 | return nil, err |
| 1461 | } |
| 1462 | if remoteCfg.AssignedNode == "" { |
| 1463 | status = &ReplicationStatus{ |
| 1464 | ID: replicationID, |
| 1465 | Status: ReplicationStateUnassigned, |
| 1466 | } |
| 1467 | } else { |
| 1468 | status = &ReplicationStatus{ |
| 1469 | ID: replicationID, |
| 1470 | Status: remoteCfg.TargetState, |
| 1471 | } |
| 1472 | } |
| 1473 | } |
| 1474 | } |
| 1475 | |
| 1476 | // Add the replication config if requested |
| 1477 | if options.IncludeConfig { |
| 1478 | if remoteCfg == nil { |
| 1479 | var err error |
| 1480 | remoteCfg, err = m.GetReplication(replicationID) |
| 1481 | if err != nil { |
| 1482 | return nil, err |
| 1483 | } |
| 1484 | } |
| 1485 | status.Config = remoteCfg.ReplicationConfig.Redacted(ctx) |
| 1486 | } |
| 1487 | |
| 1488 | if !options.IncludeError && status.Status == ReplicationStateError { |
| 1489 | return nil, nil |
| 1490 | } |
| 1491 | if options.ActiveOnly && status.Status != ReplicationStateRunning { |
| 1492 | return nil, nil |
| 1493 | } |
no test coverage detected