# Class PrepRequestProcessor

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

All Implemented Interfaces:
  `Runnable, RequestProcessor`

public class PrepRequestProcessor extends ZooKeeperCriticalThread implements RequestProcessor
This request processor is generally at the start of a RequestProcessor change. It sets up any transactions associated with requests that change the state of the system. It counts on ZooKeeperServer to update outstandingRequests, so that it can take into account transactions that are in the queue to be applied when generating a transaction.

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static enum`
`PrepRequestProcessor.DigestOpCode`

### 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
`PrepRequestProcessor(ZooKeeperServer zks, RequestProcessor nextProcessor)`

## Method Summary

Modifier and Type
Method
Description
`protected void`
`addChangeRecord(org.apache.zookeeper.server.ZooKeeperServer.ChangeRecord c)`
`static List<ACL>`
`fixupACL(String path, List<Id> authInfo, List<ACL> acls)`
This method checks out the acl making sure it isn't null or empty, it has valid schemes and ids, and expanding any relative ids that depend on the requestor's authentication information.
`protected void`
`pRequest(Request request)`
This method will be called inside the ProcessRequestThread, which is a singleton, so there will be a single thread calling this code.
`protected void`
`pRequest2Txn(int type, long zxid, Request request, Record record)`
This method will be called inside the ProcessRequestThread, which is a singleton, so there will be a single thread calling this code.
`void`
`processRequest(Request request)`
`void`
`run()`
`static void`
`setFailCreate(boolean b)`
method for tests to set failCreate
`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

### PrepRequestProcessor

public PrepRequestProcessor(ZooKeeperServer zks, RequestProcessor nextProcessor)

## Method Details

### setFailCreate

public static void setFailCreate(boolean b)
method for tests to set failCreate

Parameters:
  `b` -

### run

public void run()

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

### addChangeRecord

protected void addChangeRecord(org.apache.zookeeper.server.ZooKeeperServer.ChangeRecord c)

### pRequest2Txn

protected void pRequest2Txn(int type, long zxid, Request request, Record record) throws KeeperException, IOException, RequestProcessor.RequestProcessorException
This method will be called inside the ProcessRequestThread, which is a singleton, so there will be a single thread calling this code.

Throws:
  `KeeperException`
  `IOException`
  `RequestProcessor.RequestProcessorException`

### pRequest

protected void pRequest(Request request) throws RequestProcessor.RequestProcessorException
This method will be called inside the ProcessRequestThread, which is a singleton, so there will be a single thread calling this code.

Parameters:
  `request` -
Throws:
  `RequestProcessor.RequestProcessorException`

### fixupACL

public static List<ACL> fixupACL(String path, List<Id> authInfo, List<ACL> acls) throws KeeperException.InvalidACLException
This method checks out the acl making sure it isn't null or empty, it has valid schemes and ids, and expanding any relative ids that depend on the requestor's authentication information.

Parameters:
  `authInfo` - list of ACL IDs associated with the client connection
  `acls` - list of ACLs being assigned to the node (create or setACL operation)
Returns:
  verified and expanded ACLs
Throws:
  `KeeperException.InvalidACLException`

### processRequest

public void processRequest(Request request)

Specified by:
  `processRequest` in interface `RequestProcessor`

### shutdown

public void shutdown()

Specified by:
  `shutdown` in interface `RequestProcessor`