'Sync a db by sending all records since the last sync.
:param point: synchronization high water mark between the replicas
:param broker: database broker object
:param http: ReplConnection object for the remote server
:param remote_id: database id for the remote replica
:param local_id: database id for the local replica
:returns: boolean indicating completion and success'

def _usync_db(self, point, broker, http, remote_id, local_id):

    self.stats['diff'] += 1
    self.logger.increment('diffs')
    self.logger.debug('Syncing    chunks    with    %s,    starting    at    %s', http.host, point)
    sync_table = broker.get_syncs()
    objects = broker.get_items_since(point, self.per_diff)
    diffs = 0
    while (len(objects) and (diffs < self.max_diffs)):
        diffs += 1
        with Timeout(self.node_timeout):
            response = http.replicate('merge_items', objects, local_id)
        if ((not response) or (response.status >= 300) or (response.status < 200)):
            if response:
                self.logger.error(_('ERROR    Bad    response    %(status)s    from    %(host)s'), {'status': response.status, 'host': http.host})
            return False
        point = objects[(-1)]['ROWID']
        objects = broker.get_items_since(point, self.per_diff)
    if objects:
        self.logger.debug('Synchronization    for    %s    has    fallen    more    than    %s    rows    behind;    moving    on    and    will    try    again    next    pass.', broker, (self.max_diffs * self.per_diff))
        self.stats['diff_capped'] += 1
        self.logger.increment('diff_caps')
    else:
        with Timeout(self.node_timeout):
            response = http.replicate('merge_syncs', sync_table)
        if (response and (200 <= response.status < 300)):
            broker.merge_syncs([{'remote_id': remote_id, 'sync_point': point}], incoming=False)
            return True
    return False
