Correction:

net.jini.core.discovery.LookupLocator (incorrect package listed below), also has two protected fields that have been made final, host and port.

Regards,

Peter.

On 25/04/2016 8:58 PM, Peter wrote:
Before we release River 3.0, I think it's important to discuss changes to the public api.

Changes to api have been minimal, however we should come to concensus prior to release. Note that changes made were for correctness reasons only, but the community should decide whether we should favour correctness or backward compatibility.

The changes:

net.jini.core.event.RemoteEvent - protected fields changed to final & private. net.jini.core.lookup.ServiceEvent - protected fields changed to final protected. net.jini.discovery.RemoteDiscoveryEvent - protected field discarded changed to final protected, protected fields; marshalledRegs, regs & groups changed to private final.

Note that net.jini.lookup.LookupLocator's serial from changed in River 2.2, in a non backward compatible way, however the LookupLocator in River 3.0 doesn't include the change, but it's serial form is backward compatible with both versions (at some point I'd like to address the issue that change intended to address).

In all cases serial form has been preserved.

These changes were made at the same time the new Startable.start() interface was created, that didn't go down too well, I didn't get around to discussing the above changes after the fallout from that.

Prior to making a decision, I'd like to discuss why the changes were made, examples of impacts it will have on downstream code, including what's updates are required. Keep in mind that people will need to recompile River 3.0 due to namespace changes, so this should be based on whether the changes required can be done so without impacting client code backward compatibiliy.

I'm not against reverting these changes, however we need to understand that doing so will result in dropped events in tests, caused by unsafe publication, causing some test failures. River 3.0 has far less blocking than the 2.2 branch, this exposes race conditions.

It's worth noting I haven't fixed all race conditions in River 3.0, but I have fixed the majority.

Regards,

Peter.

What I would have liked to fix but didn't (I did manage to work around it), a fundamental design issue with lease identity is, an expired lease is equal to a current lease, if both leases have the same id, when really the renew method should return a new lease with the same lease id, that isn't equal, in my mind LeaseMap should have also been immutable, with a new map containing renewed leases returned upon renewal:

Sun Bug: 4287125
Norm: Client leases are being renewed after the set they are in should
                have expired.

A given client lease should not be renewed after the set it is in has expired. An iron-clad guarantee can't be made here because we can't hold onto locks while leases are being renewed. However, the problem with Norm was worse than could be explained by the short window between committing to renew a client lease and
                performing the actual renewal.  The problem arose because
there was no check in the renewal threads to make sure that the set the client lease was in still current, and because the thread that removed sets from the service often runs late. Such a check is now performed so the window where a client lease renewal can occur, after the lease on the set the client lease is in has
                expired, is very small.

                Comment by P. Firmstone Apr 21st 2016: <br>
These issues would not occur with immutable leases and sets,
                upon renewal a new set with successfully renewed leases
                would be returned.



Reply via email to