Driver-Chunker protocol

From wiki.zmanda.com
Jump to navigation Jump to search

Communication method

Driver talks via two pipes connected to each chunker's stdin and stdout. The commands and responses are newline-terminated plain text lines.

Like the Driver-Taper protocol, this protocol is almost turn-based, although there are situations where either side may send a message. In particular, there is a race condition between the EOF from the dumper and the DONE/FAILED command from the driver: chunker must do some gymnastics to request more space after the dumper has sent EOF but before the chunker has reached EOF.

Notes

Unlike dumper or taper, the chunker only operates on one dumpfile before exiting.

The driver gives the chunker one or more filenames to write to. However, the chunker appends .tmp to these filenames before writing to them. The driver takes care of renaming these files after the chunker has exited.

Chunker rounds the supplied USE and CHUNKSIZE values down to the next multiple of DISK_BLOCK_KB (32).

Commands

START

Driver -> Chunker:

 START timestamp

Sets the chunker's timestamp. The Driver will next send either QUIT or PORT-WRITE.

QUIT

Driver -> Chunker:

 QUIT

PORT-WRITE

Driver -> Chunker

 PORT-WRITE handle filename host features disk level dumpdate chunksize progname use options

Start writing a dump to holding disk. The handle uniquely identifies this operation, but a given chunker only performs one operation at a time so this is not required. The combination of filename, chunksize, and use correspond to those described for CONTINUE.

The chunker will respond either with PORT or TRYAGAIN (if TRYAGAIN, then the chunker will exit immediately after transmission). If the creation of the first chunk file fails, it may also respond with NO-ROOM followed by TRYAGAIN and exit.

PORT

Chunker -> Driver

 PORT header-port ip-port-pairs

Indicates that the driver should cause a connection to header-port containing the header, followed by a connection to one of the ip-port-pairs containing the data. Note that the chunker will close the header connection before accepting the data connection. This is similar to the PORT command in the Driver-Taper protocol.

The chunker will block waiting for the incoming header connection, although if there is an error or timeout it will respond with TRYAGAIN and exit. Once the data starts flowing, it may send NO-ROOM, RQ-MORE-DISK, or if it reaches EOF on the data conncetion, chunker will begin waiting for a status command (DONE, TRYAGAIN, FAILED, or ABORT_FINISHED) from the driver.

NO-ROOM

Chunker -> Driver

NO-ROOM handle unused-space

This is an informational message indicating that the chunker has actually run out of space while writing (e.g., encountered ENOSPC on a write() operation). The chunker will subsequently send RQ-MORE-DISK. The unused space remaining in the latest USE request is given in unused-space.

RQ-MORE-DISK

Chunker -> Driver

RQ-MORE-DISK handle

This indicates that the chunker needs further instruction on where it should write. The driver should reply with one of CONTINUE or ABORT.

CONTINUE

Driver -> Chunker

CONTINUE handle filename chunksize use

This instructs the chunker to continue writing up to use kb of data at filename using chunk size chunksize. The chunker goes back to work and may send another NO-ROOM, RQ-MORE-DISK, or wait for a status command as described under PORT, above.

ABORT

Driver -> Chunker

ABORT message

The chunker should abort the current run with the given message. Chunker should reply with an ABORT-FINISHED message.

ABORT-FINISHED

Chunker -> Driver

ABORT-FINISHED handle

Indicates that the abort operation is complete. The chunker will then send a status (FAILED) and exit.

DONE

Driver -> Chunker

DONE handle

Indicates that the entire dumpfile was sent to the chunker, and that it should log a SUCCESS message and reply with a DONE message.

Chunker -> Driver

DONE handle datasize-kb "[sec sec kb kb kps kps]"

Indicates that the chunker has successfully completed the dumpfile, and will subsequently exit.

PARTIAL

Chunker -> Driver

PARTIAL handle datasize-kb "[sec sec kb kb kps kps]"

Indicates that the chunker wrote part of the dump, but that the dump was not complete. The chunker will subsequently exit.

FAILED

Driver -> Chunker

FAILED handle

Sent after an EOF on the data stream, this indicates that the entire dumpfile was not sent to the chunker, due to a dumper error, and that the chunker should send PARTIAL or FAILED and log the dump as such. The driver expects a FAILED or PARTIAL response.

Chunker -> Driver

FAILED handle "[sec sec kb kb kps kps]"
FAILED handle "[error_message]"

Indicates that the chunker failed to record any of the dump. The chunker will subsequently exit.

TRYAGAIN

Chunker -> Driver

TRYAGAIN handle errmsg

This indicates that the chunker could not start. The chunker will exit immediately afterward.