| | |
| | | import java.util.List; |
| | | |
| | | import org.opends.server.api.ClientConnection; |
| | | import org.opends.server.api.plugin.PreParsePluginResult; |
| | | import org.opends.server.api.plugin.PluginResult; |
| | | import org.opends.server.loggers.debug.DebugLogger; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | | import org.opends.server.types.AbstractOperation; |
| | | import org.opends.server.types.CancelRequest; |
| | | import org.opends.server.types.CancelResult; |
| | | import org.opends.server.types.Control; |
| | | import org.opends.server.types.DisconnectReason; |
| | | import org.opends.server.types.OperationType; |
| | | import org.opends.server.types.ResultCode; |
| | | import org.opends.server.types.*; |
| | | import org.opends.server.types.operation.PostOperationAbandonOperation; |
| | | import org.opends.server.types.operation.PreParseAbandonOperation; |
| | | |
| | |
| | | |
| | | |
| | | this.idToAbandon = idToAbandon; |
| | | this.cancelResult = new CancelResult(ResultCode.CANNOT_CANCEL, |
| | | ERR_CANNOT_CANCEL_ABANDON.get()); |
| | | } |
| | | |
| | | |
| | |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public final void disconnectClient(DisconnectReason disconnectReason, |
| | | boolean sendNotification, Message message |
| | | ) |
| | | { |
| | | clientConnection.disconnect(disconnectReason, sendNotification, |
| | | message); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public final String[][] getRequestLogElements() |
| | | { |
| | | // Note that no debugging will be done in this method because it is a likely |
| | |
| | | { |
| | | setResultCode(ResultCode.UNDEFINED); |
| | | |
| | | // Start the processing timer. |
| | | setProcessingStartTime(); |
| | | |
| | | // Log the abandon request message. |
| | | logAbandonRequest(this); |
| | | |
| | | // Get the plugin config manager that will be used for invoking plugins. |
| | | PluginConfigManager pluginConfigManager = |
| | | DirectoryServer.getPluginConfigManager(); |
| | | boolean skipPostOperation = false; |
| | | |
| | | |
| | | // Start the processing timer. |
| | | setProcessingStartTime(); |
| | | |
| | | |
| | | // Create a labeled block of code that we can break out of if a problem is |
| | | // detected. |
| | | abandonProcessing: |
| | | { |
| | | // Invoke the pre-parse abandon plugins. |
| | | PreParsePluginResult preParseResult = |
| | | PluginResult.PreParse preParseResult = |
| | | pluginConfigManager.invokePreParseAbandonPlugins(this); |
| | | if (preParseResult.connectionTerminated()) |
| | | if (!preParseResult.continueProcessing()) |
| | | { |
| | | // There's no point in continuing. Log the request and result and |
| | | // return. |
| | | setResultCode(ResultCode.CANCELED); |
| | | |
| | | appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get()); |
| | | |
| | | setProcessingStopTime(); |
| | | |
| | | logAbandonRequest(this); |
| | | logAbandonResult(this); |
| | | return; |
| | | } |
| | | else if (preParseResult.sendResponseImmediately()) |
| | | { |
| | | skipPostOperation = true; |
| | | setResultCode(preParseResult.getResultCode()); |
| | | appendErrorMessage(preParseResult.getErrorMessage()); |
| | | setMatchedDN(preParseResult.getMatchedDN()); |
| | | setReferralURLs(preParseResult.getReferralURLs()); |
| | | break abandonProcessing; |
| | | } |
| | | else if (preParseResult.skipCoreProcessing()) |
| | | { |
| | | skipPostOperation = false; |
| | | break abandonProcessing; |
| | | } |
| | | |
| | | |
| | | // Log the abandon request message. |
| | | logAbandonRequest(this); |
| | | |
| | | |
| | | // Actually perform the abandon operation. Make sure to set the result |
| | | // code to reflect whether the abandon was successful and an error message |
| | |
| | | // configurable option in the server. |
| | | boolean notifyRequestor = DirectoryServer.notifyAbandonedOperations(); |
| | | Message cancelReason = INFO_CANCELED_BY_ABANDON_REQUEST.get(messageID); |
| | | MessageBuilder cancelResponse = new MessageBuilder(); |
| | | CancelResult result = |
| | | operation.cancel(new CancelRequest(notifyRequestor, cancelReason, |
| | | cancelResponse)); |
| | | operation.cancel(new CancelRequest(notifyRequestor, cancelReason)); |
| | | setResultCode(result.getResultCode()); |
| | | setErrorMessage(cancelResponse); |
| | | appendErrorMessage(result.getResponseMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | | // Invoke the post-operation abandon plugins. |
| | | if (! skipPostOperation) |
| | | { |
| | | pluginConfigManager.invokePostOperationAbandonPlugins(this); |
| | | PluginResult.PostOperation postOpResult = |
| | | pluginConfigManager.invokePostOperationAbandonPlugins(this); |
| | | if (!postOpResult.continueProcessing()) |
| | | { |
| | | setResultCode(preParseResult.getResultCode()); |
| | | appendErrorMessage(preParseResult.getErrorMessage()); |
| | | setMatchedDN(preParseResult.getMatchedDN()); |
| | | setReferralURLs(preParseResult.getReferralURLs()); |
| | | break abandonProcessing; |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public final CancelResult cancel(CancelRequest cancelRequest) |
| | | { |
| | | cancelRequest.addResponseMessage(ERR_CANNOT_CANCEL_ABANDON.get()); |
| | | return CancelResult.CANNOT_CANCEL; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public final CancelRequest getCancelRequest() |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public boolean setCancelRequest(CancelRequest cancelRequest) |
| | | { |
| | | // Abandon operations cannot be canceled. |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * {@inheritDoc} |
| | | */ |
| | | @Override() |
| | | public final void toString(StringBuilder buffer) |
| | | { |
| | | buffer.append("AbandonOperation(connID="); |