Driver-Taper protocol: Difference between revisions

From wiki.zmanda.com
Jump to navigation Jump to search
No edit summary
Line 107: Line 107:
|-
|-
|global-result
|global-result
|-
|||||||Can ask-dumper-status (Should be done if taper detect no error (INPUT-GOOD and TAPE-GOOD)
|-
|-
|||<---||DONE INPUT-GOOD TAPE-GOOD||normal protocol for a success
|||<---||DONE INPUT-GOOD TAPE-GOOD||normal protocol for a success
Line 113: Line 115:
|-
|-
|||<---||FAILED INPUT-* TAPE-*||protocol for error in setup (before something is written to tape)
|||<---||FAILED INPUT-* TAPE-*||protocol for error in setup (before something is written to tape)
|-
|ask-dumper-status
|-
|||<---||DUMPER-STATUS||Ask driver the dumper status
|-
|DONE||--->||||Dumper succeeded
|-
|FAILED||--->||||Dumper failed
|-
|-
|part-result
|part-result
Line 178: Line 188:
* PARTDONE handle label fileno "[sec %f kb %d kps %f]"
* PARTDONE handle label fileno "[sec %f kb %d kps %f]"
* SPLIT-NEEDNEXT handle
* SPLIT-NEEDNEXT handle
* DUMPER-STATUS handle
* QUITTING
* QUITTING
* BAD-COMMAND "error message"
* BAD-COMMAND "error message"
Line 190: Line 201:
** PARTIAL taper hostname diskname timestamp level [sec %f kb %d kps %f] "error message"
** PARTIAL taper hostname diskname timestamp level [sec %f kb %d kps %f] "error message"
** FAILED taper hostname diskname timestamp level "error message"
** FAILED taper hostname diskname timestamp level "error message"
= algorithm after a part written to tape =
  if (successful part) {
    L_PART -> logfile
    if (splited dump) {
      PARTDONE -> DRIVER
    if (not splited dump || last part) {
      if (PORT-WRITE) {
        DUMPER-STATUS -> driver
        get dumper result from driver (FAILED|DONE)
      }
      if (partial) #from dumper status or partial flag in header {
        PARTIAL INPUT-GOOD TAPE-GOOD -> driver
        L_PARTIAL -> logfile
      } else (whole) {
        DONE INPUT-GOOD TAPE-GOOD -> driver
        L_SUCCESS -> logfile
      }
    } else #splited dump
      GOTO next part
  } else #failed part {
    if (something written to tape for this part)
      L_PARTPARTIAL -> logfile
    if (splitted dump and tape error && no-input-error) {
      SPLIT_NEEDNEXT -> driver
      L_INFO -> logfile
      #wait for driver NEW-TAPE or NO-NEW-TAPE
      #It could take a long time to get the result
      if(driver sent NEW-TAPE)
        if (new tape available)
          NEW-TAPE -> DRIVER
          GOTO retry that part to the new tape
        else #no valid writable tape found
          NO-NEW-TAPE -> DRIVER
      else #driver sent NO-NEW-TAPE
        noop
    }
    #it's possible to have both INPUT-* and TAPE-* error or none.
    if (nothing written to tape for this dump) {
      FAILED INPUT-* TAPE-*  -> driver
      L_FAIL -> logfile
    } else #something written to tape for this dump {
      PARTIAL INPUT-* TAPE-* -> driver;
      L_PARTIAL -> logfile
    }
  }

Revision as of 12:49, 20 October 2006

Communication method

driver talks via two pipes connected to taper's stdin and stdout. The commands and responses are plain text.

Command sequence during backup operation

  • driver initialises taper with: START-TAPER <timestamp> to which taper replies with: TAPE-OK or, for fatal errors, with: TAPE-ERROR [<message>]. For speed up,taper is authorized to scan the library and find a valid tape after it received the START-TAPER command.
  • driver will ask the taper to start a new tape with the NEW-TAPE command. It should be done for the first tape too.
  • driver can ask taper to copy a file from the holding disk to tape (FILE-WRITE) or directly from a dumper (PORT-WRITE) or exit at the end of the run (QUIT).
  • taper responds to the PORT-WRITE command with: PORT <port> which driver should then hand on to dumper in a PORT-DUMP command.
  • If the copy to tape finishes correctly taper replies with DONE.
  • If something goes wrong with the tape, taper can ask to continue on a new tape SPLIT-NEEDNEXT (for splited dump only) or it can abort that dump with PARTIAL or FAILED reply
  • After any dump that finished in PARTIAL or FAILED with a TAPE-ERROR, the driver must send a NEW-TAPE before issuing another *-WRITE command.

Other commands

  • If driver says something that taper doesn't recognise it responds with: BAD-COMMAND <message>
  • taper responds to the QUIT command with: QUITING

Protocol command reference

Taper command reply

Reply Description
TAPE-OK taper is setup correctly
TAPE-ERROR Error in setup of the driver
PORT Reply sent in response to PORT-WRITE command
DONE Full dump is on the media
PARTIAL Dump was partially written to the media.
FAILED Nothing was written to the media
DUMPER-STATUS Ask driver to send the dumper status
PARTDONE A complete part is written to tape
SPLIT-NEEDNEXT Ask driver if it should continue on a new tape
NEW-TAPE Will continue on a new found tape
NO-NEW-TAPE Will not continue on a new tape


DONE/PARTIAL and FAILED reply also contains an INPUT-* an TAPE-* message to denote any error:

Reply Description
INPUT-GOOD There was no error with the input.
INPUT-ERROR There was error with the input.
Reply Description
TAPE-GOOD This tape can be use to write another dump.
TAPE-ERROR Nothing more can fit on that tape.

