TimeFilter proposal (plaintext rewrite)

Andy Bierman <[email protected]>
Newsgroups gmane.ietf.rmonmib
Message-ID <[email protected]>
Here's the complete text of the proposal for easier reading:



TimeFilter ::= TEXTUAL-CONVENTION
   STATUS        current
   DESCRIPTION
       "To be used for the index to a table.  Allows an application
       to download only those rows changed since a particular time.
       Note that this is not a history mechanism.  Only current values
       of underlying objects are returned, not saved instance values
       associated with particular values of sysUpTime.

       An entry is considered changed if the value of any object in the
       entry changes, if the row is created, or if any object in the
       entry is created or deleted.  Note that deleted entries cannot be
       detected or downloaded.

       A time-filtered conceptual table is created by inserting a
       single object of SYNTAX TimeFilter as the first INDEX component
       in a copy of an existing basic conceptual table (i.e., any
       SEQUENCE without a TimeFilter INDEX component).  Thus, for
       each conceptual entry 'I' in the basic table, there exists N
       conceptual entries in the time-filtered version, (indexed N.I)
       where 'N' is equal to the value of sysUpTime.

       When an application retrieves conceptual instances from a
       time-filtered table, and an INDEX value is provided for the
       TimeFilter INDEX component 'N', the agent will only consider
       returning basic conceptual entries (e.g., 'fooColumn.N.I') if
       any column within the basic conceptual entry has changed since
       sysUpTime equals 'N'.  If not, the basic conceptual entry will
       be ignored for the particular retrieval operation.

       When sysUpTime is equal to zero, this table shall be empty.

       One conceptual entry exists for each past value of sysUpTime, except
       that the whole table is purged should sysUpTime wrap.

       As an entry in a time-filtered table is updated (i.e., one of
       the columns in the basic conceptual table is changed), new 
conceptual
       entries are also created in the time-filtered version 
(which still share
       the now updated object values with all other instances).  The number
       of unique time-filtered instances which are created is 
determined by the value of
       sysUpTime at which the basic entry was last updated.  One unique 
instance
       will exist for each value of sysUpTime at the last update time 
for the
       row.  However, a new TimeFilter index instance is created for 
each new
       sysUpTime value.  The TimeFilter index values not associated 
with entry
       updates are called duplicate time-filtered instances.

       See the appendix for further discussion of this textual convention.

       Consider the following basic conceptual table basicFooTable
       (Note that the basic version of a time-filtered table may not
       actually be defined.

           basicFooTable:

           basicFooTable ...
           INDEX { fooIndex }

           BasicFooEntry {
              fooIndex     Integer32,
              fooCounts    Counter32
           }

       For this example, the basicFooTable contains two static conceptual
       entries (fooIndex equals '1' and '2'), created at time zero.
       It also contains one dynamic conceptual entry (fooIndex equals '3'),
       which is created at time '3' and deleted at time '7'.

      The time-filtered version of the basicFooTable could be defined 
as follows:

           FooTable:

           fooTable ...
           INDEX { fooTimeMark, fooIndex }

           FooEntry {
              fooTimeMark  TimeFilter,               
              fooIndex     Integer32,
              fooCounts    Counter32
           }


       Note that entries exist in the time-filtered conceptual table
       only if they actually exist in the underlying (basic) table.

       For this example, the fooTable will have three underlying
       basic entries (fooIndex == 1, 2, and 3), with the following
       activity (for sysUpTime equal 0 to 9):
 
          - fooEntry.N.1 is created at time '0', and most recently
            updated at time '6' to the value '5'.
          - fooEntry.N.2 is created at time '0', and most recently
            updated at time '8' to the value '9'.
          - fooEntry.N.3 is created at time '3', and most recently
            updated at time '5' to the value '17'.

      The following tables show the values that would be returned for
      'MIB walk' operations with various TimeFilter values, done 
at different
      times.  An application issues a retrieval request at time 'T',
      with a TimeFilter value 'N' (typically set to a lower value, such as
      the value of sysUpTime at the last polling cycle).

      The following values would be returned in a MIB walk of fooCounts.N
      if T equals '0' and N equals '0':

            fooCounts.N.I    Value
            ==========================
            fooCounts.0.1    0
            fooCounts.0.2    0
              
        Note there is nothing returned for fooCounts.0.3 since that entry
        does not exist at sysUpTime equals '0'.

      The following values would be returned in a full (traditional) 
MIB walk
      of fooCounts.N if T equals '3' and N equals '0':

            fooCounts.N.I    Value
            =======================
            fooCounts.0.1    0
            fooCounts.0.2    0
            fooCounts.0.3    0
            fooCounts.1.3    0
            fooCounts.2.3    0
            fooCounts.3.3    0
              
        Note that there are no instances for T equals 1 or 2, for the
        first two values of N, since these entries did not change
        since they were created at time '0'.

        Note that the current value for 'fooCounts.N.3' is returned 
here, even
        for values of N less than '3' (when the entry was created).  The
        agent only considers the current existence of an entry in the
        TimeFilter algorithm, not the time when the entry was created.

        Note that the instances 'fooCounts.0.3', 'fooCounts.1.3'
        and 'fooCounts.2.3' are duplicates and can be suppressed by the
        agent in a MIB walk.

      The following values would be returned in a full (traditional) 
MIB walk
      of fooCounts.N if T equals '6' and N equals '3':

            fooCounts.N.I    Value
            =======================
            fooCounts.3.1    5
            fooCounts.3.3    17
            fooCounts.4.1    5
            fooCounts.4.3    17
            fooCounts.5.1    5
            fooCounts.5.3    17
            fooCounts.6.1    5

         Note that no instances for entry 'fooCounts.N.2' are returned 
since
         it has not changed since time '3'.

         Note that all instances except 'fooCounts.5.3' and 'fooCounts.6.1'
         are duplicates and can be suppressed by the agent in a MIB walk.

      The following values would be returned in a full (traditional) 
MIB walk
      of fooCounts.N if T equals '9' and N equals '6':

            fooCounts.N.I    Value
            =======================
            fooCounts.6.1    5
            fooCounts.6.2    9
            fooCounts.7.2    9
            fooCounts.8.2    9
    
         Note that no instances for entry 'fooCounts.N.3' are returned 
since
         it has not changed since time '5'.

         Note that instances 'fooCounts.6.2' and 'fooCounts.7.2'
         are duplicates and can be suppressed by the agent in a MIB walk.
   
    After some deployment experience, it has been determined that
    a time-filtered table is more efficient to use if the agent
    stops a 'MIB walk' operation by skipping over rows with a
    TimeFilter index value higher than the value in the received
    GetNext/GetBulk request. That is, instead of incrementing a
    TimeFilter index value, the agent will continue to the next
    object or table. As a consequence, GetNext or GetBulk
    operations will provide only one pass through a time-filtered
    table.

    It is suggested for an agent to implement a time-filtered
    table in this manner to improve performance and avoid a 'MIB walk'
    getting stuck in time-filtered tables. It is, however, still acceptable
    for an agent to implement a time-filtered table the traditional
    manner (i.e., every conceptual time-filtered instance is
    returned in GetNext and GetBulk PDU responses) and management
    applications must be able to deal with such traditional
    implementations."
   SYNTAX    TimeTicks
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.