[comp.sys.isis] Confused about ISIS scope

ken@cs.cornell.edu (Ken Birman) (04/16/91)

I got a fairly confused question about how scope works and
wanted to post my reply for the benefit of others.

I received mail from someone who expected ISIS to migrate
programs based on the group names they used.  I.e. if you
joined a group /mach1/abc, your program would run on /mach1.

Scope does not work this way, at all.

The only way to limit where processes run in V2.1 is to use
a sites list argument to "rexec" that lists only the sites
you have in mind.  There is no form of "pattern match" such as
the use of site names in a group name.

A process runs on the processor where you "exec" it.  ISIS never
moves a process, under any circumstances, regardless of the names
of the groups it joins.

However, under V3.0 of ISIS the network resource manager tools
will do a great deal to help you chose this initial location
(for the initial exec) using a pattern match.

In V2.1 scope is useful ONLY for restricting the cost of the
name search used to decide if a group should be created or joined.

Say that your sites file looks like this

	+ 01:1601,1602,1603 apples.acme.com scope0 sparc
	+ 02:1601,1602,1603 pears.acme.com scope0 mips
        + 03:1601,1602,1603 cats.acme.com  scope1 mips
        + 04:1601,1602,1603 dogs.acme.com  scope1 sparc

This defines:
  1) one isis cluster containing four machines that can see and talk to
     each other.  The machines are listed by the names that ISIS will
     find in the local /etc/hosts file, using gethostbyname()
  2) Port numbers for the program
  3) four naming scopes: scope0 = apples,pears
                         scope1 = cats,dogs
                         sparc  = apples,dogs
                         mips   = pears,cats

These naming scopes also imply a "default" binding.  If you
do not specify a scope, as discussed below, apples and pears will
assume scope0; cats and dogs assumes scope1.

Now, say that you run a program on apples and it joins group "a".
     default is scope0 => name used is @scope0:a
     group doesn't exist => creates it and becomes first member

Now say that you run the same program on pears
    @scope0:a exists => added as a second member

Now you run it again on cats
    @scope1:b DOES NOT exist so it creates a new group and becomes first
       member (!)

Now you change the program to join "@scope0:a"
You run it on dogs
    @scope0:a exists so it joins as the third member.

At this point there are two non-intersecting groups:
	@scope0:a  members on apples, pears,dogs
        @scope1:a  one member, on cats

Salient points: the programs run in the same place they were
started.  The only thing affected by the scope is where they
look for existing members of the groups that they join!

Some users have asked if they can get at the scope information
(i.e. find out which machines are listed in scope "mips").  We
intended to include this as a simple RPC but haven't added it yet.
One more thing on the list of things to do.

Ken
-- 
Kenneth P. Birman                              E-mail:  ken@cs.cornell.edu
4105 Upson Hall, Dept. of Computer Science     TEL:     607 255-9199 (office)
Cornell University Ithaca, NY 14853 (USA)      FAX:     607 255-4428