[e-cvs] cvs commit: e/src/jsrc/org/erights/e/elib/tests TestELib.java
markm@eros.cs.jhu.edu
markm@eros.cs.jhu.edu
Wed, 22 Aug 2001 10:26:14 -0400
markm 01/08/22 10:26:14
Modified: src/jsrc/net/captp/jcomm LocatorUnum.java NonceLocator.java
ProxyConnection.java RemoteHandler.java
SturdyRef.java
src/jsrc/org/erights/e/elib/ref Ref.java
src/jsrc/org/erights/e/elib/serial PersistenceReplacer.java
src/jsrc/org/erights/e/elib/tests TestELib.java
Log:
better captp error reporting. DeliverOp args order changed
Revision Changes Path
1.7 +3 -3 e/src/jsrc/net/captp/jcomm/LocatorUnum.java
Index: LocatorUnum.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/LocatorUnum.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- LocatorUnum.java 2001/08/21 14:28:14 1.6
+++ LocatorUnum.java 2001/08/22 14:26:14 1.7
@@ -75,7 +75,7 @@
}
/**
- * The basic operation underlying 'SturdyRef.getPass()'. This is where
+ * The basic operation underlying 'SturdyRef.getGrip()'. This is where
* a reference to a remote object actually gets the various underlying
* comm systems connected so that we can send messages.
*
@@ -87,14 +87,14 @@
* via whoever we got it from long enough to fetch our
* own Remote reference via this lookup.
*/
- public Object getPass(ConstList searchPath,
+ public Object getGrip(ConstList searchPath,
String vatID,
BigInteger swissNum,
Object optFarVine)
throws IOException, IndexOutOfBoundsException {
if (Trace.captp.debug && Trace.ON) {
Trace.captp.debugm
- ("" + this + ".getPass(" + searchPath + ", " + vatID +
+ ("" + this + ".getGrip(" + searchPath + ", " + vatID +
", " + swissNum + ", " + optFarVine + ")");
}
ProxyConnection optProxyConn =
1.5 +23 -8 e/src/jsrc/net/captp/jcomm/NonceLocator.java
Index: NonceLocator.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/NonceLocator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- NonceLocator.java 2001/08/20 21:17:49 1.4
+++ NonceLocator.java 2001/08/22 14:26:14 1.5
@@ -27,14 +27,16 @@
import net.captp.tables.NearGiftTable;
import net.captp.tables.SwissTable;
import net.captp.tables.Vine;
+import org.erights.e.develop.trace.Trace;
import org.erights.e.elib.ref.Ref;
import org.erights.e.meta.java.math.BigIntegerSugar;
/**
- * Made magically available at incoming position 0. <p>
+ * Made magically available at incoming position 0.
+ * <p>
+ * Used to resolve 3-vat live Granovetter introductions, and to log tracing
+ * info sent from the other vat.
*
- * Used to resolve 3-vat live Granovetter introductions.
- *
* @author Mark S. Miller
*/
public class NonceLocator {
@@ -67,11 +69,11 @@
/**
*
*/
- public NonceLocator(PromiseGiftTable pGifts,
- NearGiftTable nGifts,
- String ownID,
- ProxyMgr proxyMgr,
- SwissTable swissTable)
+ /*package*/ NonceLocator(PromiseGiftTable pGifts,
+ NearGiftTable nGifts,
+ String ownID,
+ ProxyMgr proxyMgr,
+ SwissTable swissTable)
{
myPGifts = pGifts;
myNGifts = nGifts;
@@ -183,5 +185,18 @@
*/
public Object lookupSwiss(BigInteger swissNum, Object optFarVine) {
return mySwissTable.lookupSwiss(swissNum);
+ }
+
+ /**
+ * Enables our counterparty to log a message to our tracing system.
+ * <p>
+ * These messages are tagged with the vatID of our counterparty. They
+ * are logged at debug level, and currently to the "captp" subsystem.
+ * These should probably instead have their own subsystem.
+ */
+ public void traceRemote(String message) {
+ if (Trace.captp.debug && Trace.ON) {
+ Trace.captp.debugm(myOwnID + ": " + message);
+ }
}
}
1.23 +74 -25 e/src/jsrc/net/captp/jcomm/ProxyConnection.java
Index: ProxyConnection.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/ProxyConnection.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- ProxyConnection.java 2001/08/20 21:17:49 1.22
+++ ProxyConnection.java 2001/08/22 14:26:14 1.23
@@ -108,8 +108,10 @@
/**
* Queue delivery of message, resolve answer to the outcome.
+ * <p>
+ * DELIVER_OP as 9 had a different argument order
*/
- static private final byte DELIVER_OP = 9;
+ static private final byte DELIVER_OP = 13;
/**
* An import on the other has gone away dropping some number of
@@ -626,20 +628,29 @@
case DELIVER_ONLY_OP: {
int recipPos = pis.readInt();
String verb = ((String)pis.readUTF()).intern();
- Object[] args = (Object[])pis.readObject();
+ try {
+ Object[] args = (Object[])pis.readObject();
- execDeliverOnlyOp(recipPos, verb, args);
+ execDeliverOnlyOp(recipPos, verb, args);
+ } catch (Throwable problem) {
+ whyNoDeliverOnlyOp(recipPos, verb, problem);
+ }
break;
}
case DELIVER_OP: {
+ int answerPos = pis.readInt();
+ Object rdr = pis.readObject();
int recipPos = pis.readInt();
String verb = ((String)pis.readUTF()).intern();
- Object[] args = (Object[])pis.readObject();
- int answerPos = pis.readInt();
- Object redirector = pis.readObject();
+ try {
+ Object[] args = (Object[])pis.readObject();
- execDeliverOp(recipPos, verb, args,
- answerPos, redirector);
+ execDeliverOp(answerPos, rdr,
+ recipPos, verb, args);
+ } catch (Throwable problem) {
+ whyNoDeliverOp(answerPos, rdr,
+ recipPos, verb, problem);
+ }
break;
}
case GC_EXPORT_OP: {
@@ -684,7 +695,9 @@
/**
*
*/
- private void execDeliverOnlyOp(int recipPos, String verb, Object[] args) {
+ private void execDeliverOnlyOp(int recipPos, String verb,
+ Object[] args)
+ {
if (Trace.captp.debug && Trace.ON) {
Trace.captp.debugm(
"exec DeliverOnlyOp(" + recipPos + ", " + verb + ", " +
@@ -697,19 +710,56 @@
/**
*
*/
- private void execDeliverOp(int recipPos, String verb, Object[] args,
- int answerPos, Object redirector)
+ private void whyNoDeliverOnlyOp(int recipPos, String verb,
+ Throwable problem)
{
+ String msg = "whyNoDeliverOnlyOp(" + recipPos + ", " + verb + ", " +
+ problem + ")";
+ //Note: trace level is warning
+ if (Trace.captp.warning && Trace.ON) {
+ Trace.captp.warningm(msg, problem);
+ }
+ if (0 != recipPos || ! "traceRemote".equals(verb)) {
+ //Just locally report a failure to remotely report,
+ //in order to avoid a potential bounce cycle. All others
+ //are remotely reported as well.
+ E.sendOnly(myRemoteNonceLocator, "traceRemote", msg);
+ }
+ }
+
+ /**
+ *
+ */
+ private void execDeliverOp(int answerPos, Object rdr,
+ int recipPos, String verb, Object[] args)
+ {
if (Trace.captp.debug && Trace.ON) {
Trace.captp.debugm(
- "exec DeliverOp(" + recipPos + ", " + verb + ", " +
- argsString(args) + ",\n " +
- answerPos + ", " + redirector + ")");
+ "exec DeliverOp(" + answerPos + ", " + rdr + ",\n " +
+ recipPos + ", " + verb + ", " +
+ argsString(args) + ")");
}
Object recip = getIncoming(recipPos);
Ref answer = E.sendAll(recip, verb, args);
myAnswers.put(-answerPos, answer, true);
- E.sendOnly(answer, "whenMoreResolved", redirector);
+ E.sendOnly(answer, "whenMoreResolved", rdr);
+ }
+
+ /**
+ *
+ */
+ private void whyNoDeliverOp(int answerPos, Object rdr,
+ int recipPos, String verb, Throwable problem)
+ {
+ //Note: trace level is warning
+ if (Trace.captp.warning && Trace.ON) {
+ Trace.captp.warningm(
+ "whyNoDeliverOp(" + answerPos + ", " + rdr + ",\n " +
+ recipPos + ", " + verb + ", ???)",
+ problem);
+ }
+ myAnswers.put(-answerPos, problem, true);
+ E.sendOnly(problem, "whenMoreResolved", rdr);
}
/**
@@ -809,29 +859,28 @@
/**
*
*/
- /*package*/ void sendDeliverOp(int recipPos,
+ /*package*/ void sendDeliverOp(int answerPos,
+ Object rdr,
+ int recipPos,
String verb,
- Object[] args,
-
- int answerPos,
- Object redirector)
+ Object[] args)
{
if (Trace.captp.debug && Trace.ON) {
Trace.captp.debugm(
- "send DeliverOp(" + recipPos + ", " + verb + ", " +
- argsString(args) + ",\n " +
- answerPos + ", " + redirector + ")");
+ "send DeliverOp(" + answerPos + ", " + rdr + ",\n " +
+ recipPos + ", " + verb + ", " +
+ argsString(args) + ")");
}
if (null != myOptProblem) {
throw ExceptionMgr.asSafe(myOptProblem);
}
try {
ProxyOutputStream pos = makeMsg(DELIVER_OP);
+ pos.writeInt(answerPos);
+ pos.writeObject(rdr);
pos.writeInt(recipPos);
pos.writeUTF(verb);
pos.writeObject(args);
- pos.writeInt(answerPos);
- pos.writeObject(redirector);
sendMsg(pos);
} catch (Throwable problem) {
killConnection(problem, false);
1.12 +4 -4 e/src/jsrc/net/captp/jcomm/RemoteHandler.java
Index: RemoteHandler.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/RemoteHandler.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- RemoteHandler.java 2001/08/20 21:17:49 1.11
+++ RemoteHandler.java 2001/08/22 14:26:14 1.12
@@ -170,11 +170,11 @@
}
ProxyResolver pr = myConn.makeQuestion();
RemotePromiseHandler rvh = (RemotePromiseHandler)pr.optHandler();
- myConn.sendDeliverOp(myPos,
+ myConn.sendDeliverOp(rvh.getPos(),
+ new DelayedRedirector(pr),
+ myPos,
verb,
- args,
- rvh.getPos(),
- new DelayedRedirector(pr));
+ args);
return pr.getProxy();
}
1.11 +6 -6 e/src/jsrc/net/captp/jcomm/SturdyRef.java
Index: SturdyRef.java
===================================================================
RCS file: /cvs/e/src/jsrc/net/captp/jcomm/SturdyRef.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SturdyRef.java 2001/08/21 14:28:14 1.10
+++ SturdyRef.java 2001/08/22 14:26:14 1.11
@@ -128,25 +128,25 @@
* Return a (live) reference to the object which this SturdyRef
* designates. The result may be either a direct or eventual reference.
*/
- public Object getPass() throws IOException {
- return myLocatorUnum.getPass(mySearchPath,
+ public Object getGrip() throws IOException {
+ return myLocatorUnum.getGrip(mySearchPath,
myHostID,
mySwissNum,
null);
}
/**
- * @deprecated Use getPass() instead.
+ * @deprecated Use getGrip() instead.
*/
public Object liveRef() throws IOException {
- return getPass();
+ return getGrip();
}
/**
- * @deprecated Use getPass() instead.
+ * @deprecated Use getGrip() instead.
*/
public Object promiseRef() throws IOException {
- return getPass();
+ return getGrip();
}
/**
1.25 +23 -0 e/src/jsrc/org/erights/e/elib/ref/Ref.java
Index: Ref.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/ref/Ref.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- Ref.java 2001/08/21 13:36:19 1.24
+++ Ref.java 2001/08/22 14:26:14 1.25
@@ -154,6 +154,29 @@
}
/**
+ * Return a Disconnected reference -- a broken reference with the same
+ * identity as some far reference.
+ * <p>
+ * 'prevRef' must currently be a far or disconnected reference. While
+ * it seems sensible to allow one to make a Disconnected reference to a
+ * Near object, there's no way to provide this in Ref without destroying
+ * our layering -- the independence of local ELib from the CapTP layer.
+ */
+ static public Ref disconnected(Object problem, Object prevRef) {
+ prevRef = resolution(prevRef);
+ Object id;
+ if (prevRef instanceof FarRef) {
+ id = ((FarRef)prevRef).myIdentity;
+ } else if (prevRef instanceof DisconnectedRef) {
+ id = ((DisconnectedRef)prevRef).myIdentity;
+ } else {
+ throw new RuntimeException("must be far or disconnected " +
+ prevRef);
+ }
+ return new DisconnectedRef(problem, id);
+ }
+
+ /**
* Does this reference designate an object in this vat?
*
* @see #state(Object)
1.3 +1 -2 e/src/jsrc/org/erights/e/elib/serial/PersistenceReplacer.java
Index: PersistenceReplacer.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/serial/PersistenceReplacer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- PersistenceReplacer.java 2001/08/20 00:45:04 1.2
+++ PersistenceReplacer.java 2001/08/22 14:26:14 1.3
@@ -60,8 +60,7 @@
}
if (Ref.isEventual(ref)) {
if (Ref.isResolved(ref)) {
- throw new RuntimeException
- ("XXX far ref serialization not yet implemented");
+ return Ref.disconnected("Was far", ref);
} else {
return Ref.broken("Was a promise");
}
1.20 +1 -5 e/src/jsrc/org/erights/e/elib/tests/TestELib.java
Index: TestELib.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tests/TestELib.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- TestELib.java 2001/04/28 10:00:06 1.19
+++ TestELib.java 2001/08/22 14:26:14 1.20
@@ -22,7 +22,6 @@
import org.erights.e.develop.exception.PrintStreamWriter;
import org.erights.e.elib.prim.E;
import org.erights.e.elib.ref.OneArgFuncAdapter;
-import org.erights.e.elib.ref.Ref;
/**
* TestELib -- simple tester to send a message to an object and
@@ -84,7 +83,7 @@
// Send the message. The following is the
// equivelent of: returnVal = target.addOne(startVal);
// "p" is the returned promise.
- Ref p = E.send(target, "addOne", new Integer(startVal));
+ Object p = E.send(target, "addOne", new Integer(startVal));
// Now send "whenMoreResolved" to the promise p.
// "this" will be the NEAR reactor for the promise.
@@ -105,9 +104,6 @@
*
*/
public void reactToAddOneResolved(Object resolution) {
- PrintStreamWriter.out().println
- ("WhenAddOneResolved... Ref.state(resolution) = " +
- Ref.state(resolution));
PrintStreamWriter.out().println
("WhenAddOneresolved... result is " + resolution);
}