'Sync the local partition with the remote node(s) according to
the parameters of the job.  For primary nodes, the SYNC job type
will define both left and right hand sync_to nodes to ssync with
as defined by this primary nodes index in the node list based on
the fragment index found in the partition.  For non-primary
nodes (either handoff revert, or rebalance) the REVERT job will
define a single node in sync_to which is the proper/new home for
the fragment index.
N.B. ring rebalancing can be time consuming and handoff nodes\'
fragment indexes do not have a stable order, it\'s possible to
have more than one REVERT job for a partition, and in some rare
failure conditions there may even also be a SYNC job for the
same partition - but each one will be processed separately
because each job will define a separate list of node(s) to
\'sync_to\'.
:param: the job dict, with the keys defined in ``_get_job_info``'

def process_job(self, job):

    self.headers['X-Backend-Storage-Policy-Index'] = int(job['policy'])
    begin = time.time()
    if (job['job_type'] == REVERT):
        self._revert(job, begin)
    else:
        self._sync(job, begin)
    self.partition_times.append((time.time() - begin))
    self.reconstruction_count += 1
