\documentclass{article}
\usepackage{fullpage}

\begin{document}

%\small
\begin{verbatim}

This is an informal collection of ERRATA to GFD.90, SAGA Core 1.0.
A more formal errata document will be published once sufficent experience
will be available. Meanwhile, we collect appearing items here.

=========================================================================
2008-01-24:

page 247
package saga.file
class iovec:

set_offset method also throws BadParameter when "out of bounds":
  size >= 0 && len_in + offset > size

set_len_in method also throws BadParameter when "out of bounds":
  size >= 0 && len_in + offset > size

page 254
package saga.file
class file:

read_v method also throws BadParameter when "out of bounds":
when  no len_in is specified, the buffer size is used instead as len_in.
If, in this case, offset > 0 a BadParameter exception is thrown.

page 255
package saga.file
class file:

write_v method also throws BadParameter when "out of bounds":
when  no len_in is specified, the buffer size is used instead as len_in.
If, in this case, offset > 0 a BadParameter exception is thrown.

==> yes
==> DONE

    Note: exception is only thrown on the I/O methods, as otherwise,
    it would often not possible to increase the offset on a buffer at
    all, as offset and len_in cannot be set together atomically

    iovec iov (10);     // size = 10, len_in = 10, offset = 0 
    iov.set_offset (3); // bang
    iov.set_len_in (7); // would create a valid state again
    

=========================================================================

2008-01-24:

  page 246
  package saga.file
  class iovec:

 The iovec constructor can also throw NotImplemented,
 as its base buffer can, and as all constructors should be able to.

 ==> LF classes should not be able to throw NotImplemented.
 ==> DONE, but see added notes in sec:nonfunc, and in the intro to the
     attribute interface.

=========================================================================

2008-03-06:

  default flag for file open should be Read
  Create should imply Write
  CreateParents should imply Create

  ==> yes
  ==> DONE

=========================================================================

2008-01-24:

1) f.mv ("file.txt", "newdir/thing", flags::CreateParents)

   creates a new directory 'newdir', and renames 'file.txt'
   to 'newdir/thing'.

2) f.mv ("file.txt", "newdir/thing/", flags::CreateParents)

   creates new directories 'newdir/thing', and renames
   'file.txt' to 'newdir/thing/file.txt'.

   So, if the target does not exist, all path element before the last
   slash are considered parent directories to be made. 

   ==> is correct behaviour
   ==> is clearly defined in the CreateParents description:
        "An operation which would create a name space 
         entry would normally fail if any path element in the
         targets name does not yet exist.  If this flag is
         given, such an operation would not fail, but would
         imply that the missing path elements are created on
         the fly."
   ==> NOOP

=========================================================================

2008-03-17:

  p.117

  "The callback classes can maintain state between initialization and
  successive invocations. The implementation MUST ensure that a
  callback is only called once at a time, so that no locking is
  neccessary for the end user."

  But also, the callback may remove conditions to be called again,
  i.e. shut down the metric, read more than one message, etc.
  Implementations MUST be able to handle this.

  ==> yes, document
  ==> DONE

=========================================================================

2008-05-17:
p.204

  "Any valid URL can be returned on get_url(), but it SHOULD not
  contain ’..’ or ’.’ path elements, i.e. should have a normalized
  path element. The URL returned on get_url() should serve as base for
  the return values on get_cwd() and get_name(): In general it should
  hold: get url() = get cwd() + ’/’ + get name() "

  The leading path elements can be '.' or '..'

  saga::url u0 ("ftp://localhost/");
  saga::url u1 ("gridftp://localhost/");
  saga::url u2 ("../../test.txt");

  file.move (u0, u2);
  file.move (u1, u2);

  ==> yes, document and add example
  ==> DONE


=========================================================================

2008-06-05:

  As suggested, the algorithm to find the most specific error has
  been changed to ignore the NotImplemented error as long as there
  were other errors thrown. NotImplemented will be reported only if
  there are 'only' NotImplemented errors in the error list.

  ==> yes, move NotImplemented to bottom
  ==> TODO (think think think)

=========================================================================

2008-06-11:

  get_result is waiting, and returning retvals.  It should also
  re-throw if the task arrived in a Failed state.  Then we'd have a
  single sync point, instead of three seperate ones...

  ==> yes, required because of race...
  ==> DONE


=========================================================================

2008-06-14:

  what does url.get_port () return by default, i.e. if port is
  unknown?  0 or -1?  Or throws?
  Same for other url getters.

  saga::url u ("../tmp/file.txt");

  int port = u.get_port ();


  ==> Java url gives -1 on get_port(), and ? on get_hostname()
  ==> DONE: return "" on undefined/unknown values, or -1 for
      get_port()


=========================================================================

2008-06-20:

  default flag for open_dir should be Read.

  ==> yes
  ==> DONE


=========================================================================

2008-07-01:

  Create flag should imply Write.  Possibly also Read?

  ==> create -> write yes, Read is not implied (otherwise, one could never 
      create files in WriteOnly directories)
  ==> DONE


=========================================================================

2008-17-06:

   - get_url () = get_cwd() + '/' + get_name()
   - relatve URLs are relative to CWD

   That breaks for the following code:
   saga::dir  d ("/tmp");
   saga::file f = d.open ("./file");

   as the URL is relative to get_url() for directories.

   ==> dupl.
   ==> NOOP

=========================================================================

2008-29-07:

   - job description has no field for accounting info, e.g. project
     name, allocation  Id, etc.

     ==> yes, add JobProject
     ==> DONE
     ==> yes, add WallTimeLimit
     ==> DONE

=========================================================================

