Future<?> schedule(Runnable command, long delay, TimeUnit unit, boolean can_block);
protected void scheduleBarrierOpener() { if(barrier_opener_future == null || barrier_opener_future.isDone()) { barrier_opener_future=timer.schedule(this::openBarrier, max_close_time, TimeUnit.MILLISECONDS, false); } }
public void add(final K key) { Future<?> future=timer.schedule(new Runnable() { public void run() { if(handler != null) { try { handler.expired(key); } catch(Throwable t) { } } Future<?> tmp=map.remove(key); if(tmp != null) tmp.cancel(true); } public String toString() { return "AgeOutCache (timeout=" + timeout + ", handler=" + (handler != null? handler.getClass().getSimpleName() : null) + ")"; } }, timeout, TimeUnit.MILLISECONDS, false); // this task never blocks Future<?> result=map.putIfAbsent(key, future); if(result != null) future.cancel(true); }
protected synchronized void startMergeKiller() { if(merge_killer == null || merge_killer.isDone()) { MergeKiller task=new MergeKiller(this.merge_id); merge_killer=gms.timer.schedule(task, gms.merge_timeout * 2, TimeUnit.MILLISECONDS, false); } }
protected void startStabilityTask(Digest d, ViewId view_id, long delay) { stability_lock.lock(); try { if(stability_task_future == null || stability_task_future.isDone()) { StabilitySendTask stability_task=new StabilitySendTask(d, view_id); // runs only once stability_task_future=timer.schedule(stability_task, delay, TimeUnit.MILLISECONDS, getTransport() instanceof TCP); } } finally { stability_lock.unlock(); } }
protected void startResumeTask(long max_suspend_time) { max_suspend_time=(long)(max_suspend_time * 1.1); // little slack if(max_suspend_time <= 0) max_suspend_time=MAX_SUSPEND_TIME; synchronized(resume_task_mutex) { if(resume_task_future == null || resume_task_future.isDone()) { ResumeTask resume_task=new ResumeTask(); resume_task_future=timer.schedule(resume_task, max_suspend_time, TimeUnit.MILLISECONDS, false); log.debug("%s: resume task started, max_suspend_time=%d", local_addr, max_suspend_time); } } }
protected synchronized void startReconciliationTask() { if(reconciliation_task_future == null || reconciliation_task_future.isDone()) { reconciliation_task=new ReconciliationTask(); reconciliation_task_future=getTransport().getTimer().schedule(reconciliation_task, 0, TimeUnit.MILLISECONDS); } }
protected synchronized void startTask() { if(task == null || task.isDone() || task.isCancelled()) task=timer.schedule(() -> { reorderAndSend(up_msgs, up_lock, msg -> up_prot.up(msg)); reorderAndSend(down_msgs, down_lock, msg -> down_prot.down(msg)); }, max_time, TimeUnit.MILLISECONDS); }
public void viewAccepted(final View new_view) { final List<Address> old_nodes=this.view != null? new ArrayList<>(this.view.getMembers()) : null; this.view=new_view; if(log.isDebugEnabled()) log.debug("new view: " + new_view); if(hash_function != null) hash_function.installNodes(new_view.getMembers()); for(MembershipListener l: membership_listeners) l.viewAccepted(new_view); if(old_nodes != null) { timer.schedule(() -> rebalance(old_nodes, new ArrayList<>(new_view.getMembers())), 100, TimeUnit.MILLISECONDS); } }
public Responses findMembers(final List<Address> members, final boolean initial_discovery, boolean async, long timeout) { num_discovery_requests++; int num_expected=members != null? members.size() : 0; int capacity=members != null? members.size() : 16; Responses rsps=new Responses(num_expected, initial_discovery && break_on_coord_rsp, capacity); addResponse(rsps); if(async || async_discovery || (num_discovery_runs > 1) && initial_discovery) { timer.execute(() -> invokeFindMembers(members, initial_discovery, rsps, async)); if(num_discovery_runs > 1 && initial_discovery) { int num_reqs_to_send=num_discovery_runs-1; long last_send=timeout - (timeout/num_discovery_runs); long interval=last_send/num_reqs_to_send; for(long i=0,delay=interval; i < num_reqs_to_send; i++,delay+=interval) { Future<?> future=timer.schedule(() -> invokeFindMembers(members, initial_discovery, rsps, async), delay, TimeUnit.MILLISECONDS); this.discovery_req_futures.add(future); num_discovery_requests++; } } } else invokeFindMembers(members, initial_discovery, rsps, async); weedOutCompletedDiscoveryResponses(); return rsps; }
protected void sendDiscoveryResponse(Address logical_addr, PhysicalAddress physical_addr, String logical_name, final Address sender, boolean coord) { final PingData data=new PingData(logical_addr, is_server, logical_name, physical_addr).coord(coord); final Message rsp_msg=new Message(sender).setFlag(Message.Flag.INTERNAL, Message.Flag.OOB, Message.Flag.DONT_BUNDLE) .putHeader(this.id, new PingHeader(PingHeader.GET_MBRS_RSP)).setBuffer(marshal(data)); if(stagger_timeout > 0) { int view_size=view != null? view.size() : 10; int rank=Util.getRank(view, local_addr); // returns 0 if view or local_addr are null long sleep_time=rank == 0? Util.random(stagger_timeout) : stagger_timeout * rank / view_size - (stagger_timeout / view_size); timer.schedule(() -> { log.trace("%s: received GET_MBRS_REQ from %s, sending staggered response %s", local_addr, sender, data); down_prot.down(rsp_msg); }, sleep_time, TimeUnit.MILLISECONDS, sends_can_block); return; } log.trace("%s: received GET_MBRS_REQ from %s, sending response %s", local_addr, sender, data); down_prot.down(rsp_msg); }
protected void scheduleBarrierOpener() { if(barrier_opener_future == null || barrier_opener_future.isDone()) { barrier_opener_future=timer.schedule(this::openBarrier, max_close_time, TimeUnit.MILLISECONDS, false); } }
private void startMergeCanceller() { merge_canceller_lock.lock(); try { if(merge_canceller_future == null || merge_canceller_future.isDone()) { MergeCanceller task=new MergeCanceller(this.merge_id, gms.merge_timeout); merge_canceller_future=gms.timer.schedule(task, gms.merge_timeout, TimeUnit.MILLISECONDS); } } finally { merge_canceller_lock.unlock(); } }
private void startResumeTask(long max_suspend_time) { max_suspend_time=(long)(max_suspend_time * 1.1); // little slack if(max_suspend_time <= 0) max_suspend_time=MAX_SUSPEND_TIME; synchronized(resume_task_mutex) { if(resume_task_future == null || resume_task_future.isDone()) { ResumeTask resume_task=new ResumeTask(); resume_task_future=timer.schedule(resume_task, max_suspend_time, TimeUnit.MILLISECONDS); // fixed-rate scheduling if(log.isDebugEnabled()) log.debug("resume task started, max_suspend_time=" + max_suspend_time); } } }
protected synchronized void startMergeKiller() { if(merge_killer == null || merge_killer.isDone()) { MergeKiller task=new MergeKiller(this.merge_id); merge_killer=gms.timer.schedule(task, gms.merge_timeout * 2, TimeUnit.MILLISECONDS, false); } }
private void startStabilityTask(Digest d, long delay) { stability_lock.lock(); try { if(stability_task_future == null || stability_task_future.isDone()) { StabilitySendTask stability_task=new StabilitySendTask(d); // runs only once stability_task_future=timer.schedule(stability_task, delay, TimeUnit.MILLISECONDS); } } finally { stability_lock.unlock(); } }
protected void startResumeTask(long max_suspend_time) { max_suspend_time=(long)(max_suspend_time * 1.1); // little slack if(max_suspend_time <= 0) max_suspend_time=MAX_SUSPEND_TIME; synchronized(resume_task_mutex) { if(resume_task_future == null || resume_task_future.isDone()) { ResumeTask resume_task=new ResumeTask(); resume_task_future=timer.schedule(resume_task, max_suspend_time, TimeUnit.MILLISECONDS, false); log.debug("%s: resume task started, max_suspend_time=%d", local_addr, max_suspend_time); } } }
protected synchronized void startReconciliationTask() { if(reconciliation_task_future == null || reconciliation_task_future.isDone()) { reconciliation_task=new ReconciliationTask(); reconciliation_task_future=getTransport().getTimer().schedule(reconciliation_task, 0, TimeUnit.MILLISECONDS); } }
protected synchronized void startTask() { if(task == null || task.isDone() || task.isCancelled()) task=timer.schedule(() -> { reorderAndSend(up_msgs, up_lock, msg -> up_prot.up(msg)); reorderAndSend(down_msgs, down_lock, msg -> down_prot.down(msg)); }, max_time, TimeUnit.MILLISECONDS); }
public void viewAccepted(final View new_view) { final List<Address> old_nodes=this.view != null? new ArrayList<>(this.view.getMembers()) : null; this.view=new_view; if(log.isDebugEnabled()) log.debug("new view: " + new_view); if(hash_function != null) hash_function.installNodes(new_view.getMembers()); for(MembershipListener l: membership_listeners) l.viewAccepted(new_view); if(old_nodes != null) { timer.schedule(() -> rebalance(old_nodes, new ArrayList<>(new_view.getMembers())), 100, TimeUnit.MILLISECONDS); } }