diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/net4j/FailoverAgent.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/net4j/FailoverAgent.java | 64 |
1 files changed, 54 insertions, 10 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/net4j/FailoverAgent.java b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/net4j/FailoverAgent.java index 5497a2139c..c372698fda 100644 --- a/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/net4j/FailoverAgent.java +++ b/plugins/org.eclipse.emf.cdo.server.net4j/src/org/eclipse/emf/cdo/server/net4j/FailoverAgent.java @@ -12,6 +12,8 @@ package org.eclipse.emf.cdo.server.net4j; import org.eclipse.emf.cdo.common.CDOCommonRepository; import org.eclipse.emf.cdo.server.CDOServerUtil; +import org.eclipse.emf.cdo.server.IRepository; +import org.eclipse.emf.cdo.server.IRepositorySynchronizer; import org.eclipse.emf.cdo.server.ISynchronizableRepository; import org.eclipse.emf.cdo.session.CDOSessionConfiguration; import org.eclipse.emf.cdo.session.CDOSessionConfigurationFactory; @@ -56,6 +58,8 @@ public abstract class FailoverAgent extends Lifecycle implements CDOSessionConfi private InternalFailoverParticipant repository; + private long repositoryActivationTimeout = 10000L; + private Protocol protocol; private String masterConnectorDescription; @@ -68,6 +72,14 @@ public abstract class FailoverAgent extends Lifecycle implements CDOSessionConfi { } + /** + * @since 4.1 + */ + public IManagedContainer getContainer() + { + return IPluginContainer.INSTANCE; + } + public IConnector getMonitorConnector() { return monitorConnector; @@ -156,6 +168,23 @@ public abstract class FailoverAgent extends Lifecycle implements CDOSessionConfi this.repository = (InternalFailoverParticipant)repository; } + /** + * @since 4.1 + */ + public long getRepositoryActivationTimeout() + { + return repositoryActivationTimeout; + } + + /** + * @since 4.1 + */ + public void setRepositoryActivationTimeout(long repositoryActivationTimeout) + { + checkInactive(); + this.repositoryActivationTimeout = repositoryActivationTimeout; + } + public Protocol getProtocol() { return protocol; @@ -180,20 +209,25 @@ public abstract class FailoverAgent extends Lifecycle implements CDOSessionConfi protected void doActivate() throws Exception { super.doActivate(); + IManagedContainer container = getContainer(); if (timer == null) { - timer = (Timer)getContainer().getElement(TimerLifecycle.PRODUCT_GROUP, DaemonFactory.TYPE, null); + timer = (Timer)container.getElement(TimerLifecycle.PRODUCT_GROUP, DaemonFactory.TYPE, null); } - synchronizer = (InternalRepositorySynchronizer)CDOServerUtil.createRepositorySynchronizer(this); + synchronizer = (InternalRepositorySynchronizer)createRepositorySynchronizer(); repository.setSynchronizer(synchronizer); - setMaster(); // Will be adjusted with the following SIGNAL_PUBLISH_MASTER - - LifecycleUtil.activate(repository); + // setMaster(); // Will be adjusted with the following SIGNAL_PUBLISH_MASTER protocol = new Protocol(this); protocol.start(rate, timeout); + + // Repository will be activated asynchronously by the agent protocol, so wait + if (!LifecycleUtil.waitForActive(repository, repositoryActivationTimeout)) + { + LifecycleUtil.checkActive(repository); + } } @Override @@ -220,14 +254,17 @@ public abstract class FailoverAgent extends Lifecycle implements CDOSessionConfi repository.setType(CDOCommonRepository.Type.BACKUP); } - protected abstract CDOSessionConfiguration createSessionConfiguration(String connectorDescription, - String repositoryName); - - protected IManagedContainer getContainer() + /** + * @since 4.1 + */ + protected IRepositorySynchronizer createRepositorySynchronizer() { - return IPluginContainer.INSTANCE; + return CDOServerUtil.createRepositorySynchronizer(this); } + protected abstract CDOSessionConfiguration createSessionConfiguration(String connectorDescription, + String repositoryName); + /** * The agent-side implementation of the {@link FailoverMonitor fail-over monitor} protocol. * @@ -279,6 +316,13 @@ public abstract class FailoverAgent extends Lifecycle implements CDOSessionConfi String repositoryName = in.readString(); agent.setBackup(connectorDescription, repositoryName); } + + IRepository repository = agent.getRepository(); + if (!repository.isActive()) + { + IManagedContainer container = agent.getContainer(); + CDOServerUtil.addRepository(container, repository); + } } }; |