Hi all: I updated the tutorial to include the discussion below in the “hello-service” module. ‘svn up’ should bring it down to your local machine. I haven’t yet integrated Patricia’s formatting suggestions, mainly because I have to dig in to Maven’s site command a bit to include the correct css, but I’ll do that before we release.
Any feedback is greatly appreciated. Cheers, Greg Trasuk On Apr 6, 2015, at 3:30 PM, Greg Trasuk <tras...@stratuscom.com> wrote: > > Hi Dan: > > Thanks for the great feedback. > > I’m pretty sure you already know this, Dan, since you’re a long-time Jini > user, but let me explain for the newer folks and the archives. This is a > case where what you’re seeing is the expected behaviour. When the service > registers itself with Reggie, it takes out a lease on the registration. That > lease is usually renewed periodically by the service’s JoinManager (that > isn’t quite the whole story, but it’ll do for now). When you kill the > service unexpectedly with ctrl-c, the service doesn’t de-register itself, > however the lease eventually runs out (now that it’s not being renewed by the > service) and then the registration expires, allowing Reggie to reclaim its > resources and notify any registrar listeners. > > It would be possible to register a vm shutdown hook to de-register the > service before the vm exits, but in this case I think it’s actually better to > leave it out, since it demonstrates nicely that a dead service (or at least > a dead JoinManager) eventually gets dropped from the registrar. > > You said the duplicate service instances “worked”, in that you can show info > and browse the service, but of course, you’re really just looking at the > information that’s in the registry - the registrar and service browser don’t > actually contact the service. Reggie has no knowledge of the “liveness” of > the service, and doesn’t attempt to do any “health check”. > > In fact, it’s a common misconception that if the service renews the lease, it > must be “live”. This turns out to be false for many reasons. (1) The > service could have delegated its lease renewals to a different service. (2) > There’s no guarantee that failure of the actual service thread would also > cause failure of the lease renewal thread, even if they are in the same > process (embedded programmers might recognize this as being similar to the > “resetting the watchdog in a timer-triggered interrupt service routine” > problem). (3) Even if there were a health check task, the service could fail > in the instant just after the health check. The most a health check, monitor > or heartbeat can do is place a limit on how long it takes to find out a > service has failed. The only way to say with certainty that a service > “works” is to attempt to use it. > > The lease is purely for the convenience of the registrar (or generically, the > service granting the lease). If ever the lease is not renewed, the landlord > can go ahead and reclaim whatever resources were dedicated to the lease. In > the case of Reggie, if the lease isn’t renewed, Reggie drops the > registration. So there’s little risk of “stuck registrations”. And since > the lease can be renewed, there’s no need for any kind of extended default > timeout. > > So, I think I’ll put most of the above explanation into the tutorial, unless > anyone has other thoughts. > > Cheers, > > Greg Trasuk > > On Apr 6, 2015, at 1:42 PM, Dan Rollo <danro...@gmail.com> wrote: > >> Hi Greg, >> >> I finally took some time to try this out. It really looks great to me! >> >> I noticed one minor thing that I thought might confuse users: While going >> through tutorial steps, I decided to stop (via cntrl+c) are restart the >> hello-service a couple times. This resulted in the service being shown >> multiple times in the service browser (screenshot attached). It appeared all >> the duplicate instances in the browser “worked” (I could “show info” and >> “browse service” on all of them). Eventually, the duplicate registrations >> “cleaned up” and I was left with just one. I’m not sure how best to avoid >> confusion about this situation. Would more doc about “why”/“how” that works >> just complicate things? Is there any sort of “force lease check” to do in >> the browser that could clear up the duplicates sooner? (And if so, would >> that be worth noting in the tutorial?). So basically, not sure this is a >> “problem”, but thought I’d ask… >> >> Thanks! >> Dan >> >> <revier-examples-RepeatedService.png> >