Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2004-12-30 20:23:01 +0000
committerslewis2004-12-30 20:23:01 +0000
commit59125d7e97c5bb108c440b3a89e78112cd567a4e (patch)
tree6a72b28aa63805547ef5b4df0c6bc82b33357dc2
parent37daa716c6170cf095d9b547f9c3517dd81f465b (diff)
downloadorg.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
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/.options3
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ClientSOContainer.java21
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ContainerMessage.java18
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainer.java20
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOContainerGMM.java55
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/SOManager.java25
-rw-r--r--framework/bundles/org.eclipse.ecf.provider/src/org/eclipse/ecf/provider/generic/ServerSOContainer.java5
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;
}

Back to the top