Pending a response from Greg, I suggest reading the "Getting Started" thread in the mail archive for January, http://mail-archives.apache.org/mod_mbox/river-dev/201501.mbox/browser

Patricia

On 4/6/2015 9:13 PM, Bishnu Gautam wrote:

Hi Greg
Could you send me the SVN info to download the tutorials and other information 
that you updated. It would be great if you send me those information.
RegardsBishnu

Bishnu Prasad Gautam


Subject: Re: River-examples project - followup
From: tras...@stratuscom.com
Date: Mon, 6 Apr 2015 21:56:14 -0400
To: dev@river.apache.org


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>


                                        

Reply via email to