diff options
| author | slewis | 2004-12-30 20:23:01 +0000 |
|---|---|---|
| committer | slewis | 2004-12-30 20:23:01 +0000 |
| commit | 59125d7e97c5bb108c440b3a89e78112cd567a4e (patch) | |
| tree | 6a72b28aa63805547ef5b4df0c6bc82b33357dc2 | |
| parent | 37daa716c6170cf095d9b547f9c3517dd81f465b (diff) | |
| download | org.eclipse.ecf-59125d7e97c5bb108c440b3a89e78112cd567a4e.tar.gz org.eclipse.ecf-59125d7e97c5bb108c440b3a89e78112cd567a4e.tar.xz org.eclipse.ecf-59125d7e97c5bb108c440b3a89e78112cd567a4e.zip | |
Added functionality to generic provider implementation. Added trace options. Created exception logging method in SOContainer superclass and used it in SOContainer and subclasses
7 files changed, 123 insertions, 24 deletions
diff --git a/framework/bundles/org.eclipse.ecf.provider/.options b/framework/bundles/org.eclipse.ecf.provider/.options index 71d77b0c4..364821b86 100644 --- a/framework/bundles/org.eclipse.ecf.provider/.options +++ b/framework/bundles/org.eclipse.ecf.provider/.options @@ -4,4 +4,5 @@ org.eclipse.ecf.provider/debug/flag = true org.eclipse.ecf.provider/debug/connection = true org.eclipse.ecf.provider/debug/container = true org.eclipse.ecf.provider/debug/sharedobjectwrapper = true -org.eclipse.ecf.provider/debug/sharedobjectmanager = true
\ No newline at end of file +org.eclipse.ecf.provider/debug/sharedobjectmanager = true +org.eclipse.ecf.provider/debug/gmm = true
\ No newline at end of file diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ClientSOContainer.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ClientSOContainer.java index 73caaa0c8..1e81e666a 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ClientSOContainer.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ClientSOContainer.java @@ -139,7 +139,26 @@ public abstract class ClientSOContainer extends SOContainer { } protected void handleViewChangeMessage(ContainerMessage mess) throws IOException { - // XXX TODO + debug("handleViewChangeMessage("+mess+")"); + ContainerMessage.ViewChangeMessage vc = (ContainerMessage.ViewChangeMessage) mess.getData(); + if (vc == null) throw new IOException("view change message is null"); + ID fromID = mess.getFromContainerID(); + ID toID = mess.getToContainerID(); + if (fromID == null || !fromID.equals(remoteServerID)) { + throw new IOException("view change message from "+fromID+" is not same as "+remoteServerID); + } + ID [] changeIDs = vc.getChangeIDs(); + if (changeIDs == null) { + // do nothing if we've got no changes + } else { + for(int i=0; i < changeIDs.length; i++) { + if (vc.isAdd()) { + groupManager.addMember(new Member(changeIDs[i])); + } else { + groupManager.removeMember(changeIDs[i]); + } + } + } } protected void forwardExcluding(ID from, ID excluding, ContainerMessage data) diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ContainerMessage.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ContainerMessage.java index 5b9e4c6f3..2babbe0f7 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ContainerMessage.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ContainerMessage.java @@ -158,6 +158,24 @@ public class ContainerMessage implements Serializable { .append("]"); return sb.toString(); } + /** + * @return Returns the add. + */ + public boolean isAdd() { + return add; + } + /** + * @return Returns the changeIDs. + */ + public ID[] getChangeIDs() { + return changeIDs; + } + /** + * @return Returns the data. + */ + public Serializable getData() { + return data; + } } public static final class CreateMessage implements Serializable { diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java index 9aad15073..3124b6afa 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java @@ -116,10 +116,15 @@ public abstract class SOContainer implements ISharedObjectContainer { if (conn != null) conn.disconnect(); } catch (IOException e) { - // XXX log + logException("Exception in killConnection",e); } } - + protected void logException(String msg, Throwable e) { + dumpStack(msg,e); + } + protected void log(String msg) { + debug(msg); + } protected void memberLeave(ID target, IConnection conn) { debug("memberLeave:" + target + ":" + conn); if (conn != null) @@ -420,10 +425,11 @@ public abstract class SOContainer implements ISharedObjectContainer { try { ContainerMessage mess = getObjectFromBytes((byte[]) e.getData()); } catch (IOException except) { - + logException("Exception in processDisconnect ",except); } } protected Object checkCreate(ID fromID, ID toID, long seq, SharedObjectDescription desc) { + debug("checkCreate("+fromID+","+toID+","+seq+","+desc+")"); // XXX TODO return desc; } @@ -446,7 +452,7 @@ public abstract class SOContainer implements ISharedObjectContainer { try { sendCreateResponse(fromID,sharedObjectID,new SharedObjectAddException("shared object "+sharedObjectID),desc.getIdentifier()); } catch (IOException e) { - // XXX Log this + logException("Exception in handleCreateMessage",e); } } forward(fromID, toID, mess); @@ -464,11 +470,12 @@ public abstract class SOContainer implements ISharedObjectContainer { long seq = mess.getSequence(); ContainerMessage.CreateResponseMessage resp = (ContainerMessage.CreateResponseMessage) mess.getData(); if (toID != null && toID.equals(getID())) { - SOWrapper sow = getSharedObjectWrapper(resp.getSharedObjectID()); + ID sharedObjectID = resp.getSharedObjectID(); + SOWrapper sow = getSharedObjectWrapper(sharedObjectID); if (sow != null) { sow.deliverCreateResponse(fromID,resp); } else { - // XXX log here + log("handleCreateResponseMessage...wrapper now found for "+sharedObjectID); } } else { forwardToRemote(fromID,toID,mess); @@ -556,6 +563,7 @@ public abstract class SOContainer implements ISharedObjectContainer { protected void notifyGroupLeave(ContainerMessage mess) { // XXX todo + debug("notifyGroupLeave("+mess+")"); } class LoadingSharedObject implements ISharedObject { diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainerGMM.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainerGMM.java index 6020c10fa..e44fc2362 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainerGMM.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainerGMM.java @@ -7,35 +7,49 @@ import java.util.Observer; import java.util.TreeMap; import org.eclipse.ecf.core.identity.ID; +import org.eclipse.ecf.provider.Trace; import org.eclipse.ecf.provider.generic.gmm.GMMImpl; import org.eclipse.ecf.provider.generic.gmm.Member; import org.eclipse.ecf.provider.generic.gmm.MemberChanged; class SOContainerGMM implements Observer { - public static boolean DEBUG = false; + static Trace debug = Trace.create("gmm"); - SOContainer container; + SOContainer container; Member localMember; GMMImpl groupManager; // Maximum number of members. Default is -1 (no maximum). int maxMembers = -1; TreeMap loading, active; - SOContainerGMM(SOContainer space, Member local) { - container = space; + SOContainerGMM(SOContainer cont, Member local) { + container = cont; groupManager = new GMMImpl(); groupManager.addObserver(this); loading = new TreeMap(); active = new TreeMap(); localMember = local; addMember(local); + debug("<init>"); } + protected void debug(String msg) { + if (Trace.ON && debug != null) { + debug.msg(msg + ":" + container.getID()); + } + } + + protected void dumpStack(String msg, Throwable e) { + if (Trace.ON && debug != null) { + debug.dumpStack(e, msg + ":" + container.getID()); + } + } ID[] getSharedObjectIDs() { return getActiveKeys(); } synchronized boolean addMember(Member m) { + debug("addMember("+m.getID()+")"); if (maxMembers > 0 && getSize() > maxMembers) { return false; } else { @@ -43,6 +57,7 @@ class SOContainerGMM implements Observer { } } synchronized int setMaxMembers(int max) { + debug("setMaxMembers("+max+")"); int old = maxMembers; maxMembers = max; return old; @@ -52,6 +67,7 @@ class SOContainerGMM implements Observer { } synchronized boolean removeMember(Member m) { + debug("removeMember("+m.getID()+")"); boolean res = groupManager.removeMember(m); if (res) { removeSharedObjects(m); @@ -60,6 +76,7 @@ class SOContainerGMM implements Observer { } synchronized boolean removeMember(ID id) { + debug("removeMember("+id+")"); Member m = getMemberForID(id); if (m == null) return false; @@ -75,6 +92,11 @@ class SOContainerGMM implements Observer { } synchronized void removeAllMembers(Member exception) { + if (exception == null) { + debug("removeAllMembers()"); + } else { + debug("removeAllMembers("+exception.getID()+")"); + } Object m[] = getMembers(); for (int i = 0; i < m.length; i++) { Member mem = (Member) m[i]; @@ -96,6 +118,7 @@ class SOContainerGMM implements Observer { } synchronized Member getMemberForID(ID id) { + debug("getMemberForID("+id+")"); Member newMem = new Member(id); for (Iterator i = iterator(); i.hasNext();) { Member oldMem = (Member) i.next(); @@ -110,6 +133,9 @@ class SOContainerGMM implements Observer { } synchronized boolean containsMember(Member m) { + if (m != null) { + debug("containsMember("+m.getID()+")"); + } return groupManager.containsMember(m); } @@ -119,7 +145,8 @@ class SOContainerGMM implements Observer { // End group membership change methods - synchronized boolean addRepObj(SOWrapper ro) { + synchronized boolean addSharedObject(SOWrapper ro) { + if (ro != null) debug("addSharedObject("+ro.getObjID()+")"); if (getFromAny(ro.getObjID()) != null) return false; addSharedObjectToActive(ro); @@ -128,6 +155,7 @@ class SOContainerGMM implements Observer { synchronized boolean addLoadingSharedObject( SOContainer.LoadingSharedObject lso) { + if (lso != null) debug("addLoadingSharedObject("+lso.getID()+")"); if (getFromAny(lso.getID()) != null) return false; loading.put(lso.getID(), new SOWrapper(lso, container)); @@ -137,11 +165,13 @@ class SOContainerGMM implements Observer { } synchronized void moveSharedObjectFromLoadingToActive(SOWrapper ro) { + if (ro != null) debug("moveSharedObjectFromLoadingToActive("+ro.getObjID()+")"); if (removeSharedObjectFromLoading(ro.getObjID())) addSharedObjectToActive(ro); } boolean removeSharedObjectFromLoading(ID id) { + debug("removeSharedObjectFromLoading("+id+")"); if (loading.remove(id) != null) { return true; } else @@ -153,16 +183,19 @@ class SOContainerGMM implements Observer { } void addSharedObjectToActive(SOWrapper so) { + if (so != null) debug("addSharedObjectToActive("+so.getObjID()+")"); ID[] ids = getActiveKeys(); active.put(so.getObjID(), so); so.activated(ids); } synchronized void notifyOthersActivated(ID id) { + debug("notifyOthersActivated("+id+")"); notifyOtherChanged(id, active, true); } synchronized void notifyOthersDeactivated(ID id) { + debug("notifyOthersActivated("+id+")"); notifyOtherChanged(id, active, false); } @@ -176,6 +209,7 @@ class SOContainerGMM implements Observer { } synchronized boolean removeSharedObject(ID id) { + debug("removeSharedObject("+id+")"); SOWrapper ro = removeFromMap(id, active); if (ro == null) return false; @@ -225,6 +259,7 @@ class SOContainerGMM implements Observer { } synchronized void clear() { + debug("clear()"); removeSharedObjects(null, true); } @@ -263,16 +298,12 @@ class SOContainerGMM implements Observer { return loading.containsKey(id); } - boolean debug() { - return DEBUG; - } - public String toString() { StringBuffer sb = new StringBuffer(); - sb.append("RSM["); + sb.append("SOContainerGMM["); sb.append(groupManager); - sb.append(";L:").append(loading); - sb.append(";A:").append(active).append("]"); + sb.append(";load:").append(loading); + sb.append(";active:").append(active).append("]"); return sb.toString(); } diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOManager.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOManager.java index c8b6b1331..0e965262c 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOManager.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOManager.java @@ -25,13 +25,16 @@ import org.eclipse.ecf.core.SharedObjectDisconnectException; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.util.AbstractFactory; import org.eclipse.ecf.core.util.QueueEnqueue; +import org.eclipse.ecf.provider.Trace; /** * */ public class SOManager implements ISharedObjectManager { - SOContainer container = null; + static Trace debug = Trace.create("sharedobjectmanager"); + + SOContainer container = null; Vector connectors = null; public SOManager(SOContainer cont) { @@ -40,6 +43,17 @@ public class SOManager implements ISharedObjectManager { connectors = new Vector(); } + protected void debug(String msg) { + if (Trace.ON && debug != null) { + debug.msg(msg + ":" + container.getID()); + } + } + + protected void dumpStack(String msg, Throwable e) { + if (Trace.ON && debug != null) { + debug.dumpStack(e, msg + ":" + container.getID()); + } + } protected void addConnector(ISharedObjectConnector conn) { connectors.add(conn); } @@ -99,6 +113,7 @@ public class SOManager implements ISharedObjectManager { * @see org.eclipse.ecf.core.ISharedObjectManager#getSharedObjectIDs() */ public ID[] getSharedObjectIDs() { + debug("getSharedObjectIDs()"); return container.getSharedObjectIDs(); } @@ -111,6 +126,7 @@ public class SOManager implements ISharedObjectManager { public ID createSharedObject(SharedObjectDescription sd, ISharedObjectContainerTransaction trans) throws SharedObjectCreateException { + debug("createSharedObject("+sd+","+trans+")"); ISharedObject newObject = null; Throwable t = null; ID result = sd.getID(); @@ -132,6 +148,7 @@ public class SOManager implements ISharedObjectManager { public ID addSharedObject(ID sharedObjectID, ISharedObject sharedObject, Map properties, ISharedObjectContainerTransaction trans) throws SharedObjectAddException { + debug("addSharedObject("+sharedObjectID+","+sharedObject+","+properties+","+trans+")"); Throwable t = null; ID result = sharedObjectID; try { @@ -153,6 +170,7 @@ public class SOManager implements ISharedObjectManager { * @see org.eclipse.ecf.core.ISharedObjectManager#getSharedObject(org.eclipse.ecf.core.identity.ID) */ public ISharedObject getSharedObject(ID sharedObjectID) { + debug("getSharedObject("+sharedObjectID+")"); return container.getSharedObject(sharedObjectID); } @@ -162,6 +180,7 @@ public class SOManager implements ISharedObjectManager { * @see org.eclipse.ecf.core.ISharedObjectManager#removeSharedObject(org.eclipse.ecf.core.identity.ID) */ public ISharedObject removeSharedObject(ID sharedObjectID) { + debug("getSharedObject("+sharedObjectID+")"); return container.removeSharedObject(sharedObjectID); } @@ -173,6 +192,7 @@ public class SOManager implements ISharedObjectManager { */ public ISharedObjectConnector connectSharedObjects(ID sharedObjectFrom, ID[] sharedObjectsTo) throws SharedObjectConnectException { + debug("connectSharedObjects("+sharedObjectFrom+","+sharedObjectsTo+")"); if (sharedObjectFrom == null) throw new SharedObjectConnectException("sender cannot be null"); if (sharedObjectsTo == null) @@ -206,6 +226,7 @@ public class SOManager implements ISharedObjectManager { */ public void disconnectSharedObjects(ISharedObjectConnector connector) throws SharedObjectDisconnectException { + if (connector != null) debug("disconnectSharedObjects("+connector.getSender()+")"); if (connector == null) throw new SharedObjectDisconnectException("connect cannot be null"); if (!removeConnector(connector)) { @@ -215,6 +236,7 @@ public class SOManager implements ISharedObjectManager { connector.dispose(); } protected void dispose() { + debug("dispose()"); for (Enumeration e = connectors.elements(); e.hasMoreElements();) { ISharedObjectConnector conn = (ISharedObjectConnector) e .nextElement(); @@ -228,6 +250,7 @@ public class SOManager implements ISharedObjectManager { * @see org.eclipse.ecf.core.ISharedObjectManager#getSharedObjectConnectors(org.eclipse.ecf.core.identity.ID) */ public List getSharedObjectConnectors(ID sharedObjectFrom) { + debug("getSharedObjectConnectors("+sharedObjectFrom+")"); List results = new ArrayList(); for (Enumeration e = connectors.elements(); e.hasMoreElements();) { ISharedObjectConnector conn = (ISharedObjectConnector) e diff --git a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ServerSOContainer.java b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ServerSOContainer.java index 14b17c3e9..d8b7aa687 100644 --- a/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ServerSOContainer.java +++ b/framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ServerSOContainer.java @@ -64,7 +64,7 @@ public class ServerSOContainer extends SOContainer { getNextSequenceNumber(), data .getData()))); } catch (IOException e) { - // XXX log this + logException("Exception in forwardExcluding from "+from+" with oldID "+oldID,e); } } } @@ -130,8 +130,7 @@ public class ServerSOContainer extends SOContainer { return ContainerMessage.makeViewChangeMessage(getID(), remoteID, getNextSequenceNumber(), memberIDs, true, null); } catch (Exception e) { - // XXX Log this - + logException("Exception in acceptNewClient("+socket+","+target+","+data+","+conn,e); // And then return null...which means refusal return null; } |
