# Class SyncRequestProcessor

java.lang.Object
java.lang.Thread
org.apache.zookeeper.server.ZooKeeperThread
org.apache.zookeeper.server.ZooKeeperCriticalThread
org.apache.zookeeper.server.SyncRequestProcessor

All Implemented Interfaces:
  `Runnable, RequestProcessor`

public class SyncRequestProcessor extends ZooKeeperCriticalThread implements RequestProcessor
This RequestProcessor logs requests to disk. It batches the requests to do the io efficiently. The request is not passed to the next RequestProcessor until its log has been synced to disk. SyncRequestProcessor is used in 3 different cases 1. Leader - Sync request to disk and forward it to AckRequestProcessor which send ack back to itself. 2. Follower - Sync request to disk and forward request to SendAckRequestProcessor which send the packets to leader. SendAckRequestProcessor is flushable which allow us to force push packets to leader. 3. Observer - Sync committed request to disk (received as INFORM packet). It never send ack back to the leader, so the nextProcessor will be null. This change the semantic of txnlog on the observer since it only contains committed txns.

## Nested Class Summary

### Nested classes/interfaces inherited from class Thread

`Thread.State, Thread.UncaughtExceptionHandler`

### Nested classes/interfaces inherited from interface RequestProcessor

`RequestProcessor.RequestProcessorException`

## Field Summary

### Fields inherited from class Thread

`MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY`

## Constructor Summary

Constructors
Constructor
Description
`SyncRequestProcessor(ZooKeeperServer zks, RequestProcessor nextProcessor)`

## Method Summary

Modifier and Type
Method
Description
`static int`
`getSnapCount()`
used by tests to get the snapcount
`void`
`processRequest(Request request)`
`void`
`run()`
`static void`
`setSnapCount(int count)`
used by tests to check for changing snapcounts
`static void`
`setSnapSizeInBytes(long size)`
used by tests to check for changing snapcounts
`void`
`shutdown()`

### Methods inherited from class ZooKeeperCriticalThread

`handleException`

### Methods inherited from class Thread

`activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield`

### Methods inherited from class Object

`equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Constructor Details

### SyncRequestProcessor

public SyncRequestProcessor(ZooKeeperServer zks, RequestProcessor nextProcessor)

## Method Details

### setSnapCount

public static void setSnapCount(int count)
used by tests to check for changing snapcounts

Parameters:
  `count` -

### getSnapCount

public static int getSnapCount()
used by tests to get the snapcount

Returns:
  the snapcount

### setSnapSizeInBytes

public static void setSnapSizeInBytes(long size)
used by tests to check for changing snapcounts

Parameters:
  `size` -

### run

public void run()

Specified by:
  `run` in interface `Runnable`
Overrides:
  `run` in class `Thread`

### shutdown

public void shutdown()

Specified by:
  `shutdown` in interface `RequestProcessor`

### processRequest

public void processRequest(Request request)

Specified by:
  `processRequest` in interface `RequestProcessor`