ASF Bugzilla – Attachment 22179 Details for
Bug 45261
Concurrent node failure leads to inconsistent views.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
An alternative coordinator that makes local decisions based on membership service
DinkyCoordinator.java (text/x-java), 2.18 KB, created by
Robert Newson
on 2008-06-26 10:16:13 UTC
(
hide
)
Description:
An alternative coordinator that makes local decisions based on membership service
Filename:
MIME Type:
Creator:
Robert Newson
Created:
2008-06-26 10:16:13 UTC
Size:
2.18 KB
patch
obsolete
>package com.ironmountain.bedrock.groups.impl; > >import static java.util.concurrent.TimeUnit.MILLISECONDS; > >import java.util.Arrays; >import java.util.concurrent.atomic.AtomicBoolean; > >import org.apache.catalina.tribes.ChannelException; >import org.apache.catalina.tribes.Member; >import org.apache.catalina.tribes.group.AbsoluteOrder; >import org.apache.catalina.tribes.group.ChannelInterceptorBase; > >/** > * A dinky coordinator, just uses a sorted version of the member array. > * > * @author rnewson > * > */ >public class DinkyCoordinator extends ChannelInterceptorBase { > > private Member[] view; > > private AtomicBoolean membershipChanged = new AtomicBoolean(); > > private void membershipChanged() { > membershipChanged.set(true); > } > > @Override > public void memberAdded(final Member member) { > super.memberAdded(member); > membershipChanged(); > installViewWhenStable(); > } > > @Override > public void memberDisappeared(final Member member) { > super.memberDisappeared(member); > membershipChanged(); > installViewWhenStable(); > } > > /** > * Override to receive view changes. > * > * @param view > */ > protected void viewChange(final Member[] view) { > } > > @Override > public void start(int svc) throws ChannelException { > super.start(svc); > installViewWhenStable(); > } > > private void installViewWhenStable() { > int stableCount = 0; > > while (stableCount < 10) { > if (membershipChanged.compareAndSet(true, false)) { > stableCount = 0; > } else { > stableCount++; > } > try { > MILLISECONDS.sleep(250); > } catch (final InterruptedException e) { > Thread.currentThread().interrupt(); > } > } > > final Member[] members = getMembers(); > final Member[] view = Arrays.copyOf(members, members.length + 1); > view[members.length] = getLocalMember(false); > Arrays.sort(view, AbsoluteOrder.comp); > if (Arrays.equals(view, this.view)) { > return; > } > this.view = view; > viewChange(view); > } > > @Override > public void stop(int svc) throws ChannelException { > super.stop(svc); > } > > public Member[] getView() { > return view; > } > > public Member getCoordinator() { > return view == null ? null : view[0]; > } > > public boolean isCoordinator() { > return view == null ? false : getLocalMember(false).equals( > getCoordinator()); > } > >}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 45261
:
22166
| 22179