TO DO for DERMI

   Concurrency in stubs/skels: when more than one client "attacks" a server object using the same method, overlapping!
  
 OK private Object result; in stubs should be expanded like previous variable result (to avoid race conditions)!!!
  
 OK Multicall is ONE-to-many: include source nodehandle in caller message.
  
   Use constants for all hashtable event parameters (OBJECT, TYPE, SOURCE_NHANDLE,...).

   Possible utilization of MANY-to-MANY communication (as it was in previous DERMI version?) Take care of return results
    (client could be overwhelmed with messages!).

 OK All samples must work again.
  
 OK All JUnit tests must work again
  
 OK Check retransmissions! In listeners, they may be called more than once (!!!). Try ListenerTest calling 100 setX methods.
    This seems to be due to the fact that the close() method does not really close the node and as we use the publishDirect()
    primitive, it has no effect unsubscribing from the event service channel.

   Implement asynchronous multicall.
  
   Synchronous multicall: include parameter to decide HOW MANY acknowledgements to receive before unblocking.
  
   Check race conditions! When calling the same method without sleeping between calls does not seem to work properly (variable
    overrun in stub/skel?)

   Include tags to specify which kind of call is wanted (anycall, multicall, directcall, ...).

 OK Mark dermi.generation.Rmic / dermi.generation.Filterc classes as deprecated.
  
 OK Adapt DERMI to new Scribe Common API.
  
 OK DInt: Re-implement distributed interception mechanism.
  
   DInt: Do the necessary arrangements for sending the last interception message directly to the root (The original message
          has root's NodeHandle !!!)
  
   DInt: Check possible exceptions in continueInterception() method!
  
 OK DInt: When swapping roots, move interceptor data to new one as well!!!
 
 OK DInt: Beware with interceptor failures!!! If an interceptor fails, events could be lost.
  
 OK DInt: If starting two interceptors one after the other, it appears a NullPointerException!!!
  
   DInt: When subscribing an interceptor, check InterceptorLostMessage!!!! (sendInterceptorSubscribeMsg())

   DInt: Check DInt service when using DOLR !!!

   DInt: Allow anycast message interception?
  
 OK close() method does it really close the pastry node?!?!? Don't believe so... :'-( Recompile PastryNode adding the kill() method.
 
 OK Anycalls/manycalls should not process again a retransmitted message. The object method is called once, storing result data
    for possible retransmissions.
  
   Manycall: when NotSatisfiedException is thrown, it should contain, at least, the last value (to see how many affirmative
    votes have at least been gathered, for example).

 OK DOLR: When looking up an object, retransmit event in case of timeouts!
  
 OK DOLR: Once it is active again, check JUnit class NamingTest.

 OK DOLR: Try to reuse the PastryNode in the Registry class so as not to open more nodes in case of client applications!

   Empty receivedEvents vector in all stubs/skels periodically (!!!)

 OK Pack modified FreePastry 1.3.2 files into a directory for recompilation purposes.
  
 OK Check if exceptions are thrown OK in stubs/skels (!!!)

 OK className attribute in stubs/skels must be autodiscovered by stub/skel class name
  
 OK Recomment all code again.
  
   Implement direct calls using the DOLR service.
  
 OK isBound() method in FileRegistry class / Check if needed in Registry (possibility of binding multiple server replicas)
    Eliminate 'ior.properties' file.

   The same as before implemented in the DOLR service.
  
 OK What happens if anycall cannot be satisfied by any of the group members ??!
  
 OK ResultArrived is believed to be unnecessary ? If not, RemoteResultListener class MUST BE REMOVED!

 OK Anycall/Manycall exceptions must be thrown back to the client !!!
  
 OK Manycalls have to be fine tuned (anycast event received 2 times for the first server?)

   Use JDK 1.4 logging facility for all System.out.* / System.err.*
  
   Check performance in new FreePastry version. It seems to be worse!!!
  
 OK Comment JDK 1.4.2 required because of incompatibilities in java.nio.*
  
   Perform extensive PlanetLab tests: create 3 SimpleServers, execute SimpleClient. Kill 1 SimpleServer and execute SimpleClient.

 OK More comprehensive output from sample examples (server implementations should show information when methods are being called).
 
 OK Solve the bug "Server is not alive..." that appears sometimes when executing the reference user JUnit test (testReferenceUser).
  
 OK More extensive anycall and manycall tests.
  
   Manycall comparator class to specify global condition.
  
   Check ObjectUID + RESULT + StubID bug in non-direct synchronous calls.
  
 OK Improve event buffering algorithm (to avoid event losses when RvP changes, ...).

 OK Solve "Timer already cancelled" bug: Comment out method kill() in DistPastryNode.java: // timer.cancel();
  
   Transform dermic tool and use reflection (unique stub). (JSR-175)
  
--

Carles Pairot <cpairot@etse.urv.es>
Sun May  9 10:32:08     2004
