This document is to failover an edge server to the standby edge that is using journalcopy for replication.
We assume the instance number for the server you are failing over to be 1 in this document.

Conventions:
Primary Edge: Normally active edge server. We will refer to this machine as the primary edge throughout this document, even after failover for consistency.
Standby Edge: This is the machine that is normally the standby for your edge server. Again, we will refer to this machine as the standby edge throughout the document for consistency.

edge_id = server id for your edge server
edge_standby_id = server id for your edge standby server
svc_edge_id = service user for the edge master
svc_edge_standby_id = service user for the edge standby

To perform the failover from the Primary Edge to the Standby Edge, complete the following steps:

On the Standby Edge:

1. Connect via SSH to the Standby Edge. Make sure you are the user running Perforce.
2. Check replication status with
   p4 pull -lj
 
On the Primary Edge:

Connect via SSH to the Primary Edge. Make sure you are the user running Perforce.
Check replication status with
   p4 pull -lj
Stop the Primary Edge Server Perforce Service:
   sudo systemctl stop p4d_1
Disable automatic startup of the Primary Edge Server Perforce Service:
   sudo systemctl disable p4d_1
 
On the Standby Edge:

Stop the Standby Edge Server Perforce Service:
  sudo systemctl stop p4d_1
Clear the state file:
  rm /p4/1/root/state*
Remove replica journals:
  rm -f /p4/1/logs/journal*
Copy primary journals to standby server:
  rsync -av edge_id:/p4/1/logs/journal /p4/1/logs
Copy primary edge state to standby server:
  rsync -av edge_id:/p4/1/root/state /p4/1/root
Replay primary journal against standby db: 
  /p4/1/bin/p4d_1 -r /p4/1/root -jr -f /p4/1/logs/journal
Log admin user into the commit server:
  /p4/common/bin/p4master_run 1 p4 -p perforce-commit.ct.company.com:1666 login -a < /p4/common/config/.p4passwd.p4_1_admin
Log service user into the commit server:
  /p4/common/bin/p4master_run 1 p4 -p perforce-commit.ct.company.com:1666 login svc_edge_id
Edit server.id file:
  vim /p4/1/root/server.id
  change server id to "edge_id"
Edit server type file
  vim /p4/1/root/sdp_server_type.txt
  change p4d_edgerep to p4d_edge
Start Perforce service on standby edge
  systemctl start p4d_1
Verify Standby Edge is now acting as Primary Edge
  p4 info (check serverid)
  p4 pull -lj (make sure edge is pulling from commit)

Failover complete
Have IT update DNS Record for Primary Edge to point to Standby Edge

Failback (Standby Edge → Primary Edge)

On the Primary Edge:

Connect via SSH to the Primary Edge.
Verify the Primary Edge Server Perforce Service is stopped:
  sudo systemctl status p4d_1

On the Standby Edge:

Connect via SSH to the Standby Edge.
Stop the Standby Edge Server Perforce Service:
  sudo systemctl stop p4d_1
      
On the Primary Edge:

Connect via SSH to the Primary Edge.
Again, Verify the Primary Edge Server Perforce Service is stopped:
  sudo systemctl status p4d_1
Clear the state file:
  rm /p4/1/root/state*
remove replica journals:
  rm -f /p4/1/logs/journal*
copy standby checkpoints to primary server:
  rsync -av edge_id:/p4/1/checkpoints/p4_1.jnl.* /p4/1/checkpoints/
copy standby journals to primary server:
  rsync -av edge_id:/p4/1/logs/journal /p4/1/logs
Check the perforce journal counter
  /p4/1/bin/p4d_1 -r /p4/1/root -jd - db.counter | grep journal
Replay any newer numbered journals against primary db:
  /p4/1/bin/p4d_1 -r /p4/1/root -jr -f /p4/1/checkpoints/p4_1.jnl.xx
Replay the current journal file against primary db:
  /p4/1/bin/p4d_1 -r /p4/1/root -jr -f /p4/1/logs/journal
log service user into the commit server:
  /p4/common/bin/p4master_run 1 p4 -p perforce-commit.company.com:1666 login svc_edge_id
Enable Perforce service on primary edge:
  sudo systemctl enable p4d_1
Start Perforce service on primary edge
  sudo systemctl start p4d_1
Verify Primary Edge is now acting as Primary Edge once again
  p4 info (check serverid)
  p4 pull -lj (make sure edge is pulling from commit)

Failback complete
Have IT update DNS Record to point back to Primary Edge
 
At this point, the major part of the maintenance is complete, and users should be able to resume work on the Primary Perforce Edge Server. 
The remaining task is to recover the standby edge server.

Standby Edge Recovery

On the Standby Edge:

Connect via SSH to the Standby Edge.
Verify the Standby Edge Server Perforce Service is stopped:
  sudo systemctl status p4d_1
Clear the state file:
  rm /p4/1/root/state*
Remove replica journals:
  rm -f /p4/1/logs/journal*
Log admin user into the commit server:
  /p4/common/bin/p4master_run 1 p4 -p edge_id.company.com:1666 login -a < /p4/common/config/.p4passwd.p4_1_admin
Log service user into the commit server:
  /p4/common/bin/p4master_run 1 p4 -p edge_id.company.com:1666 login svc_edge_id_standby
Edit server.id file:
  vim /p4/1/root/server.id
  change server id to "edge_id-standby"
Edit server type file
  vim /p4/1/root/sdp_server_type.txt
  change p4d_edge to p4d_edgerep
Start Perforce service on standby edge
  sudo systemctl start p4d_1
Verify Standby Edge is now acting as Standby Edge once again
  p4 info (check serverid)
  p4 pull -lj (make sure standby edge is pulling data)

