| | |
| | | * |
| | | * |
| | | * Copyright 2009 Sun Microsystems, Inc. |
| | | * Portions copyright 2011-2013 ForgeRock AS |
| | | * Portions copyright 2011-2014 ForgeRock AS |
| | | */ |
| | | package org.opends.server.replication.server; |
| | | |
| | | import java.io.IOException; |
| | | import java.net.SocketException; |
| | | |
| | | import org.opends.messages.Message; |
| | | import org.opends.server.core.DirectoryServer; |
| | | import org.opends.server.core.PersistentSearch; |
| | | import org.opends.server.loggers.debug.DebugTracer; |
| | |
| | | */ |
| | | private static final DebugTracer TRACER = getTracer(); |
| | | |
| | | private Session session; |
| | | private ECLServerHandler handler; |
| | | private ReplicationServerDomain replicationServerDomain; |
| | | private final Session session; |
| | | private final ECLServerHandler handler; |
| | | private final ReplicationServerDomain replicationServerDomain; |
| | | private boolean suspended; |
| | | private boolean shutdown; |
| | | private volatile boolean shutdown; |
| | | private PersistentSearch mypsearch; |
| | | |
| | | /** |
| | |
| | | */ |
| | | public synchronized void suspendWriter() |
| | | { |
| | | synchronized(this) |
| | | { |
| | | suspended = true; |
| | | } |
| | | suspended = true; |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public synchronized void resumeWriter() |
| | | { |
| | | synchronized(this) |
| | | { |
| | | suspended = false; |
| | | } |
| | | suspended = false; |
| | | notify(); |
| | | } |
| | | |
| | |
| | | // session is always null if a socket exception has occurred. |
| | | if (session != null) |
| | | { |
| | | final Message errMessage; |
| | | if (handler.isDataServer()) |
| | | { |
| | | errMessage = ERR_DS_BADLY_DISCONNECTED.get( |
| | | handler.getReplicationServerId(), |
| | | handler.getServerId(), |
| | | session.getReadableRemoteAddress(), |
| | | handler.getBaseDNString()); |
| | | } |
| | | else |
| | | { |
| | | errMessage = ERR_RS_BADLY_DISCONNECTED.get( |
| | | handler.getReplicationServerId(), |
| | | handler.getServerId(), |
| | | session.getReadableRemoteAddress(), |
| | | handler.getBaseDNString()); |
| | | } |
| | | logError(errMessage); |
| | | logError(handler.getBadlyDisconnectedErrorMessage()); |
| | | } |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | // An unexpected error happened. |
| | | // Log an error and close the connection. |
| | | Message errMessage = ERR_WRITER_UNEXPECTED_EXCEPTION |
| | | .get(handler + " " + stackTraceToSingleLineString(e)); |
| | | logError(errMessage); |
| | | logError(ERR_WRITER_UNEXPECTED_EXCEPTION.get( |
| | | handler + " " + stackTraceToSingleLineString(e))); |
| | | } |
| | | finally |
| | | { |
| | |
| | | ECLUpdateMsg update = null; |
| | | try |
| | | { |
| | | handler.refreshEligibleCSN(); |
| | | update = handler.takeECLUpdate(); |
| | | } |
| | | catch(DirectoryException de) |
| | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Message errMessage = ERR_WRITER_UNEXPECTED_EXCEPTION.get( |
| | | handler + " " + stackTraceToSingleLineString(e)); |
| | | logError(errMessage); |
| | | logError(ERR_WRITER_UNEXPECTED_EXCEPTION.get( |
| | | handler + " " + stackTraceToSingleLineString(e))); |
| | | mypsearch.cancel(); |
| | | } |
| | | } |