SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    RE: iSCSI:Target Centric ISID assignments



    John's description is actually over-complicated because:
    - The ISID either goes away or becomes a Target portal group number.
    - The session recovery mechanism that he portrays as added complexity
    	already exists and isn't affected by presence or absence of
    	the ISID.  It doesn't seem to be well-documented in -07.
    Partitioning the TSID into Target Portal Group + ID within group
    makes it easy to figure out where to go to recover or blow away
    a session.  Whether or not the Target Portal Group is used doesn't
    matter to the following description - the ISID vanishes from John's
    description, making things simpler, viz.:
    
    First Login:
    1. Initiator contacts the target with TSID of zero.
    2. Target assigns the SSID by filling in the TSID.
    3. Initiator remembers the SSID=TSID somehow.
    4. If a parallel Session is established (perhaps under a wedge driver) the
    	same thing will happen -- Initiator sends TSID=0, and the
    	Target will assign a different TSID, since it is keeping 
    	state on the TSIDs it has handed out to a specific iSCSI Initiator
    Node.
    	This will be a different NEXUS not associated with any other session
    on
    	that iSCSI Initiator Node.
    
    Note that the target has the option of keeping TSID state globally, so that
    TSID values are unique within a Target or a Target portal group.  This is
    the Target implementer's choice, and can simplify session lookup.  This
    particular comment applies independent of ISID removal, but is the reason
    why I mentioned the idea of expanding the TSID, as I can foresee problems
    with a 16 bit counter, but not with 24 or 32 bits.
    
    5. If a Multiple Connection per Session was established, the  NON leading
    	connection will have the TSID filled in, and things
    	will continue as currently documented.
    6. If the Initiator goes down, and the parallel sessions need to
    	re-establish the NEXUS they supply the TSID.
    6a. If they don't have the original TSID, they send TSID=0, and the Target
    	will establish a new session.  The NEXUS that might have the
    Persistent
    	Reserves is still bound to the previous Session.
    6b. If the New session wants to keep working with the old Persistent
    	Reserves, it needs explicitly blow-away the Reserves and Reclaim
    them (per
    	normal) using the Persistent Reserves Command Set.
    6c. If the TSID had been saved by the Initiator, and a logon is reissued,
    	it can specify the TSID, and the Target should then know that
    	a new session is starting.  The target should match the TSID with
    	any outstanding session it has.  That is, the Target should either
    	match it up the TSID with an old session (in some way), and
    continue,
    	or  it should Blow the OLD session away.  David suggested a "Blow it
    	away Bit". (This sounds like option A and B all over again.)
    
    Whether or not to have a "Blow it away Bit" vs. implicitly blowing away
    the old session vs. failing the login is Option A/B/C all over again.
    The X bit already has meaning in this context (for the 6c case the X
    bit has to be zero in this case because 6d uses it), and hence can't be
    reused here.
    
    It's now considerably safer to blow away old connections because a non-zero
    TSID only occurs on login when there was a previous session with that TSID
    and some sort of error recovery or action on that previous session is
    intended.
    All the scenarios in which a "wrong" ISID causes a session to be blown away
    incorrectly can't happen because the Initiator doesn't pick ISID values.
    
    6d. If the ISID was saved but it took so long that the Target's session
    	cleanup process, had thrown away the Old session, the Login just
    continues
    	as it does today.  The Initiator Session can determine if the
    session
    	continued, and it has it previous reserves, or if a new session was
    	created without the Reserves.  
    
    Actual recovery and continuation of the session has to set the X bit.  If
    X is set on a Login command, and there's no existing session to log into,
    then the Login has to fail in some fashion - I'm not sure that's documented
    at the moment, and I think it needs to be regardless of the course we take.
    
    	So the Option here is to return an error message if there is no
    	existing session.  The Initiator will then need to understand this
    	and somehow cause the reserves to be issued again.  (Folks will say,
    	that is what they do anyway so they will always do that, so don't
    	worry about it.)
    
    	(John's Comment:  This is now starting to get complicated again.)
    
    Correct, but not relevant.  This set of complications exists regardless of
    what we do about the ISID as they're inherent in the session case of Error
    Recovery and the use of the X-bit on Login.  This is an existing session
    recovery mechanism, not something that gets added as a consequence of ISID
    removal.
    
    > 7. In the case that the Initiator has "lost its way" and want to start
    	again,  the initiator will Login with TSID=0.
    
    This is exactly case 6a above.  John's case 7a can't happen.
    
    > OK, after looking at the above.  It seems to me that we can have this
    > assignment of ISID by the Target System. (It is kind of acting like a
    third
    > party ISID assigner.)  The rest of the documentation should be the same.
    
    Well, actually, it's simpler to get rid of the ISID and just use the TSID.
    For reasons that Jim Hafner can probably explain better than I can, using
    the ISID field to hold the Target portal group number on login helps tidy
    up some issues in that area (and it also makes it easy for an Initiator
    trying to recover or destroy an existing session to figure out exactly
    which target interfaces will know about that session vs. be clueless).
    
    > The issue of Option A or B is still with us. However, the issue of the
    > Rouge Initiator, that can not find its approprate ISID is solved. (Don't
    > you just love the emotive way I put that.)
    
    Keep in mind that the Rogue Initiator sure looks like a valid technical
    objection to the Option A that seems to be otherwise favored in list
    discussion.
    
    > Also the assignment of ISIDs is made easier for some implementations.
    > (However, the approach suggested by Jim Hafner seems simple enough.)
    
    It's certainly simple logic.  The problem is that ISID assignment has to
    be coordinated across all interfaces on a single Initiator - between code
    from different vendors, administrative tools, and interaction with
    logic in the OS platform that may be trying to coordinate ISID assignment,
    there are many opportunities to get things wrong.
    
    If this doesn't scare you, John's notion of having to coordinate ISID
    assignment across all systems in a cluster because they share a common
    iSCSI Initiator Name should.  FWIW, if the cluster example wants to
    recover session state (e.g., persistent reserves) across host system
    failures, it needs dynamic fault-tolerant ISID assignment across the
    entire cluster (that should really scare you) or elimination of ISIDs
    and ISID assignment (which is much simpler ;-) ).
    
    Thanks,
    --David
    
    > -----Original Message-----
    > From: John Hufferd [mailto:hufferd@us.ibm.com]
    > Sent: Friday, September 07, 2001 4:54 PM
    > To: ips@ece.cmu.edu
    > Subject: 
    > 
    > 
    > Let me see if I have everything together in the following 
    > regarding the
    > TSID centric assignment of ISID.
    > 
    > First Login:
    > 1. Initiator contacts the target with TSID of zero, and ISID of zero
    > 2. Target assigns the SSID by filling in the ISID and its own TSID.
    > 3. Initiator remembers the ISID somehow.
    > 4. If a parallel Session is establish (perhaps under a wedge 
    > driver) the
    > same thing will happen -- Initiator sends TSID=0 and ISID=0, 
    > except the
    > Target will assign a different ISID, since it is keeping 
    > state on the ISIDs
    > it has handed out to a specific iSCSI Initiator Node.  This will be a
    > different NEXUS not associated with any other session on that iSCSI
    > Initiator Node.
    > 5. If a Multiple Connection per Session was established, the 
    > NON leading
    > connection will have the SSID (with TSID and ISID filled in), 
    > and things
    > will continue as currently documented.
    > 6. If the Initiator goes down, and the parallel sessions need to
    > re-establish the NEXUS they come back with the TSID but may 
    > or may not have
    > the approprate  ISID (if they did not have a way to save it).
    > 6a. If no ISID was used in the Initiator Login, the Target will
    > re-establish a new session.  The NEXUS that might have the Persistent
    > Reserves is still bound to the previous Session.
    > 6b. If the New session wants to keep working with the old Persistent
    > Reserves, it needs explicitly blow-away the Reserves and 
    > Reclaim them (per
    > normal) using the Persistent Reserves Command Set.
    > 6c. If the ISID had been saved by the Initiator, and a logon 
    > is reissued,
    > it can specify the ISID, and NO TSID, and the Target should 
    > then know that
    > a new session is starting.  The target should match the ISID with any
    > outstanding session it has.  That is, the Target should 
    > either match it up
    > the ISID with an old session (in some way), and continue, or 
    > it should Blow
    > the OLD session away.  David suggested a "Blow it away Bit". 
    > (This sounds
    > like option A and B all over again.)
    > 6d. If the ISID was saved but it took so long that the 
    > Target's session
    > cleanup process, had thrown away the Old session, the Login 
    > just continues
    > as it does today.  The Initiator Session can not really 
    > determine if the
    > session continued, and it has it previous reserves, or if a 
    > new session was
    > created without the Reserves.  (Potential hitch.)  So the 
    > Option here is to
    > return an error message if there is no existing session.  The 
    > Initiator
    > will then need to understand this and somehow cause the reserves to be
    > issued again.  (Folks will say, that is what they do anyway 
    > so they will
    > always do that, so don't worry about it.)
    > (Comment:  This is now starting to get complicated again.)
    > 7. In the case that the Initiator has "lost its way" and want to start
    > again,  the initiator will Login with either the current 
    > ISID, and TSID =0
    > or with both =0.
    > 7a. Using the current ISID should cause the Initiator to 
    > handle it like 6c
    > above.  (Again, it sounds like the A, and B options).
    > 7b. If both ISID and TSID are zero, it looks like 6a above.
    > 
    > OK, after looking at the above.  It seems to me that we can have this
    > assignment of ISID by the Target System. (It is kind of 
    > acting like a third
    > party ISID assigner.)  The rest of the documentation should 
    > be the same.
    > The issue of Option A or B is still with us. However, the issue of the
    > Rouge Initiator, that can not find its approprate ISID is 
    > solved. (Don't
    > you just love the emotive way I put that.) Also the 
    > assignment of ISIDs is
    > made easier for some implementations. (However, the approach 
    > suggested by
    > Jim Hafner seems simple enough.)
    > 
    > Now the discussion should be, did I miss something important, 
    > and is the
    > change worth it
    > 
    > .
    > .
    > .
    > John L. Hufferd
    > Senior Technical Staff Member (STSM)
    > IBM/SSG San Jose Ca
    > Main Office (408) 256-0403, Tie: 276-0403,  eFax: (408) 904-4688
    > Home Office (408) 997-6136
    > Internet address: hufferd@us.ibm.com
    > 
    


Home

Last updated: Mon Sep 10 11:17:10 2001
6486 messages in chronological order