/** * <p> * Called by the QuartzScheduler before the <code>JobStore</code> is used, in order to give the it a chance to * initialize. * </p> */ @Override // XXX: remove this suppression @SuppressWarnings("unchecked") public void initialize(ClassLoadHelper loadHelper, SchedulerSignaler schedulerSignaler) { this.terracottaClientId = clusterInfo.getCurrentNode().getId(); this.ftrCtr = System.currentTimeMillis(); // this MUST happen before initializing the trigger set (otherwise we might receive an update which get an NPE) // this.serializer.setClassLoadHelper(loadHelper); this.signaler = schedulerSignaler; getLog().info(getClass().getSimpleName() + " initialized."); ((ToolkitInternal) toolkit).registerBeforeShutdownHook(new ShutdownHook(this)); }
/** * <p> * Called by the QuartzScheduler before the <code>JobStore</code> is used, in order to give the it a chance to * initialize. * </p> */ @Override // XXX: remove this suppression @SuppressWarnings("unchecked") public void initialize(ClassLoadHelper loadHelper, SchedulerSignaler schedulerSignaler) { this.terracottaClientId = clusterInfo.getCurrentNode().getId(); this.ftrCtr = System.currentTimeMillis(); // this MUST happen before initializing the trigger set (otherwise we might receive an update which get an NPE) // this.serializer.setClassLoadHelper(loadHelper); this.signaler = schedulerSignaler; getLog().info(getClass().getSimpleName() + " initialized."); ((ToolkitInternal) toolkit).registerBeforeShutdownHook(new ShutdownHook(this)); }
@Override public ClusterNode waitUntilNodeJoinsCluster() { return new TerracottaNodeImpl(cluster.getCurrentNode()); }
@Override public ClusterNode getCurrentNode() { return new TerracottaNodeImpl(cluster.getCurrentNode()); }
@Override public void clusterOnline(ClusterNode node) { this.clusterOnline = true; this.currentNode = new TerracottaNodeImpl(toolkit.getClusterInfo().getCurrentNode()); }
private void nodeRejoined() { nodeWriteLock.lock(); try { currentNode = cluster.getCurrentNode(); nodeName = getAsyncNodeName(name, currentNode); debug("nodeRejoined currentNode " + currentNode + " nodeName " + nodeName); localBuckets.clear(); deadBuckets.clear(); lockHolder.reset(); startBuckets(concurrency); } finally { nodeWriteLock.unlock(); } processDeadNodes(); }
public AsyncCoordinatorImpl(String fullAsyncName, String cacheName, AsyncConfig config, ToolkitInstanceFactory toolkitInstanceFactory, Callback asyncFactoryCallback) { this.name = fullAsyncName; // contains CacheManager name and Cache name this.cacheName = cacheName; if (null == config) { this.config = DefaultAsyncConfig.getInstance(); } else { this.config = config; } this.toolkitInstanceFactory = toolkitInstanceFactory; this.toolkit = (ToolkitInternal) toolkitInstanceFactory.getToolkit(); this.aliveTimeoutSec = toolkit.getProperties().getLong(NODE_ALIVE_TIMEOUT_PROPERTY_NAME, 5L); this.cluster = toolkit.getClusterInfo(); this.listener = new AsyncClusterListener(); this.currentNode = cluster.getCurrentNode(); this.nodeName = getAsyncNodeName(name, currentNode); // contains CacheManager name, Cache name and nodeId this.localBuckets = new ArrayList<ProcessingBucket<E>>(); this.deadBuckets = new ArrayList<ProcessingBucket<E>>(); this.bucketManager = new BucketManager(); this.commonAsyncLock = toolkit.getLock(name); ReadWriteLock nodeLock = new ReentrantReadWriteLock(); this.nodeWriteLock = nodeLock.writeLock(); this.nodeReadLock = nodeLock.readLock(); this.asyncFactoryCallback = asyncFactoryCallback; this.lockHolder = new LockHolder(); }
@Override public void onClusterEvent(org.terracotta.toolkit.cluster.ClusterEvent event) { switch (event.getType()) { case NODE_JOINED: if (currentNode == null) { currentNode = new TerracottaNodeImpl(cluster.getCurrentNode()); } topologyListener.nodeJoined(new TerracottaNodeImpl(event.getNode())); break; case NODE_LEFT: topologyListener.nodeLeft(new TerracottaNodeImpl(event.getNode())); break; case OPERATIONS_DISABLED: topologyListener.clusterOffline(new TerracottaNodeImpl(event.getNode())); break; case OPERATIONS_ENABLED: topologyListener.clusterOnline(new TerracottaNodeImpl(event.getNode())); break; case NODE_REJOINED: TerracottaNodeImpl oldNode = currentNode; currentNode = new TerracottaNodeImpl(event.getNode()); topologyListener.clusterRejoined(oldNode, currentNode); break; case NODE_ERROR: // not bubbled upto ehcache layer yet break; } }