2008-29-07:

   - the run_job() method prototype needs to reflect that the io
     channels are optional parameters (see description).

     ==> yes
     ==> NOOP: its in the notes already,  and out parameters cannot be
         optional in the prototype.

=========================================================================

2008-02-08:

   - run() postcondition should be 'left New state' instead of 'is in
     Running state', to avoid races with jobs entering a final state
     immediately.

     ==> yes
     ==> DONE

=========================================================================

2008-06-08:

   - the spec should clarify the subtle differences between relative
     and absolute URLs, and relative and absolute pathnames, and the
     combinations thereof.  See mail from Matthijs.

     ==> yes, see above
     ==> DONE
     

=========================================================================

2008-06-08:

   - the spec should clarify to which directory relative URLs are
     relative, if none is given.  e.g., for a directory URL, it seems
     reasonable to assume that they are reletive to CWD of the
     application, etc.
     In the general case, I assume they should be relative to
     any://localhost/ ?

     ==> dupl., resolved at runtime, depending on call context, or CWD
     ==> DONE

=========================================================================

2008-08-25:

   - we do  not clearly distinguish hold/realease from suspend/resume.
     The first pair is not defined in SAGA, but semantically
     differently used in DRMAA.  In SAGA, they would map to substates
     of running?  Check with DRMAA guys

     ==> TODO: defer to the DRMAA mailing list


=========================================================================

2008-09-05:

   - list of LF packages/classes in paragraph 6 on page 17 misses URL.

     ==> yes
     ==> DONE

=========================================================================

2008-09-09:

   - POSIX does not really say that ls -L dereferences one level only.

     ==> yes, refer to libc getlink, but only one level of resolution
     ==> DONE

=========================================================================

2008-09-15:

   - job description should basically support all JSDL fields - it
     seems we left some out.  Project was mentioned in an earlier
     errata, but also WallTimeLimit.  Need to do a complete check
     again.

     ==> see above
     ==> DONE

=========================================================================

Resolution process: fix errata as agreed, query DRMAA list for open
state problem, and resubmit as errata version

=========================================================================

2008-09-18:

   - context c'tor should not call set_defaults: that significantly
     complicates usage if default ctx cannot be initialized.

     ==> ?
     ==> DONE

=========================================================================

2008-09-18:

   - namespace need read/write flags after all - think directories!

     ==> dupl
     ==> yes
     ==> NOOP

=========================================================================

2008-09-25:

   - URL class is silent about escaping of invalid chars.  That can be
     done transparently on assignment/c'tor, but there should be a
     getter for the escaped, and one for the unescaped version,
     depending on what the application needs.

     ==> ?
     ==> DONE

=========================================================================

2008-09-25:

   - why should close ever throw an IncorrectState?

     ==> ?
     ==> DONE

=========================================================================

2008-10-17:

   - object.clone() MUST NOT copy the object id, but assign a new,
     unique one.

     ==> ?
     ==> DONE

=========================================================================

2008-10-27:

   - At page 225, the notes of NSDirectory.copy(source, target, flags)
     say:

     - if ’name’ can be parsed as URL, but contains an invalid entry
       name, a ’BadParameter’ exception is thrown.
     - if ’name’ is a valid entry name but the entry does not
       exist, a ’DoesNotExist’ exception is thrown.

     [...] This method does not have a parameter named
     'name'. Should this be "'source' or 'target'"? 

     ==> both
     ==> DONE

=========================================================================

2008-10-27:

   - URL class is silent about encoding?

   ==> ?
   ==> DONE (added remark)

=========================================================================

2008-11-01:

   - RPC c'tor: url url=""; details url funcname = ""

   ==> yes
   ==> DONE

=========================================================================

2008-11-02:

   - The description of TaskContainer.cancel(float timeout) on page
     157 does not mention a default value for timeout - page 147 does 
     have a default value (0.0) for timeout.

     ==> yes
     ==> DONE

=========================================================================

2008-11-09:

   - Page 33, figure 2: Picture has no block for URL, URL is nowhere
     to be found. iovec and parameter are in the wrong block (should 
     not be in io, but in file and rpc)                                                                                                                   
     ==> yes
     ==> TODO

=========================================================================

2008-11-17:

    NSDirectory.remove(): page 229 names target and source are both
    used.
    
    removes the entry
    Format:   remove             (in saga::url target,
                                   in int     flags = None);
    Inputs:   target:             entry to be removed
    InOuts:   -
    Outputs:  -
    PreCond:  -
    PostCond: - source is removed.
              - source is closed if it refers to the cwd.
    Etc.

    ==> yes
    ==> DONE

=========================================================================

2008-11-17:

    Rpc, page 303 and 305. Size parameter in the constructor is
    inconsistent.  (0 and -1)

    ==> yes
    ==> DONE

=========================================================================

2008-11-20:

    page 63: PostCond of CONSTRUCTOR: implmentation --> implementation
    page 86: first note of set_defaults: avaluates  --> evaluates
    page 166: Several Metrics                       --> Several metrics
    page 166: section 2.9.                          --> Section 2.9.
    page 221: ns_ntry::is_dir()                     --> ns_entry::is_dir()
    page 222: ns_ntry::is_link()                    --> ns_entry::is_link()

    ==> yes  yes  yes  yes  yes  yes
    ==> DONE DONE DONE DONE DONE DONE

=========================================================================

2008-12-04:

    Object type enum does not need Exception=1

    ==> yes
    ==> DONE

=========================================================================

    contradiction for NotImpl in \LF (pg.17, \LF Intro)

    ==> YES
    ==> DONE
    
=========================================================================

    
\end{verbatim}
\end{document}