A result for a successful dump should be: DONE INPUT-GOOD TAPE-GOOD

Driver/Taper Requests/Replies

Driver request Taper reply Description
initail setup
START-TAPER --->
<--- TAPE-OK normal taper setup (a tape is available, nothing is written on it)
<--- TAPE-ERROR failed taper setup (no tape are available or something else is broken)
ask for new tape
NEW-TAPE ---> driver tell the taper to use a new tape
<--- GOT-NEW-TAPE taper found one
<--- NO-NEW-TAPE no tape are available
file-write setup
FILE-WRITE --->
Will get one part-result for each part written and one global result
port-write setup
PORT-WRITE --->
<--- PORT
Will continue with one part-result for each part written and one global result
global-result
Can ask-dumper-status (Should be done if taper detect no error (INPUT-GOOD and TAPE-GOOD)
<--- DONE INPUT-GOOD TAPE-GOOD normal protocol for a success
<--- PARTIAL INPUT-* TAPE-* protocol for error in data phase (something written to tape)
<--- FAILED INPUT-* TAPE-* protocol for error in setup (before something is written to tape)
ask-dumper-status
<--- DUMPER-STATUS Ask driver the dumper status
DONE ---> Dumper succeeded
FAILED ---> Dumper failed
part-result
<--- PARTDONE successfully part written to tape
<--- SPLIT-NEEDNEXT We get a tape error, ask the driver if we can use a new tape (driver will send a NEW-TAPE or NO-NEW-TAPE command)
no new tape
NO-NEW-TAPE ---> driver doesn't want the taper to use a new tape (continue with global-result)
quit
QUIT --->
<--- QUITING

Command/reply arguments

Protocol data

data description
<timestamp> Time as "yymmdd" of "yymmddhhmmss"
<handle> Request ID
<filename> Name of file on the holding disk where backup will be written to
<port> Taper port to send the backup data to
<host> Hostname of the client
<disk> Disk on the client being backed up
<level> Dump level being used for backup
splitsize size of each part on tape
split_diskbuffer file use to buffer a complete part
<message> Error or Status message

driver command

  • START-TAPER timestamp
  • PORT-WRITE handle hostname diskname level datestamp splitsize split_diskbuffer
  • FILE-WRITE handle filename hostname diskname level datestamp splitsize
  • DONE handle (result from dumper send to taper)
  • FAILED handle (result from dumper send to taper)
  • NEW-TAPE
  • NO-NEW-TAPE
  • QUIT

taper reply

  • TAPER-OK
  • TAPER-ERROR "error-message"
  • PARTIAL handle INPUT-* TAPE-* "[sec %f kb %d kps %f]" "input-error-message" "tape-error-message"
  • DONE handle INPUT-GOOD TAPE-GOOD "[sec %f kb %d kps %f]" "" ""
  • FAILED handle INPUT-* TAPE-* "input-error-message" "tape-error-message"
  • NEW-TAPE label
  • NO-NEW-TAPE
  • PARTDONE handle label fileno "[sec %f kb %d kps %f]"
  • SPLIT-NEEDNEXT handle
  • DUMPER-STATUS handle
  • QUITTING
  • BAD-COMMAND "error message"

LOG

  • One PART or PARTPARTIAL log line for all part written to tape. It tell the location and status of each part.
    • PART taper label fileno hostname diskname timestamp part-number level [sec %f kb %d kps %f]
    • PARTPARTIAL taper label fileno hostname diskname timestamp part-number level [sec %f kb %d kps %f] "error message"
  • One DONE/PARTIAL/FAILED for each dump. It tell the status of the complete dump.
    • DONE taper hostname diskname timestamp level [sec %f kb %d kps %f]
    • PARTIAL taper hostname diskname timestamp level [sec %f kb %d kps %f] "error message"
    • FAILED taper hostname diskname timestamp level "error message"

algorithm after a part written to tape

 if (successful part) {
   L_PART -> logfile
   if (splited dump) {
     PARTDONE -> DRIVER
   if (not splited dump || last part) {
     if (PORT-WRITE) {
       DUMPER-STATUS -> driver
       get dumper result from driver (FAILED|DONE)
     }
     if (partial) #from dumper status or partial flag in header {
       PARTIAL INPUT-GOOD TAPE-GOOD -> driver
       L_PARTIAL -> logfile
     } else (whole) {
       DONE INPUT-GOOD TAPE-GOOD -> driver
       L_SUCCESS -> logfile
     }
   } else #splited dump
     GOTO next part
 } else #failed part {
   if (something written to tape for this part)
     L_PARTPARTIAL -> logfile
   if (splitted dump and tape error && no-input-error) {
     SPLIT_NEEDNEXT -> driver
     L_INFO -> logfile
     #wait for driver NEW-TAPE or NO-NEW-TAPE
     #It could take a long time to get the result
     if(driver sent NEW-TAPE)
       if (new tape available)
         NEW-TAPE -> DRIVER
         GOTO retry that part to the new tape
       else #no valid writable tape found
         NO-NEW-TAPE -> DRIVER
     else #driver sent NO-NEW-TAPE
       noop
   }
   #it's possible to have both INPUT-* and TAPE-* error or none.
   if (nothing written to tape for this dump) {
     FAILED INPUT-* TAPE-*  -> driver
     L_FAIL -> logfile
   } else #something written to tape for this dump {
     PARTIAL INPUT-* TAPE-* -> driver;
     L_PARTIAL -> logfile
   }
 }