Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java64
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);
+ }
}
};

Back to the top