'This API will restart some or all replicas or instances of the
specified partition.
This API is useful for testing failover.
If used to target a stateless service partition, RestartPartitionMode
must be AllReplicasOrInstances.
Call the GetPartitionRestartProgress API using the same OperationId to
get the progress.
:param service_id: The identity of the service. This is typically the
full name of the service without the \'fabric:\' URI scheme.
:type service_id: str
:param partition_id: The identity of the partition.
:type partition_id: str
:param operation_id: A GUID that identifies a call of this API.  This
is passed into the corresponding GetProgress API
:type operation_id: str
:param restart_partition_mode: - Invalid - Reserved.  Do not pass
into API.
- AllReplicasOrInstances - All replicas or instances in the partition
are restarted at once.
- OnlyActiveSecondaries - Only the secondary replicas are restarted.
. Possible values include: \'Invalid\', \'AllReplicasOrInstances\',
\'OnlyActiveSecondaries\'
:type restart_partition_mode: str
:param timeout: The server timeout for performing the operation in
seconds. This specifies the time duration that the client is willing
to wait for the requested operation to complete. The default value
for this parameter is 60 seconds.
:type timeout: long
:param dict custom_headers: headers that will be added to the request
:param bool raw: returns the direct response alongside the
deserialized response
:param operation_config: :ref:`Operation configuration
overrides<msrest:optionsforoperations>`.
:rtype: None
:rtype: :class:`ClientRawResponse<msrest.pipeline.ClientRawResponse>`
if raw=true
:raises:
:class:`FabricErrorException<azure.servicefabric.models.FabricErrorException>`'

def start_partition_restart(self, service_id, partition_id, operation_id, restart_partition_mode, timeout=60, custom_headers=None, raw=False, **operation_config):

    api_version = '3.0'
    url = '/Faults/Services/{serviceId}/$/GetPartitions/{partitionId}/$/StartRestart'
    path_format_arguments = {'serviceId': self._serialize.url('service_id', service_id, 'str', skip_quote=True), 'partitionId': self._serialize.url('partition_id', partition_id, 'str', skip_quote=True)}
    url = self._client.format_url(url, **path_format_arguments)
    query_parameters = {}
    query_parameters['api-version'] = self._serialize.query('api_version', api_version, 'str')
    query_parameters['OperationId'] = self._serialize.query('operation_id', operation_id, 'str')
    query_parameters['RestartPartitionMode'] = self._serialize.query('restart_partition_mode', restart_partition_mode, 'str')
    if (timeout is not None):
        query_parameters['timeout'] = self._serialize.query('timeout', timeout, 'long', maximum=4294967295, minimum=1)
    header_parameters = {}
    header_parameters['Content-Type'] = 'application/json;    charset=utf-8'
    if custom_headers:
        header_parameters.update(custom_headers)
    request = self._client.post(url, query_parameters)
    response = self._client.send(request, header_parameters, **operation_config)
    if (response.status_code not in [202]):
        raise models.FabricErrorException(self._deserialize, response)
    if raw:
        client_raw_response = ClientRawResponse(None, response)
        return client_raw_response
